Subject: [bug#63571] [PATCH 00/14] 'guix refresh -u' updates input fields

From: Ludovic Courtès <[email-masked]>
Date: Thu, 18 May 2023 17:11:59 +0200

Hello!

Until now, ‘guix refresh -u’ would tell you what inputs need to
be changed in your packages, for the ‘cran’, ‘pypi’, and ‘stackage’
updaters.  With this change it changes them right away.

Furthermore, ‘guix refresh -u’ will now also update inputs when the
‘cpan’ and ‘elpa’ updaters are used.  Doing that for other updaters
is left as an exercise to the reader.  :-)

I’d like to get feedback from those who use ‘guix refresh -u’
frequently, which is why I Cc’d Ricardo and Lars-Dominik, but
surely they’re not the only ones!

This is implemented by reifying dependency information
as <upstream-input> records part of <upstream-source>.

In the future, we could improve importers so that they fill in
the ‘min-version’ and ‘max-version’ fields.  In turn, ‘guix refresh’
could let you know when the version of a dependency doesn’t match,
or it could add the right one or something.  This would be particularly
useful for PyPI, which doesn’t provide a consistent package set like
package.

Another thing we should do longer-term is decouple how we fetch the
latest version number and latest source code (from the catalog of
PyPI/ELPA/etc., from Git, etc.) and how we obtain metadata (from
PyPI/ELPA/etc., from ‘requirements.txt’, etc.)  Right now, many
Python packages for example are handled by the ‘generic-git’ updater;
consequently they do not get dependency info that the ‘pypi’ updater
would get them.  Decoupling would address that.

One last thing: Crates remain out of the scope.  As I mentioned
at the Guix Days¹, I think Crates packaging as currently done is
not sustainable: this new feature won’t work for Crates, just like
‘guix refresh -l’ doesn’t work for them.  There’s Antioxydant and
there’s <https://issues.guix.gnu.org/53127>, but if nobody
champions to push these over the finish line, this will all get
out of control for good.

Thoughts?

Ludo’.

¹ https://gitlab.com/pjotrp/guix-days-fosdem-2023/-/blob/main/state-of-guix-2023.org

Ludovic Courtès (14):
  tests: pypi: Factorize tarball and wheel file creation.
  tests: http: Allow responses to specify a path.
  tests: pypi: Rewrite tests using a local HTTP server.
  import: utils: 'call-with-networking-exception-handler' doesn't
    unwind.
  import: json: Add #:timeout to 'json-fetch'.
  upstream: Replace 'input-changes' field by 'inputs'.
  diagnostics: Factorize 'absolute-location'.
  upstream: 'update-package-source' edits input fields.
  upstream: Remove <upstream-input-change> and related code.
  tests: upstream: Restore test that was skipped.
  import: cpan: Remove unary 'string-append' call.
  import: cpan: Represent dependencies as <upstream-input> records.
  import: cpan: Updater provides input list.
  import: elpa: Updater provides input list.

 guix/diagnostics.scm     |  20 +-
 guix/import/cpan.scm     | 103 +++++----
 guix/import/cran.scm     | 180 ++++++++++-----
 guix/import/elpa.scm     |  28 ++-
 guix/import/hackage.scm  |  90 +++++---
 guix/import/json.scm     |   5 +-
 guix/import/pypi.scm     | 216 ++++++++++--------
 guix/import/stackage.scm |   9 +-
 guix/import/test.scm     |  13 +-
 guix/import/utils.scm    |  33 ++-
 guix/scripts/refresh.scm |  38 +---
 guix/scripts/style.scm   |  17 --
 guix/tests/http.scm      |  46 +++-
 guix/upstream.scm        | 181 ++++++++-------
 tests/cpan.scm           |  34 ++-
 tests/cran.scm           |   2 +-
 tests/elpa.scm           |  48 +++-
 tests/guix-refresh.sh    |   7 +-
 tests/pypi.scm           | 473 +++++++++++++++++++++------------------
 tests/upstream.scm       | 199 ++--------------
 20 files changed, 946 insertions(+), 796 deletions(-)

base-commit: c5fa9dd0e96493307cc76ea098a6bca9b076e012
-- 
2.40.1