Ok,
Nico gave me private access to the tree, so I quickly cloned it and
started bisecting it to figure out where the problem was. I haven't looked
at the source code, and all the commit messages seem to be in German
(which I can kind of understand if I work at it, but not very well), but
it definitely turns out none of that matters.
The problem is a bad merge. And in fact, that merge lost _more_ than just the three files under Code/Spikes/Statistik/, it also lost a file called Code/lw1/Client/Pics/icon/lw1-icon.png.
I don't quite see _how_ it lost them. The merge in question is a totally trivial in-index merge, and when I re-do it, I don't lose those files. In this case, all the lost files were from the "other branch" of the merge, and they were new to that branch. IOW, in git-merge-one-file parlance, it is that trivial "added in one" case.
Pasky - do you know of any historical cogito problems like this?
Nico: the files were added in commit
- 9e9b91166bfca448a8f1ddeb4580d73ac8ea0986:
Neuer Spike: Statistik ...
and they stayed around in that branch until commit (which is still good):
- dcd70e89dc7b2280260628fd699aa906c319c68f:
Bug 359 - Defektmeldungen ...
but they disappeared when the that branch was merged with commit
- 056c65efea28066b7b241240f0d8421d3204b624
Bug 195 - Tagesarbeitsplan: ...
and the result is the bad merge commit:
- 228b94dd0a7aa1516eb867674cdf8c7c7b2bfd4c:
Merge with /home/server/git/walderlift.git
After that merge, those new files are gone - they were never added by the merge.
Quite frankly, this is clearly a bug, and it looks very much like a really serious bug in cg-merge. It's not in the core git: even old versions of git should never have been able to generate that broken merge.
But when I try to do that same merge with current cogito, I can't make it break _either_. In all cases, regardless of how I do the merge, when I do (bad-merge is the merge in your tree, "cg-test" in this case is the merge I did using cogito):
git-diff-tree -r bad-merge cg-test
I get
:000000 100644 0000000000000000000000000000000000000000 5c8c47d855ee0f78a7fb81c4a49224b1607a88b7 A Code/Spikes/Statistik/Project.dpr
:000000 100644 0000000000000000000000000000000000000000 7bd2de9b7142999bc6bbadde06e73267d1b5ee0e A Code/Spikes/Statistik/Statistik.pas
:000000 100644 0000000000000000000000000000000000000000 a0fb45e2b906bdac7929cfd8174053015ab629b4 A Code/Spikes/Statistik/Statistik.xfm
:000000 100644 0000000000000000000000000000000000000000 24f8254c06ea5efc89944a3a9f52d2c79c841c0b A Code/lw1/Client/Pics/icon/lw1-icon.png
ie the "bad merge" thing (commit 228b94dd0a7aa1516eb867674cdf8c7c7b2bfd4c in your tree) will not have those four files, and the good merge (whether I use the git "recursive" or git "resolve" merge, or use "cg-merge" to do it) will always have those four files.
So I do not see how that bad commit happened, especially since it's even a fairly recent commit (the date of the merge is 2005-11-17).
I wonder if there's a really old and broken version of cogito somewhere around. If so, it's on "srsyg03".
I also went through every single merge in your tree, and apart from two merges that had merge conflicts and were fixed up by hand (and that I thus didn't check), all other merges looked ok. So as far as I can tell it's only that 228b94dd0a7aa1516eb867674cdf8c7c7b2bfd4c merge that is bad.
(And the two commits that needed manual merging _look_ fine. No lost files at least, except for one of the merges losing "bitte_bitte_loesch_mich", which judging by it's name _should_ be lost ;)
Finally: Nico, I've deleted the trees on my machine, and you can remove my
ssh key. I don't think I can tell you anything more.
Linus