diff options
-rw-r--r-- | Annex/Branch.hs | 2 | ||||
-rw-r--r-- | Command/Sync.hs | 14 | ||||
-rw-r--r-- | Git/Ref.hs | 13 |
3 files changed, 14 insertions, 15 deletions
diff --git a/Annex/Branch.hs b/Annex/Branch.hs index 8c9d1582a..d3a81d8e5 100644 --- a/Annex/Branch.hs +++ b/Annex/Branch.hs @@ -58,7 +58,7 @@ hasSibling = not . null <$> siblingBranches {- List of git-annex (refs, branches), including the main one and any - from remotes. Duplicate refs are filtered out. -} siblingBranches :: Annex [(Git.Ref, Git.Branch)] -siblingBranches = inRepo $ Git.Ref.matching name +siblingBranches = inRepo $ Git.Ref.matchingUniq name {- Creates the branch, if it does not already exist. -} create :: Annex () diff --git a/Command/Sync.hs b/Command/Sync.hs index 1c20c409c..e5f23e63e 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -46,18 +46,12 @@ syncRemotes branch [] = defaultSyncRemotes branch syncRemotes _ rs = mapM Remote.byName rs defaultSyncRemotes :: Git.Ref -> Annex [Remote.Remote Annex] -defaultSyncRemotes syncbranch = mapM Remote.byName - =<< process . L.unpack <$> inRepo showref +defaultSyncRemotes syncbranch = mapM Remote.byName =<< + map getRemoteName . filter isRemote . map (show . snd) <$> + inRepo (Git.Ref.matching $ Git.Ref.base syncbranch) where - showref = Git.Command.pipeRead - [ Param "show-ref" - , Param $ show $ Git.Ref.base syncbranch - ] - process = map getRemoteName . filter isRemote . - map getBranchName . lines - isRemote r = "refs/remotes/" `isPrefixOf` r - getBranchName = snd . separate (== ' ') getRemoteName = fst . separate (== '/') . snd . separate (== '/') . snd . separate (== '/') + isRemote r = "refs/remotes/" `isPrefixOf` r commit :: CommandStart commit = do diff --git a/Git/Ref.hs b/Git/Ref.hs index 3341cf648..557d24a37 100644 --- a/Git/Ref.hs +++ b/Git/Ref.hs @@ -48,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 |