diff mbox series

[bug#59318] etc: committer: Add --package-directory flag.

Message ID 20221116185853.13957-1-antero@mailbox.org
State New
Headers show
Series [bug#59318] etc: committer: Add --package-directory flag. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success
cbaines/issue success View issue

Commit Message

Antero Mejr Nov. 16, 2022, 6:58 p.m. UTC
* etc/committer.scm.in (main)[pkg-dir]: New variable.
(main): Use it.
(diff-info)[package-dir]: New argument.
(change-commit-message)[package-dir]: New argument.
(add-commit-message)[package-dir]: New argument.
(remove-commit-message)[package-dir]: New argument.
(custom-commit-message)[package-dir]: New argument.
---
Make the hard-coded "gnu" part of the package directory path into a flag.
This allows committer.scm to be used for channels where the package directory
is not "gnu".

 etc/committer.scm.in | 46 +++++++++++++++++++++++++++-----------------
 1 file changed, 28 insertions(+), 18 deletions(-)

Comments

Liliana Marie Prikler Nov. 17, 2022, 12:27 p.m. UTC | #1
Am Mittwoch, dem 16.11.2022 um 18:58 +0000 schrieb Antero Mejr:
> * etc/committer.scm.in (main)[pkg-dir]: New variable.
> (main): Use it.
> (diff-info)[package-dir]: New argument.
> (change-commit-message)[package-dir]: New argument.
> (add-commit-message)[package-dir]: New argument.
> (remove-commit-message)[package-dir]: New argument.
> (custom-commit-message)[package-dir]: New argument.
This could be simplified to (diff-info, change-commit-message, ...):
Honour package-dir.
> ---
> Make the hard-coded "gnu" part of the package directory path into a
> flag.
> This allows committer.scm to be used for channels where the package
> directory is not "gnu".
Note that instead of forwarding as you did, you could also make
package-dir a parameter and (parameterize ) it.  This has the advantage
that you don't need to forward it in places where it's not immediately
clear to be relevant.
> 
>  etc/committer.scm.in | 46 +++++++++++++++++++++++++++---------------
> --
>  1 file changed, 28 insertions(+), 18 deletions(-)
> 
> diff --git a/etc/committer.scm.in b/etc/committer.scm.in
> index e7f1ca8c45..13021891aa 100755
> --- a/etc/committer.scm.in
> +++ b/etc/committer.scm.in
> @@ -129,7 +129,7 @@ (define* (hunk->patch hunk #:optional (port
> (current-output-port)))
>              file-name file-name file-name file-name
>              (string-join (hunk-diff-lines hunk) ""))))
>  
> -(define (diff-info)
> +(define (diff-info package-dir)
>    "Read the diff and return a list of <hunk> values."
>    (let ((port (open-pipe* OPEN_READ
>                            "git" "diff-files"
> @@ -138,7 +138,7 @@ (define (diff-info)
>                            ;; new definitions with changes to
> existing
>                            ;; definitions.
>                            "--unified=1"
> -                          "--" "gnu")))
> +                          "--" package-dir)))
>      (define (extract-line-number line-tag)
>        (abs (string->number
>              (car (string-split line-tag #\,)))))
> @@ -221,7 +221,8 @@ (define (new-sexp hunk)
>                          (+ (lines-to-first-change hunk)
>                             (hunk-new-line-number hunk))))))
>  
> -(define* (change-commit-message file-name old new #:optional (port
> (current-output-port)))
> +(define* (change-commit-message file-name old new package-dir
> +                                #:optional (port (current-output-
> port)))
>    "Print ChangeLog commit message for changes between OLD and NEW."
>    (define (get-values expr field)
>      (match ((xpath:sxpath `(// ,field quasiquote *)) expr)
> @@ -247,8 +248,8 @@ (define version
>      (and=> ((xpath:sxpath '(// version *any*)) new)
>             first))
>    (format port
> -          "gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
> -          variable-name version file-name variable-name version)
> +          "~a: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
> +          package-dir variable-name version file-name variable-name
> version)
>    (for-each (lambda (field)
>                (let ((old-values (get-values old field))
>                      (new-values (get-values new field)))
> @@ -272,21 +273,22 @@ (define version
>                                            (listify added))))))))))
>              '(inputs propagated-inputs native-inputs)))
>  
> -(define* (add-commit-message file-name variable-name
> +(define* (add-commit-message file-name variable-name package-dir
>                               #:optional (port (current-output-
> port)))
>    "Print ChangeLog commit message for a change to FILE-NAME adding a
>  definition."
> -  (format port "gnu: Add ~a.~%~%* ~a (~a): New variable.~%"
> -          variable-name file-name variable-name))
> +  (format port "~a: Add ~a.~%~%* ~a (~a): New variable.~%"
> +          package-dir variable-name file-name variable-name))
>  
> -(define* (remove-commit-message file-name variable-name
> +(define* (remove-commit-message file-name variable-name package-dir
>                                  #:optional (port (current-output-
> port)))
>    "Print ChangeLog commit message for a change to FILE-NAME removing
> a
>  definition."
> -  (format port "gnu: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
> -          variable-name file-name variable-name))
> +  (format port "~a: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
> +          package-dir variable-name file-name variable-name))
>  
>  (define* (custom-commit-message file-name variable-name message
> changelog
> +                                package-dir
>                                  #:optional (port (current-output-
> port)))
>    "Print custom commit message for a change to VARIABLE-NAME in
> FILE-NAME, using
>  MESSAGE as the commit message and CHANGELOG as the body of the
> ChangeLog
> @@ -301,7 +303,7 @@ (define (changelog-has-location? changelog)
>  
>    (let* ((message (trim message))
>           (changelog (if changelog (trim changelog) message))
> -         (message/f (format #f "gnu: ~a: ~a." variable-name
> message))
> +         (message/f (format #f "~a: ~a: ~a." package-dir variable-
> name message))
>           (changelog/f (if (changelog-has-location? changelog)
>                            (format #f "* ~a (~a)~a."
>                                    file-name variable-name changelog)
You're repeating the same work with each message style.  IMHO it would
make more sense to have a procedure or syntax that prepends it instead.
> @@ -349,16 +351,23 @@ (define (new+old+hunks hunks)
>  (define %delay 1000)
>  
>  (define (main . args)
> +  (define pkg-dir
> +    (match args
> +      (("--package-directory" pkg-dir ...)
> +       (begin (set! args (cddr args))
> +              (car pkg-dir)))
> +      (_ "gnu")))
> +
Using a proper option grammar in combination with getopt-long is
probably a better idea ;)
>    (define* (change-commit-message* file-name old new #:rest rest)
>      (let ((changelog #f))
>        (match args
>          ((or (message changelog) (message))
>           (apply custom-commit-message
> -                file-name (second old) message changelog rest))
> +                file-name (second old) message changelog pkg-dir
> rest))
>          (_
> -         (apply change-commit-message file-name old new rest)))))
> +         (apply change-commit-message file-name old new pkg-dir
> rest)))))
>  
> -  (match (diff-info)
> +  (match (diff-info pkg-dir)
>      (()
>       (display "Nothing to be done.\n" (current-error-port)))
>      (hunks
> @@ -373,7 +382,7 @@ (define* (change-commit-message* file-name old
> new #:rest rest)
>                       (commit-message-proc (match (hunk-type hunk)
>                                              ('addition add-commit-
> message)
>                                              ('removal remove-commit-
> message))))
> -            (commit-message-proc (hunk-file-name hunk) variable-
> name)
> +            (commit-message-proc (hunk-file-name hunk) variable-name
> pkg-dir)
>              (let ((port (open-pipe* OPEN_WRITE
>                                      "git" "apply"
>                                      "--cached"
> @@ -383,7 +392,8 @@ (define* (change-commit-message* file-name old
> new #:rest rest)
>                  (error "Cannot apply")))
>  
>              (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F"
> "-")))
> -              (commit-message-proc (hunk-file-name hunk) variable-
> name port)
> +              (commit-message-proc (hunk-file-name hunk) variable-
> name pkg-dir
> +                                   port)
>                (usleep %delay)
>                (unless (eqv? 0 (status:exit-val (close-pipe port)))
>                  (error "Cannot commit"))))
> @@ -423,6 +433,6 @@ (define copyright-line
>                 (error "Cannot commit")))))))
>        ;; XXX: we recompute the hunks here because previous
>        ;; insertions lead to offsets.
> -      (new+old+hunks (diff-info))))))
> +      (new+old+hunks (diff-info pkg-dir))))))
>  
>  (apply main (cdr (command-line)))
Cheers
Maxim Cournoyer March 21, 2023, 1:08 p.m. UTC | #2
Hello Antero,

Liliana Marie Prikler <liliana.prikler@ist.tugraz.at> writes:

> Am Mittwoch, dem 16.11.2022 um 18:58 +0000 schrieb Antero Mejr:
>> * etc/committer.scm.in (main)[pkg-dir]: New variable.
>> (main): Use it.
>> (diff-info)[package-dir]: New argument.
>> (change-commit-message)[package-dir]: New argument.
>> (add-commit-message)[package-dir]: New argument.
>> (remove-commit-message)[package-dir]: New argument.
>> (custom-commit-message)[package-dir]: New argument.
> This could be simplified to (diff-info, change-commit-message, ...):
> Honour package-dir.
>> ---
>> Make the hard-coded "gnu" part of the package directory path into a
>> flag.
>> This allows committer.scm to be used for channels where the package
>> directory is not "gnu".
> Note that instead of forwarding as you did, you could also make
> package-dir a parameter and (parameterize ) it.  This has the advantage
> that you don't need to forward it in places where it's not immediately
> clear to be relevant.
>> 
>>  etc/committer.scm.in | 46 +++++++++++++++++++++++++++---------------
>> --
>>  1 file changed, 28 insertions(+), 18 deletions(-)
>> 
>> diff --git a/etc/committer.scm.in b/etc/committer.scm.in
>> index e7f1ca8c45..13021891aa 100755
>> --- a/etc/committer.scm.in
>> +++ b/etc/committer.scm.in
>> @@ -129,7 +129,7 @@ (define* (hunk->patch hunk #:optional (port
>> (current-output-port)))
>>              file-name file-name file-name file-name
>>              (string-join (hunk-diff-lines hunk) ""))))
>>  
>> -(define (diff-info)
>> +(define (diff-info package-dir)
>>    "Read the diff and return a list of <hunk> values."
>>    (let ((port (open-pipe* OPEN_READ
>>                            "git" "diff-files"
>> @@ -138,7 +138,7 @@ (define (diff-info)
>>                            ;; new definitions with changes to
>> existing
>>                            ;; definitions.
>>                            "--unified=1"
>> -                          "--" "gnu")))
>> +                          "--" package-dir)))
>>      (define (extract-line-number line-tag)
>>        (abs (string->number
>>              (car (string-split line-tag #\,)))))
>> @@ -221,7 +221,8 @@ (define (new-sexp hunk)
>>                          (+ (lines-to-first-change hunk)
>>                             (hunk-new-line-number hunk))))))
>>  
>> -(define* (change-commit-message file-name old new #:optional (port
>> (current-output-port)))
>> +(define* (change-commit-message file-name old new package-dir
>> +                                #:optional (port (current-output-
>> port)))
>>    "Print ChangeLog commit message for changes between OLD and NEW."
>>    (define (get-values expr field)
>>      (match ((xpath:sxpath `(// ,field quasiquote *)) expr)
>> @@ -247,8 +248,8 @@ (define version
>>      (and=> ((xpath:sxpath '(// version *any*)) new)
>>             first))
>>    (format port
>> -          "gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
>> -          variable-name version file-name variable-name version)
>> +          "~a: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
>> +          package-dir variable-name version file-name variable-name
>> version)
>>    (for-each (lambda (field)
>>                (let ((old-values (get-values old field))
>>                      (new-values (get-values new field)))
>> @@ -272,21 +273,22 @@ (define version
>>                                            (listify added))))))))))
>>              '(inputs propagated-inputs native-inputs)))
>>  
>> -(define* (add-commit-message file-name variable-name
>> +(define* (add-commit-message file-name variable-name package-dir
>>                               #:optional (port (current-output-
>> port)))
>>    "Print ChangeLog commit message for a change to FILE-NAME adding a
>>  definition."
>> -  (format port "gnu: Add ~a.~%~%* ~a (~a): New variable.~%"
>> -          variable-name file-name variable-name))
>> +  (format port "~a: Add ~a.~%~%* ~a (~a): New variable.~%"
>> +          package-dir variable-name file-name variable-name))
>>  
>> -(define* (remove-commit-message file-name variable-name
>> +(define* (remove-commit-message file-name variable-name package-dir
>>                                  #:optional (port (current-output-
>> port)))
>>    "Print ChangeLog commit message for a change to FILE-NAME removing
>> a
>>  definition."
>> -  (format port "gnu: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
>> -          variable-name file-name variable-name))
>> +  (format port "~a: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
>> +          package-dir variable-name file-name variable-name))
>>  
>>  (define* (custom-commit-message file-name variable-name message
>> changelog
>> +                                package-dir
>>                                  #:optional (port (current-output-
>> port)))
>>    "Print custom commit message for a change to VARIABLE-NAME in
>> FILE-NAME, using
>>  MESSAGE as the commit message and CHANGELOG as the body of the
>> ChangeLog
>> @@ -301,7 +303,7 @@ (define (changelog-has-location? changelog)
>>  
>>    (let* ((message (trim message))
>>           (changelog (if changelog (trim changelog) message))
>> -         (message/f (format #f "gnu: ~a: ~a." variable-name
>> message))
>> +         (message/f (format #f "~a: ~a: ~a." package-dir variable-
>> name message))
>>           (changelog/f (if (changelog-has-location? changelog)
>>                            (format #f "* ~a (~a)~a."
>>                                    file-name variable-name changelog)
> You're repeating the same work with each message style.  IMHO it would
> make more sense to have a procedure or syntax that prepends it instead.
>> @@ -349,16 +351,23 @@ (define (new+old+hunks hunks)
>>  (define %delay 1000)
>>  
>>  (define (main . args)
>> +  (define pkg-dir
>> +    (match args
>> +      (("--package-directory" pkg-dir ...)
>> +       (begin (set! args (cddr args))
>> +              (car pkg-dir)))
>> +      (_ "gnu")))
>> +
> Using a proper option grammar in combination with getopt-long is
> probably a better idea ;)
>>    (define* (change-commit-message* file-name old new #:rest rest)
>>      (let ((changelog #f))
>>        (match args
>>          ((or (message changelog) (message))
>>           (apply custom-commit-message
>> -                file-name (second old) message changelog rest))
>> +                file-name (second old) message changelog pkg-dir
>> rest))
>>          (_
>> -         (apply change-commit-message file-name old new rest)))))
>> +         (apply change-commit-message file-name old new pkg-dir
>> rest)))))
>>  
>> -  (match (diff-info)
>> +  (match (diff-info pkg-dir)
>>      (()
>>       (display "Nothing to be done.\n" (current-error-port)))
>>      (hunks
>> @@ -373,7 +382,7 @@ (define* (change-commit-message* file-name old
>> new #:rest rest)
>>                       (commit-message-proc (match (hunk-type hunk)
>>                                              ('addition add-commit-
>> message)
>>                                              ('removal remove-commit-
>> message))))
>> -            (commit-message-proc (hunk-file-name hunk) variable-
>> name)
>> +            (commit-message-proc (hunk-file-name hunk) variable-name
>> pkg-dir)
>>              (let ((port (open-pipe* OPEN_WRITE
>>                                      "git" "apply"
>>                                      "--cached"
>> @@ -383,7 +392,8 @@ (define* (change-commit-message* file-name old
>> new #:rest rest)
>>                  (error "Cannot apply")))
>>  
>>              (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F"
>> "-")))
>> -              (commit-message-proc (hunk-file-name hunk) variable-
>> name port)
>> +              (commit-message-proc (hunk-file-name hunk) variable-
>> name pkg-dir
>> +                                   port)
>>                (usleep %delay)
>>                (unless (eqv? 0 (status:exit-val (close-pipe port)))
>>                  (error "Cannot commit"))))
>> @@ -423,6 +433,6 @@ (define copyright-line
>>                 (error "Cannot commit")))))))
>>        ;; XXX: we recompute the hunks here because previous
>>        ;; insertions lead to offsets.
>> -      (new+old+hunks (diff-info))))))
>> +      (new+old+hunks (diff-info pkg-dir))))))
>>  
>>  (apply main (cdr (command-line)))
> Cheers

Gentle ping :-).  Could you please address the above review comments and
send a v2?
diff mbox series

Patch

diff --git a/etc/committer.scm.in b/etc/committer.scm.in
index e7f1ca8c45..13021891aa 100755
--- a/etc/committer.scm.in
+++ b/etc/committer.scm.in
@@ -129,7 +129,7 @@  (define* (hunk->patch hunk #:optional (port (current-output-port)))
             file-name file-name file-name file-name
             (string-join (hunk-diff-lines hunk) ""))))
 
-(define (diff-info)
+(define (diff-info package-dir)
   "Read the diff and return a list of <hunk> values."
   (let ((port (open-pipe* OPEN_READ
                           "git" "diff-files"
@@ -138,7 +138,7 @@  (define (diff-info)
                           ;; new definitions with changes to existing
                           ;; definitions.
                           "--unified=1"
-                          "--" "gnu")))
+                          "--" package-dir)))
     (define (extract-line-number line-tag)
       (abs (string->number
             (car (string-split line-tag #\,)))))
@@ -221,7 +221,8 @@  (define (new-sexp hunk)
                         (+ (lines-to-first-change hunk)
                            (hunk-new-line-number hunk))))))
 
-(define* (change-commit-message file-name old new #:optional (port (current-output-port)))
+(define* (change-commit-message file-name old new package-dir
+                                #:optional (port (current-output-port)))
   "Print ChangeLog commit message for changes between OLD and NEW."
   (define (get-values expr field)
     (match ((xpath:sxpath `(// ,field quasiquote *)) expr)
@@ -247,8 +248,8 @@  (define version
     (and=> ((xpath:sxpath '(// version *any*)) new)
            first))
   (format port
-          "gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
-          variable-name version file-name variable-name version)
+          "~a: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
+          package-dir variable-name version file-name variable-name version)
   (for-each (lambda (field)
               (let ((old-values (get-values old field))
                     (new-values (get-values new field)))
@@ -272,21 +273,22 @@  (define version
                                           (listify added))))))))))
             '(inputs propagated-inputs native-inputs)))
 
-(define* (add-commit-message file-name variable-name
+(define* (add-commit-message file-name variable-name package-dir
                              #:optional (port (current-output-port)))
   "Print ChangeLog commit message for a change to FILE-NAME adding a
 definition."
-  (format port "gnu: Add ~a.~%~%* ~a (~a): New variable.~%"
-          variable-name file-name variable-name))
+  (format port "~a: Add ~a.~%~%* ~a (~a): New variable.~%"
+          package-dir variable-name file-name variable-name))
 
-(define* (remove-commit-message file-name variable-name
+(define* (remove-commit-message file-name variable-name package-dir
                                 #:optional (port (current-output-port)))
   "Print ChangeLog commit message for a change to FILE-NAME removing a
 definition."
-  (format port "gnu: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
-          variable-name file-name variable-name))
+  (format port "~a: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
+          package-dir variable-name file-name variable-name))
 
 (define* (custom-commit-message file-name variable-name message changelog
+                                package-dir
                                 #:optional (port (current-output-port)))
   "Print custom commit message for a change to VARIABLE-NAME in FILE-NAME, using
 MESSAGE as the commit message and CHANGELOG as the body of the ChangeLog
@@ -301,7 +303,7 @@  (define (changelog-has-location? changelog)
 
   (let* ((message (trim message))
          (changelog (if changelog (trim changelog) message))
-         (message/f (format #f "gnu: ~a: ~a." variable-name message))
+         (message/f (format #f "~a: ~a: ~a." package-dir variable-name message))
          (changelog/f (if (changelog-has-location? changelog)
                           (format #f "* ~a (~a)~a."
                                   file-name variable-name changelog)
@@ -349,16 +351,23 @@  (define (new+old+hunks hunks)
 (define %delay 1000)
 
 (define (main . args)
+  (define pkg-dir
+    (match args
+      (("--package-directory" pkg-dir ...)
+       (begin (set! args (cddr args))
+              (car pkg-dir)))
+      (_ "gnu")))
+
   (define* (change-commit-message* file-name old new #:rest rest)
     (let ((changelog #f))
       (match args
         ((or (message changelog) (message))
          (apply custom-commit-message
-                file-name (second old) message changelog rest))
+                file-name (second old) message changelog pkg-dir rest))
         (_
-         (apply change-commit-message file-name old new rest)))))
+         (apply change-commit-message file-name old new pkg-dir rest)))))
 
-  (match (diff-info)
+  (match (diff-info pkg-dir)
     (()
      (display "Nothing to be done.\n" (current-error-port)))
     (hunks
@@ -373,7 +382,7 @@  (define* (change-commit-message* file-name old new #:rest rest)
                      (commit-message-proc (match (hunk-type hunk)
                                             ('addition add-commit-message)
                                             ('removal remove-commit-message))))
-            (commit-message-proc (hunk-file-name hunk) variable-name)
+            (commit-message-proc (hunk-file-name hunk) variable-name pkg-dir)
             (let ((port (open-pipe* OPEN_WRITE
                                     "git" "apply"
                                     "--cached"
@@ -383,7 +392,8 @@  (define* (change-commit-message* file-name old new #:rest rest)
                 (error "Cannot apply")))
 
             (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-")))
-              (commit-message-proc (hunk-file-name hunk) variable-name port)
+              (commit-message-proc (hunk-file-name hunk) variable-name pkg-dir
+                                   port)
               (usleep %delay)
               (unless (eqv? 0 (status:exit-val (close-pipe port)))
                 (error "Cannot commit"))))
@@ -423,6 +433,6 @@  (define copyright-line
                (error "Cannot commit")))))))
       ;; XXX: we recompute the hunks here because previous
       ;; insertions lead to offsets.
-      (new+old+hunks (diff-info))))))
+      (new+old+hunks (diff-info pkg-dir))))))
 
 (apply main (cdr (command-line)))