[PATCH] gnu: transformations: fix with-latest option for git source package.

  • Open
  • quality assurance status badge
Details
2 participants
  • Z572
  • zimoun
Owner
unassigned
Submitted by
Z572
Severity
normal
Z
(address . guix-patches@gnu.org)
tencent_44B54DBA54BC2CDBBF121D82F2AC1283DA07@qq.com
From 52bd30a6ac967375aa9a178345f1bdea8388457a Mon Sep 17 00:00:00 2001
From: Zheng Junjie <873216071@qq.com>
Date: Tue, 13 Apr 2021 23:00:10 +0800
Subject: [PATCH] gnu: transformations: fix with-latest option for git source
package.

gnu/transformations.scm: (transform-package-latest): (package-with-latest-upstream):
use git-checkout if p is a git source package.
---
guix/transformations.scm | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

Toggle diff (34 lines)
diff --git a/guix/transformations.scm b/guix/transformations.scm
index 4e9260350c..559e408c37 100644
--- a/guix/transformations.scm
+++ b/guix/transformations.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright @ 2021 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -26,6 +27,7 @@
#:autoload (guix git-download) (git-reference? git-reference-url)
#:autoload (guix git) (git-checkout git-checkout? git-checkout-url)
#:autoload (guix upstream) (package-latest-release*
+ upstream-source-urls
upstream-source-version
upstream-source-signature-urls)
#:use-module (guix utils)
@@ -537,7 +539,11 @@ are replaced by their latest upstream version."
(package
(inherit p)
(version (upstream-source-version source))
- (source source))))))
+ (source (cond ((false-if-exception (package-git-url p))
+ (git-checkout
+ (url (car (upstream-source-urls source)))
+ (recursive? #t)))
+ (else source))))))))
(define rewrite
(package-input-rewriting/spec
--
2.31.1
Z
Z
zimoun wrote on 3 Nov 2021 11:18
(name . Z572)(address . 873216071@qq.com)(address . 47754@debbugs.gnu.org)
87y265sfsr.fsf@gmail.com
Hi,

Thanks for the patch.

On Wed, 14 Apr 2021 at 00:28, Z572 <873216071@qq.com> wrote:

Toggle quote (12 lines)
>>From 52bd30a6ac967375aa9a178345f1bdea8388457a Mon Sep 17 00:00:00 2001
> From: Zheng Junjie <873216071@qq.com>
> Date: Tue, 13 Apr 2021 23:00:10 +0800
> Subject: [PATCH] gnu: transformations: fix with-latest option for git source
> package.
>
> gnu/transformations.scm: (transform-package-latest): (package-with-latest-upstream):
> use git-checkout if p is a git source package.
> ---
> guix/transformations.scm | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)

[...]

Toggle quote (16 lines)
> #:autoload (guix upstream) (package-latest-release*
> + upstream-source-urls
> upstream-source-version
> upstream-source-signature-urls)
> #:use-module (guix utils)
> @@ -537,7 +539,11 @@ are replaced by their latest upstream version."
> (package
> (inherit p)
> (version (upstream-source-version source))
> - (source source))))))
> + (source (cond ((false-if-exception (package-git-url p))
> + (git-checkout
> + (url (car (upstream-source-urls source)))
> + (recursive? #t)))
> + (else source))))))))

Could you provide an example for an use-case?

Cheers,
simon
Z
(name . zimoun)(address . zimon.toutoune@gmail.com)(address . 47754@debbugs.gnu.org)
tencent_3C87B11CAA04B856667334552A6BE88F4405@qq.com
Hi,

zimoun <zimon.toutoune@gmail.com> writes:

Toggle quote (38 lines)
> Hi,
>
> Thanks for the patch.
>
> On Wed, 14 Apr 2021 at 00:28, Z572 <873216071@qq.com> wrote:
>
>>>From 52bd30a6ac967375aa9a178345f1bdea8388457a Mon Sep 17 00:00:00 2001
>> From: Zheng Junjie <873216071@qq.com>
>> Date: Tue, 13 Apr 2021 23:00:10 +0800
>> Subject: [PATCH] gnu: transformations: fix with-latest option for git source
>> package.
>>
>> gnu/transformations.scm: (transform-package-latest): (package-with-latest-upstream):
>> use git-checkout if p is a git source package.
>> ---
>> guix/transformations.scm | 8 +++++++-
>> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> [...]
>
>> #:autoload (guix upstream) (package-latest-release*
>> + upstream-source-urls
>> upstream-source-version
>> upstream-source-signature-urls)
>> #:use-module (guix utils)
>> @@ -537,7 +539,11 @@ are replaced by their latest upstream version."
>> (package
>> (inherit p)
>> (version (upstream-source-version source))
>> - (source source))))))
>> + (source (cond ((false-if-exception (package-git-url p))
>> + (git-checkout
>> + (url (car (upstream-source-urls source)))
>> + (recursive? #t)))
>> + (else source))))))))
>
> Could you provide an example for an use-case?

Just try this:

``` bash
$ file `guix build fbreader --with-latest=fbreader -S`
/gnu/store/rdqkmjpiig9gddzsxj4mdyw8lvn944xg-FBReader: HTML document, UTF-8 Unicode text, with very long lines

```

If a package is a git source package, after use "with-latest" option, it's url
will become to it's source. and build will fail.

This patch just fix this.

But i think this patch not good, maybe need a new patch(use latest version
not latest commit). But i'm not familiar with this part.


Toggle quote (5 lines)
>
> Cheers,
> simon


--
over
Z
Z
zimoun wrote on 3 Nov 2021 17:18
(name . Z572)(address . 873216071@qq.com)(address . 47754@debbugs.gnu.org)
CAJ3okZ3EcDmmPJ2nHjtv+dH_rGQT-cWVeGZ66AmZQyDaE+hxfA@mail.gmail.com
Hi,

On Wed, 3 Nov 2021 at 16:34, Z572 <873216071@qq.com> wrote:

Toggle quote (8 lines)
> $ file `guix build fbreader --with-latest=fbreader -S`
> /gnu/store/rdqkmjpiig9gddzsxj4mdyw8lvn944xg-FBReader: HTML document, UTF-8 Unicode text, with very long lines

> If a package is a git source package, after use "with-latest" option, it's url
> will become to it's source. and build will fail.
>
> This patch just fix this.

I see. However, I am not convinced your example is correct, because
for instance,

Toggle snippet (5 lines)
$ file $(guix build r-soupx -S)
/gnu/store/1z0j6i4a9xwwd8d3955m7vq3f1x4p3aq-r-soupx-0.3.1-1.a3354be-checkout:
directory

What you are seeing is: Git upstream source is modified by Guix (for
instance, patches are applied or files are removed; in the field
'origin') and "guix build -S" returns what Guix actually builds, not
what upstream provides. Therefore, in this case, the modified source
is returned as compressed archive. However, when using the
transformation 'with-latest', in this case, "guix build -S
--with-latest" returns what upstream provides, thus a directory (or
something else as a file).

Maybe I miss something, but from me, the inconsistency comes from the
behavior of "guix build -S", not about the behaviour of 'with-latest'
transformation. And I also miss why the build would fail.


Cheers,
simon
Z
(name . zimoun)(address . zimon.toutoune@gmail.com)(address . 47754@debbugs.gnu.org)
tencent_5BF03A4AE5EB25D5B5999B7AA98559627F08@qq.com
zimoun <zimon.toutoune@gmail.com> writes:

Toggle quote (30 lines)
> Hi,
>
> On Wed, 3 Nov 2021 at 16:34, Z572 <873216071@qq.com> wrote:
>
>> $ file `guix build fbreader --with-latest=fbreader -S`
>> /gnu/store/rdqkmjpiig9gddzsxj4mdyw8lvn944xg-FBReader: HTML document,
>> UTF-8 Unicode text, with very long lines
>
>> If a package is a git source package, after use "with-latest"
>> option, it's url
>> will become to it's source. and build will fail.
>>
>> This patch just fix this.
>
> I see. However, I am not convinced your example is correct, because
> for instance,
>
> $ file $(guix build r-soupx -S)
> /gnu/store/1z0j6i4a9xwwd8d3955m7vq3f1x4p3aq-r-soupx-0.3.1-1.a3354be-checkout:
> directory
>
> What you are seeing is: Git upstream source is modified by Guix (for
> instance, patches are applied or files are removed; in the field
> 'origin') and "guix build -S" returns what Guix actually builds, not
> what upstream provides. Therefore, in this case, the modified source
> is returned as compressed archive. However, when using the
> transformation 'with-latest', in this case, "guix build -S
> --with-latest" returns what upstream provides, thus a directory (or
> something else as a file).

I looked source again, just because of "upstream-source-compiler" don't support
git source package, all will become to use url-fetch.

See (guix upstream) module:

``` scheme
(define-gexp-compiler (upstream-source-compiler (source <upstream-source>)
system target)
"Download SOURCE from its first URL and lower it as a fixed-output
derivation that would fetch it."
(mlet* %store-monad ((url -> (first (upstream-source-urls source)))
(signature
-> (and=> (upstream-source-signature-urls source)
first))
(tarball ((store-lift download-tarball) url signature)))
(unless tarball
(raise (formatted-message (G_ "failed to fetch source from '~a'")
url)))

;; Instead of returning TARBALL, return a fixed-output derivation that
;; would be able to re-download it. In practice, since TARBALL is already
;; in the store, no extra download will happen, but having the derivation
;; in store improves provenance tracking.
(let ((hash (call-with-input-file tarball port-sha256)))
(url-fetch url 'sha256 hash (store-path-package-name tarball)
#:system system))))

```

I'm have no idea how to change it, so i just check if package is
git-source, use "git-checkout" instead of "upstream-source".

Toggle quote (10 lines)
>
> Maybe I miss something, but from me, the inconsistency comes from the
> behavior of "guix build -S", not about the behaviour of 'with-latest'
> transformation. And I also miss why the build would fail.
>
>
> Cheers,
> simon


--
over
Z
Z
zimoun wrote on 6 Nov 2021 19:17
(name . Z572)(address . 873216071@qq.com)(address . 47754@debbugs.gnu.org)
867ddldu8u.fsf@gmail.com
Hi,

On Thu, 04 Nov 2021 at 19:17, Z572 <873216071@qq.com> wrote:

Toggle quote (25 lines)
>>> If a package is a git source package, after use "with-latest"
>>> option, it's url
>>> will become to it's source. and build will fail.
>>>
>>> This patch just fix this.
>>
>> I see. However, I am not convinced your example is correct, because
>> for instance,
>>
>> $ file $(guix build r-soupx -S)
>> /gnu/store/1z0j6i4a9xwwd8d3955m7vq3f1x4p3aq-r-soupx-0.3.1-1.a3354be-checkout:
>> directory
>>
>> What you are seeing is: Git upstream source is modified by Guix (for
>> instance, patches are applied or files are removed; in the field
>> 'origin') and "guix build -S" returns what Guix actually builds, not
>> what upstream provides. Therefore, in this case, the modified source
>> is returned as compressed archive. However, when using the
>> transformation 'with-latest', in this case, "guix build -S
>> --with-latest" returns what upstream provides, thus a directory (or
>> something else as a file).
>
> I looked source again, just because of "upstream-source-compiler" don't support
> git source package, all will become to use url-fetch.

[...]

Toggle quote (7 lines)
> I'm have no idea how to change it, so i just check if package is
> git-source, use "git-checkout" instead of "upstream-source".

>> Maybe I miss something, but from me, the inconsistency comes from the
>> behavior of "guix build -S", not about the behaviour of 'with-latest'
>> transformation. And I also miss why the build would fail.

I am sorry if I misread you. What are you trying to solve?


Cheers,
simon
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 47754@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 47754
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch