From 2cb658a9a7c491ee8ea13da9682170e40deb25ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 6 Mar 2019 23:48:41 +0100 Subject: [PATCH] describe: Add 'package-provenance'. * guix/scripts/package.scm (package-provenance): Move to... * guix/describe.scm (package-provenance): ... here. --- guix/describe.scm | 43 ++++++++++++++++++++++++++++++++++++++-- guix/scripts/package.scm | 36 +-------------------------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/guix/describe.scm b/guix/describe.scm index 670db63ce7..c31199c9cd 100644 --- a/guix/describe.scm +++ b/guix/describe.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018 Ludovic Courtès +;;; Copyright © 2018, 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,11 +19,16 @@ (define-module (guix describe) #:use-module (guix memoization) #:use-module (guix profiles) + #:use-module (guix packages) + #:use-module ((guix utils) #:select (location-file)) + #:use-module ((guix store) #:select (%store-prefix)) #:use-module (srfi srfi-1) #:use-module (ice-9 match) #:export (current-profile current-profile-entries - package-path-entries)) + package-path-entries + + package-provenance)) ;;; Commentary: ;;; @@ -73,3 +78,37 @@ (define package-path-entries "/share/guile/site/" (effective-version)))) (current-profile-entries)))) + +(define (package-provenance package) + "Return the provenance of PACKAGE as an sexp for use as the 'provenance' +property of manifest entries, or #f if it could not be determined." + (define (entry-source entry) + (match (assq 'source + (manifest-entry-properties entry)) + (('source value) value) + (_ #f))) + + (match (and=> (package-location package) location-file) + (#f #f) + (file + (let ((file (if (string-prefix? "/" file) + file + (search-path %load-path file)))) + (and file + (string-prefix? (%store-prefix) file) + + ;; Always store information about the 'guix' channel and + ;; optionally about the specific channel FILE comes from. + (or (let ((main (and=> (find (lambda (entry) + (string=? "guix" + (manifest-entry-name entry))) + (current-profile-entries)) + entry-source)) + (extra (any (lambda (entry) + (let ((item (manifest-entry-item entry))) + (and (string-prefix? item file) + (entry-source entry)))) + (current-profile-entries)))) + (and main + `(,main + ,@(if extra (list extra) '())))))))))) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 0e70315708..efff511299 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -36,7 +36,7 @@ (define-module (guix scripts package) #:use-module (guix config) #:use-module (guix scripts) #:use-module (guix scripts build) - #:autoload (guix describe) (current-profile-entries) + #:autoload (guix describe) (package-provenance) #:use-module ((guix build utils) #:select (directory-exists? mkdir-p)) #:use-module (ice-9 format) @@ -552,40 +552,6 @@ (define (store-item->manifest-entry item) (output "out") ;XXX: wild guess (item item)))) -(define (package-provenance package) - "Return the provenance of PACKAGE as an sexp for use as the 'provenance' -property of manifest entries, or #f if it could not be determined." - (define (entry-source entry) - (match (assq 'source - (manifest-entry-properties entry)) - (('source value) value) - (_ #f))) - - (match (and=> (package-location package) location-file) - (#f #f) - (file - (let ((file (if (string-prefix? "/" file) - file - (search-path %load-path file)))) - (and file - (string-prefix? (%store-prefix) file) - - ;; Always store information about the 'guix' channel and - ;; optionally about the specific channel FILE comes from. - (or (let ((main (and=> (find (lambda (entry) - (string=? "guix" - (manifest-entry-name entry))) - (current-profile-entries)) - entry-source)) - (extra (any (lambda (entry) - (let ((item (manifest-entry-item entry))) - (and (string-prefix? item file) - (entry-source entry)))) - (current-profile-entries)))) - (and main - `(,main - ,@(if extra (list extra) '())))))))))) - (define (package->manifest-entry* package output) "Like 'package->manifest-entry', but attach PACKAGE provenance meta-data to the resulting manifest entry."