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
* 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
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
| 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. -}
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]]