diff-delta.c: Rationalize culling of hash buckets
[gitweb.git] / builtin-prune.c
index 6f0ba0d04d789f17e3f0136a3591a9465af7e71d..44df59e4a70f84cdebac94f2591765ada8d4b92d 100644 (file)
@@ -10,19 +10,12 @@ static int show_only;
 
 static int prune_object(char *path, const char *filename, const unsigned char *sha1)
 {
-       char buf[20];
-       const char *type;
-
        if (show_only) {
-               if (sha1_object_info(sha1, buf, NULL))
-                       type = "unknown";
-               else
-                       type = buf;
-               printf("%s %s\n", sha1_to_hex(sha1), type);
-               return 0;
-       }
-       unlink(mkpath("%s/%s", path, filename));
-       rmdir(path);
+               enum object_type type = sha1_object_info(sha1, NULL);
+               printf("%s %s\n", sha1_to_hex(sha1),
+                      (type > 0) ? typename(type) : "unknown");
+       } else
+               unlink(mkpath("%s/%s", path, filename));
        return 0;
 }
 
@@ -65,6 +58,8 @@ static int prune_dir(int i, char *path)
                }
                fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
        }
+       if (!show_only)
+               rmdir(path);
        closedir(dir);
        return 0;
 }