unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#55139: package-location is wrong for transformed packages
@ 2022-04-27  1:48 Maxim Cournoyer
  2022-04-27 12:23 ` Liliana Marie Prikler
  2022-05-02 20:57 ` Ludovic Courtès
  0 siblings, 2 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2022-04-27  1:48 UTC (permalink / raw)
  To: 55139

Hi Guix!

--8<---------------cut here---------------start------------->8---
> ,import (gnu packages) (guix packages)
> (car (find-packages-by-name "python2-pyalsaaudio"))
$1 = #<package python2-pyalsaaudio@0.8.4 gnu/packages/audio.scm:4327 7f2b76fab160>
> (package-definition-location-code package $1)
$2 = #f
> (package-definition-location $2)
$3 = #<<location> file: "gnu/packages/audio.scm" line: 4327 column: 2>
--8<---------------cut here---------------end--------------->8---

This is wrong though, and gives the location of the parent package (the
one it inherited from).  This seems to be made on purpose (?) given the
code in (gnu build-system python):

--8<---------------cut here---------------start------------->8---
(package/inherit p
        (location (package-location p))

        ^ Here, we explicitly set the location to that of its parent.
        
        (name (let ((name (package-name p)))
                (string-append new-prefix
                               (if (string-prefix? old-prefix name)
                                   (substring name
                                              (string-length old-prefix))
                                   name))))
        (arguments
         (let ((python (if (promise? python)
                           (force python)
                           python)))
           (ensure-keyword-arguments (package-arguments p)
                                     `(#:python ,python)))))
--8<---------------cut here---------------end--------------->8---

Another related issue for package-with-python2 packages:

--8<---------------cut here---------------start------------->8---
> (package-definition-location-code $1)
$4 = #f
--8<---------------cut here---------------end--------------->8---

I was expecting to use this to get rid of all leaf Python 2 packages,
but it seems that may not work (as easily as I'd hoped).

Thanks,

Maxim




^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#55139: package-location is wrong for transformed packages
  2022-04-27  1:48 bug#55139: package-location is wrong for transformed packages Maxim Cournoyer
@ 2022-04-27 12:23 ` Liliana Marie Prikler
  2022-05-02 20:57 ` Ludovic Courtès
  1 sibling, 0 replies; 6+ messages in thread
From: Liliana Marie Prikler @ 2022-04-27 12:23 UTC (permalink / raw)
  To: Maxim Cournoyer, 55139

Am Dienstag, dem 26.04.2022 um 21:48 -0400 schrieb Maxim Cournoyer:
> Hi Guix!
> 
> --8<---------------cut here---------------start------------->8---
> > ,import (gnu packages) (guix packages)
> > (car (find-packages-by-name "python2-pyalsaaudio"))
> $1 = #<package python2-pyalsaaudio@0.8.4 gnu/packages/audio.scm:4327
> 7f2b76fab160>
> > (package-definition-location-code package $1)
> $2 = #f
> > (package-definition-location $2)
> $3 = #<<location> file: "gnu/packages/audio.scm" line: 4327 column:
> 2>
> --8<---------------cut here---------------end--------------->8---
> 
> This is wrong though, and gives the location of the parent package
> (the one it inherited from).  This seems to be made on purpose (?)
> given the code in (gnu build-system python):
I'm pretty sure that this is done so that `guix edit' points you to the
package you want to edit rather than its wrapper.  While thus
incorrect, it is most often what you want.  Also, the wrapper should be
in its vicinity (usually the next package).

> --8<---------------cut here---------------start------------->8---
> (package/inherit p
>         (location (package-location p))
> 
>         ^ Here, we explicitly set the location to that of its parent.
>         
>         (name (let ((name (package-name p)))
>                 (string-append new-prefix
>                                (if (string-prefix? old-prefix name)
>                                    (substring name
>                                               (string-length old-
> prefix))
>                                    name))))
>         (arguments
>          (let ((python (if (promise? python)
>                            (force python)
>                            python)))
>            (ensure-keyword-arguments (package-arguments p)
>                                      `(#:python ,python)))))
> --8<---------------cut here---------------end--------------->8---
> 
> Another related issue for package-with-python2 packages:
> 
> --8<---------------cut here---------------start------------->8---
> > (package-definition-location-code $1)
> $4 = #f
> --8<---------------cut here---------------end--------------->8---
> 
> I was expecting to use this to get rid of all leaf Python 2 packages,
> but it seems that may not work (as easily as I'd hoped).
Note, that you can use guix graphs to detect leaves and then grep for
the variable name.  This still requires you to use Emacs for deleting
some three lines rather than doing so programmatically.

However, given that you have the location, you could try to filter out
the variable name, then detect whether it's in a package-with-python2
call within the same file.

Finally, you can try to just locally comment out that setter and it
might return the "true" path.  Note that I haven't tested this.  Since
you're probably using this for a more or less one-time script anyway, I
wouldn't be too bothered about it being a dirty hack.

Cheers :)




^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#55139: package-location is wrong for transformed packages
  2022-04-27  1:48 bug#55139: package-location is wrong for transformed packages Maxim Cournoyer
  2022-04-27 12:23 ` Liliana Marie Prikler
@ 2022-05-02 20:57 ` Ludovic Courtès
  2022-05-22  5:16   ` Maxim Cournoyer
  1 sibling, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2022-05-02 20:57 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 55139

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

>> ,import (gnu packages) (guix packages)
>> (car (find-packages-by-name "python2-pyalsaaudio"))
> $1 = #<package python2-pyalsaaudio@0.8.4 gnu/packages/audio.scm:4327 7f2b76fab160>
>> (package-definition-location-code package $1)
> $2 = #f
>> (package-definition-location $2)
> $3 = #<<location> file: "gnu/packages/audio.scm" line: 4327 column: 2>
>
>
> This is wrong though, and gives the location of the parent package (the
> one it inherited from).  This seems to be made on purpose (?) given the
> code in (gnu build-system python):
>
> (package/inherit p
>         (location (package-location p))
>
>         ^ Here, we explicitly set the location to that of its parent.

Indeed, that’s on purpose; the rationale is that it’s more useful to see
the location of the original package (the Python 3 variant) than always
this one line in gnu/build-system/python.scm.

> Another related issue for package-with-python2 packages:
>
>> (package-definition-location-code $1)
> $4 = #f

Yes, I see it’s annoying, but that’s expected.

> I was expecting to use this to get rid of all leaf Python 2 packages,
> but it seems that may not work (as easily as I'd hoped).

You were willing to have a script that would automatically delete the
relevant lines, right?

It’s kinda silly but I think the script will have to estimate the
definition location by looking for “(define-public python2-…”.

HTH,
Ludo’.




^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#55139: package-location is wrong for transformed packages
  2022-05-02 20:57 ` Ludovic Courtès
@ 2022-05-22  5:16   ` Maxim Cournoyer
  2022-05-23 13:28     ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Maxim Cournoyer @ 2022-05-22  5:16 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 55139

Hi,

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

> Hi,
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
>
>>> ,import (gnu packages) (guix packages)
>>> (car (find-packages-by-name "python2-pyalsaaudio"))
>> $1 = #<package python2-pyalsaaudio@0.8.4 gnu/packages/audio.scm:4327 7f2b76fab160>
>>> (package-definition-location-code package $1)
>> $2 = #f
>>> (package-definition-location $2)
>> $3 = #<<location> file: "gnu/packages/audio.scm" line: 4327 column: 2>
>>
>>
>> This is wrong though, and gives the location of the parent package (the
>> one it inherited from).  This seems to be made on purpose (?) given the
>> code in (gnu build-system python):
>>
>> (package/inherit p
>>         (location (package-location p))
>>
>>         ^ Here, we explicitly set the location to that of its parent.
>
> Indeed, that’s on purpose; the rationale is that it’s more useful to see
> the location of the original package (the Python 3 variant) than always
> this one line in gnu/build-system/python.scm.
>
>> Another related issue for package-with-python2 packages:
>>
>>> (package-definition-location-code $1)
>> $4 = #f
>
> Yes, I see it’s annoying, but that’s expected.
>
>> I was expecting to use this to get rid of all leaf Python 2 packages,
>> but it seems that may not work (as easily as I'd hoped).
>
> You were willing to have a script that would automatically delete the
> relevant lines, right?
>
> It’s kinda silly but I think the script will have to estimate the
> definition location by looking for “(define-public python2-…”.

Yeah, I ended up with this [0]:

--8<---------------cut here---------------start------------->8---
(define (locate-package-via-git name)
  "Return the location object corresponding to package NAME, searched via git."
  (let* ((input-pipe (open-pipe* OPEN_READ
				 "git" "grep" "-n" "--column"
                                 (format #f "^(define-public ~a$" name)))
	 (output (get-string-all input-pipe)) ;file:line:column:match
	 (exit-val (status:exit-val (close-pipe input-pipe))))
    (case exit-val
      ((0)
       (let ((components (string-split output #\:)))
         (location
          (first components)                   ;file
          (string->number (second components)) ;1-indexed line
          ;; FIXME: Comment discrepancy in (guix diagnostics), which
          ;; says the column is 0-indexed.
          (and=> (string->number (third components)) 1-)))) ;0-indexed column
      ((1) #f)                                            ;no match
      (else (error "git grep failed with status" exit-val)))))
--8<---------------cut here---------------end--------------->8---

and it does feel silly to have to shell out to git, but it did the job.

Thanks,

Maxim

[0]  https://notabug.org/apteryx/guix-api-examples/src/master/purge-python2-packages.scm#L42




^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#55139: package-location is wrong for transformed packages
  2022-05-22  5:16   ` Maxim Cournoyer
@ 2022-05-23 13:28     ` Ludovic Courtès
  2022-06-08 21:29       ` Maxim Cournoyer
  0 siblings, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2022-05-23 13:28 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 55139

Hi!

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

> Yeah, I ended up with this [0]:
>
> (define (locate-package-via-git name)
>   "Return the location object corresponding to package NAME, searched via git."
>   (let* ((input-pipe (open-pipe* OPEN_READ
> 				 "git" "grep" "-n" "--column"
>                                  (format #f "^(define-public ~a$" name)))
> 	 (output (get-string-all input-pipe)) ;file:line:column:match
> 	 (exit-val (status:exit-val (close-pipe input-pipe))))
>     (case exit-val
>       ((0)
>        (let ((components (string-split output #\:)))
>          (location
>           (first components)                   ;file
>           (string->number (second components)) ;1-indexed line
>           ;; FIXME: Comment discrepancy in (guix diagnostics), which
>           ;; says the column is 0-indexed.
>           (and=> (string->number (third components)) 1-)))) ;0-indexed column
>       ((1) #f)                                            ;no match
>       (else (error "git grep failed with status" exit-val)))))
>
> and it does feel silly to have to shell out to git, but it did the job.
>
> Thanks,
>
> Maxim
>
> [0]  https://notabug.org/apteryx/guix-api-examples/src/master/purge-python2-packages.scm#L42

Nice, it’s good to have these examples—and hopefully we’ll soon be able
to remove a whole bunch of ‘python2-’ packages!

As for ‘package-definition-location’, I don’t think we can reasonably do
any better, so I’m tempted to close the bug.

WDYT?

Ludo’.




^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#55139: package-location is wrong for transformed packages
  2022-05-23 13:28     ` Ludovic Courtès
@ 2022-06-08 21:29       ` Maxim Cournoyer
  0 siblings, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2022-06-08 21:29 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 55139-done

Hi Ludovic,

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

> Hi!
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
>
>> Yeah, I ended up with this [0]:
>>
>> (define (locate-package-via-git name)
>>   "Return the location object corresponding to package NAME, searched via git."
>>   (let* ((input-pipe (open-pipe* OPEN_READ
>> 				 "git" "grep" "-n" "--column"
>>                                  (format #f "^(define-public ~a$" name)))
>> 	 (output (get-string-all input-pipe)) ;file:line:column:match
>> 	 (exit-val (status:exit-val (close-pipe input-pipe))))
>>     (case exit-val
>>       ((0)
>>        (let ((components (string-split output #\:)))
>>          (location
>>           (first components)                   ;file
>>           (string->number (second components)) ;1-indexed line
>>           ;; FIXME: Comment discrepancy in (guix diagnostics), which
>>           ;; says the column is 0-indexed.
>>           (and=> (string->number (third components)) 1-)))) ;0-indexed column
>>       ((1) #f)                                            ;no match
>>       (else (error "git grep failed with status" exit-val)))))
>>
>> and it does feel silly to have to shell out to git, but it did the job.
>>
>> Thanks,
>>
>> Maxim
>>
>> [0]  https://notabug.org/apteryx/guix-api-examples/src/master/purge-python2-packages.scm#L42
>
> Nice, it’s good to have these examples—and hopefully we’ll soon be able
> to remove a whole bunch of ‘python2-’ packages!
>
> As for ‘package-definition-location’, I don’t think we can reasonably do
> any better, so I’m tempted to close the bug.

OK; thanks for your input.

At least it'll be recorded somewhere for the next person stumbling on
this behavior to discover.

Maxim




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-06-08 21:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-27  1:48 bug#55139: package-location is wrong for transformed packages Maxim Cournoyer
2022-04-27 12:23 ` Liliana Marie Prikler
2022-05-02 20:57 ` Ludovic Courtès
2022-05-22  5:16   ` Maxim Cournoyer
2022-05-23 13:28     ` Ludovic Courtès
2022-06-08 21:29       ` Maxim Cournoyer

Code repositories for project(s) associated with this 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).