diff options
author | Brandon Casey <casey@nrlssc.navy.mil> | 2008-07-24 17:41:12 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-07-24 23:08:07 -0700 |
commit | 0e8316cc16f1a938c36f12f5fcae4a081b6ec6ff (patch) | |
tree | 8bd5d7b24dcbd30ab5ef7c2581bea279405528c2 | |
parent | 186458b11b090835fa793bcdbf6b5552b053276c (diff) | |
download | git-0e8316cc16f1a938c36f12f5fcae4a081b6ec6ff.tar.gz |
Teach fsck and prune about the new location of temporary objects
Since 5723fe7e, temporary objects are now created in their final destination
directories, rather than in .git/objects/. Teach fsck to recognize and
ignore the temporary objects it encounters, and teach prune to remove them.
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-fsck.c | 4 | ||||
-rw-r--r-- | builtin-prune.c | 41 |
2 files changed, 28 insertions, 17 deletions
diff --git a/builtin-fsck.c b/builtin-fsck.c index 7326dc33a5..7a4a4f144f 100644 --- a/builtin-fsck.c +++ b/builtin-fsck.c @@ -377,6 +377,10 @@ static void fsck_dir(int i, char *path) if (de->d_name[0] != '.') break; continue; + case 14: + if (prefixcmp(de->d_name, "tmp_obj_")) + break; + continue; case 38: sprintf(name, "%02x", i); memcpy(name+2, de->d_name, len+1); diff --git a/builtin-prune.c b/builtin-prune.c index 7de4cabe07..947de8cf25 100644 --- a/builtin-prune.c +++ b/builtin-prune.c @@ -13,6 +13,22 @@ static const char * const prune_usage[] = { static int show_only; static unsigned long expire; +static int prune_tmp_object(char *path, const char *filename) +{ + const char *fullpath = mkpath("%s/%s", path, filename); + if (expire) { + struct stat st; + if (lstat(fullpath, &st)) + return error("Could not stat '%s'", fullpath); + if (st.st_mtime > expire) + return 0; + } + printf("Removing stale temporary file %s\n", fullpath); + if (!show_only) + unlink(fullpath); + return 0; +} + static int prune_object(char *path, const char *filename, const unsigned char *sha1) { const char *fullpath = mkpath("%s/%s", path, filename); @@ -53,6 +69,11 @@ static int prune_dir(int i, char *path) if (de->d_name[0] != '.') break; continue; + case 14: + if (prefixcmp(de->d_name, "tmp_obj_")) + break; + prune_tmp_object(path, de->d_name); + continue; case 38: sprintf(name, "%02x", i); memcpy(name+2, de->d_name, len+1); @@ -105,23 +126,9 @@ static void remove_temporary_files(void) dirname); return; } - while ((de = readdir(dir)) != NULL) { - if (!prefixcmp(de->d_name, "tmp_")) { - char name[PATH_MAX]; - int c = snprintf(name, PATH_MAX, "%s/%s", - dirname, de->d_name); - if (c < 0 || c >= PATH_MAX) - continue; - if (expire) { - struct stat st; - if (stat(name, &st) != 0 || st.st_mtime >= expire) - continue; - } - printf("Removing stale temporary file %s\n", name); - if (!show_only) - unlink(name); - } - } + while ((de = readdir(dir)) != NULL) + if (!prefixcmp(de->d_name, "tmp_")) + prune_tmp_object(dirname, de->d_name); closedir(dir); } |