Skip to content

Commit

Permalink
Merge branch 'jc/revision-range-unpeel'
Browse files Browse the repository at this point in the history
"git log --left-right A...B" lost the "leftness" of commits
reachable from A when A is a tag as a side effect of a recent
bugfix.  This is a regression in 1.8.4.x series.

* jc/revision-range-unpeel:
  revision: propagate flag bits from tags to pointees
  revision: mark contents of an uninteresting tree uninteresting
  • Loading branch information
gitster committed Jan 27, 2014
2 parents 9bb5287 + a743528 commit 6376327
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 12 deletions.
28 changes: 16 additions & 12 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,17 +104,12 @@ static void mark_blob_uninteresting(struct blob *blob)
blob->object.flags |= UNINTERESTING;
}

void mark_tree_uninteresting(struct tree *tree)
static void mark_tree_contents_uninteresting(struct tree *tree)
{
struct tree_desc desc;
struct name_entry entry;
struct object *obj = &tree->object;

if (!tree)
return;
if (obj->flags & UNINTERESTING)
return;
obj->flags |= UNINTERESTING;
if (!has_sha1_file(obj->sha1))
return;
if (parse_tree(tree) < 0)
Expand Down Expand Up @@ -142,6 +137,18 @@ void mark_tree_uninteresting(struct tree *tree)
free_tree_buffer(tree);
}

void mark_tree_uninteresting(struct tree *tree)
{
struct object *obj = &tree->object;

if (!tree)
return;
if (obj->flags & UNINTERESTING)
return;
obj->flags |= UNINTERESTING;
mark_tree_contents_uninteresting(tree);
}

void mark_parents_uninteresting(struct commit *commit)
{
struct commit_list *parents = NULL, *l;
Expand Down Expand Up @@ -276,6 +283,7 @@ static struct commit *handle_commit(struct rev_info *revs,
return NULL;
die("bad object %s", sha1_to_hex(tag->tagged->sha1));
}
object->flags |= flags;
}

/*
Expand All @@ -287,7 +295,6 @@ static struct commit *handle_commit(struct rev_info *revs,
if (parse_commit(commit) < 0)
die("unable to parse commit %s", name);
if (flags & UNINTERESTING) {
commit->object.flags |= UNINTERESTING;
mark_parents_uninteresting(commit);
revs->limited = 1;
}
Expand All @@ -305,7 +312,7 @@ static struct commit *handle_commit(struct rev_info *revs,
if (!revs->tree_objects)
return NULL;
if (flags & UNINTERESTING) {
mark_tree_uninteresting(tree);
mark_tree_contents_uninteresting(tree);
return NULL;
}
add_pending_object(revs, object, "");
Expand All @@ -316,13 +323,10 @@ static struct commit *handle_commit(struct rev_info *revs,
* Blob object? You know the drill by now..
*/
if (object->type == OBJ_BLOB) {
struct blob *blob = (struct blob *)object;
if (!revs->blob_objects)
return NULL;
if (flags & UNINTERESTING) {
mark_blob_uninteresting(blob);
if (flags & UNINTERESTING)
return NULL;
}
add_pending_object(revs, object, "");
return NULL;
}
Expand Down
17 changes: 17 additions & 0 deletions t/t6000-rev-list-misc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,21 @@ test_expect_success 'rev-list A..B and rev-list ^A B are the same' '
test_cmp expect actual
'

test_expect_success 'propagate uninteresting flag down correctly' '
git rev-list --objects ^HEAD^{tree} HEAD^{tree} >actual &&
>expect &&
test_cmp expect actual
'

test_expect_success 'symleft flag bit is propagated down from tag' '
git log --format="%m %s" --left-right v1.0...master >actual &&
cat >expect <<-\EOF &&
> two
> one
< another
< that
EOF
test_cmp expect actual
'

test_done

0 comments on commit 6376327

Please sign in to comment.