Hi folks,
Is my understanding correct, that `git fast-export | git fast-import`
should not modify the repository? If yes, then we might have a bug in
`git fast-export` if symbolic directory links are removed and converted
to a real directory.
Consider this test case:
# Create test repo
git init .
mkdir foo
echo "foo" >foo/baz
git add .
git commit -m "add foo dir"
ln -s foo bar
git add .
git commit -m "add bar dir as link"
rm bar
mkdir bar
echo "bar" >bar/baz
git add .
git commit -m "remove link and make bar dir real"
printf "BEFORE: "
git rev-parse HEAD
# Fast export, import ... that should not change anything!
git fast-export --no-data --all --signed-tags=warn-strip \
--tag-of-filtered-object=rewrite | git fast-import --force --quiet
printf "AFTER: "
I would assume that the BEFORE/AFTER hashes match. Unfortunately, with
Git 2.22.0 they do no. The problem is this export output I think:
remove link and make bar dir real
from :2
M 100644 5716ca5987cbf97d6bb54920bea6adde242d87e6 bar/baz
D bar
The new file in the `bar` directory is added to the repo first and
afterwards the path `bar` is deleted. I think that deletes the entire
directory `bar`?
If you confirm that this is a bug, then I will try to provide a fix.
Thanks,
Lars