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"] }