On Mon, Jul 5, 2010 at 11:02 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Will this keep refs/heads/p/q that is empty after packing p/q/r/s branch > that happens to be the only branch whose name begins with p/? > > I do not want a careless loop that will remove refs/heads after packing > "master" that happens to be the only local branch, but still... It will. I could fix that with something like this (untested): /* Remove empty parents, but spare refs/ and immediate subdirs. Note, munges *name. */ static void try_remove_empty_parents(char *name) { char *p, *q; int i; p = name; for (i = 0; i < 2; i++) { /* refs/{heads,tags,...}/ */ while (*p && *p != '/') p++; if (*p) p++; } for (q = p; *q; q++) ; while (1) { for ( ; q > p && *q != '/'; q--) ; if (q == p) break; *q = '\0'; if (rmdir(git_path("%s", name))) break; } } and then if (lock) { unlink_or_warn(git_path("%s", r->name)); unlock_ref(lock); + try_remove_empty_parents(r->name); } Sound reasonable? Greg -- 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