Message ID | 5c26f17bbf1b4cf9872b4a782295260ce337d3fd.1698165008.git.zimon.toutoune@gmail.com |
---|---|
State | New |
Headers | show |
Series | [bug#66592,v2] scripts: archive: Check compatibility of command line options. | expand |
Hi Simon, Simon Tournier <zimon.toutoune@gmail.com> writes: > Fixes <https://issues.guix.gnu.org/66358>. > Reported by Perry, Daniel J <dperry45@gatech.edu>. > > * guix/scripts/archive.scm (guix-archive)[compatible-option]: New procedure. > and use it. > --- > guix/scripts/archive.scm | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/guix/scripts/archive.scm b/guix/scripts/archive.scm > index 2b5a55a23f..466aa9c4d7 100644 > --- a/guix/scripts/archive.scm > +++ b/guix/scripts/archive.scm > @@ -1,6 +1,7 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> > ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> > +;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com> > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -375,8 +376,24 @@ (define-command (guix-archive . args) > (loop (read-line port) > (cons line result))))) > > + (define* (compatible-option options #:key actions) > + "Return the OPTIONS if it is compatible with the list of ACTIONS." > + (let ((some-actions (fold (lambda (action answers) > + (if (assoc-ref options action) > + (cons action answers) > + answers)) > + '() > + actions))) > + (match some-actions > + ((action) > + options) > + ((action other-actions ...) > + (leave (G_ "the options ~{'~s' ~}are exclusive~%") some-actions))))) > + > (with-error-handling > - (let ((opts (parse-command-line args %options (list %default-options)))) > + (let* ((opts (parse-command-line args %options (list %default-options))) > + (opts (compatible-option opts > + #:actions (list 'authorize 'export 'import)))) > (parameterize ((%graft? (assoc-ref opts 'graft?))) > (cond ((assoc-ref opts 'generate-key) > => Looks good from a cursory look, but it seems a nice to test in tests/guix-archive.sh. Could you please send a v3 with some tests for it?
Hi,
On mar., 31 oct. 2023 at 14:01, Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:
> Could you please send a v3 with some tests for it?
Done. WDYT?
Cheers,
simon
diff --git a/guix/scripts/archive.scm b/guix/scripts/archive.scm index 2b5a55a23f..466aa9c4d7 100644 --- a/guix/scripts/archive.scm +++ b/guix/scripts/archive.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -375,8 +376,24 @@ (define-command (guix-archive . args) (loop (read-line port) (cons line result))))) + (define* (compatible-option options #:key actions) + "Return the OPTIONS if it is compatible with the list of ACTIONS." + (let ((some-actions (fold (lambda (action answers) + (if (assoc-ref options action) + (cons action answers) + answers)) + '() + actions))) + (match some-actions + ((action) + options) + ((action other-actions ...) + (leave (G_ "the options ~{'~s' ~}are exclusive~%") some-actions))))) + (with-error-handling - (let ((opts (parse-command-line args %options (list %default-options)))) + (let* ((opts (parse-command-line args %options (list %default-options))) + (opts (compatible-option opts + #:actions (list 'authorize 'export 'import)))) (parameterize ((%graft? (assoc-ref opts 'graft?))) (cond ((assoc-ref opts 'generate-key) =>