|
|
|
@ -443,6 +443,7 @@ void prepare_alt_odb(void)
@@ -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)
@@ -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; |
|
|
|
|
} |
|
|
|
|