unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 43893@debbugs.gnu.org
Subject: bug#43893: [PATCH v3] maint: update-guix-package: Prevent accidentally breaking guix pull.
Date: Fri, 30 Oct 2020 23:56:09 -0400	[thread overview]
Message-ID: <87d00zyrom.fsf@gmail.com> (raw)
In-Reply-To: <874kmifhn2.fsf@gnu.org> ("Ludovic Courtès"'s message of "Sun, 25 Oct 2020 16:29:53 +0100")

Hi Ludovic,

Ludovic Courtès <ludo@gnu.org> writes:

> Hi again,
>
> How about this variant of the initial script?  I think it addresses the
> main issues we discussed here:
>
>   1. By default it doesn’t re-add the source in the store, so wrong
>      commit/hash issues are caught when running ‘guix build guix’.
>
>   2. It diagnoses dirty trees early on.  It does not explicitly diagnose
>      missing upstream commits though, but again they’re caught when
>      running ‘guix build guix’.
>
> WDYT?
>
> Sorry for all the back-and-forth on what looks like a tiny issue.  I do
> think we’re making progress anyway!
>
> Thanks,
> Ludo’

Reproducing as a diff over the original script for brevity:

> @@ -23,12 +24,15 @@
>  ;;;
>  ;;; Code:

> -(use-modules (guix)
> +(use-modules (git)
> +             (guix)
>               (guix git-download)
>               (guix upstream)
>               (guix utils)
>               (guix base32)
>               (guix build utils)
> +             (guix i18n)
> +             (guix diagnostics)
>               (gnu packages package-management)
>               (ice-9 match))

> @@ -101,7 +105,43 @@ COMMIT."
>        (exp
>         (error "'guix' package definition is not as expected" exp)))))

> -\f
> +(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))
> +         (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 (assert-clean-checkout repository)
> +  "Error out if the working directory at REPOSITORY contains local
> +modifications."
> +  (define description
> +    (let ((format-options (make-describe-format-options
> +                           #:dirty-suffix "-dirty")))
> +      (describe-format (describe-workdir repository) format-options)))
> +
> +  (when (string-suffix? "-dirty" description)
> +    (leave (G_ "attempt to update 'guix' package from a dirty tree (~a)~%")
> +           description))
> +
> +  (info (G_ "updating 'guix' package to '~a'~%") description))

Unfortunately this doesn't catch the case where git has explicitly been
told to '--skip-worktree' on a path or file (the original cause of this
bug report).  See
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=43893#11.

>  (define (main . args)
>    (match args
>      ((commit version)
> @@ -113,32 +153,20 @@ COMMIT."
>                (hash     (query-path-hash store source))
>                (location (package-definition-location))
>                (old-hash (content-hash-value
> -                          (origin-hash (package-source guix)))))
> +                         (origin-hash (package-source guix)))))
> +
> +         (unless (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT")
> +           (let ((repository (repository-open ".")))
> +             (assert-clean-checkout repository)
> +             (repository-close! repository)))
> +
>           (edit-expression location
>                            (update-definition commit hash
>                                               #:old-hash old-hash
>                                               #:version version))

> -         ;; Re-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))
> -                (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))
> -
> -           (format #t "source code for commit ~a: ~a (GC root: ~a)~%"
> -                   commit source root)))))
> +         (when (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT")
> +           (keep-source-in-store store source)))))

That environment variable would now do more than it advertises.  I'd
prefer to keep the behavior consistent in both modes, unless there's a
very good reason not too?

Thanks,

Maxim




  reply	other threads:[~2020-10-31  3:57 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-09 21:58 bug#43893: make update-guix-package produced an incorrect hash Maxim Cournoyer
2020-10-10  0:04 ` Danny Milosavljevic
2020-10-10  5:08   ` Maxim Cournoyer
2020-10-10  5:08 ` bug#43893: [PATCH] maint: update-guix-package: Ensure sources are clean Maxim Cournoyer
2020-10-10 11:59   ` Danny Milosavljevic
2020-10-11  2:35     ` Maxim Cournoyer
2020-10-10 20:08   ` Ludovic Courtès
2020-10-10 21:14     ` Danny Milosavljevic
2020-10-12  4:40       ` Maxim Cournoyer
2020-10-12  9:40       ` Ludovic Courtès
2020-10-12 14:18         ` Danny Milosavljevic
2020-10-11 19:43     ` Maxim Cournoyer
2020-10-12  9:43       ` Ludovic Courtès
2020-10-13  1:33         ` Maxim Cournoyer
2020-10-11 19:57 ` bug#43893: [PATCH v2] maint: update-guix-package: Prevent accidentally breaking guix pull Maxim Cournoyer
2020-10-13 16:00   ` Marius Bakke
2020-10-14  3:17     ` bug#43893: [PATCH v3] " Maxim Cournoyer
2020-10-20 21:06       ` Ludovic Courtès
2020-10-21  2:36         ` Maxim Cournoyer
2020-10-21  8:53           ` Ludovic Courtès
2020-10-23  4:38             ` Maxim Cournoyer
2020-10-23 15:01               ` Ludovic Courtès
2020-10-25  4:32                 ` Maxim Cournoyer
2020-10-25 14:50                   ` Ludovic Courtès
2020-10-25 15:29                     ` Ludovic Courtès
2020-10-31  3:56                       ` Maxim Cournoyer [this message]
2020-10-31 10:42                         ` Ludovic Courtès
2020-11-09 19:28                           ` Maxim Cournoyer
2020-11-09 22:03                             ` Ludovic Courtès
2020-11-10 14:31                               ` Maxim Cournoyer
2020-11-09 19:29                           ` bug#43893: [PATCH] maint: update-guix-package: Optionally add sources to store Maxim Cournoyer
2020-11-09 22:18                             ` Ludovic Courtès
2020-11-10 14:02                               ` Maxim Cournoyer
2020-11-10 14:48                                 ` Ludovic Courtès
2020-11-10 15:18                                   ` Maxim Cournoyer
2020-11-09 22:44                           ` bug#43893: [PATCH v5] " Maxim Cournoyer
2020-11-10  9:32                             ` Ludovic Courtès
2020-10-25 14:41       ` bug#43893: [PATCH v3] maint: update-guix-package: Prevent accidentally breaking guix pull Ludovic Courtès
2020-10-25 19:17         ` Maxim Cournoyer
2020-10-14  4:10     ` bug#43893: [PATCH v2] " Maxim Cournoyer
2020-10-19 18:04       ` Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d00zyrom.fsf@gmail.com \
    --to=maxim.cournoyer@gmail.com \
    --cc=43893@debbugs.gnu.org \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).