From: Greg Price Date: Tue, 06 Jul 2010 03:25:36 GMT Subject: Re: [PATCH] pack-refs: remove newly empty directories Message-ID: In-Reply-To: <7vsk3x5n35.fsf@alter.siamese.dyndns.org> On Mon, Jul 5, 2010 at 11:02 PM, Junio C Hamano 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