diff options
author | 2011-12-31 14:32:59 -0400 | |
---|---|---|
committer | 2011-12-31 14:32:59 -0400 | |
commit | 09905f66559f964ad36dc40da03d4f7f96804a91 (patch) | |
tree | b871c8a2372e6cba00aaa9b707c091f65837016b /Git/Ref.hs | |
parent | 38195a6363e54874ce072eb2d3ced448e0b68e02 (diff) | |
parent | f0957426c586610d16ad9694e002b73324baa29a (diff) |
Merge branch 'autosync'
Diffstat (limited to 'Git/Ref.hs')
-rw-r--r-- | Git/Ref.hs | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/Git/Ref.hs b/Git/Ref.hs index 0197ae789..557d24a37 100644 --- a/Git/Ref.hs +++ b/Git/Ref.hs @@ -13,14 +13,26 @@ import Common import Git import Git.Command -{- Converts a fully qualified git ref into a user-visible version. -} +{- Converts a fully qualified git ref into a user-visible string. -} describe :: Ref -> String -describe = remove "refs/heads/" . remove "refs/remotes/" . show +describe = show . base + +{- Often git refs are fully qualified (eg: refs/heads/master). + - Converts such a fully qualified ref into a base ref (eg: master). -} +base :: Ref -> Ref +base = Ref . remove "refs/heads/" . remove "refs/remotes/" . show where remove prefix s | prefix `isPrefixOf` s = drop (length prefix) s | otherwise = s + +{- Given a directory such as "refs/remotes/origin", and a ref such as + - refs/heads/master, yields a version of that ref under the directory, + - such as refs/remotes/origin/master. -} +under :: String -> Ref -> Ref +under dir r = Ref $ dir </> show (base r) + {- Checks if a ref exists. -} exists :: Ref -> Repo -> IO Bool exists ref = runBool "show-ref" @@ -36,13 +48,18 @@ sha branch repo = process . L.unpack <$> showref repo process [] = Nothing process s = Just $ Ref $ firstLine s -{- List of (refs, branches) matching a given ref spec. - - Duplicate refs are filtered out. -} +{- List of (refs, branches) matching a given ref spec. -} matching :: Ref -> Repo -> IO [(Ref, Branch)] matching ref repo = do r <- pipeRead [Param "show-ref", Param $ show ref] repo - return $ nubBy uniqref $ map (gen . L.unpack) (L.lines r) + return $ map (gen . L.unpack) (L.lines r) where - uniqref (a, _) (b, _) = a == b gen l = let (r, b) = separate (== ' ') l in (Ref r, Ref b) + +{- List of (refs, branches) matching a given ref spec. + - Duplicate refs are filtered out. -} +matchingUniq :: Ref -> Repo -> IO [(Ref, Branch)] +matchingUniq ref repo = nubBy uniqref <$> matching ref repo + where + uniqref (a, _) (b, _) = a == b |