git: Don't require users to specifiy "origin/" for branches.

Fixes <https://bugs.gnu.org/32618>.
Reported by Eric Brown <brown@fastmail.com>.

* guix/git.scm (update-cached-checkout): Remove "origin/" from default
REF.  Define CANONICAL-REF and use it instead of REF.
(latest-repository-commit): Remove "origin/" from default REF.
* guix/channels.scm (%default-channels): Remove "origin/" from
'branch'.
This commit is contained in:
Ludovic Courtès 2018-09-05 23:31:51 +02:00
parent cb341c1219
commit 37a6cdbf1b
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 15 additions and 4 deletions

View File

@ -78,7 +78,7 @@
;; Default list of channels.
(list (channel
(name 'guix)
(branch "origin/master")
(branch "master")
(url "https://git.savannah.gnu.org/git/guix.git"))))
(define (guix-channel? channel)

View File

@ -112,7 +112,7 @@ OID (roughly the commit hash) corresponding to REF."
(define* (update-cached-checkout url
#:key
(ref '(branch . "origin/master"))
(ref '(branch . "master"))
(cache-directory
(url-cache-directory
url (%repository-cache-directory))))
@ -122,6 +122,17 @@ to REF.
REF is pair whose key is [branch | commit | tag] and value the associated
data, respectively [<branch name> | <sha1> | <tag name>]."
(define canonical-ref
;; We used to require callers to specify "origin/" for each branch, which
;; made little sense since the cache should be transparent to them. So
;; here we append "origin/" if it's missing and otherwise keep it.
(match ref
(('branch . branch)
`(branch . ,(if (string-prefix? "origin/" branch)
branch
(string-append "origin/" branch))))
(_ ref)))
(with-libgit2
(let* ((cache-exists? (openable-repository? cache-directory))
(repository (if cache-exists?
@ -130,7 +141,7 @@ data, respectively [<branch name> | <sha1> | <tag name>]."
;; Only fetch remote if it has not been cloned just before.
(when cache-exists?
(remote-fetch (remote-lookup repository "origin")))
(let ((oid (switch-to-ref repository ref)))
(let ((oid (switch-to-ref repository canonical-ref)))
;; Reclaim file descriptors and memory mappings associated with
;; REPOSITORY as soon as possible.
@ -144,7 +155,7 @@ data, respectively [<branch name> | <sha1> | <tag name>]."
#:key
(cache-directory
(%repository-cache-directory))
(ref '(branch . "origin/master")))
(ref '(branch . "master")))
"Return two values: the content of the git repository at URL copied into a
store directory and the sha1 of the top level commit in this directory. The
reference to be checkout, once the repository is fetched, is specified by REF.