guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

04/12: etc: Add 'source-manifest.scm'.


From: guix-commits
Subject: 04/12: etc: Add 'source-manifest.scm'.
Date: Tue, 14 Sep 2021 05:53:03 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 3b758dd22d691964ebbc0ce9521508fbc397263a
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Mon Sep 13 15:24:57 2021 +0200

    etc: Add 'source-manifest.scm'.
    
    * etc/source-manifest.scm: New file.
    * Makefile.am (EXTRA_DIST): Add it.
---
 Makefile.am             |  1 +
 etc/source-manifest.scm | 66 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index dd40a5a..c3244b9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -627,6 +627,7 @@ EXTRA_DIST +=                                               
\
   etc/guix-install.sh                                  \
   etc/news.scm                                         \
   etc/release-manifest.scm                             \
+  etc/source-manifest.scm                              \
   etc/system-tests.scm                                 \
   etc/historical-authorizations                                \
   build-aux/build-self.scm                             \
diff --git a/etc/source-manifest.scm b/etc/source-manifest.scm
new file mode 100644
index 0000000..f96a5da
--- /dev/null
+++ b/etc/source-manifest.scm
@@ -0,0 +1,66 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; This file returns a manifest containing origins of all the packages.  The
+;;; main purpose is to allow continuous integration services to keep upstream
+;;; source code around.  It can also be passed to 'guix weather -m'.
+
+(use-modules (srfi srfi-1) (srfi srfi-26)
+             (ice-9 match) (ice-9 vlist)
+             (guix packages) (guix profiles)
+             (gnu packages))
+
+(define (all-packages)
+  "Return the list of all the packages, public or private, omitting only
+superseded packages."
+  (fold-packages (lambda (package lst)
+                   (match (package-replacement package)
+                     (#f (cons package lst))
+                     (replacement
+                      (append (list replacement package) lst))))
+                 '()
+                 #:select? (negate package-superseded)))
+
+(define (upstream-origin source)
+  "Return SOURCE without any patches or snippet."
+  (origin (inherit source)
+          (snippet #f) (patches '())))
+
+(define (all-origins)
+  "Return the list of origins referred to by all the packages."
+  (let loop ((packages (all-packages))
+             (origins  '())
+             (visited   vlist-null))
+    (match packages
+      ((head . tail)
+       (let ((new (remove (cut vhash-assq <> visited)
+                          (package-direct-sources head))))
+         (loop tail (append new origins)
+               (fold (cut vhash-consq <> #t <>)
+                     visited new))))
+      (()
+       origins))))
+
+;; Return a manifest containing all the origins.
+(manifest (map (lambda (origin)
+                 (manifest-entry
+                   (name (or (origin-actual-file-name origin)
+                             "origin"))
+                   (version "0")
+                   (item (upstream-origin origin))))
+               (all-origins)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]