Re: [PATCH v2 3/3] count-objects: report how much disk space taken by garbage files

2013-02-08 Thread Junio C Hamano
Nguyễn Thái Ngọc Duy  pclo...@gmail.com writes:

 Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
 ---
  We may do some redundant stat() here, but I don't think it can slow
  count-objects down much to worry about.

I don't either.  Looks like a good change to me.

It appears that the sb.buf refactoring is better done to the
previous patch, but that is minor.

  Documentation/git-count-objects.txt |  2 ++
  builtin/count-objects.c | 29 ++---
  2 files changed, 20 insertions(+), 11 deletions(-)

 diff --git a/Documentation/git-count-objects.txt 
 b/Documentation/git-count-objects.txt
 index 1611d7c..da6e72e 100644
 --- a/Documentation/git-count-objects.txt
 +++ b/Documentation/git-count-objects.txt
 @@ -35,6 +35,8 @@ the packs. These objects could be pruned using `git 
 prune-packed`.
  +
  garbage: the number of files in object database that are not valid
  loose objects nor valid packs
 ++
 +size-garbage: disk space consumed by garbage files, in KiB
  
  GIT
  ---
 diff --git a/builtin/count-objects.c b/builtin/count-objects.c
 index 118b2ae..90d476d 100644
 --- a/builtin/count-objects.c
 +++ b/builtin/count-objects.c
 @@ -10,24 +10,33 @@
  #include parse-options.h
  
  static unsigned long garbage;
 +static off_t size_garbage;
  
  extern void (*report_pack_garbage)(const char *path, int len, const char 
 *name);
  static void real_report_pack_garbage(const char *path, int len, const char 
 *name)
  {
 + struct strbuf sb = STRBUF_INIT;
 + struct stat st;
 +
   if (len  name)
 - error(garbage found: %.*s/%s, len, path, name);
 + strbuf_addf(sb, %.*s/%s, len, path, name);
   else if (!len  name)
 - error(garbage found: %s%s, path, name);
 + strbuf_addf(sb, %s%s, path, name);
   else
 - error(garbage found: %s, path);
 + strbuf_addf(sb, %s, path);
 + error(_(garbage found: %s), sb.buf);
 +
 + if (!stat(sb.buf, st))
 + size_garbage += st.st_size;
 +
   garbage++;
 + strbuf_release(sb);
  }
  
  static void count_objects(DIR *d, char *path, int len, int verbose,
 unsigned long *loose,
 off_t *loose_size,
 -   unsigned long *packed_loose,
 -   unsigned long *garbage)
 +   unsigned long *packed_loose)
  {
   struct dirent *ent;
   while ((ent = readdir(d)) != NULL) {
 @@ -59,11 +68,8 @@ static void count_objects(DIR *d, char *path, int len, int 
 verbose,
   (*loose_size) += xsize_t(on_disk_bytes(st));
   }
   if (bad) {
 - if (verbose) {
 - error(garbage found: %.*s/%s,
 -   len + 2, path, ent-d_name);
 - (*garbage)++;
 - }
 + if (verbose)
 + report_pack_garbage(path, len + 2, ent-d_name);
   continue;
   }
   (*loose)++;
 @@ -113,7 +119,7 @@ int cmd_count_objects(int argc, const char **argv, const 
 char *prefix)
   if (!d)
   continue;
   count_objects(d, path, len, verbose,
 -   loose, loose_size, packed_loose, garbage);
 +   loose, loose_size, packed_loose);
   closedir(d);
   }
   if (verbose) {
 @@ -138,6 +144,7 @@ int cmd_count_objects(int argc, const char **argv, const 
 char *prefix)
   printf(size-pack: %lu\n, (unsigned long) (size_pack / 1024));
   printf(prune-packable: %lu\n, packed_loose);
   printf(garbage: %lu\n, garbage);
 + printf(size-garbage: %lu\n, (unsigned long) (size_garbage / 
 1024));
   }
   else
   printf(%lu objects, %lu kilobytes\n,
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 3/3] count-objects: report how much disk space taken by garbage files

2013-02-07 Thread Nguyễn Thái Ngọc Duy

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 We may do some redundant stat() here, but I don't think it can slow
 count-objects down much to worry about.

 Documentation/git-count-objects.txt |  2 ++
 builtin/count-objects.c | 29 ++---
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/Documentation/git-count-objects.txt 
b/Documentation/git-count-objects.txt
index 1611d7c..da6e72e 100644
--- a/Documentation/git-count-objects.txt
+++ b/Documentation/git-count-objects.txt
@@ -35,6 +35,8 @@ the packs. These objects could be pruned using `git 
prune-packed`.
 +
 garbage: the number of files in object database that are not valid
 loose objects nor valid packs
++
+size-garbage: disk space consumed by garbage files, in KiB
 
 GIT
 ---
diff --git a/builtin/count-objects.c b/builtin/count-objects.c
index 118b2ae..90d476d 100644
--- a/builtin/count-objects.c
+++ b/builtin/count-objects.c
@@ -10,24 +10,33 @@
 #include parse-options.h
 
 static unsigned long garbage;
+static off_t size_garbage;
 
 extern void (*report_pack_garbage)(const char *path, int len, const char 
*name);
 static void real_report_pack_garbage(const char *path, int len, const char 
*name)
 {
+   struct strbuf sb = STRBUF_INIT;
+   struct stat st;
+
if (len  name)
-   error(garbage found: %.*s/%s, len, path, name);
+   strbuf_addf(sb, %.*s/%s, len, path, name);
else if (!len  name)
-   error(garbage found: %s%s, path, name);
+   strbuf_addf(sb, %s%s, path, name);
else
-   error(garbage found: %s, path);
+   strbuf_addf(sb, %s, path);
+   error(_(garbage found: %s), sb.buf);
+
+   if (!stat(sb.buf, st))
+   size_garbage += st.st_size;
+
garbage++;
+   strbuf_release(sb);
 }
 
 static void count_objects(DIR *d, char *path, int len, int verbose,
  unsigned long *loose,
  off_t *loose_size,
- unsigned long *packed_loose,
- unsigned long *garbage)
+ unsigned long *packed_loose)
 {
struct dirent *ent;
while ((ent = readdir(d)) != NULL) {
@@ -59,11 +68,8 @@ static void count_objects(DIR *d, char *path, int len, int 
verbose,
(*loose_size) += xsize_t(on_disk_bytes(st));
}
if (bad) {
-   if (verbose) {
-   error(garbage found: %.*s/%s,
- len + 2, path, ent-d_name);
-   (*garbage)++;
-   }
+   if (verbose)
+   report_pack_garbage(path, len + 2, ent-d_name);
continue;
}
(*loose)++;
@@ -113,7 +119,7 @@ int cmd_count_objects(int argc, const char **argv, const 
char *prefix)
if (!d)
continue;
count_objects(d, path, len, verbose,
- loose, loose_size, packed_loose, garbage);
+ loose, loose_size, packed_loose);
closedir(d);
}
if (verbose) {
@@ -138,6 +144,7 @@ int cmd_count_objects(int argc, const char **argv, const 
char *prefix)
printf(size-pack: %lu\n, (unsigned long) (size_pack / 1024));
printf(prune-packable: %lu\n, packed_loose);
printf(garbage: %lu\n, garbage);
+   printf(size-garbage: %lu\n, (unsigned long) (size_garbage / 
1024));
}
else
printf(%lu objects, %lu kilobytes\n,
-- 
1.8.1.2.495.g3fdf5d5.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html