diff options
-rw-r--r-- | Annex/AdjustedBranch.hs | 4 | ||||
-rw-r--r-- | CHANGELOG | 17 | ||||
-rw-r--r-- | Command/Sync.hs | 2 | ||||
-rw-r--r-- | Git/Ref.hs | 9 | ||||
-rw-r--r-- | doc/bugs/sync_uses_conflicting_names_for_deep_branches.mdwn | 5 |
5 files changed, 24 insertions, 13 deletions
diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs index ae5ad9a51..4caf637c7 100644 --- a/Annex/AdjustedBranch.hs +++ b/Annex/AdjustedBranch.hs @@ -159,14 +159,14 @@ originalToAdjusted :: OrigBranch -> Adjustment -> AdjBranch originalToAdjusted orig adj = AdjBranch $ Ref $ adjustedBranchPrefix ++ base ++ '(' : serialize adj ++ ")" where - base = fromRef (Git.Ref.basename orig) + base = fromRef (Git.Ref.base orig) adjustedToOriginal :: Branch -> Maybe (Adjustment, OrigBranch) adjustedToOriginal b | adjustedBranchPrefix `isPrefixOf` bs = do let (base, as) = separate (== '(') (drop prefixlen bs) adj <- deserialize (takeWhile (/= ')') as) - Just (adj, Git.Ref.under "refs/heads" (Ref base)) + Just (adj, Git.Ref.underBase "refs/heads" (Ref base)) | otherwise = Nothing where bs = fromRef b @@ -15,6 +15,23 @@ git-annex (6.20160908) UNRELEASED; urgency=medium * stack.yaml: Update to lts-7.0 (ghc 8) * info: Support being passed a treeish, and show info about the annexed files in it similar to how a directory is handled. + * sync: Previously, when run in a branch with a slash in its name, + such as "foo/bar", the sync branch was "synced/bar". That conflicted + with the sync branch used for branch "bar", so has been changed to + "synced/foo/bar". + * Note that if you're using an old version of git-annex to sync with + a branch with a slash in its name, it won't see some changes synced by + this version, and this version won't see some changes synced by the older + version. This is not a problem if there's a central bare repository, + but may impact other configurations until git-annex is upgraded to this + version. + * adjust: Previously, when adjusting a branch with a slash in its name, + such as "foo/bar", the adjusted branch was "adjusted/bar(unlocked)". + That conflicted with the adjusted branch used for branch "bar", + so has been changed to "adjusted/foo/bar(unlocked)" + * Also, running sync in an adjusted branch did not correctly sync + changes back to the parent branch when it had a slash in its name. + This bug has been fixed. -- Joey Hess <id@joeyh.name> Thu, 08 Sep 2016 12:48:55 -0400 diff --git a/Command/Sync.hs b/Command/Sync.hs index fd9d0b278..d7edac743 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -178,7 +178,7 @@ merge (b, _) mergeconfig commitmode tomerge = autoMergeFrom tomerge b mergeconfig commitmode syncBranch :: Git.Branch -> Git.Branch -syncBranch = Git.Ref.under "refs/heads/synced" . fromDirectBranch . fromAdjustedBranch +syncBranch = Git.Ref.underBase "refs/heads/synced" . fromDirectBranch . fromAdjustedBranch remoteBranch :: Remote -> Git.Ref -> Git.Ref remoteBranch remote = Git.Ref.underBase $ "refs/remotes/" ++ Remote.name remote diff --git a/Git/Ref.hs b/Git/Ref.hs index 257c43036..5b3b85324 100644 --- a/Git/Ref.hs +++ b/Git/Ref.hs @@ -39,15 +39,6 @@ base = Ref . remove "refs/heads/" . remove "refs/remotes/" . fromRef | prefix `isPrefixOf` s = drop (length prefix) s | otherwise = s -{- Gets the basename of any qualified ref. -} -basename :: Ref -> Ref -basename = Ref . reverse . takeWhile (/= '/') . reverse . fromRef - -{- Given a directory and any ref, takes the basename of the ref and puts - - it under the directory. -} -under :: String -> Ref -> Ref -under dir r = Ref $ dir ++ "/" ++ fromRef (basename r) - {- 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. -} diff --git a/doc/bugs/sync_uses_conflicting_names_for_deep_branches.mdwn b/doc/bugs/sync_uses_conflicting_names_for_deep_branches.mdwn index fa6dd0d45..439bd55e1 100644 --- a/doc/bugs/sync_uses_conflicting_names_for_deep_branches.mdwn +++ b/doc/bugs/sync_uses_conflicting_names_for_deep_branches.mdwn @@ -3,4 +3,7 @@ changes to branch named "foo", but that same name is used to sync changes to a branch named "bar/foo". Also, the adjusted branch code uses "adjusted/foo(unlocked)" for -both "foo" and "bar/foo". +both "foo" and "bar/foo". And it fails to push changes back from there to +"bar/foo", instead creating a "foo" branch. + +> [[fixed|done]] --[[Joey]] |