Subject: bug#49006: MELPA importer uses the wrong source when called from CLI

From: Xinglu Chen <[email-masked]>
Date: Mon, 06 Sep 2021 13:08:49 +0200

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?