On Fri, Aug 30, 2013 at 12:00 AM, Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote: > So that it's possible to remove certain refs from the list without > removing the objects that are referenced by other refs. > > For example this repository: > > * 374e8dd (crap) crap > * 4cbbf7b (test) two > * d025ae0 (HEAD, master) one > > When using '--branches --except crap': > > * 4cbbf7b (test) two > * d025ae0 (HEAD, master) one > > But when using '--branches --not crap' nothing will come out. Doesn't work with certain refs, here's a fix: diff --git a/revision.c b/revision.c index 375adab..25564c1 100644 --- a/revision.c +++ b/revision.c @@ -2575,6 +2575,13 @@ void reset_revision_walk(void) clear_object_flags(SEEN | ADDED | SHOWN); } +static int refcmp(const char *a, const char *b) +{ + a = prettify_refname(a); + b = prettify_refname(b); + return strcmp(a, b); +} + int prepare_revision_walk(struct rev_info *revs) { int nr = revs->pending.nr; @@ -2591,7 +2598,7 @@ int prepare_revision_walk(struct rev_info *revs) for (i = 0; i < revs->cmdline.nr; i++) { struct rev_cmdline_entry *ce; ce = &revs->cmdline.rev[i]; - if ((ce->flags & SKIP) && !strcmp(ce->name, e->name)) + if ((ce->flags & SKIP) && !refcmp(ce->name, e->name)) goto next; } if (commit) { diff --git a/t/t6112-rev-list-except.sh b/t/t6112-rev-list-except.sh index b8f9a61..a295f43 100755 --- a/t/t6112-rev-list-except.sh +++ b/t/t6112-rev-list-except.sh @@ -32,4 +32,11 @@ test_expect_success 'rev-list --except with extra' ' test_cmp expect actual ' +test_expect_success 'rev-list --except with full ref' ' + + git rev-list --topo-order --branches --except refs/heads/merge > actual && + git rev-list --topo-order test > expect && + test_cmp expect actual +' + test_done -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html