All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Sunshine <sunshine@sunshineco.com>
To: Pratyush Yadav <me@yadavpratyush.com>
Cc: git@vger.kernel.org, Johannes Sixt <j6t@kdbg.org>,
	Junio C Hamano <gitster@pobox.com>,
	Eric Sunshine <sunshine@sunshineco.com>
Subject: [PATCH] git-gui: fix commit message comment line removal with older Tcl versions
Date: Sun, 28 Feb 2021 18:11:10 -0500	[thread overview]
Message-ID: <20210228231110.24076-1-sunshine@sunshineco.com> (raw)
In-Reply-To: <https://lore.kernel.org/git/CAPig+cT-sfgMDi9-6AEKF85NtOiXeqddJjk-pYuhDtTVAE-UEw@mail.gmail.com/>

git-gui was recently enhanced to remove comment lines from the commit
message similar to the way git-commit does so (see `core.commentchar`
and `git-stripspace`). Unfortunately, that change employs features which
are unavailable in older versions of Tcl, such as 8.5.9 which is shipped
with macOS (10.13), with the result that the commit operation errors
out.

There are two problems. First, to add a new informational message to the
main window, it invokes string method `cat` which does not exist in
older Tcl. Fix this by using `append` instead.

Second, when passing the commit message through git-stripspace, it
closes the "write" side of the bidirectional pipe after sending the
commit message to git-stripspace in order to avoid deadlock before
reading back the result, however the ability to close only one end of a
pipe is not present in older Tcl. Fix this by employing a temporary file
to received the output of git-stripspace.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---

I'm not a Tcl programmer, so I may have overlooked better or more
idiomatic ways to fix these problems. There might be some reliable and
portable way to write and read a bidirectional pipe in older Tcl
without deadlocking and without using non-blocking I/O and an
event-loop, but I didn't find it, so I went with the simpler approach
of using a temporary file.

 git-gui.sh     |  3 +--
 lib/commit.tcl | 12 +++++++-----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/git-gui.sh b/git-gui.sh
index 236bc4e61d..c04b37b9ee 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -3439,8 +3439,7 @@ proc trace_commit_type {varname args} {
 	}
 
 	set comment_char [get_config core.commentchar]
-	set txt [string cat $txt \
-				 [mc " (Lines starting with '$comment_char' will be ignored)"]]
+	append txt [mc " (Lines starting with '$comment_char' will be ignored)"]
 	$ui_coml conf -text $txt
 }
 trace add variable commit_type write trace_commit_type
diff --git a/lib/commit.tcl b/lib/commit.tcl
index 23d67d4651..3a51e80b8a 100644
--- a/lib/commit.tcl
+++ b/lib/commit.tcl
@@ -142,16 +142,18 @@ proc setup_commit_encoding {msg_wt {quiet 0}} {
 }
 
 proc strip_msg {msg} {
-	set cmd [concat [list | ] [_git_cmd stripspace] --strip-comments]
+	set strip_p [gitdir GITGUI_EDITMSG_STRIP]
+	set cmd [concat [list | ] [_git_cmd stripspace] --strip-comments [list >$strip_p]]
 	_trace_exec $cmd
-	set fd [open $cmd r+]
+	set fd [open $cmd w]
 	fconfigure $fd -translation binary -encoding utf-8
-
 	puts -nonewline $fd $msg
-	close $fd w
-	set result [read $fd]
 	close $fd
 
+	set fd [open $strip_p r]
+	set result [read $fd]
+	close $fd
+	file delete $strip_p
 	return $result
 }
 
-- 
2.31.0.rc0.1.g37593106bf

       reply	other threads:[~2021-02-28 23:12 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <https://lore.kernel.org/git/CAPig+cT-sfgMDi9-6AEKF85NtOiXeqddJjk-pYuhDtTVAE-UEw@mail.gmail.com/>
2021-02-28 23:11 ` Eric Sunshine [this message]
2021-03-01  6:48   ` [PATCH] git-gui: fix commit message comment line removal with older Tcl versions Eric Sunshine

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210228231110.24076-1-sunshine@sunshineco.com \
    --to=sunshine@sunshineco.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=me@yadavpratyush.com \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.