On Wed, May 14, 2025 at 10:50:05PM +0200, Johannes Sixt wrote:
The commit message is processed to remove unnecessary empty lines.
In particular, it is ensured that the text ends with at most one LF
character. This one is always present, because the Tk text widget
ensures that is present.
However, we forgot
"did not consider" would be more accurate.
that the processed text is written to the commit
message file using 'puts', which also appends a LF character, so that
the final commit message ends with two LF.
one could suppress that with -nonewline, but the proposed code is
shorter.
Trim all trailing LF
characters, and while we are here, use `string trim`, which lets us
remove the leading LF in the same command.
Reported-by: Gareth Fenn <garethfenn@xxxxxxxxx>
Signed-off-by: Johannes Sixt <j6t@xxxxxxxx>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@xxxxxx>
---
lib/commit.tcl | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/commit.tcl b/lib/commit.tcl
index a570f9cdc6a4..f3c714e600ac 100644
--- a/lib/commit.tcl
+++ b/lib/commit.tcl
@@ -214,12 +214,10 @@ You must stage at least 1 file before you can commit.
global comment_string
set cmt_rx [strcat {(^|\n)} [regsub -all {\W} $comment_string {\\&}] {[^\n]*}]
regsub -all $cmt_rx $msg {\1} msg
- # Strip leading empty lines
- regsub {^\n*} $msg {} msg
+ # Strip leading and trailing empty lines
pedantically, stripping the final LF doesn't strip a trailing empty
line, but prevents one from being created - unless the commit message is
completely empty, where that would fail. i guess this case is not all
that important, so we can ignore it. however, it may make sense to add
another comment like "puts will re-add a trailing newline".
+ set msg [string trim $msg \n]
# Compress consecutive empty lines
regsub -all {\n{3,}} $msg "\n\n" msg
- # Strip trailing empty line
- regsub {\n\n$} $msg "\n" msg
if {$msg eq {}} {
error_popup [mc "Please supply a commit message.
--
2.49.0.212.gc22db56b11