git-commit pathspec change due to 424bef6b6
This commit is contained in:
parent
e66b5344e8
commit
8f0ddf0925
1 changed files with 117 additions and 0 deletions
117
doc/bugs/case_where_using_pathspec_with_git-commit_leaves_s.mdwn
Normal file
117
doc/bugs/case_where_using_pathspec_with_git-commit_leaves_s.mdwn
Normal file
|
@ -0,0 +1,117 @@
|
|||
424bef6b6 (smudge: check for known annexed inodes before checking
|
||||
annex.largefiles, 2021-05-03) fixed a case where an unlocked annexed
|
||||
file that annex.largefiles does not match could get its unchanged
|
||||
content checked into git. This was in response to
|
||||
<https://git-annex.branchable.com/forum/one-off_unlocked_annex_files_that_go_against_large/>.
|
||||
|
||||
In a comment there, Joey said:
|
||||
|
||||
> I've made a change that seems to work, and will probably not break
|
||||
> other cases, although this is a complex and subtle area.
|
||||
|
||||
I'm following up with a change in behavior flagged by a DataLad test.
|
||||
As with most things in this area, I have a hard time reasoning about
|
||||
what the expected behavior should be and whether it should be
|
||||
considered a bug. Here's the reproducer:
|
||||
|
||||
[[!format sh """
|
||||
set -eu
|
||||
|
||||
cd "$(mktemp -d "${TMPDIR:-/tmp}"/ga-XXXXXXX)"
|
||||
|
||||
git version
|
||||
git annex version | head -1
|
||||
|
||||
git init -q
|
||||
git annex init
|
||||
|
||||
echo a >foo
|
||||
git annex add foo
|
||||
git commit --quiet -m 'add foo'
|
||||
|
||||
git annex unlock foo
|
||||
printf '* annex.largefiles=nothing\n' >.gitattributes
|
||||
|
||||
sleep 1
|
||||
|
||||
git annex add foo
|
||||
git commit -q -m 'commit unlocked' -- foo
|
||||
|
||||
set -x
|
||||
export PS4='> '
|
||||
git diff HEAD^- -- foo
|
||||
git diff --cached
|
||||
"""]]
|
||||
|
||||
Here's the output with 8.20210428:
|
||||
|
||||
```
|
||||
git version 2.31.1.659.g12c5fe8677
|
||||
git-annex version: 8.20210428
|
||||
[...]
|
||||
> git diff HEAD^- -- foo
|
||||
diff --git a/foo b/foo
|
||||
deleted file mode 120000
|
||||
index 8a2a0c9..0000000
|
||||
--- a/foo
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-.git/annex/objects/3z/F8/SHA256E-s2--87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7/SHA256E-s2--87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7
|
||||
\ No newline at end of file
|
||||
diff --git a/foo b/foo
|
||||
new file mode 100644
|
||||
index 0000000..7898192
|
||||
--- /dev/null
|
||||
+++ b/foo
|
||||
@@ -0,0 +1 @@
|
||||
+a
|
||||
> git diff --cached
|
||||
```
|
||||
|
||||
And here's the output with a recent commit on master following
|
||||
424bef6b6:
|
||||
|
||||
```
|
||||
git version 2.31.1.659.g12c5fe8677
|
||||
git-annex version: 8.20210429-ge811a50e2
|
||||
[...]
|
||||
> git diff HEAD^- -- foo
|
||||
diff --git a/foo b/foo
|
||||
deleted file mode 120000
|
||||
index 8a2a0c9..0000000
|
||||
--- a/foo
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-.git/annex/objects/3z/F8/SHA256E-s2--87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7/SHA256E-s2--87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7
|
||||
\ No newline at end of file
|
||||
diff --git a/foo b/foo
|
||||
new file mode 100644
|
||||
index 0000000..3de500c
|
||||
--- /dev/null
|
||||
+++ b/foo
|
||||
@@ -0,0 +1 @@
|
||||
+/annex/objects/SHA256E-s2--87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7
|
||||
> git diff --cached
|
||||
diff --git a/foo b/foo
|
||||
index 3de500c..7898192 100644
|
||||
--- a/foo
|
||||
+++ b/foo
|
||||
@@ -1 +1 @@
|
||||
-/annex/objects/SHA256E-s2--87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7
|
||||
+a
|
||||
```
|
||||
|
||||
Before 424bef6b6, `git annex add foo + git commit ... foo` results in
|
||||
a commit that has foo's content tracked in git. After 424bef6b6, the
|
||||
unlocked file is still recorded, and the switch to being tracked by
|
||||
git ends up staged in the index.
|
||||
|
||||
The new behavior isn't seen if the pathspec is dropped from `git
|
||||
commit`. Also, without the sleep, it isn't triggered reliably
|
||||
(presumably because the index and foo have the same mtime, bypassing
|
||||
the clean filter).
|
||||
|
||||
Thanks for taking a look.
|
||||
|
||||
[[!meta author=kyle]]
|
||||
[[!tag projects/datalad]]
|
Loading…
Add table
Reference in a new issue