I'm not sure if this is a bug or a feature but the question is should files have (some/any)
explicit metadata set with git-annex metadata
for them to be included in a view branch?
I mean if you create a view with just path-based fields (say, restrict to a subdirectory
with a criterion like 'subdir/=*'), do you expect files to match even if they don't have
any metadata fields manually set? In release version 10.20230214 the behavior has changed
in that files that don't have manual metadata set don't seem to be included in
(directory-based) view branches. The inverse seems to be true of the unreleased version
10.20230127-gc209e0f64 committed a week before.
In my opinion, this could be a feature if it's documented but it could also be construed as violating the principle of least surprise as not all users routinely tag all annexed files with metadata.
The following is a transcript that illustrates how the recent release version behaves. See
how the file subdir/c
is excluded from the view branch (my apologies for this being a
PowerShell session on Windows):
X:\> cd git-annex-tests
X:\git-annex-tests> git init annex-view-test-a
X:\git-annex-tests> cd .\annex-view-test-a\
X:\git-annex-tests\annex-view-test-a [master]> git config annex.thin true
X:\git-annex-tests\annex-view-test-a [master]> git annex init Annex-view-test-a
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked)]> echo Aaa > a
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +1 ~0 -0 !]> mkdir subdir
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +1 ~0 -0 !]> echo Bbb > subdir\b
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +2 ~0 -0 !]> echo Ccc > subdir\c
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +2 ~0 -0 !]> mkdir subdir\subsubdir
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +2 ~0 -0 !]> echo Ddd > .\subdir\subsubdir\d
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +2 ~0 -0 !]> git annex add .
add a
ok
add subdir/b
ok
add subdir/c
ok
add subdir/subsubdir/d
ok
(recording state in git...)
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +4 ~0 -0 ~]> ls -r
Directory: X:\git-annex-tests\annex-view-test-a
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 15.2.2023 12:37 subdir
-a--- 15.2.2023 12:31 5 a
Directory: X:\git-annex-tests\annex-view-test-a\subdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 15.2.2023 12:38 subsubdir
-a--- 15.2.2023 12:34 5 b
-a--- 15.2.2023 12:37 5 c
Directory: X:\git-annex-tests\annex-view-test-a\subdir\subsubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 15.2.2023 12:38 5 d
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +4 ~0 -0 ~]> fsutil hardlink list a
\git-annex-tests\annex-view-test-a\.git\annex\objects\b29\a20\SHA256E-s5--e3c555b2205407e76d3a460513cf44c1c62e48ba83ec4948ed05d0f87b957051\SHA256E-s5--e3c555b2205407e76d3a460513cf44c1c62e48ba83ec4948ed05d0f87b957051
\git-annex-tests\annex-view-test-a\a
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked) +4 ~0 -0 ~]> git commit -m 'Add test files'
[adjusted/master(unlocked) 56b11c9] Add test files
4 files changed, 4 insertions(+)
create mode 100644 a
create mode 100644 subdir/b
create mode 100644 subdir/c
create mode 100644 subdir/subsubdir/d
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked)]> git annex metadata -t test subdir\b
metadata subdir/b
lastchanged=2023-02-15@10-52-31
tag=test
tag-lastchanged=2023-02-15@10-52-31
ok
(recording state in git...)
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked)]> git annex metadata -t test subdir\subsubdir\d
metadata subdir/subsubdir/d
lastchanged=2023-02-15@10-53-00
tag=test
tag-lastchanged=2023-02-15@10-53-00
ok
(recording state in git...)
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked)]> git annex metadata subdir\c
metadata subdir/c
ok
X:\git-annex-tests\annex-view-test-a [adjusted/master(unlocked)]> git annex view 'subdir\=*'
view (searching...)
Switched to branch 'views/adjusted/master(unlocked)(subdir_=_)'
ok
X:\git-annex-tests\annex-view-test-a [views/adjusted/master(unlocked)(subdir_=_)]> ls -r
Directory: X:\git-annex-tests\annex-view-test-a
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 15.2.2023 12:55 subsubdir
-a--- 15.2.2023 12:55 178 b_%subdir%
Directory: X:\git-annex-tests\annex-view-test-a\subsubdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 15.2.2023 12:55 181 d_%subdir%subsubdir%
# End of transcript or log.
I'm surprised by this behavior change! (And I replicated it on linux, no apologies necessary for also testing Windows support..)
826b225ca81d469640e51628865dbd64a1d37773 is the buggy commit. When there is no metadata log, it accidentially skips calling getfilemetadata.
I've fixed that. I wonder if I should push up the shedule of the next release because of this reversion? Currently I'm inclined to treat it as medium urgency for release (1-2 weeks).