relax annex-tracking-branch to allow "/"

Allow setting remote.foo.annex-tracking-branch to a branch name that
contains "/", as long as it's not a remote tracking branch.
This commit is contained in:
Joey Hess 2025-01-20 11:31:18 -04:00
parent b1c9c9d6e7
commit 9e4314de76
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 34 additions and 5 deletions

View file

@ -1,6 +1,8 @@
git-annex (10.20250116) UNRELEASED; urgency=medium git-annex (10.20250116) UNRELEASED; urgency=medium
* Support help.autocorrect settings "prompt", "never", and "immediate". * Support help.autocorrect settings "prompt", "never", and "immediate".
* Allow setting remote.foo.annex-tracking-branch to a branch name
that contains "/", as long as it's not a remote tracking branch.
-- Joey Hess <id@joeyh.name> Mon, 20 Jan 2025 10:24:51 -0400 -- Joey Hess <id@joeyh.name> Mon, 20 Jan 2025 10:24:51 -0400

View file

@ -120,15 +120,21 @@ seekExport r tree mtbcommitsha srcrs = do
-- branch. -- branch.
getExportCommit :: Remote -> Git.Ref -> Annex (Maybe (RemoteTrackingBranch, Sha)) getExportCommit :: Remote -> Git.Ref -> Annex (Maybe (RemoteTrackingBranch, Sha))
getExportCommit r treeish getExportCommit r treeish
| '/' `notElem` fromRef baseref = do | '/' `notElem` fromRef baseref = go
let tb = mkRemoteTrackingBranch r baseref | otherwise = ifM isremoteref
commitsha <- inRepo $ Git.Ref.sha $ Git.Ref.underBase refsheads baseref ( return Nothing
return (fmap (tb, ) commitsha) , go
| otherwise = return Nothing )
where where
baseref = Ref $ S8.takeWhile (/= ':') $ fromRef' $ baseref = Ref $ S8.takeWhile (/= ':') $ fromRef' $
Git.Ref.removeBase refsheads treeish Git.Ref.removeBase refsheads treeish
refsheads = "refs/heads" refsheads = "refs/heads"
isremoteref = inRepo $ Git.Ref.exists $
Git.Ref.underBase "refs/remotes" baseref
go = do
let tb = mkRemoteTrackingBranch r baseref
commitsha <- inRepo $ Git.Ref.sha $ Git.Ref.underBase refsheads baseref
return (fmap (tb, ) commitsha)
-- | Changes what's exported to the remote. Does not upload any new -- | Changes what's exported to the remote. Does not upload any new
-- files, but does delete and rename files already exported to the remote. -- files, but does delete and rename files already exported to the remote.

View file

@ -66,3 +66,5 @@ export myexport bla ok
### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders) ### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
git-annex is amazing, thank you! 🤩 git-annex is amazing, thank you! 🤩
> [[fixed|done]] --[[Joey]]

View file

@ -0,0 +1,19 @@
[[!comment format=mdwn
username="joey"
subject="""comment 1"""
date="2025-01-20T15:13:05Z"
content="""
The difficulty here is that it needs to come up with the name of a
corresponding remote tracking branch to update. It could use
"myexport/synced/main" for that. But, setting `annex-tracking-branch` to
a remote ref like "origin/main" is not supported, and it would not be good
if it allowed it and used a tracking branch with a name like
"myexport/origin/main".
And well, we know that "synced/main" is not a remote ref, but "$foo/main"
generally may or may not be one.
So, I think to support this, it would have only allow using "$foo/main"
when the ref "refs/remotes/$foo/main" does not exist. I've implemented
that.
"""]]