diff options
author | Junio C Hamano <junkio@cox.net> | 2006-07-03 03:14:32 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-07-03 03:16:52 -0700 |
commit | f23c75a8eca5eeabf9aaf303ee7e14a94da42ddc (patch) | |
tree | e8379d2e091dcdabb623ebbe8b7a1ee53be308a9 /revision.c | |
parent | 160b7983034cdd24ea1bf6ef7a2532a2296461c6 (diff) | |
parent | 8fced61cbc32f0c4b81a3dcecfeb40b7d96339ce (diff) | |
download | git-f23c75a8eca5eeabf9aaf303ee7e14a94da42ddc.tar.gz git-f23c75a8eca5eeabf9aaf303ee7e14a94da42ddc.tar.xz |
Merge branch 'master' into js/merge-base
This is to pull in the object-hash clean-up from the master branch.
Diffstat (limited to 'revision.c')
-rw-r--r-- | revision.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/revision.c b/revision.c index 27fc1e307..56bc4ff0e 100644 --- a/revision.c +++ b/revision.c @@ -280,7 +280,7 @@ int rev_same_tree_as_empty(struct rev_info *revs, struct tree *t1) static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) { struct commit_list **pp, *parent; - int tree_changed = 0; + int tree_changed = 0, tree_same = 0; if (!commit->tree) return; @@ -298,6 +298,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) parse_commit(p); switch (rev_compare_tree(revs, p->tree, commit->tree)) { case REV_TREE_SAME: + tree_same = 1; if (!revs->simplify_history || (p->object.flags & UNINTERESTING)) { /* Even if a merge with an uninteresting * side branch brought the entire change @@ -334,7 +335,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) } die("bad tree compare for commit %s", sha1_to_hex(commit->object.sha1)); } - if (tree_changed) + if (tree_changed && !tree_same) commit->object.flags |= TREECHANGE; } @@ -926,6 +927,8 @@ static int rewrite_one(struct rev_info *revs, struct commit **pp) struct commit *p = *pp; if (!revs->limited) add_parents_to_list(revs, p, &revs->commits); + if (p->parents && p->parents->next) + return 0; if (p->object.flags & (TREECHANGE | UNINTERESTING)) return 0; if (!p->parents) @@ -1018,8 +1021,15 @@ struct commit *get_revision(struct rev_info *revs) commit->parents && commit->parents->next) continue; if (revs->prune_fn && revs->dense) { - if (!(commit->object.flags & TREECHANGE)) - continue; + /* Commit without changes? */ + if (!(commit->object.flags & TREECHANGE)) { + /* drop merges unless we want parenthood */ + if (!revs->parents) + continue; + /* non-merge - always ignore it */ + if (!commit->parents || !commit->parents->next) + continue; + } if (revs->parents) rewrite_parents(revs, commit); } |