Subject: bug#67221: Package identity transformation produces different derivation

From: Ulf Herrman <[email-masked]>
Date: Wed, 15 Nov 2023 21:56:06 -0600

$ guix build --no-grafts --derivations -e \
     '(begin
       (use-modules (guix packages) (gnu packages gtk))
       ((package-mapping identity) cairo-sans-poppler))' \
       -e '(@ (gnu packages gtk) cairo-sans-poppler)'
=>
/gnu/store/51hwf2mc2ig76a3nm86msv4z9az3s0j3-cairo-1.16.0.drv
/gnu/store/q78ziqcg2dvi2lzj18hzdld85bcydzwk-cairo-1.16.0.drv

Some interesting notes:

1. (package-mapping identity #:deep? #t) *does* produce the same
   derivation.
2. bag->derivation's `delete-duplicates' call uses `input=?', but its
   input objects in the second tuple position are all <gexp-input>s
   produced by `expand-input'.  Consequently, `input=?' will fall back
   to using `equal?' instead of `derivation=?'.  I don't know to what
   extent this has to do with the observed bug.

- ulfvonbelow