Please describe the problem.
Wanted to use metadata
(to annotate anatomical T1s with metadata), and then tried get
on a pathspec.
git annex
then incorrectly claims that no files patch although I show with git ls-files
on the same pathspec that there are files:
❯ git annex version
git-annex version: 10.20240731+git17-g6d1592f857-1~ndall+1
build flags: Assistant Webapp Pairing Inotify DBus DesktopNotify TorrentParser MagicMime Benchmark Feeds Testsuite S3 WebDAV
...
❯ git ls-files '**/*.nii.gz' | head -n 1
sub-0001/ses-01/anat/sub-0001_ses-01_acq-MPRAGEXp3X08mm_T1w.nii.gz
❯ git annex metadata '**/*.nii.gz'
error: pathspec './**/*.nii.gz' did not match any file(s) known to git
Did you forget to 'git add'?
metadata: 1 failed
# git-annex changed pathspec to have leading ./ -- let's try with that too:
❯ git ls-files './**/*.nii.gz' | head -n 1
sub-0001/ses-01/anat/sub-0001_ses-01_acq-MPRAGEXp3X08mm_T1w.nii.gz
# annex get -- the same story
❯ git annex get '**/*.nii.gz'
error: pathspec './**/*.nii.gz' did not match any file(s) known to git
Did you forget to 'git add'?
(merging typhon/git-annex into git-annex...)
(recording state in git...)
get: 1 failed
From annex --debug
we can see that annex unconditionally uses --literal-pathspecs
❯ git annex --debug get '**/*.nii.gz'
[2024-08-23 21:29:36.951044831] (Utility.Process) process [3889124] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","-c","annex.debug=true","ls-files","--stage","-z","--error-unmatch","--","./**/*.nii.gz"]
so, I think then annex should have at least used "literal" in the error, e.g.
error: literal pathspec './**/*.nii.gz' did not match any file(s) known to git
and ideally also hinted on how to disable such behavior (if possible) and do allow for "magical" etc pathspecs there.
FWIW, I have tried with GIT_GLOB_PATHSPECS=1
env var but that didn't help.... not sure if possible at all looking at the code
fixupRepo :: Repo -> GitConfig -> IO Repo
fixupRepo r c = do
let r' = disableWildcardExpansion r
r'' <- fixupUnusualRepos r' c
if annexDirect c
then return (fixupDirect r'')
else return r''
{- Disable git's built-in wildcard expansion, which is not wanted
- when using it as plumbing by git-annex. -}
disableWildcardExpansion :: Repo -> Repo
disableWildcardExpansion r = r
{ gitGlobalOpts = gitGlobalOpts r ++ [Param "--literal-pathspecs"] }