Skip to content

Commit

Permalink
Merge branch 'jc/xsha1-2'
Browse files Browse the repository at this point in the history
* jc/xsha1-2:
  Extended SHA1 -- "rev^@" syntax to mean "all parents"
  • Loading branch information
Junio C Hamano committed May 2, 2006
2 parents cbd800b + ea4a19e commit 746437d
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,36 @@ static void handle_all(struct rev_info *revs, unsigned flags)
for_each_ref(handle_one_ref);
}

static int add_parents_only(struct rev_info *revs, const char *arg, int flags)
{
unsigned char sha1[20];
struct object *it;
struct commit *commit;
struct commit_list *parents;

if (*arg == '^') {
flags ^= UNINTERESTING;
arg++;
}
if (get_sha1(arg, sha1))
return 0;
while (1) {
it = get_reference(revs, arg, sha1, 0);
if (strcmp(it->type, tag_type))
break;
memcpy(sha1, ((struct tag*)it)->tagged->sha1, 20);
}
if (strcmp(it->type, commit_type))
return 0;
commit = (struct commit *)it;
for (parents = commit->parents; parents; parents = parents->next) {
it = &parents->item->object;
it->flags |= flags;
add_pending_object(revs, it, arg);
}
return 1;
}

void init_revisions(struct rev_info *revs)
{
memset(revs, 0, sizeof(*revs));
Expand Down Expand Up @@ -751,6 +781,13 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
}
*dotdot = '.';
}
dotdot = strstr(arg, "^@");
if (dotdot && !dotdot[2]) {
*dotdot = 0;
if (add_parents_only(revs, arg, flags))
continue;
*dotdot = '^';
}
local_flags = 0;
if (*arg == '^') {
local_flags = UNINTERESTING;
Expand Down

0 comments on commit 746437d

Please sign in to comment.