guix-commits
[Top][All Lists]
Advanced

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

branch version-1.2.0 updated: maint: update-guix-package: Optionally add


From: guix-commits
Subject: branch version-1.2.0 updated: maint: update-guix-package: Optionally add sources to store.
Date: Thu, 12 Nov 2020 09:25:24 -0500

This is an automated email from the git hooks/post-receive script.

apteryx pushed a commit to branch version-1.2.0
in repository guix.

The following commit(s) were added to refs/heads/version-1.2.0 by this push:
     new 3de898b  maint: update-guix-package: Optionally add sources to store.
3de898b is described below

commit 3de898b43c1388a9244bdedd2d9f11511c9571d2
Author: Maxim Cournoyer <maxim.cournoyer@gmail.com>
AuthorDate: Mon Nov 9 13:14:31 2020 -0500

    maint: update-guix-package: Optionally add sources to store.
    
    Following discussions in <https://issues.guix.gnu.org/43893>, keeping a copy
    of the updated package source is desirable when generating a release.
    
    * build-aux/update-guix-package.scm (version-controlled?): Remove variable.
    (call-with-temporary-git-worktree): Renamed from
    'with-temporary-git-worktree'.  Update doc.  Do not change directory
    implicitly.  Define as a procedure, not a syntax.
    (keep-source-in-store): New procedure.
    (main): Adjust to use with call-with-temporary-git-worktree.  Add the 
sources
    to the store when GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT is set.  Exit 
gracefully
    when FIND-ORIGIN-REMOTE returns #f.
    (%savannah-guix-git-repo-push-url-regexp): Adjust match for a potential 
colon
    separator.
    * Makefile.am (GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT): Adjust.
    * .dir-locals.el (scheme-mode): Remove entry for 
with-temporary-git-worktree.
    * doc/contributing.texi (Updating the Guix Package): Update doc.
    
    Co-authored-by: Ludovic Courtès <ludo@gnu.org>
---
 .dir-locals.el                    |  1 -
 Makefile.am                       | 14 ++++----
 build-aux/update-guix-package.scm | 73 ++++++++++++++++++++++++++++-----------
 doc/contributing.texi             | 11 ++----
 4 files changed, 63 insertions(+), 36 deletions(-)

diff --git a/.dir-locals.el b/.dir-locals.el
index 8e5d390..b1cb936 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -123,7 +123,6 @@
    (eval . (put 'call-with-progress-reporter 'scheme-indent-function 1))
    (eval . (put 'with-repository 'scheme-indent-function 2))
    (eval . (put 'with-temporary-git-repository 'scheme-indent-function 2))
-   (eval . (put 'with-temporary-git-worktree 'scheme-indent-function 2))
    (eval . (put 'with-environment-variables 'scheme-indent-function 1))
    (eval . (put 'with-fresh-gnupg-setup 'scheme-indent-function 1))
 
diff --git a/Makefile.am b/Makefile.am
index e7053ee..6faf8c9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -826,9 +826,10 @@ release: dist-with-updated-version
        $(MKDIR_P) "$(releasedir)"
        rm -f "$(releasedir)"/*
        mv $(SOURCE_TARBALLS) "$(releasedir)"
-       $(top_builddir)/pre-inst-env "$(GUILE)"                 \
-          $(top_srcdir)/build-aux/update-guix-package.scm      \
-          "`git rev-parse HEAD`" "$(PACKAGE_VERSION)"
+       GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT=yes \
+       $(top_builddir)/pre-inst-env "$(GUILE)" \
+               $(top_srcdir)/build-aux/update-guix-package.scm \
+               "`git rev-parse HEAD`" "$(PACKAGE_VERSION)"
        git add $(top_srcdir)/gnu/packages/package-management.scm
        git commit -m "gnu: guix: Update to $(PACKAGE_VERSION)."
        $(top_builddir)/pre-inst-env guix build $(GUIX_FOR_BINARY_TARBALL)      
\
@@ -840,9 +841,10 @@ release: dist-with-updated-version
          mv "guix-binary.$$system.tar.xz"                                      
\
              "$(releasedir)/guix-binary-$(PACKAGE_VERSION).$$system.tar.xz" ;  
\
        done
-       $(top_builddir)/pre-inst-env "$(GUILE)"                 \
-          $(top_srcdir)/build-aux/update-guix-package.scm      \
-          "`git rev-parse HEAD`"
+       GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT=yes \
+       $(top_builddir)/pre-inst-env "$(GUILE)" \
+               $(top_srcdir)/build-aux/update-guix-package.scm \
+               "`git rev-parse HEAD`"
        git add $(top_srcdir)/gnu/packages/package-management.scm
        git commit -m "gnu: guix: Update to `git rev-parse HEAD | cut -c1-7`."
        $(top_builddir)/pre-inst-env guix build guix                    \
diff --git a/build-aux/update-guix-package.scm 
b/build-aux/update-guix-package.scm
index ff6b105..9fe6c20 100644
--- a/build-aux/update-guix-package.scm
+++ b/build-aux/update-guix-package.scm
@@ -44,9 +44,6 @@
 (define %top-srcdir
   (string-append (current-source-directory) "/.."))
 
-(define version-controlled?
-  (git-predicate %top-srcdir))
-
 (define (package-definition-location)
   "Return the source properties of the definition of the 'guix' package."
   (call-with-input-file (location-file (package-location guix))
@@ -114,8 +111,9 @@ COMMIT."
   "Create a new git worktree at DIRECTORY, detached on commit COMMIT."
   (invoke "git" "worktree" "add" "--detach" directory commit))
 
-(define-syntax-rule (with-temporary-git-worktree commit body ...)
-  "Execute BODY in the context of a temporary git worktree created from 
COMMIT."
+(define (call-with-temporary-git-worktree commit proc)
+  "Execute PROC in the context of a temporary git worktree created from
+COMMIT.  PROC receives the temporary directory file name as an argument."
   (call-with-temporary-directory
    (lambda (tmp-directory)
      (dynamic-wind
@@ -123,12 +121,12 @@ COMMIT."
          #t)
        (lambda ()
          (git-add-worktree tmp-directory commit)
-         (with-directory-excursion tmp-directory body ...))
+         (proc tmp-directory))
        (lambda ()
          (invoke "git" "worktree" "remove" "--force" tmp-directory))))))
 
 (define %savannah-guix-git-repo-push-url-regexp
-  "git.(savannah|sv).gnu.org/srv/git/guix.git \\(push\\)")
+  "git.(savannah|sv).gnu.org:?/srv/git/guix.git \\(push\\)")
 
 (define-syntax-rule (with-input-pipe-to-string prog arg ...)
   (let* ((input-pipe (open-pipe* OPEN_READ prog arg ...))
@@ -156,27 +154,60 @@ COMMIT."
                       "git" "branch" "-r" "--contains" commit
                       (string-append remote "/master")))))
 
+(define (keep-source-in-store store source)
+  "Add SOURCE to the store under the name that the 'guix' package expects."
+
+  ;; Add SOURCE to the store, but this time under the real name used in the
+  ;; 'origin'.  This allows us to build the package without having to make a
+  ;; real checkout; thus, it also works when working on a private branch.
+  (reload-module
+   (resolve-module '(gnu packages package-management)))
+
+  (let* ((source (add-to-store store
+                               (origin-file-name (package-source guix))
+                               #t "sha256" source
+                               #:select? (git-predicate source)))
+         (root   (store-path-package-name source)))
+
+    ;; Add an indirect GC root for SOURCE in the current directory.
+    (false-if-exception (delete-file root))
+    (symlink source root)
+    (add-indirect-root store
+                       (string-append (getcwd) "/" root))
+
+    (info (G_ "source code kept in ~a (GC root: ~a)~%")
+          source root)))
+
 
 (define (main . args)
   (match args
     ((commit version)
      (with-directory-excursion %top-srcdir
        (or (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT")
-           (commit-already-pushed? (find-origin-remote) commit)
+           (let ((remote (find-origin-remote)))
+             (unless remote
+               (leave (G_ "Failed to find the origin git remote.~%")))
+             (commit-already-pushed? remote commit))
            (leave (G_ "Commit ~a is not pushed upstream.  Aborting.~%") 
commit))
-       (let* ((hash (with-temporary-git-worktree commit
-                        (nix-base32-string->bytevector
-                         (string-trim-both
-                          (with-output-to-string
-                           (lambda ()
-                             (guix-hash "-rx" ".")))))))
-              (location (package-definition-location))
-              (old-hash (content-hash-value
-                         (origin-hash (package-source guix)))))
-         (edit-expression location
-                          (update-definition commit hash
-                                             #:old-hash old-hash
-                                             #:version version)))))
+       (call-with-temporary-git-worktree commit
+           (lambda (tmp-directory)
+             (let* ((hash (nix-base32-string->bytevector
+                           (string-trim-both
+                            (with-output-to-string
+                             (lambda ()
+                               (guix-hash "-rx" tmp-directory))))))
+                    (location (package-definition-location))
+                    (old-hash (content-hash-value
+                               (origin-hash (package-source guix)))))
+               (edit-expression location
+                                (update-definition commit hash
+                                                   #:old-hash old-hash
+                                                   #:version version))
+               ;; When GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT is set, the sources 
are
+               ;; added to the store.  This is used as part of 'make release'.
+               (when (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT")
+                 (with-store store
+                   (keep-source-in-store store tmp-directory))))))))
     ((commit)
      ;; Automatically deduce the version and revision numbers.
      (main commit #f))))
diff --git a/doc/contributing.texi b/doc/contributing.texi
index d3f6325..d8de710 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -1368,11 +1368,6 @@ commit that others can't refer to, a check is made that 
the commit used
 has already been pushed to the Savannah-hosted Guix git repository.
 
 This check can be disabled, @emph{at your own peril}, by setting the
-@code{GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT} environment variable.
-
-To build the resulting 'guix' package when using a private commit, the
-following command can be used:
-
-@example
-./pre-inst-env guix build guix --with-git-url=guix=$PWD
-@end example
+@code{GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT} environment variable.  When
+this variable is set, the updated package source is also added to the
+store.  This is used as part of the release process of Guix.



reply via email to

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