help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Counting Packages yields wrong result


From: Alex Kost
Subject: Re: Counting Packages yields wrong result
Date: Tue, 23 Aug 2016 13:56:39 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Björn Höfling (2016-08-23 00:10 +0300) wrote:

> I tried to count the number of packages in GuixSD for myself, but my
> result differs from the package list on the home page
> (https://www.gnu.org/software/guix/packages/). Why?
>
> Here is how I did it:
>
> #!/run/current-system/profile/bin/guile -s
> !#
>
> ; Counting number of packages in current system.
> ; This also includes packages with the same name,
> ; but different version string.
>
> (use-modules (gnu))
> (use-modules (guix))

Only (use-modules (gnu packages)) is needed.

> (display "Number of packages: ")
> (define cnt
>   (fold-packages
>     (lambda (pkg ctr)
>       (+ 1 ctr))
>     0))
> (display cnt)
> (newline)
>
> Is that the correct way to walk through the list of packages anyway?

Yes (btw it gives me 3886 on the latest guix master).

Also note that it will also count your packages placed in
GUIX_PACKAGE_PATH.  So to make a pure experiment you need to unset this
environment variable at first (if you use it of course).

> I always get the number 3747 back, even after a guix pull. The homepage
> gives me 3881, and counting.
>
> guix --version give me:
>
> 20160822.18
>
>
> Looking at %load-path I figured out that
>
> /run/current-system/profile/share/guile/site/2.0/guix
>
> points to the ...guix-0.11.0-1 store path.
>
> Is that my problem? How can I script over the newest pull?

"guix pull" updates "~/.config/guix/latest" link, and when you run
"guix" command, it uses the packages from that directory.  So after
"guix pull" you'll get the latest package recipes for "guix ..."
commands.

But "guix pull" doesn't influence your guile script that uses guix
modules from some directories that come from GUILE_LOAD_PATH and
GUILE_LOAD_COMPILED_PATH.  So to make your script use those fresh
"guix-pulled" modules, you can modify these environment variables to
include "/home/<you>/.config/guix/latest".

An alternative is to use guix directly from a git checkout.
See (info "(guix) Building from Git") for details.

Finally, note that 'fold-packages' folds over package objects, while
packages may have multiple outputs (for example "git" has 4 outputs),
which can be installed separately, so if you consider each output as a
separate package, then the number is bigger.  The following blatant
violation of functional style gives me 4078 outputs:

(use-modules
 (gnu packages)
 (guix packages))

(define number-of-packages 0)
(define number-of-outputs 0)

(fold-packages
 (lambda (package _)
   (set! number-of-packages (1+ number-of-packages))
   (set! number-of-outputs (+ number-of-outputs
                              (length (package-outputs package)))))
 #f)

(format #t "Number of packages: ~d~%" number-of-packages)
(format #t "Number of outputs: ~d~%" number-of-outputs)

-- 
Alex



reply via email to

[Prev in Thread] Current Thread [Next in Thread]