Re: Bug with branches/merges in submodules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mel!

Thanks for writing in! Responses inline below.

Le 2021-07-07 à 09:13, Mel Dafert a écrit :
Hello,
I ran into a bug where commits are omitted from `git submodule summary`
and friends when the submodule contains merge commits.
Originally using 2.30.2, I can also reproduce this with a fresh build on the
`next` branch (see attached bugreport).
I would assume that this is not intentional, however I cannot find any relevant
information on this.

You are right that the doc seems to be quiet about that [1], [2].


Feel free to contact me for extra details.
Best regards,
Mel


Thank you for filling out a Git bug report!
Please answer the following questions to help us understand your issue.

What did you do before the bug happened? (Steps to reproduce your issue)
Set up a submodule that has branches/merge commits:
```bash
# create repository "child"
mkdir child-repo
cd child-repo
git init
touch initial.txt
git add initial.txt
git commit -m "initial child"
cd ..
# create repository "parent"
mkdir parent
cd parent
git init
# add submodule "child" to repository "parent"
git submodule add ../child-repo/ child
git commit -am "initial parent"
cd child
# make two commits in separate branches in "child"
git switch -c "secondary"
touch s1.txt
git add s1.txt
git commit -m "s1"
git switch master
touch m1.txt
git add m1.txt
git commit -m "m1"
# merge branch "secondary" into "master" in "child" - this creates a merge commit
git merge secondary --no-edit
cd ..
```
Run `git diff --submodule=log` inside the "parent" repository.

What did you expect to happen? (Expected behavior)
`git diff --submodule=log` should show all three commits added to the "child"
submodule:
```
Submodule child XXXXXXX..YYYYYYY
Merge branch 'secondary'
m1
s1
```

What happened instead? (Actual behavior)
`git diff --submodule=log` only shows commits from one ancestor of the merge
commit:
```
Submodule child XXXXXXX..YYYYYYY
Merge branch 'secondary'
m1
```

What's different between what you expected and what actually happened?
All the commits added to the "secondary" branch are missing in
`git diff --submodule=log`.

Anything else you want to add:
The commit range shown by `git diff --submodule=log` is correct:
`cd child; git log XXXXXXX..YYYYYYY` shows the correct list of commits.

This bug also affects `git submodule summary`, and `git show --submodule=log`
after the changes have been committed.

Thanks for the reproducer. The behaviour for 'git log/show/diff' is due this line [3]
and the behaviour for 'git submodule summary' to these lines [4] [5].

For 'git diff' and friends, it goes back to the addition of the '--submodule=log'
option in 752c0c2492 (Add the --submodule option to the diff option family, 2009-10-19).
(authored CC'ed). The use of '--first-parent' was discussed on the list
when this was implemented [6]. I did not read the whole thing.

For 'git submodule summary', it goes back to the addition of the subcommand
in 1cb639e6b0 (git-submodule summary: show commit summary, 2008-03-11). (author also CC'ed).
The justification of the use of '--first-parent' was not really discussed
as far as I could tell [7].


I personnally think it would be a good addition to be able to choose
if yes or no '--first-parent' should be used.

Cheers,

Philippe.


[1] https://git-scm.com/docs/git-submodule#Documentation/git-submodule.txt-summary--cached--files-n--summary-limitltngtcommit--ltpathgt82308203
[2] https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---submoduleltformatgt
[3] https://github.com/git/git/blob/d486ca60a51c9cb1fe068803c3f540724e95e83a/submodule.c#L453
[4] https://github.com/git/git/blob/d486ca60a51c9cb1fe068803c3f540724e95e83a/builtin/submodule--helper.c#L1020-L1021
[5] https://github.com/git/git/blob/d486ca60a51c9cb1fe068803c3f540724e95e83a/builtin/submodule--helper.c#L1117-L1118
[6] https://lore.kernel.org/git/67a884457aeaead275612be10902a80726b2a7db.1254668669u.git.johannes.schindelin@xxxxxx/t/#u
[7] https://lore.kernel.org/git/?q=f%3Ayin+s%3A%280+submodule+summary+NOT%3ARe+%29+



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux