Please describe the problem.

Thanks for implementing the --onlyingroup= matching option and the corresponding preferred content expression but it seems that at least the matching option does not work quite all the way how it was intended (as far as I understand).

What steps will reproduce the problem?

Consider the following facts:

  • there is a single file 'a-1' added to the repo annex-a;
  • annex-b, annex-c, annex-d are git clones of annex-a;
  • the file 'a-1' is not present in annex-d as an annex object;
  • annex-a is in group 'main';
  • annex-c and annex-d are in group 'backup'; and also
  • annex-b, annex-c, and annex-d are in group 'offline'.

Also there is no such group as 'foo'. Then the following list and find commands are issued:

E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex list
here
|annex-b
||annex-c
|||annex-d
||||web
|||||bittorrent
||||||
XXX___ a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=main
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=main
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=backup
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=backup
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=offline
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=offline
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=foo
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=foo
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex version --raw
10.20230802-gd19139a10d

Using the notation introduced by --explain, I would personally evaluate the above propositions as:

  • --inallgroup=main[TRUE] ok
  • --onlyingroup=main[FALSE] (is present also in groups 'backup' and 'offline'), yet find considers this TRUE
  • --inallgroup=backup[FALSE] (is not present in annex-d which is in 'backup') ok
  • --onlyingroup=backup[FALSE] (is also present in the disjoint group 'main'), yet find considers this TRUE
  • --inallgroup=offline[FALSE] (is not present in annex-d which is in 'offline') ok
  • --onlyingroup=offline[FALSE] (is also present in the disjoint group 'main'), yet find considers this TRUE
  • --inallgroup=foo[FALSE] (there is no such group 'foo' so how can the file be present?), yet find considers this TRUE
  • --onlyingroup=foo[FALSE] ok

So, what gives? It seems that --onlyingroup only makes sure that the first part of the following specification matches:

Matches only when git-annex believes content is present in at least one
repository that is in the specified group, and is not present in any
repositories that are not in the specified group.

Notice that (in at least the particular case above) it doesn't make sure that the content should not be present in any repositories that are in disjoint groups. So the "only" meaning seems to be missing here making this effectively into a (lax) --ingroup= matching option.

What version of git-annex are you using? On what operating system?

git-annex version: 10.20230802-gd19139a10d
build flags: Assistant Webapp Pairing TorrentParser Benchmark Feeds Testsuite S3 WebDAV
dependency versions: aws-0.22 bloomfilter-2.0.1.0 cryptonite-0.29 DAV-1.3.4 feed-1.3.2.0 ghc-8.10.7 http-client-0.7.9 persistent-sqlite-2.13.0.3 torrent-10000.1.1 uuid-1.3.15 yesod-1.6.1.2
key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 BLAKE2B256E BLAKE2B256 BLAKE2B512E BLAKE2B512 BLAKE2B160E BLAKE2B160 BLAKE2B224E BLAKE2B224 BLAKE2B384E BLAKE2B384 BLAKE2BP512E BLAKE2BP512 BLAKE2S256E BLAKE2S256 BLAKE2S160E BLAKE2S160 BLAKE2S224E BLAKE2S224 BLAKE2SP256E BLAKE2SP256 BLAKE2SP224E BLAKE2SP224 SHA1E SHA1 MD5E MD5 WORM URL X*
remote types: git gcrypt p2p S3 bup directory rsync web bittorrent webdav adb tahoe glacier ddar git-lfs httpalso borg hook external
operating system: mingw32 x86_64
supported repository versions: 8 9 10
upgrade supported from repository versions: 2 3 4 5 6 7 8 9 10
local repository version: 10

This is a build that has been attained by using the Windows-specific stack.yaml (by giving the option --stack-yaml stack-lts-18.13.yaml for stack).

Windows 10 version 22H2 (build 19045.3208), 64 bit.

Please provide any additional information below.

My apologies in advance for the long transcript :)

PowerShell 7.3.6
* Istunto aloitettu hetkellä la 05.08.2023 klo 00:28:40 +03:00. Session started on Sat 05-Aug-2023 @ 00:28:41 +03:00.
Loading personal and system profiles took 2630ms.
C:\Users\jkniiv> cd e:\git-annex-tests
E:\git-annex-tests> mkdir test-onlyingroup-matching2

    Directory: E:\git-annex-tests

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----            5.8.2023     0:29                test-onlyingroup-matching2

E:\git-annex-tests> cd .\test-onlyingroup-matching2\
E:\git-annex-tests\test-onlyingroup-matching2> git init annex-a
Initialized empty Git repository in E:/git-annex-tests/test-onlyingroup-matching2/annex-a/.git/
E:\git-annex-tests\test-onlyingroup-matching2> cd annex-a
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [master]> git annex init annex-a
init annex-a
  Detected a filesystem without fifo support.

  Disabling ssh connection caching.

  Detected a crippled filesystem.

  Entering an adjusted branch where files are unlocked as this filesystem does not support locked files.

Switched to branch 'adjusted/master(unlocked)'
ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> cd ..
E:\git-annex-tests\test-onlyingroup-matching2> git clone annex-a annex-b
Cloning into 'annex-b'...
done.
E:\git-annex-tests\test-onlyingroup-matching2> git clone annex-a annex-c
Cloning into 'annex-c'...
done.
E:\git-annex-tests\test-onlyingroup-matching2> git clone annex-a annex-d
Cloning into 'annex-d'...
done.
E:\git-annex-tests\test-onlyingroup-matching2> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----            5.8.2023     0:29                annex-a
d----            5.8.2023     0:32                annex-b
d----            5.8.2023     0:32                annex-c
d----            5.8.2023     0:32                annex-d

E:\git-annex-tests\test-onlyingroup-matching2> cd annex-b
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> git config --add remote.origin.fetch '^refs/heads/adjusted/*'
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> cat .git\config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = E:/git-annex-tests/test-onlyingroup-matching2/annex-a
        fetch = +refs/heads/*:refs/remotes/origin/*
        fetch = ^refs/heads/adjusted/*
[branch "adjusted/master(unlocked)"]
        remote = origin
        merge = refs/heads/adjusted/master(unlocked)
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> git annex init annex-b
init annex-b
  Detected a filesystem without fifo support.

  Disabling ssh connection caching.

  Detected a crippled filesystem.
ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> cd ..\annex-c
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git config --add remote.origin.fetch '^refs/heads/adjusted/*'
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git annex init annex-c
init annex-c
[...snip...]
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> cd ..\annex-d
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git config --add remote.origin.fetch '^refs/heads/adjusted/*'
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git annex init annex-d
init annex-d
[...snip...]
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> cd ..\annex-a
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git remote add annex-b ..\annex-b
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git remote add annex-c ..\annex-c
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git remote add annex-d ..\annex-d
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git config --add remote.annex-b.fetch '^refs/heads/adjusted/*'
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git config --add remote.annex-c.fetch '^refs/heads/adjusted/*'
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git config --add remote.annex-d.fetch '^refs/heads/adjusted/*'
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex sync -g
commit
On branch adjusted/master(unlocked)
nothing to commit, working tree clean
ok
pull annex-d
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 332 bytes | 30.00 KiB/s, done.
From ..\annex-d
 * [new branch]      git-annex  -> annex-d/git-annex
 * [new branch]      master     -> annex-d/master
ok
pull annex-c
[...snip...]
pull annex-b
[...snip...]
(merging annex-b/git-annex annex-c/git-annex annex-d/git-annex into git-annex...)
(recording state in git...)
push annex-d
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 843 bytes | 421.00 KiB/s, done.
Total 9 (delta 4), reused 0 (delta 0), pack-reused 0
To ..\annex-d
 * [new branch]      master -> synced/master
 * [new branch]      git-annex -> synced/git-annex
ok
push annex-c
[...snip...]
push annex-b
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex wanted . present
wanted . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex group . main
group . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> cd ..\annex-b
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> git annex group . offline
group . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> cd ..\annex-c
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git annex wanted . standard
wanted . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git annex group . backup
group . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git annex group . offline
group . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git annex group .
backup offline
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> cd ..\annex-d
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git annex wanted . standard
wanted . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git annex group . backup
group . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git annex group . offline
group . ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git annex group .
backup offline
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> cd ..\annex-a
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> ls
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> echo aaa-1 > a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked) +1 ~0 -0 !]> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2\annex-a

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            5.8.2023     0:45              7 a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked) +1 ~0 -0 !]> git annex add .\a-1
add a-1
ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked) +1 ~0 -0 ~]> git status
On branch adjusted/master(unlocked)
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked) +1 ~0 -0 ~]> git commit -m 'add a-1'
[adjusted/master(unlocked) 1fad99e] add a-1
 1 file changed, 1 insertion(+)
 create mode 100644 a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2\annex-a

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            5.8.2023     0:45              7 a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex sync --content
commit
On branch adjusted/master(unlocked)
nothing to commit, working tree clean
ok
pull annex-d
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), 1008 bytes | 56.00 KiB/s, done.
From ..\annex-d
   ee601cf..9c59e4d  git-annex  -> annex-d/git-annex
ok
pull annex-c
[...snip...]
pull annex-b
[...snip...]
(merging annex-b/git-annex annex-c/git-annex annex-d/git-annex into git-annex...)
(recording state in git...)
copy a-1 (to annex-d...)
ok
copy a-1 (to annex-c...)
ok
copy a-1 (to annex-b...)
ok
pull annex-d
ok
pull annex-c
ok
pull annex-b
ok
(recording state in git...)
push annex-d
Enumerating objects: 40, done.
Counting objects: 100% (40/40), done.
Delta compression using up to 4 threads
Compressing objects: 100% (32/32), done.
Writing objects: 100% (35/35), 3.65 KiB | 623.00 KiB/s, done.
Total 35 (delta 7), reused 0 (delta 0), pack-reused 0
To ..\annex-d
   ee601cf..7a0c374  git-annex -> synced/git-annex
   c9731e7..6e57e3e  master -> synced/master
ok
push annex-c
[...snip...]
push annex-b
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> cd ..
E:\git-annex-tests\test-onlyingroup-matching2> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----            5.8.2023     0:45                annex-a
d----            5.8.2023     0:32                annex-b
d----            5.8.2023     0:32                annex-c
d----            5.8.2023     0:32                annex-d

E:\git-annex-tests\test-onlyingroup-matching2> cd annex-b
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)]> git annex sync -g
commit
On branch adjusted/master(unlocked)
Your branch is up to date with 'origin/adjusted/master(unlocked)'.

nothing to commit, working tree clean
ok
merge synced/master master (Merging into master...)
Updating c9731e7..6e57e3e
Fast-forward
 a-1 | 1 +
 1 file changed, 1 insertion(+)
 create mode 120000 a-1
(Merging into adjusted branch...)
Updating bffc83c..4daa3a7
Fast-forward
 a-1 | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 a-1

Already up to date.
(Merging into adjusted branch...)
Updating 76cec61..68d290a
Fast-forward
ok
pull origin
[...snip...]
push origin
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)12]> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2\annex-b

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            5.8.2023     0:47              7 a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)12]> cat a-1
aaa-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-b [adjusted/master(unlocked)12]> cd ..\annex-c
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)]> git annex sync -g
commit
[...snip...]
merge synced/master master (Merging into master...)
[...snip...]
(Merging into adjusted branch...)
[...snip...]
Already up to date.
(Merging into adjusted branch...)
[...snip...]
(merging origin/git-annex into git-annex...)
(recording state in git...)
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)12]> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2\annex-c

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            5.8.2023     0:47              7 a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-c [adjusted/master(unlocked)12]> cd ..\annex-d
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)]> git annex sync -g
commit
[...snip...]
merge synced/master master (Merging into master...)
[...snip...]
(Merging into adjusted branch...)
[...snip...]
Already up to date.
(Merging into adjusted branch...)
[...snip...]
(merging origin/git-annex into git-annex...)
(recording state in git...)
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)12]> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2\annex-d

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            5.8.2023     0:47              7 a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked)12]> cd ..\annex-a
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex list
here
|annex-b
||annex-c
|||annex-d
||||web
|||||bittorrent
||||||
XXXX__ a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=main
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=main
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=backup
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=backup
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=offline
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=offline
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=foo
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=foo
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroups=foo
Invalid option `--onlyingroups=foo'

Usage: git-annex COMMAND
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> cd ..\annex-d
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked) ↓1 ↑2]> ls

    Directory: E:\git-annex-tests\test-onlyingroup-matching2\annex-d

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---            5.8.2023     0:47              7 a-1

E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked) ↓1 ↑2]> git annex drop a-1
drop a-1 ok
(recording state in git...)
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked) ↓1 ↑2]> git annex sync -g
commit
On branch adjusted/master(unlocked)
Your branch and 'origin/adjusted/master(unlocked)' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

nothing to commit, working tree clean
ok
pull origin
ok
push origin
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-d [adjusted/master(unlocked) ↓1 ↑2]> cd ..\annex-a
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex sync -g
commit
[...snip...]
pull annex-d
[...snip...]
pull annex-c
[...snip...]
pull annex-b
[...snip...]
push annex-c
[...snip...]
push annex-b
[...snip...]
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex list
here
|annex-b
||annex-c
|||annex-d
||||web
|||||bittorrent
||||||
XXX___ a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=main
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=main
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=backup
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=backup
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=offline
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=offline
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --inallgroup=foo
a-1
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex find --onlyingroup=foo
E:\git-annex-tests\test-onlyingroup-matching2\annex-a [adjusted/master(unlocked)]> git annex version --raw
10.20230802-gd19139a10d

# End of transcript or log.

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)

Sure, Git Annex is great as always. I use it several times a week with my multigigabyte backups, where it gives structure to my image-based backup routines, so you could say I'm a believer. :)

fixed --Joey