Merge branch 'maint'
* maint: builtin-prune.c: prune temporary packs in <object_dir>/pack directory Do not perform cross-directory renames when creating packs
This commit is contained in:
commit
c4275591fb
@ -465,7 +465,7 @@ static void write_pack_file(void)
|
|||||||
char tmpname[PATH_MAX];
|
char tmpname[PATH_MAX];
|
||||||
int fd;
|
int fd;
|
||||||
snprintf(tmpname, sizeof(tmpname),
|
snprintf(tmpname, sizeof(tmpname),
|
||||||
"%s/tmp_pack_XXXXXX", get_object_directory());
|
"%s/pack/tmp_pack_XXXXXX", get_object_directory());
|
||||||
fd = xmkstemp(tmpname);
|
fd = xmkstemp(tmpname);
|
||||||
pack_tmp_name = xstrdup(tmpname);
|
pack_tmp_name = xstrdup(tmpname);
|
||||||
f = sha1fd(fd, pack_tmp_name);
|
f = sha1fd(fd, pack_tmp_name);
|
||||||
|
@ -13,7 +13,7 @@ static const char * const prune_usage[] = {
|
|||||||
static int show_only;
|
static int show_only;
|
||||||
static unsigned long expire;
|
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);
|
const char *fullpath = mkpath("%s/%s", path, filename);
|
||||||
if (expire) {
|
if (expire) {
|
||||||
@ -110,24 +110,22 @@ static void prune_object_dir(const char *path)
|
|||||||
/*
|
/*
|
||||||
* Write errors (particularly out of space) can result in
|
* Write errors (particularly out of space) can result in
|
||||||
* failed temporary packs (and more rarely indexes and other
|
* failed temporary packs (and more rarely indexes and other
|
||||||
* files begining with "tmp_") accumulating in the
|
* files begining with "tmp_") accumulating in the object
|
||||||
* object directory.
|
* and the pack directories.
|
||||||
*/
|
*/
|
||||||
static void remove_temporary_files(void)
|
static void remove_temporary_files(const char *path)
|
||||||
{
|
{
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
char* dirname=get_object_directory();
|
|
||||||
|
|
||||||
dir = opendir(dirname);
|
dir = opendir(path);
|
||||||
if (!dir) {
|
if (!dir) {
|
||||||
fprintf(stderr, "Unable to open object directory %s\n",
|
fprintf(stderr, "Unable to open directory %s\n", path);
|
||||||
dirname);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
while ((de = readdir(dir)) != NULL)
|
while ((de = readdir(dir)) != NULL)
|
||||||
if (!prefixcmp(de->d_name, "tmp_"))
|
if (!prefixcmp(de->d_name, "tmp_"))
|
||||||
prune_tmp_object(dirname, de->d_name);
|
prune_tmp_object(path, de->d_name);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,6 +139,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
|
|||||||
"expire objects older than <time>"),
|
"expire objects older than <time>"),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
char *s;
|
||||||
|
|
||||||
save_commit_buffer = 0;
|
save_commit_buffer = 0;
|
||||||
init_revisions(&revs, prefix);
|
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_object_dir(get_object_directory());
|
||||||
|
|
||||||
prune_packed_objects(show_only);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -816,7 +816,7 @@ static void start_packfile(void)
|
|||||||
int pack_fd;
|
int pack_fd;
|
||||||
|
|
||||||
snprintf(tmpfile, sizeof(tmpfile),
|
snprintf(tmpfile, sizeof(tmpfile),
|
||||||
"%s/tmp_pack_XXXXXX", get_object_directory());
|
"%s/pack/tmp_pack_XXXXXX", get_object_directory());
|
||||||
pack_fd = xmkstemp(tmpfile);
|
pack_fd = xmkstemp(tmpfile);
|
||||||
p = xcalloc(1, sizeof(*p) + strlen(tmpfile) + 2);
|
p = xcalloc(1, sizeof(*p) + strlen(tmpfile) + 2);
|
||||||
strcpy(p->pack_name, tmpfile);
|
strcpy(p->pack_name, tmpfile);
|
||||||
@ -878,7 +878,7 @@ static char *create_index(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
snprintf(tmpfile, sizeof(tmpfile),
|
snprintf(tmpfile, sizeof(tmpfile),
|
||||||
"%s/tmp_idx_XXXXXX", get_object_directory());
|
"%s/pack/tmp_idx_XXXXXX", get_object_directory());
|
||||||
idx_fd = xmkstemp(tmpfile);
|
idx_fd = xmkstemp(tmpfile);
|
||||||
f = sha1fd(idx_fd, tmpfile);
|
f = sha1fd(idx_fd, tmpfile);
|
||||||
sha1write(f, array, 256 * sizeof(int));
|
sha1write(f, array, 256 * sizeof(int));
|
||||||
|
@ -172,7 +172,7 @@ static char *open_pack_file(char *pack_name)
|
|||||||
if (!pack_name) {
|
if (!pack_name) {
|
||||||
static char tmpfile[PATH_MAX];
|
static char tmpfile[PATH_MAX];
|
||||||
snprintf(tmpfile, sizeof(tmpfile),
|
snprintf(tmpfile, sizeof(tmpfile),
|
||||||
"%s/tmp_pack_XXXXXX", get_object_directory());
|
"%s/pack/tmp_pack_XXXXXX", get_object_directory());
|
||||||
output_fd = xmkstemp(tmpfile);
|
output_fd = xmkstemp(tmpfile);
|
||||||
pack_name = xstrdup(tmpfile);
|
pack_name = xstrdup(tmpfile);
|
||||||
} else
|
} else
|
||||||
|
@ -45,7 +45,7 @@ char *write_idx_file(char *index_name, struct pack_idx_entry **objects,
|
|||||||
if (!index_name) {
|
if (!index_name) {
|
||||||
static char tmpfile[PATH_MAX];
|
static char tmpfile[PATH_MAX];
|
||||||
snprintf(tmpfile, sizeof(tmpfile),
|
snprintf(tmpfile, sizeof(tmpfile),
|
||||||
"%s/tmp_idx_XXXXXX", get_object_directory());
|
"%s/pack/tmp_idx_XXXXXX", get_object_directory());
|
||||||
fd = xmkstemp(tmpfile);
|
fd = xmkstemp(tmpfile);
|
||||||
index_name = xstrdup(tmpfile);
|
index_name = xstrdup(tmpfile);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user