From: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
To: Daniel Barkalow <barkalow@iabervon.org>
Cc: Linus Torvalds <torvalds@osdl.org>,
"J. Bruce Fields" <bfields@fieldses.org>,
Junio C Hamano <junkio@cox.net>,
git@vger.kernel.org,
Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: A note on merging conflicts..
Date: Sun, 2 Jul 2006 13:31:33 +0200 [thread overview]
Message-ID: <20060702113133.GA11529@lsrfire.ath.cx> (raw)
In-Reply-To: <Pine.LNX.4.64.0607011937190.9789@iabervon.org>
On Sat, Jul 01, 2006 at 07:45:33PM -0400, Daniel Barkalow wrote:
> That is: (this only has the logic portion, and it's against master, so it
> isn't actually a really working patch or anything; also, it doesn't handle
> "--not a...b" correctly, whatever that should mean)
[concept patch snipped]
You mean something like the patch below? It seems to work, but in my
unscientific tests it's significant slower than the version based on
get_merge_bases() (0.17s vs 0.05s for
"git-rev-list 89719209...262a6ef7 66ae0c77...ced9456a"). Did I do
something wrong?
You had no mark_parents_left_right() in your patch. I added it because
otherwise it wouldn't remove any common commits. Was this supposed to
work some other way?
We still need an automatic test case, and a better benchmark.
diff --git a/revision.c b/revision.c
index ebee05a..8c494ee 100644
--- a/revision.c
+++ b/revision.c
@@ -339,6 +339,20 @@ static void try_to_simplify_commit(struc
commit->object.flags |= TREECHANGE;
}
+static void mark_parents_left_right(struct commit *commit)
+{
+ unsigned int flags = commit->object.flags & (RIGHT_HALF | LEFT_HALF);
+ struct commit_list *parents = commit->parents;
+
+ while (parents) {
+ struct commit *p = parents->item;
+ p->object.flags |= flags;
+ if (p->parents)
+ mark_parents_left_right(p);
+ parents = parents->next;
+ }
+}
+
static void add_parents_to_list(struct rev_info *revs, struct commit *commit, struct commit_list **list)
{
struct commit_list *parent = commit->parents;
@@ -347,6 +361,13 @@ static void add_parents_to_list(struct r
return;
commit->object.flags |= ADDED;
+ if (commit->object.flags & (RIGHT_HALF | LEFT_HALF)) {
+ if (commit->object.flags & RIGHT_HALF &&
+ commit->object.flags & LEFT_HALF)
+ commit->object.flags |= UNINTERESTING;
+ mark_parents_left_right(commit);
+ }
+
/*
* If the commit is uninteresting, don't try to
* prune parents - we want the maximal uninteresting
@@ -772,7 +793,10 @@ int setup_revisions(int argc, const char
unsigned char from_sha1[20];
const char *next = dotdot + 2;
const char *this = arg;
+ int symmetric = *next == '.';
+
*dotdot = 0;
+ next += symmetric;
if (!*next)
next = "HEAD";
if (dotdot == arg)
@@ -782,8 +806,13 @@ int setup_revisions(int argc, const char
struct object *exclude;
struct object *include;
- exclude = get_reference(revs, this, from_sha1, flags ^ UNINTERESTING);
- include = get_reference(revs, next, sha1, flags);
+ if (symmetric) {
+ exclude = get_reference(revs, this, from_sha1, flags | LEFT_HALF);
+ include = get_reference(revs, next, sha1, flags | RIGHT_HALF);
+ } else {
+ exclude = get_reference(revs, this, from_sha1, flags ^ UNINTERESTING);
+ include = get_reference(revs, next, sha1, flags);
+ }
if (!exclude || !include)
die("Invalid revision range %s..%s", arg, next);
diff --git a/revision.h b/revision.h
index c010a08..0090232 100644
--- a/revision.h
+++ b/revision.h
@@ -9,6 +9,8 @@ #define TMP_MARK (1u<<4) /* for isolated
#define BOUNDARY (1u<<5)
#define BOUNDARY_SHOW (1u<<6)
#define ADDED (1u<<7) /* Parents already parsed and added? */
+#define RIGHT_HALF (1u<<8)
+#define LEFT_HALF (1u<<9)
struct rev_info;
struct log_info;
next prev parent reply other threads:[~2006-07-02 11:31 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-01 2:44 A note on merging conflicts Linus Torvalds
2006-07-01 3:08 ` Junio C Hamano
2006-07-01 3:54 ` Linus Torvalds
2006-07-01 3:59 ` Linus Torvalds
2006-07-01 15:09 ` Rene Scharfe
2006-07-01 15:23 ` Johannes Schindelin
2006-07-01 16:25 ` Linus Torvalds
2006-07-01 18:13 ` Rene Scharfe
2006-07-01 18:01 ` J. Bruce Fields
2006-07-01 18:20 ` Linus Torvalds
2006-07-01 22:24 ` Daniel Barkalow
2006-07-01 22:57 ` Linus Torvalds
2006-07-01 23:25 ` Daniel Barkalow
2006-07-01 23:45 ` Daniel Barkalow
2006-07-02 11:31 ` Rene Scharfe [this message]
2006-07-02 21:42 ` Daniel Barkalow
2006-07-02 0:08 ` Linus Torvalds
2006-07-01 18:22 ` Jakub Narebski
2006-07-01 18:52 ` Linus Torvalds
2006-07-01 18:37 ` Junio C Hamano
2006-07-01 19:29 ` Rene Scharfe
2006-07-01 19:56 ` Junio C Hamano
2006-07-01 23:01 ` Johannes Schindelin
2006-07-01 20:04 ` Linus Torvalds
2006-07-01 20:07 ` Junio C Hamano
2006-07-01 20:14 ` Junio C Hamano
2006-07-01 23:29 ` [PATCH 1/3] Add get_merge_bases_clean() Rene Scharfe
2006-07-01 23:43 ` Johannes Schindelin
2006-07-01 23:29 ` [PATCH 2/3] Add '...' operator for revisions Rene Scharfe
2006-07-01 23:29 ` [PATCH 3/3] Make clear_commit_marks() clean harder Rene Scharfe
2006-07-03 9:32 ` Junio C Hamano
2006-07-03 13:56 ` Johannes Schindelin
2006-07-03 17:05 ` Linus Torvalds
2006-07-03 21:08 ` Johannes Schindelin
2006-07-03 19:47 ` Junio C Hamano
2006-07-03 21:12 ` Johannes Schindelin
2006-07-03 22:55 ` Linus Torvalds
2006-07-04 7:53 ` Johannes Schindelin
2006-07-04 8:20 ` Junio C Hamano
2006-07-02 9:49 ` [PATCH 4/3] Fold get_merge_bases_clean() into get_merge_bases() Rene Scharfe
2006-07-02 9:56 ` Johannes Schindelin
2006-07-02 16:43 ` Linus Torvalds
2006-07-02 17:40 ` Rene Scharfe
2006-07-02 18:28 ` Junio C Hamano
2006-07-02 20:59 ` Rene Scharfe
2006-07-02 21:15 ` Rene Scharfe
2006-07-02 21:17 ` Linus Torvalds
2006-07-02 20:44 ` Linus Torvalds
2006-07-07 8:26 ` A note on merging conflicts Junio C Hamano
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=20060702113133.GA11529@lsrfire.ath.cx \
--to=rene.scharfe@lsrfire.ath.cx \
--cc=Johannes.Schindelin@gmx.de \
--cc=barkalow@iabervon.org \
--cc=bfields@fieldses.org \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=torvalds@osdl.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).