describe: Remove dependency on (guix scripts pull).
Until now, 'guix describe' would perform ~3K stat calls and ~1K openat calls because it was pulling (guix scripts pull), which in turn pulls in many (gnu packages …) modules. * guix/scripts/pull.scm (display-profile-content, %vcs-web-views) (channel-commit-hyperlink): Move to... * guix/scripts/describe.scm: ... here. Remove import of (guix scripts pull).
This commit is contained in:
parent
1deca767be
commit
1d88470e10
2 changed files with 82 additions and 78 deletions
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
|
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
|
@ -20,18 +20,22 @@
|
||||||
(define-module (guix scripts describe)
|
(define-module (guix scripts describe)
|
||||||
#:use-module ((guix config) #:select (%guix-version))
|
#:use-module ((guix config) #:select (%guix-version))
|
||||||
#:use-module ((guix ui) #:hide (display-profile-content))
|
#:use-module ((guix ui) #:hide (display-profile-content))
|
||||||
|
#:use-module ((guix utils) #:select (string-replace-substring))
|
||||||
#:use-module (guix channels)
|
#:use-module (guix channels)
|
||||||
#:use-module (guix scripts)
|
#:use-module (guix scripts)
|
||||||
#:use-module (guix describe)
|
#:use-module (guix describe)
|
||||||
#:use-module (guix profiles)
|
#:use-module (guix profiles)
|
||||||
#:use-module ((guix scripts pull) #:select (display-profile-content))
|
|
||||||
#:use-module (git)
|
#:use-module (git)
|
||||||
#:use-module (json)
|
#:use-module (json)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-37)
|
#:use-module (srfi srfi-37)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:autoload (ice-9 pretty-print) (pretty-print)
|
#:autoload (ice-9 pretty-print) (pretty-print)
|
||||||
#:export (guix-describe))
|
#:use-module (web uri)
|
||||||
|
#:export (display-profile-content
|
||||||
|
channel-commit-hyperlink
|
||||||
|
|
||||||
|
guix-describe))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
@ -173,6 +177,76 @@ in the format specified by FMT."
|
||||||
channels))))
|
channels))))
|
||||||
(display-package-search-path fmt))
|
(display-package-search-path fmt))
|
||||||
|
|
||||||
|
(define (display-profile-content profile number)
|
||||||
|
"Display the packages in PROFILE, generation NUMBER, in a human-readable
|
||||||
|
way and displaying details about the channel's source code."
|
||||||
|
(display-generation profile number)
|
||||||
|
(for-each (lambda (entry)
|
||||||
|
(format #t " ~a ~a~%"
|
||||||
|
(manifest-entry-name entry)
|
||||||
|
(manifest-entry-version entry))
|
||||||
|
(match (assq 'source (manifest-entry-properties entry))
|
||||||
|
(('source ('repository ('version 0)
|
||||||
|
('url url)
|
||||||
|
('branch branch)
|
||||||
|
('commit commit)
|
||||||
|
_ ...))
|
||||||
|
(let ((channel (channel (name 'nameless)
|
||||||
|
(url url)
|
||||||
|
(branch branch)
|
||||||
|
(commit commit))))
|
||||||
|
(format #t (G_ " repository URL: ~a~%") url)
|
||||||
|
(when branch
|
||||||
|
(format #t (G_ " branch: ~a~%") branch))
|
||||||
|
(format #t (G_ " commit: ~a~%")
|
||||||
|
(if (supports-hyperlinks?)
|
||||||
|
(channel-commit-hyperlink channel commit)
|
||||||
|
commit))))
|
||||||
|
(_ #f)))
|
||||||
|
|
||||||
|
;; Show most recently installed packages last.
|
||||||
|
(reverse
|
||||||
|
(manifest-entries
|
||||||
|
(profile-manifest (if (zero? number)
|
||||||
|
profile
|
||||||
|
(generation-file-name profile number)))))))
|
||||||
|
|
||||||
|
(define %vcs-web-views
|
||||||
|
;; Hard-coded list of host names and corresponding web view URL templates.
|
||||||
|
;; TODO: Allow '.guix-channel' files to specify a URL template.
|
||||||
|
(let ((labhub-url (lambda (repository-url commit)
|
||||||
|
(string-append
|
||||||
|
(if (string-suffix? ".git" repository-url)
|
||||||
|
(string-drop-right repository-url 4)
|
||||||
|
repository-url)
|
||||||
|
"/commit/" commit))))
|
||||||
|
`(("git.savannah.gnu.org"
|
||||||
|
,(lambda (repository-url commit)
|
||||||
|
(string-append (string-replace-substring repository-url
|
||||||
|
"/git/" "/cgit/")
|
||||||
|
"/commit/?id=" commit)))
|
||||||
|
("notabug.org" ,labhub-url)
|
||||||
|
("framagit.org" ,labhub-url)
|
||||||
|
("gitlab.com" ,labhub-url)
|
||||||
|
("gitlab.inria.fr" ,labhub-url)
|
||||||
|
("github.com" ,labhub-url))))
|
||||||
|
|
||||||
|
(define* (channel-commit-hyperlink channel
|
||||||
|
#:optional
|
||||||
|
(commit (channel-commit channel)))
|
||||||
|
"Return a hyperlink for COMMIT in CHANNEL, using COMMIT as the hyperlink's
|
||||||
|
text. The hyperlink links to a web view of COMMIT, when available."
|
||||||
|
(let* ((url (channel-url channel))
|
||||||
|
(uri (string->uri url))
|
||||||
|
(host (and uri (uri-host uri))))
|
||||||
|
(if host
|
||||||
|
(match (assoc host %vcs-web-views)
|
||||||
|
(#f
|
||||||
|
commit)
|
||||||
|
((_ template)
|
||||||
|
(hyperlink (template url commit) commit)))
|
||||||
|
commit)))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; Entry point.
|
;;; Entry point.
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (guix scripts pull)
|
(define-module (guix scripts pull)
|
||||||
#:use-module (guix ui)
|
#:use-module ((guix ui) #:hide (display-profile-content))
|
||||||
#:use-module (guix colors)
|
#:use-module (guix colors)
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
#:use-module ((guix status) #:select (with-status-verbosity))
|
#:use-module ((guix status) #:select (with-status-verbosity))
|
||||||
|
@ -37,6 +37,7 @@
|
||||||
inferior-available-packages
|
inferior-available-packages
|
||||||
close-inferior)
|
close-inferior)
|
||||||
#:use-module (guix scripts build)
|
#:use-module (guix scripts build)
|
||||||
|
#:use-module (guix scripts describe)
|
||||||
#:autoload (guix build utils) (which)
|
#:autoload (guix build utils) (which)
|
||||||
#:use-module ((guix build syscalls)
|
#:use-module ((guix build syscalls)
|
||||||
#:select (with-file-lock/no-wait))
|
#:select (with-file-lock/no-wait))
|
||||||
|
@ -56,13 +57,12 @@
|
||||||
#:use-module (srfi srfi-34)
|
#:use-module (srfi srfi-34)
|
||||||
#:use-module (srfi srfi-35)
|
#:use-module (srfi srfi-35)
|
||||||
#:use-module (srfi srfi-37)
|
#:use-module (srfi srfi-37)
|
||||||
#:use-module (web uri)
|
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 vlist)
|
#:use-module (ice-9 vlist)
|
||||||
#:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
#:export (display-profile-content
|
#:re-export (display-profile-content
|
||||||
channel-list
|
channel-commit-hyperlink)
|
||||||
channel-commit-hyperlink
|
#:export (channel-list
|
||||||
with-git-error-handling
|
with-git-error-handling
|
||||||
guix-pull))
|
guix-pull))
|
||||||
|
|
||||||
|
@ -188,42 +188,6 @@ Download and deploy the latest version of Guix.\n"))
|
||||||
|
|
||||||
%standard-build-options))
|
%standard-build-options))
|
||||||
|
|
||||||
(define %vcs-web-views
|
|
||||||
;; Hard-coded list of host names and corresponding web view URL templates.
|
|
||||||
;; TODO: Allow '.guix-channel' files to specify a URL template.
|
|
||||||
(let ((labhub-url (lambda (repository-url commit)
|
|
||||||
(string-append
|
|
||||||
(if (string-suffix? ".git" repository-url)
|
|
||||||
(string-drop-right repository-url 4)
|
|
||||||
repository-url)
|
|
||||||
"/commit/" commit))))
|
|
||||||
`(("git.savannah.gnu.org"
|
|
||||||
,(lambda (repository-url commit)
|
|
||||||
(string-append (string-replace-substring repository-url
|
|
||||||
"/git/" "/cgit/")
|
|
||||||
"/commit/?id=" commit)))
|
|
||||||
("notabug.org" ,labhub-url)
|
|
||||||
("framagit.org" ,labhub-url)
|
|
||||||
("gitlab.com" ,labhub-url)
|
|
||||||
("gitlab.inria.fr" ,labhub-url)
|
|
||||||
("github.com" ,labhub-url))))
|
|
||||||
|
|
||||||
(define* (channel-commit-hyperlink channel
|
|
||||||
#:optional
|
|
||||||
(commit (channel-commit channel)))
|
|
||||||
"Return a hyperlink for COMMIT in CHANNEL, using COMMIT as the hyperlink's
|
|
||||||
text. The hyperlink links to a web view of COMMIT, when available."
|
|
||||||
(let* ((url (channel-url channel))
|
|
||||||
(uri (string->uri url))
|
|
||||||
(host (and uri (uri-host uri))))
|
|
||||||
(if host
|
|
||||||
(match (assoc host %vcs-web-views)
|
|
||||||
(#f
|
|
||||||
commit)
|
|
||||||
((_ template)
|
|
||||||
(hyperlink (template url commit) commit)))
|
|
||||||
commit)))
|
|
||||||
|
|
||||||
(define* (display-profile-news profile #:key concise?
|
(define* (display-profile-news profile #:key concise?
|
||||||
current-is-newer?)
|
current-is-newer?)
|
||||||
"Display what's up in PROFILE--new packages, and all that. If
|
"Display what's up in PROFILE--new packages, and all that. If
|
||||||
|
@ -559,40 +523,6 @@ true, display what would be built without actually building it."
|
||||||
;;; Queries.
|
;;; Queries.
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
(define (display-profile-content profile number)
|
|
||||||
"Display the packages in PROFILE, generation NUMBER, in a human-readable
|
|
||||||
way and displaying details about the channel's source code."
|
|
||||||
(display-generation profile number)
|
|
||||||
(for-each (lambda (entry)
|
|
||||||
(format #t " ~a ~a~%"
|
|
||||||
(manifest-entry-name entry)
|
|
||||||
(manifest-entry-version entry))
|
|
||||||
(match (assq 'source (manifest-entry-properties entry))
|
|
||||||
(('source ('repository ('version 0)
|
|
||||||
('url url)
|
|
||||||
('branch branch)
|
|
||||||
('commit commit)
|
|
||||||
_ ...))
|
|
||||||
(let ((channel (channel (name 'nameless)
|
|
||||||
(url url)
|
|
||||||
(branch branch)
|
|
||||||
(commit commit))))
|
|
||||||
(format #t (G_ " repository URL: ~a~%") url)
|
|
||||||
(when branch
|
|
||||||
(format #t (G_ " branch: ~a~%") branch))
|
|
||||||
(format #t (G_ " commit: ~a~%")
|
|
||||||
(if (supports-hyperlinks?)
|
|
||||||
(channel-commit-hyperlink channel commit)
|
|
||||||
commit))))
|
|
||||||
(_ #f)))
|
|
||||||
|
|
||||||
;; Show most recently installed packages last.
|
|
||||||
(reverse
|
|
||||||
(manifest-entries
|
|
||||||
(profile-manifest (if (zero? number)
|
|
||||||
profile
|
|
||||||
(generation-file-name profile number)))))))
|
|
||||||
|
|
||||||
(define (indented-string str indent)
|
(define (indented-string str indent)
|
||||||
"Return STR with each newline preceded by IDENT spaces."
|
"Return STR with each newline preceded by IDENT spaces."
|
||||||
(define indent-string
|
(define indent-string
|
||||||
|
|
Reference in a new issue