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:
Junio C Hamano 2008-09-23 02:05:35 -07:00
commit c4275591fb
5 changed files with 17 additions and 15 deletions

View File

@ -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);

View File

@ -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;
} }

View File

@ -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));

View File

@ -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

View File

@ -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 {