Am 06.03.2012 10:18, schrieb karsten.blees@xxxxxxx: > On some systems (e.g. Windows XP), directories cannot be deleted while > they're open. Both git-prune and git-repack (and thus, git-gc) try to > rmdir while holding a DIR* handle on the directory, leaving dangling > empty directories in the .git/objects store. > > Fix it by swapping the rmdir / closedir calls. The reasoning makes a lot of sense. I wonder why object directories are pruned nevertheless when I run git gc --prune (I run git master plus a few topics from pu). > diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c > index f9463de..a834417 100644 > --- a/builtin/prune-packed.c > +++ b/builtin/prune-packed.c > @@ -36,7 +36,6 @@ static void prune_dir(int i, DIR *dir, char *pathname, > int len, int opts) > display_progress(progress, i + 1); > } > pathname[len] = 0; > - rmdir(pathname); After moving the rmdir() away from prune_dir(), the truncation of the pathname does not logically belong here anymore. It should be moved with the rmdir(). Looks good otherwise. > } > > void prune_packed_objects(int opts) > @@ -65,6 +64,7 @@ void prune_packed_objects(int opts) > continue; > prune_dir(i, d, pathname, len + 3, opts); > closedir(d); > + rmdir(pathname); > } > stop_progress(&progress); > } > diff --git a/builtin/prune.c b/builtin/prune.c > index 58d7cb8..b99b635 100644 > --- a/builtin/prune.c > +++ b/builtin/prune.c > @@ -85,9 +85,9 @@ static int prune_dir(int i, char *path) > } > fprintf(stderr, "bad sha1 file: %s/%s\n", path, > de->d_name); > } > + closedir(dir); > if (!show_only) > rmdir(path); > - closedir(dir); > return 0; > } > -- 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