зеркало из https://github.com/microsoft/git.git
builtin-prune.c: prune temporary packs in <object_dir>/pack directory
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
8b4eb6b6cd
Коммит
db87e3960c
|
@ -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)
|
|||
/*
|
||||
* 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)
|
|||
"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)
|
|||
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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче