|
|
|
@ -13,7 +13,7 @@ static const char * const prune_usage[] = {
@@ -13,7 +13,7 @@ static const char * const prune_usage[] = {
|
|
|
|
|
static int show_only; |
|
|
|
|
static unsigned long expire; |
|
|
|
|
|
|
|
|
|
static int prune_tmp_object(char *path, const char *filename) |
|
|
|
|
static int prune_tmp_object(const char *path, const char *filename) |
|
|
|
|
{ |
|
|
|
|
const char *fullpath = mkpath("%s/%s", path, filename); |
|
|
|
|
if (expire) { |
|
|
|
@ -110,24 +110,22 @@ static void prune_object_dir(const char *path)
@@ -110,24 +110,22 @@ static void prune_object_dir(const char *path)
|
|
|
|
|
/* |
|
|
|
|
* Write errors (particularly out of space) can result in |
|
|
|
|
* failed temporary packs (and more rarely indexes and other |
|
|
|
|
* files begining with "tmp_") accumulating in the |
|
|
|
|
* object directory. |
|
|
|
|
* files begining with "tmp_") accumulating in the object |
|
|
|
|
* and the pack directories. |
|
|
|
|
*/ |
|
|
|
|
static void remove_temporary_files(void) |
|
|
|
|
static void remove_temporary_files(const char *path) |
|
|
|
|
{ |
|
|
|
|
DIR *dir; |
|
|
|
|
struct dirent *de; |
|
|
|
|
char* dirname=get_object_directory(); |
|
|
|
|
|
|
|
|
|
dir = opendir(dirname); |
|
|
|
|
dir = opendir(path); |
|
|
|
|
if (!dir) { |
|
|
|
|
fprintf(stderr, "Unable to open object directory %s\n", |
|
|
|
|
dirname); |
|
|
|
|
fprintf(stderr, "Unable to open directory %s\n", path); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
while ((de = readdir(dir)) != NULL) |
|
|
|
|
if (!prefixcmp(de->d_name, "tmp_")) |
|
|
|
|
prune_tmp_object(dirname, de->d_name); |
|
|
|
|
prune_tmp_object(path, de->d_name); |
|
|
|
|
closedir(dir); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -141,6 +139,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
@@ -141,6 +139,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
|
|
|
|
|
"expire objects older than <time>"), |
|
|
|
|
OPT_END() |
|
|
|
|
}; |
|
|
|
|
char *s; |
|
|
|
|
|
|
|
|
|
save_commit_buffer = 0; |
|
|
|
|
init_revisions(&revs, prefix); |
|
|
|
@ -163,6 +162,9 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
@@ -163,6 +162,9 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
|
|
|
|
|
prune_object_dir(get_object_directory()); |
|
|
|
|
|
|
|
|
|
prune_packed_objects(show_only); |
|
|
|
|
remove_temporary_files(); |
|
|
|
|
remove_temporary_files(get_object_directory()); |
|
|
|
|
s = xstrdup(mkpath("%s/pack", get_object_directory())); |
|
|
|
|
remove_temporary_files(s); |
|
|
|
|
free(s); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|