Follow the same logic as for loose objects when removing stale packs: they might be in use (for example when fetching, or repacking in a cron job), so give the user a chance to say (via --expire) what is considered too young an age to die for stale packs. Also add a simple test to verify that the stale packs are actually expired. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- On Tue, 5 Feb 2008, Nicolas Pitre wrote: > On Tue, 5 Feb 2008, David Steven Tweed wrote: > > > @@ -115,5 +139,6 @@ int cmd_prune(int argc, const char **argv, > > const char *prefix) > > > > sync(); > > prune_packed_objects(show_only); > > + remove_temporary_files(); > > Maybe you could implement the "show_only" mode for > remove_temporary_files() as well? Otherwise the -n option would > not be respected. > > Also you should consider honoring the --expire option as well. How about this on top of David's patch? builtin-prune.c | 9 ++++++++- t/t5304-prune.sh | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletions(-) create mode 100644 t/t5304-prune.sh diff --git a/builtin-prune.c b/builtin-prune.c index 9152984..d5a3b60 100644 --- a/builtin-prune.c +++ b/builtin-prune.c @@ -100,7 +100,14 @@ static void remove_temporary_files(void) if (strncmp(de->d_name, "tmp_", 4) == 0) { char name[4096]; sprintf(name, "%s/%s", dirname, de->d_name); - printf("Removing abandoned pack %s\n", name); + if (expire) { + struct stat st; + if (stat(name, &st) || st.st_mtime >= expire) + continue; + } + printf("Removing stale pack %s\n", name); + if (show_only) + continue; unlink(name); } } diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh new file mode 100644 index 0000000..6560af7 --- /dev/null +++ b/t/t5304-prune.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Copyright (c) 2008 Johannes E. Schindelin +# + +test_description='prune' +. ./test-lib.sh + +test_expect_success setup ' + + : > file && + git add file && + test_tick && + git commit -m initial && + git gc + +' + +test_expect_success 'prune stale packs' ' + + orig_pack=$(echo .git/objects/pack/*.pack) && + : > .git/objects/tmp_1.pack && + : > .git/objects/tmp_2.pack && + test-chmtime -86501 .git/objects/tmp_1.pack && + git prune --expire 1.day && + test -f $orig_pack && + test -f .git/objects/tmp_2.pack && + ! test -f .git/objects/tmp_1.pack + +' + +test_done -- 1.5.4.1230.g4ecf8 - 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