X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=builtin-prune.c;h=b5e768421ba548efaf0dd62ca876c15911df55d2;hb=68e6a4f80d4bea2d281c30fa2bbcd4968b0ccc4e;hp=44df59e4a70f84cdebac94f2591765ada8d4b92d;hpb=c288a2f1316b642ff073d4213cf691297610503c;p=git.git diff --git a/builtin-prune.c b/builtin-prune.c index 44df59e4a..b5e768421 100644 --- a/builtin-prune.c +++ b/builtin-prune.c @@ -7,15 +7,24 @@ static const char prune_usage[] = "git-prune [-n]"; static int show_only; +static unsigned long expire; static int prune_object(char *path, const char *filename, const unsigned char *sha1) { + 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; + } if (show_only) { enum object_type type = sha1_object_info(sha1, NULL); printf("%s %s\n", sha1_to_hex(sha1), (type > 0) ? typename(type) : "unknown"); } else - unlink(mkpath("%s/%s", path, filename)); + unlink(fullpath); return 0; } @@ -85,6 +94,16 @@ int cmd_prune(int argc, const char **argv, const char *prefix) show_only = 1; continue; } + if (!strcmp(arg, "--expire")) { + if (++i < argc) { + expire = approxidate(argv[i]); + continue; + } + } + else if (!prefixcmp(arg, "--expire=")) { + expire = approxidate(arg + 9); + continue; + } usage(prune_usage); }