[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
08/10: git: 'update-cached-checkout' returns the commit relation.
From: |
guix-commits |
Subject: |
08/10: git: 'update-cached-checkout' returns the commit relation. |
Date: |
Sun, 24 May 2020 18:00:53 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 8d1d56578aa95118650ed2197bfb7fac40f4218a
Author: Ludovic Courtès <address@hidden>
AuthorDate: Wed May 20 17:57:54 2020 +0200
git: 'update-cached-checkout' returns the commit relation.
* guix/git.scm (update-cached-checkout): Add #:starting-commit
parameter. Call 'commit-relation' when #:starting-commit is true.
Always return the relation or #f as the third value.
(latest-repository-commit): Adjust accordingly.
* guix/import/opam.scm (get-opam-repository): Likewise.
* tests/channels.scm ("latest-channel-instances includes channel
dependencies")
("latest-channel-instances excludes duplicate channel dependencies"):
Update mock of 'update-cached-checkout' accordingly.
---
guix/channels.scm | 2 +-
guix/git.scm | 22 +++++++++++++++++-----
guix/import/opam.scm | 2 +-
tests/channels.scm | 12 ++++++------
4 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/guix/channels.scm b/guix/channels.scm
index e0a7a84..75b767a 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -218,7 +218,7 @@ result is unspecified."
(and (string=? (basename file) ".git")
(eq? 'directory (stat:type stat))))
- (let-values (((checkout commit)
+ (let-values (((checkout commit relation)
(update-cached-checkout (channel-url channel)
#:ref (channel-reference channel))))
(when (guix-channel? channel)
diff --git a/guix/git.scm b/guix/git.scm
index 249d622..ab3b507 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -262,14 +262,16 @@ definitely available in REPOSITORY, false otherwise."
#:key
(ref '(branch . "master"))
recursive?
+ starting-commit
(log-port (%make-void-port "w"))
(cache-directory
(url-cache-directory
url (%repository-cache-directory)
#:recursive? recursive?)))
- "Update the cached checkout of URL to REF in CACHE-DIRECTORY. Return two
+ "Update the cached checkout of URL to REF in CACHE-DIRECTORY. Return three
values: the cache directory name, and the SHA1 commit (a string) corresponding
-to REF.
+to REF, and the relation of the new commit relative to STARTING-COMMIT (if
+provided) as returned by 'commit-relation'.
REF is pair whose key is [branch | commit | tag | tag-or-commit ] and value
the associated data: [<branch name> | <sha1> | <tag name> | <string>].
@@ -302,7 +304,17 @@ When RECURSIVE? is true, check out submodules as well, if
any."
(remote-fetch (remote-lookup repository "origin"))))
(when recursive?
(update-submodules repository #:log-port log-port))
- (let ((oid (switch-to-ref repository canonical-ref)))
+
+ ;; Note: call 'commit-relation' from here because it's more efficient
+ ;; than letting users re-open the checkout later on.
+ (let* ((oid (switch-to-ref repository canonical-ref))
+ (new (and starting-commit
+ (commit-lookup repository oid)))
+ (old (and starting-commit
+ (commit-lookup repository
+ (string->oid starting-commit))))
+ (relation (and starting-commit
+ (commit-relation old new))))
;; Reclaim file descriptors and memory mappings associated with
;; REPOSITORY as soon as possible.
@@ -310,7 +322,7 @@ When RECURSIVE? is true, check out submodules as well, if
any."
'repository-close!)
(repository-close! repository))
- (values cache-directory (oid->string oid))))))
+ (values cache-directory (oid->string oid) relation)))))
(define* (latest-repository-commit store url
#:key
@@ -343,7 +355,7 @@ Log progress and checkout info to LOG-PORT."
(format log-port "updating checkout of '~a'...~%" url)
(let*-values
- (((checkout commit)
+ (((checkout commit _)
(update-cached-checkout url
#:recursive? recursive?
#:ref ref
diff --git a/guix/import/opam.scm b/guix/import/opam.scm
index ae7df8a..9cda3da 100644
--- a/guix/import/opam.scm
+++ b/guix/import/opam.scm
@@ -115,7 +115,7 @@
(define (get-opam-repository)
"Update or fetch the latest version of the opam repository and return the
path to the repository."
- (receive (location commit)
+ (receive (location commit _)
(update-cached-checkout "https://github.com/ocaml/opam-repository")
location))
diff --git a/tests/channels.scm b/tests/channels.scm
index 910088b..3578b57 100644
--- a/tests/channels.scm
+++ b/tests/channels.scm
@@ -136,11 +136,11 @@
(url "test")))
(test-dir (channel-instance-checkout instance--simple)))
(mock ((guix git) update-cached-checkout
- (lambda* (url #:key ref)
+ (lambda* (url #:key ref starting-commit)
(match url
- ("test" (values test-dir "caf3cabba9e"))
+ ("test" (values test-dir "caf3cabba9e" #f))
(_ (values (channel-instance-checkout instance--no-deps)
- "abcde1234")))))
+ "abcde1234" #f)))))
(with-store store
(let ((instances (latest-channel-instances store (list channel))))
(and (eq? 2 (length instances))
@@ -155,11 +155,11 @@
(url "test")))
(test-dir (channel-instance-checkout instance--with-dupes)))
(mock ((guix git) update-cached-checkout
- (lambda* (url #:key ref)
+ (lambda* (url #:key ref starting-commit)
(match url
- ("test" (values test-dir "caf3cabba9e"))
+ ("test" (values test-dir "caf3cabba9e" #f))
(_ (values (channel-instance-checkout instance--no-deps)
- "abcde1234")))))
+ "abcde1234" #f)))))
(with-store store
(let ((instances (latest-channel-instances store (list channel))))
(and (= 2 (length instances))
- branch master updated (9b572ab -> 9744cc7), guix-commits, 2020/05/24
- 03/10: gnu: guile-dsv: Build with Guile 3.0., guix-commits, 2020/05/24
- 02/10: gnu: guile-dsv: Wrap script., guix-commits, 2020/05/24
- 05/10: gnu: protonvpn-cli: Tweak description., guix-commits, 2020/05/24
- 04/10: gnu: Add protonvpn-cli., guix-commits, 2020/05/24
- 07/10: channels: 'latest-channel-instances' doesn't leak internal state., guix-commits, 2020/05/24
- 01/10: doc: cookbook: Add subsection about session locking with xss-lock., guix-commits, 2020/05/24
- 08/10: git: 'update-cached-checkout' returns the commit relation.,
guix-commits <=
- 10/10: pull: Protect against downgrade attacks., guix-commits, 2020/05/24
- 09/10: channels: 'latest-channel-instances' guards against non-forward updates., guix-commits, 2020/05/24
- 06/10: git: Add 'commit-relation'., guix-commits, 2020/05/24