aboutsummaryrefslogtreecommitdiff
path: root/guix/git.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-06-11 23:32:45 +0200
committerLudovic Courtès <ludo@gnu.org>2021-06-12 00:49:32 +0200
commitbaf0a4288264098ede43e4f7cd099a29fcf35be4 (patch)
tree48f3e4bdfe67ef7f287530c9587dad49cf2990e7 /guix/git.scm
parent6a9abdcd5db7621a451af310c9a42a9bbfb228d6 (diff)
downloadguix-baf0a4288264098ede43e4f7cd099a29fcf35be4.tar
guix-baf0a4288264098ede43e4f7cd099a29fcf35be4.tar.gz
git: Update the mtime of the just-updated checkout.
Reported by zimoun <zimon.toutoune@gmail.com>. Previously, the mtime of CACHE-DIRECTORY may or may not have been updated after a pull. Thus, 'maybe-remove-expired-cache-entries' could potentially delete CACHE-DIRECTORY right before it's returned. * guix/git.scm (update-cached-checkout): Call 'utime' on CACHE-DIRECTORY.
Diffstat (limited to 'guix/git.scm')
-rw-r--r--guix/git.scm8
1 files changed, 8 insertions, 0 deletions
diff --git a/guix/git.scm b/guix/git.scm
index 57fa2ca1ee..9c6f326c36 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -424,6 +424,14 @@ it unchanged."
;; REPOSITORY as soon as possible.
(repository-close! repository)
+ ;; Update CACHE-DIRECTORY's mtime to so the cache logic sees it.
+ (match (gettimeofday)
+ ((seconds . microseconds)
+ (let ((nanoseconds (* 1000 microseconds)))
+ (utime cache-directory
+ seconds seconds
+ nanoseconds nanoseconds))))
+
;; When CACHE-DIRECTORY is a sub-directory of the default cache
;; directory, remove expired checkouts that are next to it.
(let ((parent (dirname cache-directory)))