From: Junio C Hamano Date: Fri, 10 Jul 2015 21:26:14 +0000 (-0700) Subject: Merge branch 'jk/fix-refresh-utime' X-Git-Tag: v2.5.0-rc2~13 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/1f9e0a53489aaca7859722e037a47e93858cbc42?hp=a745a58adeb57107ed884bcc07c915409b9877cb Merge branch 'jk/fix-refresh-utime' Fix a small bug in our use of umask() return value. * jk/fix-refresh-utime: check_and_freshen_file: fix reversed success-check --- diff --git a/sha1_file.c b/sha1_file.c index c0205a0cb2..1cee438422 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -443,6 +443,7 @@ void prepare_alt_odb(void) read_info_alternates(get_object_directory(), 0); } +/* Returns 1 if we have successfully freshened the file, 0 otherwise. */ static int freshen_file(const char *fn) { struct utimbuf t; @@ -450,11 +451,18 @@ static int freshen_file(const char *fn) return !utime(fn, &t); } +/* + * All of the check_and_freshen functions return 1 if the file exists and was + * freshened (if freshening was requested), 0 otherwise. If they return + * 0, you should not assume that it is safe to skip a write of the object (it + * either does not exist on disk, or has a stale mtime and may be subject to + * pruning). + */ static int check_and_freshen_file(const char *fn, int freshen) { if (access(fn, F_OK)) return 0; - if (freshen && freshen_file(fn)) + if (freshen && !freshen_file(fn)) return 0; return 1; }