From: Linus Torvalds <torvalds@osdl.org>
To: Junio C Hamano <junkio@cox.net>
Cc: Git Mailing List <git@vger.kernel.org>,
Paul Mackerras <paulus@samba.org>,
Marco Costalba <mcostalba@yahoo.it>,
Aneesh Kumar <aneesh.kumar@gmail.com>,
Len Brown <len.brown@intel.com>
Subject: Re: The merge from hell...
Date: Wed, 1 Feb 2006 23:51:34 -0800 (PST) [thread overview]
Message-ID: <Pine.LNX.4.64.0602012334360.21884@g5.osdl.org> (raw)
In-Reply-To: <7v8xsuuto5.fsf@assigned-by-dhcp.cox.net>
On Wed, 1 Feb 2006, Junio C Hamano wrote:
>
> > It's commit 9fdb62af92c741addbea15545f214a6e89460865, and passing it to
> > git-diff-tree with the "--cc" option seems to do the largely the right
> > thing (although arguably, since one of the parents always matches the end
> > result in all the files, it shouldn't have shown anything at all, so I
> > think it could do with some tweaking).
>
> Hmph. Do you mean a hunk like this?
>
> diff --cc kernel/sys.c
> @@@@@@@@@@@@@ +33,7 @@@@@@@@@@@@@
>
> #include <linux/compat.h>
> #include <linux/syscalls.h>
> + +++ #include <linux/kprobes.h>
>
> #include <asm/uaccess.h>
> #include <asm/io.h>
Yes.
> Currently I cull hunks that have changes from only one parent,
> or when the changes are the same from all but one parent. This
> hunk does not match either criteria.
Correct. I think "git-diff-tree --cc" actually works as you advertized,
but that we should change the rules. More akin to
- if there are only two versions of a hunk, and one of those versions
ended up in the result, the hunk is considered successfully merged
and should be ignored under "--cc"
Under that rule, the kernel/sys.c hunk you specify is indeed
uninteresting, because there are only two versions: the version that
didn't have the addition, and the version that did.
> or "plus and minus in the same set of columns" hunks. If I did
> so, this would become uninteresting:
>
> diff --cc arch/ia64/pci/pci.c
> @@@@@@@@@@@@@ +709,7 @@@@@@@@@@@@@
> */
> int ia64_pci_legacy_write(struct pci_dev *bus, u16...
> {
> ------ - int ret = 0;
> ++++++ + int ret = size;
>
> switch (size) {
> case 1:
Yes. Again, only two versions. Either it was "ret = 0" or it was "ret =
size". No other version existed in any branch or in the end result, so
there really were only two versions, and one of them ended up being the
end result.
> But this is still interesting:
>
> @@@@@@@@@@@@@ +308,35 @@@@@@@@@@@@@
> goto end;
> }
> }
> -- cx->usage++;
> --
>
> +++ #ifdef CONFIG_HOTPLUG_CPU
> +++ /*
Not under my suggested "two version" rule.
The above has _three_ versions: the one with no changes, the one with
"cx->usage++" removed and the one with "#ifdef CONFIG_HOTPLUG_CPU" added.
So under the two-version rule, the last one would still be interesting.
> > git-diff-tree takes almost three seconds to get its result, though.
>
> One trivial thing I should be able to do to speed things up is
> to reuse previous diff with other parents.
Yes. In this example, it would apparently cut down the work by a third for
that file, although it migt make it harder to calculate the proper "-/+"
patterns..
> I did not expect anybody to be _that_ sick (eh, pardon my
> language) to do a 12-way octpus, so I did not consider this
> optimization possibility, but I should be doing only 4 diffs to
> format -c for this commit. Currently I do 12.
I agree, I wouldn't have considered that 12-way merge sane either, but
hey, it worked, and our octopus merge rules are simple enough that I guess
there's not really any downside to it.
And I was actually happy to have "git-diff-tree --cc" to look at it, and
that "gitk" eventually gave results that looked decent. I didn't go
through it all that closely, but the ones I _looked_ at looked fine, and
it was mighty pleasant to have the tools to look more closely.
So thanks for "--cc" yet again.
> > So think of it as a correctness/scalability test.
>
> Heh. I like this one as a practice. Thanks!
Thank Len. He may have done it as a way to avoid having extra merges,
since I complained about those last time ;)
Linus
next prev parent reply other threads:[~2006-02-02 7:52 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-02 6:28 The merge from hell Linus Torvalds
2006-02-02 7:05 ` Junio C Hamano
2006-02-02 7:40 ` [PATCH] combine-diff: reuse diff from the same blob Junio C Hamano
2006-02-02 7:51 ` Linus Torvalds [this message]
2006-02-02 7:55 ` The merge from hell Linus Torvalds
2006-02-02 8:08 ` Linus Torvalds
2006-02-02 8:18 ` [PATCH] combine-diff: update --cc "uninteresting hunks" logic Junio C Hamano
2006-02-02 9:34 ` [PATCH] combine-diff: add safety check to --cc Junio C Hamano
2006-02-02 23:03 ` Linus Torvalds
2006-02-03 0:02 ` Junio C Hamano
2006-02-03 1:05 ` Linus Torvalds
2006-02-03 5:49 ` [Attn - repository browser authors] diff-tree combined format Junio C Hamano
2006-02-03 12:17 ` Marco Costalba
2006-02-03 19:55 ` Junio C Hamano
2006-02-03 21:35 ` Junio C Hamano
2006-02-04 12:03 ` Marco Costalba
2006-02-04 11:23 ` Paul Mackerras
2006-02-03 5:28 ` [PATCH] combine-diff: add safety check to --cc Junio C Hamano
2006-02-04 5:38 ` Paul Mackerras
2006-02-04 6:12 ` Junio C Hamano
2006-02-04 10:46 ` The merge from hell Paul Mackerras
2006-02-04 12:22 ` Junio C Hamano
2006-02-04 19:42 ` Linus Torvalds
2006-02-04 20:59 ` Linus Torvalds
2006-02-02 7:25 ` Marco Costalba
2006-02-02 8:02 ` Linus Torvalds
2006-02-02 8:07 ` Aneesh Kumar
2006-02-02 8:27 ` Junio C Hamano
2006-02-02 8:44 ` Linus Torvalds
2006-02-02 10:41 ` Junio C Hamano
2006-02-05 19:42 ` Linus Torvalds
2006-02-05 19:49 ` Add a "git show" command to show a commit Linus Torvalds
2006-02-05 19:58 ` Fix git-rev-parse over-eager errors Linus Torvalds
2006-02-05 20:11 ` Junio C Hamano
2006-02-05 22:03 ` Linus Torvalds
2006-02-06 6:20 ` Junio C Hamano
2006-02-05 22:45 ` Add a "git show" command to show a commit Junio C Hamano
2006-02-05 22:55 ` Linus Torvalds
2006-02-05 22:59 ` Linus Torvalds
2006-02-06 0:25 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2006-02-03 4:20 The merge from hell Brown, Len
2006-02-03 5:45 ` Linus Torvalds
2006-02-03 6:28 ` Junio C Hamano
2006-02-03 16:21 ` Dave Jones
2006-02-03 6:04 Brown, Len
2006-02-03 6:16 ` Linus Torvalds
2006-02-03 6:33 ` Junio C Hamano
2006-02-03 6:41 linux
2006-02-03 18:34 Brown, Len
2006-02-04 2:35 ` Junio C Hamano
2006-02-04 2:47 ` Linus Torvalds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.0602012334360.21884@g5.osdl.org \
--to=torvalds@osdl.org \
--cc=aneesh.kumar@gmail.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=len.brown@intel.com \
--cc=mcostalba@yahoo.it \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).