From: Eric Wong <e@80x24•org>
To: Andreas Schwab <schwab@linux-m68k•org>
Cc: Junio C Hamano <gitster@pobox•com>, git@vger•kernel.org
Subject: Re: [PATCH] prune: keep files created after process start
Date: Sun, 19 Jun 2016 08:48:37 +0000 [thread overview]
Message-ID: <20160619084837.GA22090@dcvr.yhbt.net> (raw)
In-Reply-To: <m2wpllhcut.fsf@linux-m68k.org>
Andreas Schwab <schwab@linux-m68k•org> wrote:
> Eric Wong <e@80x24•org> writes:
>
> > @@ -21,7 +22,7 @@ static int prune_tmp_file(const char *fullpath)
> > struct stat st;
> > if (lstat(fullpath, &st))
> > return error("Could not stat '%s'", fullpath);
> > - if (st.st_mtime > expire)
> > + if (st.st_mtime > expire || st.st_ctime >= start)
>
> That will also mean objects created (or their inode changed) up to a
> second before the start of prune will not be removed. For example,
> objects ejected out of a pack by a previous repack may be affected.
True, but I prefer to err on the side of keeping data rather than
removing it. But keeping it can also be a liability (as it was
in my case :) So, perhaps warn users instead:
diff --git a/builtin/prune.c b/builtin/prune.c
index d4cd054..c1642d1 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -16,14 +16,22 @@ static int verbose;
static unsigned long expire;
static time_t start;
static int show_progress = -1;
+static unsigned long ctime_matches;
static int prune_tmp_file(const char *fullpath)
{
struct stat st;
if (lstat(fullpath, &st))
return error("Could not stat '%s'", fullpath);
- if (st.st_mtime > expire || st.st_ctime >= start)
+ if (st.st_mtime > expire || st.st_ctime > start)
return 0;
+
+ if (st.st_ctime == start) {
+ ctime_matches++;
+ warning("Keeping %s since it changed as we started", fullpath);
+ return 0;
+ }
+
if (show_only || verbose)
printf("Removing stale temporary file %s\n", fullpath);
if (!show_only)
@@ -48,8 +56,13 @@ static int prune_object(const unsigned char *sha1, const char *fullpath,
error("Could not stat '%s'", fullpath);
return 0;
}
- if (st.st_mtime > expire || st.st_ctime >= start)
+ if (st.st_mtime > expire || st.st_ctime > start)
return 0;
+ if (st.st_ctime == start) {
+ ctime_matches++;
+ warning("Keeping %s since it changed as we started", fullpath);
+ return 0;
+ }
if (show_only || verbose) {
enum object_type type = sha1_object_info(sha1, NULL);
printf("%s %s\n", sha1_to_hex(sha1),
@@ -155,5 +168,12 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
if (is_repository_shallow())
prune_shallow(show_only);
+ if (ctime_matches) {
+ warning("%lu files kept since they changed as prune started",
+ ctime_matches);
+ warning("rerun prune after %s",
+ show_date(start, 0, DATE_MODE(NORMAL)));
+ }
+
return 0;
}
prev parent reply other threads:[~2016-06-19 8:48 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-19 3:13 [PATCH] prune: keep files created after process start Eric Wong
2016-06-19 3:58 ` Junio C Hamano
2016-06-19 4:32 ` Eric Wong
2016-06-19 9:34 ` Jeff King
2016-06-19 7:11 ` Andreas Schwab
2016-06-19 8:48 ` Eric Wong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160619084837.GA22090@dcvr.yhbt.net \
--to=e@80x24$(echo .)org \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
--cc=schwab@linux-m68k$(echo .)org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox