aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/AdjustedBranch.hs4
-rw-r--r--CHANGELOG17
-rw-r--r--Command/Sync.hs2
-rw-r--r--Git/Ref.hs9
-rw-r--r--doc/bugs/sync_uses_conflicting_names_for_deep_branches.mdwn5
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
diff --git a/CHANGELOG b/CHANGELOG
index 4f7674a8b..5c44f412c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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]]