RE: [BUG] Git fast-export with import marks file omits merge commits
- From
- Isaac Chou <isaac.chou@microfocus.com>
- Date
- Apr 19, 2018, 21:46 UTC
- Message-ID
- <MW2PR18MB2284E3091991A3DB228CEBBEE5B50@MW2PR18MB2284.namprd18.prod.outlook.com>
I inspected the source code (builtin/fast-export.c) for the fast-export issue I encountered, and it looks like the merge commit is discarded too early by the call to object_array_pop() after only one of the two UNSHOWN parents is processed in the method handle_tail(). The poped merge commit still has one UNSHOWN parent, therefore it is not processed and is lost in the output. Can someone advise me on how to submit a code change or bug report in order to get the fix into the code base?
Thanks,
Isaac
-----Original Message----- From: git-owner@vger.kernel.org [mailto:git-owner@vger.kernel.org] On Behalf Of Isaac Chou Sent: Monday, April 16, 2018 3:58 PM To: git@vger.kernel.org Subject: Git fast-export with import marks file omits merge commits
Hello,
I came across a change of behavior with Git version 2.15 and later where the fast-export command would omit the merge commits. The same use case works correctly with Git version 2.14 and older. Here is the detail of the use case:
0> git --version git version 2.16.2.windows.1
1> git init Initialized empty Git repository in c:/./.git/
2> echo 1111 >> file.txt
3> git add file.txt
4> git commit -m "first commit" [master (root-commit) 711d4d5] first commit 1 file changed, 1 insertion(+) create mode 100644 file.txt
5> git checkout -b test Switched to a new branch 'test'
6> echo 2222 >> file.txt
7> git add file.txt
8> git commit -m "commit on test branch" [test 76d231c] commit on test branch 1 file changed, 1 insertion(+)
9> git checkout master Switched to branch 'master'
10> echo 3333 >> file.txt
11> git add file.txt
12> git commit -m "commit on master branch" [master 61c55fd] commit on master branch 1 file changed, 1 insertion(+)
13> git merge test Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt Automatic merge failed; fix conflicts and then commit the result.
14> notepad file.txt
15> git add file.txt
16> git commit -m "merged with test branch" [master 1442e0e] merged with test branch
17> git log commit 1442e0ee728c831e74550329e39d27d4188b4422 (HEAD -> master) Merge: 61c55fd 76d231c Author: isaac <...> Date: Mon Apr 16 15:08:39 2018 -0400
merged with test branch
commit 61c55fdb883fc403e63c91b49bc11bdade62b3e8 Author: isaac <...> Date: Mon Apr 16 15:07:41 2018 -0400
commit on master branch
commit 76d231cdb12eb84f45abdebede06a56f912613d3 (test) Author: isaac <...> Date: Mon Apr 16 15:07:07 2018 -0400
commit on test branch
commit 711d4d5781df41924421f8629af040e7c91a8d2e Author: isaac <...> Date: Mon Apr 16 15:06:07 2018 -0400
first commit
18> echo :1 711d4d5781df41924421f8629af040e7c91a8d2e > git-marks
19> cat git-marks :1 711d4d5781df41924421f8629af040e7c91a8d2e
20> git fast-export --use-done-feature --import-marks=git-marks refs/heads/master -- feature done blob mark :2 data 12 1111 2222
commit refs/heads/master mark :3 author isaac <...> 1523905627 -0400 committer isaac <...> 1523905627 -0400 data 22 commit on test branch from :1 M 100644 :2 file.txt
blob mark :4 data 12 1111 3333
commit refs/heads/master mark :5 author isaac <...> 1523905661 -0400 committer isaac <...> 1523905661 -0400 data 24 commit on master branch from :1 M 100644 :4 file.txt
done
Thanks,
Isaac