From: Sarah Morgensen <iskarian@mgsn.dev>
To: Ricardo Wurmus <rekado@elephly.net>
Cc: 49796@debbugs.gnu.org
Subject: [bug#49796] [PATCH 1/2] etc/committer: Support custom commit messages.
Date: Mon, 02 Aug 2021 11:46:04 -0700 [thread overview]
Message-ID: <86v94n4rdf.fsf@mgsn.dev> (raw)
In-Reply-To: <58ef8300317d11726eb2e9cd3e776485aaa95971.1627764883.git.iskarian@mgsn.dev> (Sarah Morgensen's message of "Sat, 31 Jul 2021 14:00:42 -0700")
Hi Ricardo,
I meant to X-Debbugs-CC you on this originally since it looks like
etc/committer.scm is mostly your work, but I forgot. Hope you don't mind
the ping.
Sarah Morgensen <iskarian@mgsn.dev> writes:
> Allow custom change commit messages by supplying a commit message and
> optionally a changelog message as arguments.
>
> * etc/committer.scm.in (break-string-with-newlines)
> (custom-commit-message): New procedures.
> (main)[change-commit-message*]: New sub-procedure. Use them.
> (main): Use it.
> ---
> Hello Guix,
>
> This allows supplying a commit message and optionally a ChangeLog message as
> arguments to committer.scm, which will be used as the message(s) for changes
> to definitions instead of "Update ..." Both support raw newlines, and if the
> changelog message contains ": ", no extra colon is added to the ChangeLog
> message (this is to support custom definition specifiers).
>
> WDYT?
>
> --
> Sarah
> etc/committer.scm.in | 55 +++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 49 insertions(+), 6 deletions(-)
>
> diff --git a/etc/committer.scm.in b/etc/committer.scm.in
> index 96cd1fbf0b..ec831643af 100755
> --- a/etc/committer.scm.in
> +++ b/etc/committer.scm.in
> @@ -4,6 +4,7 @@
>
> ;;; GNU Guix --- Functional package management for GNU
> ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
> +;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -36,6 +37,7 @@
> (ice-9 popen)
> (ice-9 match)
> (ice-9 rdelim)
> + (ice-9 regex)
> (ice-9 textual-ports))
>
> (define* (break-string str #:optional (max-line-length 70))
> @@ -65,6 +67,13 @@ Return a single string."
> (string-join (reverse (cons (restore-line last-words) lines))
> "\n"))))))
>
> +(define* (break-string-with-newlines str #:optional (max-line-length 70))
> + "Break the lines of string STR into lines that are no longer than
> +MAX-LINE-LENGTH. Return a single string."
> + (string-join (map (cut break-string <> max-line-length)
> + (string-split str #\newline))
> + "\n"))
> +
> (define (read-excursion port)
> "Read an expression from PORT and reset the port position before returning
> the expression."
> @@ -252,6 +261,32 @@ corresponding to the top-level definition containing the staged changes."
> "gnu: Add ~a.~%~%* ~a (~a): New variable.~%"
> variable-name file-name variable-name))
>
> +(define* (custom-commit-message file-name variable-name message changelog
> + #: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
> +entry. If CHANGELOG is #f, the commit message is reused. If CHANGELOG already
> +contains ': ', no colon is inserted between the location and body of the
> +ChangeLog entry."
> + (define (trim msg)
> + (string-trim-right (string-trim-both msg) (char-set #\.)))
> +
> + (define (changelog-has-location? changelog)
> + (->bool (string-match "^[[:graph:]]+:[[:blank:]]" changelog)))
> +
> + (let* ((message (trim message))
> + (changelog (if changelog (trim changelog) message))
> + (message/f (format #f "gnu: ~a: ~a." variable-name message))
> + (changelog/f (if (changelog-has-location? changelog)
> + (format #f "* ~a (~a)~a."
> + file-name variable-name changelog)
> + (format #f "* ~a (~a): ~a."
> + file-name variable-name changelog))))
> + (format port
> + "~a~%~%~a~%"
> + (break-string-with-newlines message/f 72)
> + (break-string-with-newlines changelog/f 72))))
> +
> (define (group-hunks-by-sexp hunks)
> "Return a list of pairs associating all hunks with the S-expression they are
> modifying."
> @@ -280,6 +315,15 @@ modifying."
> (define %delay 1000)
>
> (define (main . args)
> + (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))
> + (_
> + (apply change-commit-message file-name old new rest)))))
> +
> (match (diff-info)
> (()
> (display "Nothing to be done.\n" (current-error-port)))
> @@ -325,13 +369,12 @@ modifying."
> (error "Cannot apply")))
> (usleep %delay))
> hunks)
> - (change-commit-message (hunk-file-name (first hunks))
> - old new
> - (current-output-port))
> + (change-commit-message* (hunk-file-name (first hunks))
> + old new)
> (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-")))
> - (change-commit-message (hunk-file-name (first hunks))
> - old new
> - port)
> + (change-commit-message* (hunk-file-name (first hunks))
> + old new
> + port)
> (usleep %delay)
> (unless (eqv? 0 (status:exit-val (close-pipe port)))
> (error "Cannot commit")))))
>
> base-commit: daeef2e7f4f36df7a098c9aee7c03546d8691d39
next prev parent reply other threads:[~2021-08-02 18:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-31 21:00 [bug#49796] [PATCH 1/2] etc/committer: Support custom commit messages Sarah Morgensen
2021-07-31 21:03 ` [bug#49796] [PATCH 2/2] etc/committer: Pass command-line arguments to main Sarah Morgensen
2021-08-02 18:46 ` Sarah Morgensen [this message]
2021-08-10 22:20 ` bug#49796: [PATCH 1/2] etc/committer: Support custom commit messages Ludovic Courtès
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=86v94n4rdf.fsf@mgsn.dev \
--to=iskarian@mgsn.dev \
--cc=49796@debbugs.gnu.org \
--cc=rekado@elephly.net \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
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).