What about these patches?  Should the first patch also test the
following case?

+                (let ((numbers (generation-numbers profile)))
+                  (if (equal? numbers '(0))
+                      (exit 1)
+                      (for-each list-generation numbers))))

From f42056aa768a405a893b5846dad8f8fa576b1156 Mon Sep 17 00:00:00 2001
From: Nikita Karetnikov <nik...@karetnikov.org>
Date: Tue, 24 Sep 2013 22:11:16 +0000
Subject: [PATCH 1/2] guix package: Exit with 1 when a generation cannot be
 listed.

* guix/scripts/package.scm (guix-package)[process-query]: Exit with 1
  when a generation does not exist or the profile points to the zeroth
  generation.
* tests/guix-package.sh: Test the former case.
---
 guix/scripts/package.scm |   11 ++++++++---
 tests/guix-package.sh    |    4 ++++
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 1d00e39..1f21890 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -977,11 +977,16 @@ more information.~%"))
                 (leave (_ "profile '~a' does not exist~%")
                        profile))
                ((string-null? pattern)
-                (for-each list-generation
-                          (generation-numbers profile)))
+                (let ((numbers (generation-numbers profile)))
+                  (if (equal? numbers '(0))
+                      (exit 1)
+                      (for-each list-generation numbers))))
                ((matching-generations pattern profile)
                 =>
-                (cut for-each list-generation <>))
+                (lambda (numbers)
+                  (if (null-list? numbers)
+                      (exit 1)
+                      (for-each list-generation numbers))))
                (else
                 (leave (_ "invalid syntax: ~a~%")
                        pattern)))
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index b09a9c0..f1f7ee6 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -85,6 +85,10 @@ then
     test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \
         = "  guile-bootstrap"
 
+    # Exit with 1 when a generation does not exist.
+    if guix package -p "$profile" --list-generations=42;
+    then false; else true; fi
+
     # Remove a package.
     guix package --bootstrap -p "$profile" -r "guile-bootstrap"
     test -L "$profile-3-link"
-- 
1.7.9.5

From bea0168c28932921e6e2d6dcf3e9a26c555b698c Mon Sep 17 00:00:00 2001
From: Nikita Karetnikov <nik...@karetnikov.org>
Date: Tue, 24 Sep 2013 22:18:09 +0000
Subject: [PATCH 2/2] guix package: Do not list the zeroth generation.

* guix/scripts/package.scm (guix-package)[process-query]: Change
  'list-generation' to not list the zeroth generation.
* tests/guix-package.sh: Test it.
* doc/guix.texi (Invoking guix package): Document it, and use the
  right term when talking about generations.
---
 doc/guix.texi            |    8 ++++----
 guix/scripts/package.scm |    2 +-
 tests/guix-package.sh    |    3 +++
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 90016a4..442cef2 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -583,9 +583,8 @@ When combined with options such as @code{--install}, roll back occurs
 before any other actions.
 
 When rolling back from the first generation that actually contains
-installed packages, the profile is made to point to the @dfn{empty
-profile}, also known as @dfn{profile zero}---i.e., it contains no files
-apart from its own meta-data.
+installed packages, the profile is made to point to the @dfn{zeroth
+generation}, which contains no files apart from its own meta-data.
 
 Installing, removing, or upgrading packages from a generation that has
 been rolled back to overwrites previous future generations.  Thus, the
@@ -683,7 +682,8 @@ Multiple Outputs}), and the source location of its definition.
 @itemx -l [@var{pattern}]
 Return a list of generations along with their creation dates; for each
 generation, show the installed packages, with the most recently
-installed packages shown last.
+installed packages shown last.  Note that the zeroth generation is never
+shown.
 
 For each installed package, print the following items, separated by
 tabs: the name of a package, its version string, the part of the package
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 1f21890..dab3d5b 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -955,7 +955,7 @@ more information.~%"))
       (match (assoc-ref opts 'query)
         (('list-generations pattern)
          (define (list-generation number)
-           (begin
+           (unless (zero? number)
              (format #t (_ "Generation ~a\t~a~%") number
                      (date->string
                       (time-utc->date
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index f1f7ee6..7130926 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -111,6 +111,9 @@ then
         test "`readlink_base "$profile"`" = "$profile-0-link"
     done
 
+    # Test that '--list-generations' does not output the zeroth generation.
+    test -z "`guix package -p "$profile" -l 0`"
+
     # Reinstall after roll-back to the empty profile.
     guix package --bootstrap -p "$profile" -e "$boot_make"
     test "`readlink_base "$profile"`" = "$profile-1-link"
-- 
1.7.9.5

Attachment: pgpAxfn31RGJY.pgp
Description: PGP signature

Reply via email to