* 'master' of https://github.com/j6t/git-gui:
  git-gui: grey out comment lines in commit message
  git-gui: wire up "git-gui--askyesno" with Meson
  git-gui: massage "git-gui--askyesno" with "generate-script.sh"
  git-gui: prefer shell at "/bin/sh" with Meson
  git-gui: fix use of GIT_CEILING_DIRECTORIES
  git-gui: shift tabstops to account for the first column of patch text
maint
Junio C Hamano 2026-03-21 09:25:58 -07:00
commit 6e8d538aab
8 changed files with 58 additions and 21 deletions

1
git-gui/.gitignore vendored
View File

@ -5,4 +5,5 @@ GIT-GUI-BUILD-OPTIONS
GIT-VERSION-FILE GIT-VERSION-FILE
git-gui git-gui
git-gui--askpass git-gui--askpass
git-gui--askyesno
lib/tclIndex lib/tclIndex

View File

@ -5,19 +5,27 @@ DEF_VER=0.21.GITGUI
LF=' LF='
' '


if test "$#" -ne 2 if test "$#" -lt 2
then then
echo >&2 "usage: $0 <SOURCE_DIR> <OUTPUT>" echo >&2 "usage: $0 <SOURCE_DIR> <OUTPUT> [<PARENT_PROJECT_DIR>]"
exit 1 exit 1
fi fi


SOURCE_DIR="$1" SOURCE_DIR="$1"
OUTPUT="$2" OUTPUT="$2"
PARENT_PROJECT_DIR="$3"


# Protect us from reading Git version information outside of the Git directory # Protect us from reading Git version information outside of the Git directory
# in case it is not a repository itself, but embedded in an unrelated # in case it is not a repository itself, but embedded in an unrelated
# repository. # repository. The PARENT_PROJECT_DIR variable can be used to override this, for
GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.." # example when git-gui is included as a subproject.
if test -n "$PARENT_PROJECT_DIR"
then
GIT_CEILING_DIRECTORIES="$PARENT_PROJECT_DIR/.."
else
GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.."
fi

export GIT_CEILING_DIRECTORIES export GIT_CEILING_DIRECTORIES


tree_search () tree_search ()

View File

@ -9,7 +9,7 @@ all::
# #


GIT-VERSION-FILE: FORCE GIT-VERSION-FILE: FORCE
@$(SHELL_PATH) ./GIT-VERSION-GEN . $@ @$(SHELL_PATH) ./GIT-VERSION-GEN . $@ "$(PARENT_PROJECT_DIR)"


uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')
@ -177,10 +177,13 @@ GIT-GUI-BUILD-OPTIONS: FORCE
git-gui--askpass: git-gui--askpass.sh GIT-GUI-BUILD-OPTIONS generate-script.sh git-gui--askpass: git-gui--askpass.sh GIT-GUI-BUILD-OPTIONS generate-script.sh
$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< ./GIT-GUI-BUILD-OPTIONS $(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< ./GIT-GUI-BUILD-OPTIONS


git-gui--askyesno: git-gui--askyesno.sh GIT-GUI-BUILD-OPTIONS generate-script.sh
$(QUIET_GEN)$(SHELL_PATH) generate-script.sh $@ $< ./GIT-GUI-BUILD-OPTIONS

ifdef GITGUI_WINDOWS_WRAPPER ifdef GITGUI_WINDOWS_WRAPPER
all:: git-gui all:: git-gui
endif endif
all:: $(GITGUI_MAIN) git-gui--askpass lib/tclIndex $(ALL_MSGFILES) all:: $(GITGUI_MAIN) git-gui--askpass git-gui--askyesno lib/tclIndex $(ALL_MSGFILES)


install: all install: all
$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1) $(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1)
@ -221,7 +224,7 @@ dist-version: GIT-VERSION-FILE
@sed 's|^GITGUI_VERSION=||' <GIT-VERSION-FILE >$(TARDIR)/version @sed 's|^GITGUI_VERSION=||' <GIT-VERSION-FILE >$(TARDIR)/version


clean:: clean::
$(RM_RF) $(GITGUI_MAIN) git-gui--askpass lib/tclIndex po/*.msg $(PO_TEMPLATE) $(RM_RF) $(GITGUI_MAIN) git-gui--askpass git-gui--askyesno lib/tclIndex po/*.msg $(PO_TEMPLATE)
$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS $(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS
ifdef GITGUI_WINDOWS_WRAPPER ifdef GITGUI_WINDOWS_WRAPPER
$(RM_RF) git-gui $(RM_RF) git-gui

View File

@ -3900,6 +3900,24 @@ if {[winfo exists $ui_comm]} {


backup_commit_buffer backup_commit_buffer


# Grey out comment lines (which are stripped from the final commit message by
# wash_commit_message).
$ui_comm tag configure commit_comment -foreground gray
proc dim_commit_comment_lines {} {
global ui_comm comment_string
$ui_comm tag remove commit_comment 1.0 end
set text [$ui_comm get 1.0 end]
# See also cmt_rx in wash_commit_message
set cmt_rx [strcat {^} [regsub -all {\W} $comment_string {\\&}]]
set ranges [regexp -all -indices -inline -line -- $cmt_rx $text]
foreach pair $ranges {
set idx "1.0 + [lindex $pair 0] chars"
$ui_comm tag add commit_comment $idx "$idx lineend + 1 char"
}
}
dim_commit_comment_lines
bind $ui_comm <<Modified>> { after idle dim_commit_comment_lines }

# -- If the user has aspell available we can drive it # -- If the user has aspell available we can drive it
# in pipe mode to spellcheck the commit message. # in pipe mode to spellcheck the commit message.
# #

View File

@ -385,6 +385,8 @@ proc read_diff {fd conflict_size cont_info} {
# #
if {[string match {@@@ *} $line]} { if {[string match {@@@ *} $line]} {
set is_3way_diff 1 set is_3way_diff 1
apply_tab_size 2
} elseif {[string match {@@ *} $line]} {
apply_tab_size 1 apply_tab_size 1
} }



View File

@ -4,7 +4,7 @@ project('git-gui',


fs = import('fs') fs = import('fs')


shell = find_program('sh') shell = find_program('/bin/sh', 'sh')
tclsh = find_program('tclsh') tclsh = find_program('tclsh')
wish = find_program('wish') wish = find_program('wish')


@ -34,6 +34,7 @@ version_file = custom_target(
'@INPUT@', '@INPUT@',
meson.current_source_dir(), meson.current_source_dir(),
'@OUTPUT@', '@OUTPUT@',
get_option('parent_project_dir'),
], ],
build_always_stale: true, build_always_stale: true,
) )
@ -53,19 +54,21 @@ if target_machine.system() == 'windows'
) )
endif endif


custom_target( foreach script : [ 'git-gui--askpass', 'git-gui--askyesno' ]
output: 'git-gui--askpass', custom_target(
input: 'git-gui--askpass.sh', output: script,
command: [ input: script + '.sh',
shell, command: [
meson.current_source_dir() / 'generate-script.sh', shell,
'@OUTPUT@', meson.current_source_dir() / 'generate-script.sh',
'@INPUT@', '@OUTPUT@',
meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS', '@INPUT@',
], meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS',
install: true, ],
install_dir: get_option('libexecdir') / 'git-core', install: true,
) install_dir: get_option('libexecdir') / 'git-core',
)
endforeach


custom_target( custom_target(
input: 'git-gui.sh', input: 'git-gui.sh',

View File

@ -0,0 +1,2 @@
option('parent_project_dir', type: 'string', value: '',
description: 'The directory of the parent project. This is used so that the version can be determined even in case git-gui is included as a subtree.')