Make git-repack explain what it's doing during prune
PATCH 1/1 Make git-repack explain what it's doing during prune
git-pack-objects reports its progress as it runs, but as soon as it finishes and git-repack (with -d option) runs git-prune-packed, the user is left in the dark about what's going on. That makes git-repack feel inconsistent: it starts off with a bunch of progress reports then appears to just sit there for a while before finishing.
--- git-repack.sh | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
git-repack.sh +3 -0
@@ -110,6 +110,9 @@ then done ) fi + if test "$quiet" != '-q'; then + echo "Removing unused objects..." + fi git-prune-packed fi
Signature · 1 line
1.4.4.4.g1295-dirty
Quoted 5 lines · Steven Grimm
git-pack-objects reports its progress as it runs, but as soon as it finishes and git-repack (with -d option) runs git-prune-packed, the user is left in the dark about what's going on. That makes git-repack feel inconsistent: it starts off with a bunch of progress reports then appears to just sit there for a while before finishing.
I think this is a very good idea, but why don't we go all the way? Perhaps like this?
-- >8 --
git-repack.sh +1 -1
@@ -110,7 +110,7 @@ then done ) fi - git-prune-packed + git-prune-packed $quiet fi case "$no_update_info" in
builtin-prune-packed.c +17 -7
@@ -4,7 +4,10 @@static const char prune_packed_usage[] ="git-prune-packed [-n]" ; -static void prune_dir (int i,DIR *dir,char *pathname,int len,int dryrun) +#define DRY_RUN 01 +#define VERBOSE 02 + +static void prune_dir (int i,DIR *dir,char *pathname,int len,int opts) {struct dirent *de;char hex[40 ];
@@ -20,7 +23,7 @@ static void prune_dir(int i, DIR *dir, char *pathname, int len, int dryrun)if (!has_sha1_pack (sha1,NULL ))continue ;memcpy (pathname + len, de->d_name,38 ); -if (dryrun) +if (opts &DRY_RUN )printf ("rm -f %s\n" , pathname);else if (unlink (pathname) <0 )error ("unable to unlink %s" , pathname);
@@ -29,7 +32,7 @@ static void prune_dir(int i, DIR *dir, char *pathname, int len, int dryrun)rmdir (pathname); } -void prune_packed_objects (int dryrun) +void prune_packed_objects (int opts) {int i;static char pathname[PATH_MAX ];
@@ -48,22 +51,29 @@ void prune_packed_objects(int dryrun) d =opendir (pathname);if (!d)continue ; -prune_dir (i, d, pathname, len +3 , dryrun); +prune_dir (i, d, pathname, len +3 , opts);closedir (d); +if (opts ==VERBOSE ) +fprintf (stderr,"Prune-packed %d%%...\015" , + ((i+1 ) *100 ) /256 ); } +if (opts ==VERBOSE ) +fprintf (stderr,"\nDone.\n" ); }int cmd_prune_packed (int argc,const char **argv,const char *prefix) {int i; -int dryrun =0 ; +int opts =VERBOSE ;for (i =1 ; i < argc; i++) {const char *arg = argv[i];if (*arg =='-' ) {if (!strcmp (arg,"-n" )) - dryrun =1 ; + opts |=DRY_RUN ; +else if (!strcmp (arg,"-q" )) + opts &= ~VERBOSE ;else usage (prune_packed_usage);continue ;
@@ -72,6 +82,6 @@ int cmd_prune_packed(int argc, const char **argv, const char *prefix)usage (prune_packed_usage); }sync (); -prune_packed_objects (dryrun); +prune_packed_objects (opts);return 0 ; }