unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
From: Alex Kost <alezost@gmail.com>
To: "Björn Höfling" <bjoern.hoefling@bjoernhoefling.de>
Cc: Guix-Help <help-guix@gnu.org>
Subject: Re: Counting Packages yields wrong result
Date: Tue, 23 Aug 2016 13:56:39 +0300	[thread overview]
Message-ID: <871t1fg3dk.fsf@gmail.com> (raw)
In-Reply-To: <20160822231044.4ac945f9@alma-ubu> ("Björn Höfling"'s message of "Mon, 22 Aug 2016 23:10:44 +0200")

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	other threads:[~2016-08-23 10:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-22 21:10 Counting Packages yields wrong result Björn Höfling
2016-08-23 10:56 ` Alex Kost [this message]
2016-08-25 20:01   ` Björn Höfling

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=871t1fg3dk.fsf@gmail.com \
    --to=alezost@gmail.com \
    --cc=bjoern.hoefling@bjoernhoefling.de \
    --cc=help-guix@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).