GNU bug report logs - #49006
MELPA importer uses the wrong source when called from CLI

Previous Next

Package: guix;

Reported by: Xinglu Chen <public <at> yoctocell.xyz>

Date: Sun, 13 Jun 2021 16:21:02 UTC

Severity: normal

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 49006 in the body.
You can then email your comments to 49006 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#49006; Package guix. (Sun, 13 Jun 2021 16:21:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Xinglu Chen <public <at> yoctocell.xyz>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Sun, 13 Jun 2021 16:21:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: bug-guix <at> gnu.org
Subject: MELPA importer uses the wrong source when called from CLI
Date: Sun, 13 Jun 2021 18:20:14 +0200
[Message part 1 (text/plain, inline)]
When importing a package from MELPA, the source for generated package
definition points to a (potentially unstable?) MELPA URL.

  https://melpa.org/packages/PACKAGE-VERSION.tar

--8<---------------cut here---------------start------------->8---
~/src/guix [env]$ ./pre-inst-env guix import elpa -a melpa magit

Starting download of /tmp/guix-file.wbtAlA
From https://melpa.org/packages/magit-20210609.2000.tar...
 …609.2000.tar  1.7MiB                472KiB/s 00:04 [##################] 100.0%
(package
  (name "emacs-magit")
  (version "20210609.2000")
  (source
    (origin
      (method url-fetch)
      (uri (string-append
             "https://melpa.org/packages/magit-"
             version
             ".tar"))
      (sha256
        (base32
          "0pplizxy20i3i9zqm5kfjz4la93gpz8wwh1ybwdwngv5ks7vhdsr"))))
  (build-system emacs-build-system)
  (propagated-inputs
    `(("emacs-dash" ,emacs-dash)
      ("emacs-git-commit" ,emacs-git-commit)
      ("emacs-magit-section" ,emacs-magit-section)
      ("emacs-transient" ,emacs-transient)
      ("emacs-with-editor" ,emacs-with-editor)))
  (home-page "https://github.com/magit/magit")
  (synopsis "A Git porcelain inside Emacs.")
  (description
    "Magit is a text-based Git user interface that puts an unmatched focus
on streamlining workflows.  Commands are invoked using short mnemonic
key sequences that take the cursor’s position in the highly actionable
interface into account to provide context-sensitive behavior.

With Magit you can do nearly everything that you can do when using Git
on the command-line, but at greater speed and while taking advantage
of advanced features that previously seemed too daunting to use on a
daily basis.  Many users will find that by using Magit they can become
more effective Git user.
")
  (license #f))
--8<---------------cut here---------------end--------------->8---

However, looking at (guix import elpa), it has a ‘melpa-recipe->origin’
procedure, which calls the ‘git-repository->origin’ procedure, which
returns an origin that uses ‘git-fetch’.

#+begin_src scheme
(define (git-repository->origin recipe url)
  "Fetch origin details from the Git repository at URL for the provided MELPA
RECIPE."
  (define ref
    (cond
     ((assoc-ref recipe #:branch)
      => (lambda (branch) (cons 'branch branch)))
     ((assoc-ref recipe #:commit)
      => (lambda (commit) (cons 'commit commit)))
     (else
      '(branch . "master"))))

  (let-values (((directory commit) (download-git-repository url ref)))
    `(origin
       (method git-fetch)
       (uri (git-reference
             (url ,url)
             (commit ,commit)))
       (sha256
        (base32
         ,(bytevector->nix-base32-string
           (file-hash directory (negate vcs-file?) #t)))))))

(define* (melpa-recipe->origin recipe)
  "Fetch origin details from the MELPA recipe and associated repository for
the package named PACKAGE-NAME."
  (define (github-repo->url repo)
    (string-append "https://github.com/" repo ".git"))
  (define (gitlab-repo->url repo)
    (string-append "https://gitlab.com/" repo ".git"))

  (match (assq-ref recipe ':fetcher)
    ('github (git-repository->origin recipe (github-repo->url (assq-ref recipe ':repo))))
    ('gitlab (git-repository->origin recipe (gitlab-repo->url (assq-ref recipe ':repo))))
    ('git    (git-repository->origin recipe (assq-ref recipe ':url)))
    (#f #f)   ; if we're not using melpa then this stops us printing a warning
    (_ (warning (G_ "Unsupported MELPA fetcher: ~a, falling back to unstable MELPA source.~%")
                (assq-ref recipe ':fetcher))
       #f)))
#+end_src

‘melpa-recipe->origin’ is used in the ‘elpa-package->sexp’ procedure,
and takes precedence over the ‘url-fetch’ origin.  Meaning that
‘melpa-source’ must have been #f, otherwise it shouldn’t have used
’url-fetch’.

#+begin_src scheme
(define melpa-source
  (melpa-recipe->origin melpa-recipe))

(values
 `(package
   (name ,(elpa-name->package-name name))
   (version ,version)
   (source ,(or melpa-source  ;here
                (let ((tarball (with-store store
                                           (download-to-store store source-url))))
                  `(origin
                    (method url-fetch)
                    (uri (string-append ,@(factorize-uri source-url version)))
                    (sha256
                     (base32
                      ,(if tarball
                           (bytevector->nix-base32-string (file-sha256 tarball))
                         "failed to download package")))))))
   ...))
#+end_src

What’s weird is that calling ‘elpa->guix-package’ in the REPL generates
a package definition that uses ’git-fetch’ instead of ’url-fetch’

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,use(guix import elpa)
scheme@(guile-user)> (elpa->guix-package "magit" #:repo 'melpa)
$2 = (package (name "emacs-magit") (version "20210609.2000") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/magit/magit.git") (commit "71f57c5582448be81b02ba53750dd2ea39ed0eaf"))) (sha256 (base32 "16ip50a46nk6xxj8qkpf6rmp28zjc1bhyjj9bfgibim8ywj87dlq")))) (build-system emacs-build-system) (propagated-inputs (quasiquote (("emacs-dash" (unquote emacs-dash)) ("emacs-git-commit" (unquote emacs-git-commit)) ("emacs-magit-section" (unquote emacs-magit-section)) ("emacs-transient" (unquote emacs-transient)) ("emacs-with-editor" (unquote emacs-with-editor))))) (arguments (quote (#:include (quote ("^lisp/magit$" "^lisp/magit[^/]+.el$" "^lisp/git-rebase.el$" "^Documentation/magit.texi$" "^Documentation/AUTHORS.md$" "^LICENSE$")) #:exclude (quote ("^lisp/magit-libgit.el$" "^lisp/magit-section.el$"))))) (home-page "https://github.com/magit/magit") (synopsis "A Git porcelain inside Emacs.") (description "Magit is a text-based Git user interface that puts an unmatched focus\non streamlining workflows.  Commands are invoked using short mnemonic\nkey sequences that take the cursor’s position in the highly actionable\ninterface into account to provide context-sensitive behavior.\n\nWith Magit you can do nearly everything that you can do when using Git\non the command-line, but at greater speed and while taking advantage\nof advanced features that previously seemed too daunting to use on a\ndaily basis.  Many users will find that by using Magit they can become\nmore effective Git user.\n") (license license:gpl3+))
$3 = ("dash" "git-commit" "magit-section" "transient" "with-editor")
--8<---------------cut here---------------end--------------->8---
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#49006; Package guix. (Sun, 13 Jun 2021 18:13:01 GMT) Full text and rfc822 format available.

Message #8 received at 49006 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49006 <at> debbugs.gnu.org
Subject: Re: MELPA importer uses the wrong source when called from CLI
Date: Sun, 13 Jun 2021 20:11:55 +0200
[Message part 1 (text/plain, inline)]
Okay, so new findings:

When the (guix import elpa) module has been compiled, the generated
package definition uses ‘url-fetch’ to fetch the source.

--8<---------------cut here---------------start------------->8---
~/src/guix [env]$ ./pre-inst-env guix import elpa -a melpa magit

Starting download of /tmp/guix-file.US750W
From https://melpa.org/packages/magit-20210609.2000.tar...
 …609.2000.tar  1.7MiB                365KiB/s 00:05 [##################] 100.0%
(package
  (name "emacs-magit")
  (version "20210609.2000")
  (source
    (origin
      (method url-fetch)
      (uri (string-append
             "https://melpa.org/packages/magit-"
             version
             ".tar"))
      (sha256
        (base32
          "0pplizxy20i3i9zqm5kfjz4la93gpz8wwh1ybwdwngv5ks7vhdsr"))))
  (build-system emacs-build-system)
  (propagated-inputs
    `(("emacs-dash" ,emacs-dash)
      ("emacs-git-commit" ,emacs-git-commit)
      ("emacs-magit-section" ,emacs-magit-section)
      ("emacs-transient" ,emacs-transient)
      ("emacs-with-editor" ,emacs-with-editor)))
  (home-page "https://github.com/magit/magit")
  (synopsis "A Git porcelain inside Emacs.")
  (description
    "Magit is a text-based Git user interface that puts an unmatched focus
on streamlining workflows.  Commands are invoked using short mnemonic
key sequences that take the cursor’s position in the highly actionable
interface into account to provide context-sensitive behavior.

With Magit you can do nearly everything that you can do when using Git
on the command-line, but at greater speed and while taking advantage
of advanced features that previously seemed too daunting to use on a
daily basis.  Many users will find that by using Magit they can become
more effective Git user.
")
  (license #f))
--8<---------------cut here---------------end--------------->8---

However, if the (guix import elpa) module hasn’t been compiled, say I
just add a dummy comment to it, then the generated package definition
uses ‘git-fetch’ instead of ‘url-fetch’.  Notice the messages emitted by
Guile.

--8<---------------cut here---------------start------------->8---
~/src/guix [env]$ ./pre-inst-env guix import elpa -a melpa magit
;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
;;;       newer than compiled /home/yoctocell/src/guix/guix/import/elpa.go
;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
;;;       newer than compiled /home/yoctocell/.config/guix/current/lib/guile/3.0/site-ccache/guix/import/elpa.go
;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
;;;       newer than compiled /home/yoctocell/.guix-home/profile/lib/guile/3.0/site-ccache/guix/import/elpa.go
;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
;;;       newer than compiled /home/yoctocell/.config/guix/current/lib/guile/3.0/site-ccache/guix/import/elpa.go
;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
;;;       newer than compiled guix/import/elpa.go
;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
;;;       newer than compiled /home/yoctocell/.cache/guile/ccache/3.0-LE-8-4.5/home/yoctocell/src/guix/guix/import/elpa.scm.go
(package
  (name "emacs-magit")
  (version "20210609.2000")
  (source
    (origin
      (method git-fetch)
      (uri (git-reference
             (url "https://github.com/magit/magit.git")
             (commit
               "71f57c5582448be81b02ba53750dd2ea39ed0eaf")))
      (sha256
        (base32
          "16ip50a46nk6xxj8qkpf6rmp28zjc1bhyjj9bfgibim8ywj87dlq"))))
  (build-system emacs-build-system)
  (propagated-inputs
    `(("emacs-dash" ,emacs-dash)
      ("emacs-git-commit" ,emacs-git-commit)
      ("emacs-magit-section" ,emacs-magit-section)
      ("emacs-transient" ,emacs-transient)
      ("emacs-with-editor" ,emacs-with-editor)))
  (arguments
    '(#:include
      '("^lisp/magit$"
        "^lisp/magit[^/]+.el$"
        "^lisp/git-rebase.el$"
        "^Documentation/magit.texi$"
        "^Documentation/AUTHORS.md$"
        "^LICENSE$")
      #:exclude
      '("^lisp/magit-libgit.el$"
        "^lisp/magit-section.el$")))
  (home-page "https://github.com/magit/magit")
  (synopsis "A Git porcelain inside Emacs.")
  (description
    "Magit is a text-based Git user interface that puts an unmatched focus
on streamlining workflows.  Commands are invoked using short mnemonic
key sequences that take the cursor’s position in the highly actionable
interface into account to provide context-sensitive behavior.

With Magit you can do nearly everything that you can do when using Git
on the command-line, but at greater speed and while taking advantage
of advanced features that previously seemed too daunting to use on a
daily basis.  Many users will find that by using Magit they can become
more effective Git user.
")
  (license #f))
--8<---------------cut here---------------end--------------->8---

Maybe there is some problem with Guile itself?
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#49006; Package guix. (Mon, 06 Sep 2021 11:09:02 GMT) Full text and rfc822 format available.

Message #11 received at 49006 <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: 49006 <at> debbugs.gnu.org
Subject: Re: MELPA importer uses the wrong source when called from CLI
Date: Mon, 06 Sep 2021 13:08:49 +0200
[Message part 1 (text/plain, inline)]
On Sun, Jun 13 2021, Xinglu Chen wrote:

> Okay, so new findings:
>
> When the (guix import elpa) module has been compiled, the generated
> package definition uses ‘url-fetch’ to fetch the source.
>
> --8<---------------cut here---------------start------------->8---
> ~/src/guix [env]$ ./pre-inst-env guix import elpa -a melpa magit
>
> Starting download of /tmp/guix-file.US750W
> From https://melpa.org/packages/magit-20210609.2000.tar...
>  …609.2000.tar  1.7MiB                365KiB/s 00:05 [##################] 100.0%
> (package
>   (name "emacs-magit")
>   (version "20210609.2000")
>   (source
>     (origin
>       (method url-fetch)
>       (uri (string-append
>              "https://melpa.org/packages/magit-"
>              version
>              ".tar"))
>       (sha256
>         (base32
>           "0pplizxy20i3i9zqm5kfjz4la93gpz8wwh1ybwdwngv5ks7vhdsr"))))
>   (build-system emacs-build-system)
>   (propagated-inputs
>     `(("emacs-dash" ,emacs-dash)
>       ("emacs-git-commit" ,emacs-git-commit)
>       ("emacs-magit-section" ,emacs-magit-section)
>       ("emacs-transient" ,emacs-transient)
>       ("emacs-with-editor" ,emacs-with-editor)))
>   (home-page "https://github.com/magit/magit")
>   (synopsis "A Git porcelain inside Emacs.")
>   (description
>     "Magit is a text-based Git user interface that puts an unmatched focus
> on streamlining workflows.  Commands are invoked using short mnemonic
> key sequences that take the cursor’s position in the highly actionable
> interface into account to provide context-sensitive behavior.
>
> With Magit you can do nearly everything that you can do when using Git
> on the command-line, but at greater speed and while taking advantage
> of advanced features that previously seemed too daunting to use on a
> daily basis.  Many users will find that by using Magit they can become
> more effective Git user.
> ")
>   (license #f))
> --8<---------------cut here---------------end--------------->8---
>
> However, if the (guix import elpa) module hasn’t been compiled, say I
> just add a dummy comment to it, then the generated package definition
> uses ‘git-fetch’ instead of ‘url-fetch’.  Notice the messages emitted by
> Guile.
>
> --8<---------------cut here---------------start------------->8---
> ~/src/guix [env]$ ./pre-inst-env guix import elpa -a melpa magit
> ;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
> ;;;       newer than compiled /home/yoctocell/src/guix/guix/import/elpa.go
> ;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
> ;;;       newer than compiled /home/yoctocell/.config/guix/current/lib/guile/3.0/site-ccache/guix/import/elpa.go
> ;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
> ;;;       newer than compiled /home/yoctocell/.guix-home/profile/lib/guile/3.0/site-ccache/guix/import/elpa.go
> ;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
> ;;;       newer than compiled /home/yoctocell/.config/guix/current/lib/guile/3.0/site-ccache/guix/import/elpa.go
> ;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
> ;;;       newer than compiled guix/import/elpa.go
> ;;; note: source file /home/yoctocell/src/guix/guix/import/elpa.scm
> ;;;       newer than compiled /home/yoctocell/.cache/guile/ccache/3.0-LE-8-4.5/home/yoctocell/src/guix/guix/import/elpa.scm.go
> (package
>   (name "emacs-magit")
>   (version "20210609.2000")
>   (source
>     (origin
>       (method git-fetch)
>       (uri (git-reference
>              (url "https://github.com/magit/magit.git")
>              (commit
>                "71f57c5582448be81b02ba53750dd2ea39ed0eaf")))
>       (sha256
>         (base32
>           "16ip50a46nk6xxj8qkpf6rmp28zjc1bhyjj9bfgibim8ywj87dlq"))))
>   (build-system emacs-build-system)
>   (propagated-inputs
>     `(("emacs-dash" ,emacs-dash)
>       ("emacs-git-commit" ,emacs-git-commit)
>       ("emacs-magit-section" ,emacs-magit-section)
>       ("emacs-transient" ,emacs-transient)
>       ("emacs-with-editor" ,emacs-with-editor)))
>   (arguments
>     '(#:include
>       '("^lisp/magit$"
>         "^lisp/magit[^/]+.el$"
>         "^lisp/git-rebase.el$"
>         "^Documentation/magit.texi$"
>         "^Documentation/AUTHORS.md$"
>         "^LICENSE$")
>       #:exclude
>       '("^lisp/magit-libgit.el$"
>         "^lisp/magit-section.el$")))
>   (home-page "https://github.com/magit/magit")
>   (synopsis "A Git porcelain inside Emacs.")
>   (description
>     "Magit is a text-based Git user interface that puts an unmatched focus
> on streamlining workflows.  Commands are invoked using short mnemonic
> key sequences that take the cursor’s position in the highly actionable
> interface into account to provide context-sensitive behavior.
>
> With Magit you can do nearly everything that you can do when using Git
> on the command-line, but at greater speed and while taking advantage
> of advanced features that previously seemed too daunting to use on a
> daily basis.  Many users will find that by using Magit they can become
> more effective Git user.
> ")
>   (license #f))
> --8<---------------cut here---------------end--------------->8---
>
> Maybe there is some problem with Guile itself?

I came up with a hack to fix the issue, see the diff below

  diff --git a/guix/import/elpa.scm b/guix/import/elpa.scm
  index c0dc5acf51..0d07b4b35e 100644
  --- a/guix/import/elpa.scm
  +++ b/guix/import/elpa.scm
  @@ -335,7 +335,8 @@ the package named PACKAGE-NAME."
   type '<elpa-package>'."
   
     (define melpa-recipe
  -    (if (eq? repo 'melpa)
  +    ;; XXX: Otherwise (eq? repo 'melpa) always seems to return #f.
  +    (if (force (delay (eq? repo 'melpa)))
           (package-name->melpa-recipe (elpa-package-name pkg))
           #f))
   
I am not sure if this is a good workaround, though.  Any thoughts?
[signature.asc (application/pgp-signature, inline)]

Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Sat, 06 Nov 2021 22:22:02 GMT) Full text and rfc822 format available.

Notification sent to Xinglu Chen <public <at> yoctocell.xyz>:
bug acknowledged by developer. (Sat, 06 Nov 2021 22:22:02 GMT) Full text and rfc822 format available.

Message #16 received at 49006-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Xinglu Chen <public <at> yoctocell.xyz>
Cc: 49006-done <at> debbugs.gnu.org
Subject: Re: bug#49006: MELPA importer uses the wrong source when called
 from CLI
Date: Sat, 06 Nov 2021 23:21:15 +0100
Hi,

Xinglu Chen <public <at> yoctocell.xyz> skribis:

> When the (guix import elpa) module has been compiled, the generated
> package definition uses ‘url-fetch’ to fetch the source.

[...]

> However, if the (guix import elpa) module hasn’t been compiled, say I
> just add a dummy comment to it, then the generated package definition
> uses ‘git-fetch’ instead of ‘url-fetch’.  Notice the messages emitted by
> Guile.

This is a miscompilation error that
d21353adea700b7f008d7a9f047d9f8b9c422cfb works around, presumably the
same as <https://issues.guix.gnu.org/48368>.

Thanks,
Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 05 Dec 2021 12:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 141 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.