Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
942fe6c
gitk: set intitial colors of swatches using the available helper
j6t Aug 3, 2026
8676efd
gitk: condense repetitive code around color buttons into foreach loops
j6t Aug 3, 2026
8cb535f
gitk: show color preferences on the button instead of the label
j6t Aug 3, 2026
43ce3ba
gitk: use more natural language for labels of color preferences
j6t Aug 3, 2026
0fcec69
gitk: avoid constructing dialog titles from text pieces
j6t Aug 3, 2026
40ca78d
gitk: move UI for generic colors above diff colors
j6t Aug 9, 2026
5dce549
gitk: discourage AI contributions
j6t Aug 23, 2026
a6457ac
Merge branch 'js/prefs-color-buttons'
j6t Sep 4, 2026
00fa850
ci: bump debian-11 job to debian-12
peff Sep 5, 2026
b721ade
mingw: include the Python parts in the build
dscho Sep 10, 2026
e0e94cc
mingw: stop hard-coding `CC = gcc`
dscho Sep 10, 2026
2de7b82
mingw: drop the -D_USE_32BIT_TIME_T option
dscho Sep 10, 2026
59d4514
mingw: only use -Wl,--large-address-aware for 32-bit builds
dscho Sep 10, 2026
f243cc3
mingw: avoid over-specifying `--pic-executable`
dscho Sep 10, 2026
59ab0a5
mingw: set the prefix and HOST_CPU as per MSYS2's settings
dscho Sep 10, 2026
843047f
mingw: only enable the MSYS2-specific stuff when compiling in MSYS2
dscho Sep 10, 2026
d69ec48
mingw: rely on MSYS2's metadata instead of hard-coding it
dscho Sep 10, 2026
0d5ce13
windows: skip linking `git-<command>` for built-ins
dscho Sep 10, 2026
653884e
mingw: always define `ETC_*` for MSYS2 environments
dscho Sep 10, 2026
7904764
mingw: ensure valid CTYPE
dscho Sep 10, 2026
caa5d9e
mingw: allow `git.exe` to be used instead of the "Git wrapper"
dscho Sep 10, 2026
f4742f3
t0060: adjust the code style
dscho Sep 10, 2026
4340a70
ci: fix missing Ruby dependency in "documentation" job
pks-t Sep 1, 2026
1c1eed1
ci: drop ALREADY_HAVE_ASCIIDOCTOR variable
peff Sep 2, 2026
c1ab07b
Merge branch 'master' of https://github.com/j6t/gitk
gitster Sep 11, 2026
9f868af
Merge branch 'jk/ci-bump-debian-to-12'
gitster Sep 11, 2026
91642b3
Merge branch 'jk/ci-use-system-asciidoctor'
gitster Sep 11, 2026
bca240a
Merge branch 'js/mingw-build-updates'
gitster Sep 11, 2026
47ce805
A bit more for -rc1
gitster Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -413,9 +413,9 @@ jobs:
# A RHEL 8 compatible distro. Supported until 2029-05-31.
- jobname: almalinux-8
image: almalinux:8
# Supported until 2026-08-31.
- jobname: debian-11
image: debian:11
# Supported until 2028-06-30.
- jobname: debian-12
image: debian:12
env:
jobname: ${{matrix.vector.jobname}}
CC: ${{matrix.vector.cc}}
Expand Down
6 changes: 3 additions & 3 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ test:linux:
# A RHEL 8 compatible distro. Supported until 2029-05-31.
- jobname: almalinux-8
image: almalinux:8
# Supported until 2026-08-31.
- jobname: debian-11
image: debian:11
# Supported until 2028-06-30.
- jobname: debian-12
image: debian:12
artifacts:
paths:
- t/failed-test-artifacts
Expand Down
17 changes: 17 additions & 0 deletions Documentation/RelNotes/2.56.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,12 @@ Performance, Internal Implementation, Development Support etc.
during a concurrent geometric repack, and 'git replay' has been
fixed to not segfault when reading such missing objects.

* A collection of patches from Git for Windows has been upstreamed,
mostly focusing on simplifying and robustifying build configurations
for MinGW/MSYS2, dropping obsolete compatibility options, and allowing
the main 'git.exe' to be used directly without the extra wrapper
process on Windows.


Fixes since v2.55
-----------------
Expand Down Expand Up @@ -804,6 +810,17 @@ Fixes since v2.55
trailing slashes.
(merge 2e8a9d94b0 rs/worktree-add-basename-fixes later to maint).

* The CI job for Debian 11 has been updated to use Debian 12, as the
former is now out of the LTS period.
(merge 00fa850235 jk/ci-bump-debian-to-12 later to maint).

* The CI script to install dependencies for the documentation build
has been updated to install asciidoctor directly via the system
package manager instead of pinning to an older version via gem.
Additionally, an obsolete variable used for retired Azure Pipelines
environments has been removed.
(merge 1c1eed13bd jk/ci-use-system-asciidoctor later to maint).

* Other code cleanup, docfix, build fix, etc.
(merge 026636128f ss/submittingpatches-typofix later to maint).
(merge d2af22cc21 jc/rerere-doc-typofix later to maint).
Expand Down
3 changes: 1 addition & 2 deletions ci/install-dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,8 @@ sparse)
libexpat-dev gettext zlib1g-dev sparse
;;
Documentation)
sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make
sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make ruby

test -n "$ALREADY_HAVE_ASCIIDOCTOR" ||
sudo gem install --version 1.5.8 asciidoctor
sudo gem install concurrent-ruby
;;
Expand Down
68 changes: 68 additions & 0 deletions compat/mingw.c
Original file line number Diff line number Diff line change
Expand Up @@ -3157,6 +3157,45 @@ int xwcstoutf(char *utf, const wchar_t *wcs, size_t utflen)
return -1;
}

#ifdef ENSURE_MSYSTEM_IS_SET
#if !defined(RUNTIME_PREFIX) || !defined(HAVE_WPGMPTR) || !defined(MINGW_PREFIX)
static size_t append_system_bin_dirs(char *path UNUSED, size_t size UNUSED)
{
return 0;
}
#else
static size_t append_system_bin_dirs(char *path, size_t size)
{
char prefix[32768];
const char *slash;
size_t len = xwcstoutf(prefix, _wpgmptr, sizeof(prefix)), off = 0;

if (len == 0 || len >= sizeof(prefix) ||
!(slash = find_last_dir_sep(prefix)))
return 0;
/* strip trailing `git.exe` */
len = slash - prefix;

/* strip trailing `cmd` or `<mingw-prefix>\bin` or `bin` or `libexec\git-core` */
if (strip_suffix_mem(prefix, &len, "\\" MINGW_PREFIX "\\libexec\\git-core") ||
strip_suffix_mem(prefix, &len, "\\" MINGW_PREFIX "\\bin"))
off += xsnprintf(path + off, size - off,
"%.*s\\" MINGW_PREFIX "\\bin;", (int)len, prefix);
else if (strip_suffix_mem(prefix, &len, "\\cmd") ||
strip_suffix_mem(prefix, &len, "\\bin") ||
strip_suffix_mem(prefix, &len, "\\libexec\\git-core"))
off += xsnprintf(path + off, size - off,
"%.*s\\" MINGW_PREFIX "\\bin;", (int)len, prefix);
else
return 0;

off += xsnprintf(path + off, size - off,
"%.*s\\usr\\bin;", (int)len, prefix);
return off;
}
#endif
#endif

static void setup_windows_environment(void)
{
char *tmp = getenv("TMPDIR");
Expand Down Expand Up @@ -3208,6 +3247,35 @@ static void setup_windows_environment(void)
if (!tmp && (tmp = getenv("USERPROFILE")))
setenv("HOME", tmp, 1);
}

if (!getenv("PLINK_PROTOCOL"))
setenv("PLINK_PROTOCOL", "ssh", 0);

#ifdef ENSURE_MSYSTEM_IS_SET
if (!(tmp = getenv("MSYSTEM")) || !tmp[0]) {
const char *home = getenv("HOME"), *path = getenv("PATH");
char buf[32768];
size_t off = 0;

setenv("MSYSTEM", ENSURE_MSYSTEM_IS_SET, 1);

if (home)
off += xsnprintf(buf + off, sizeof(buf) - off,
"%s\\bin;", home);
off += append_system_bin_dirs(buf + off, sizeof(buf) - off);
if (path)
off += xsnprintf(buf + off, sizeof(buf) - off,
"%s", path);
else if (off > 0)
buf[off - 1] = '\0';
else
buf[0] = '\0';
setenv("PATH", buf, 1);
}
#endif

if (!getenv("LC_ALL") && !getenv("LC_CTYPE") && !getenv("LANG"))
setenv("LC_CTYPE", "C.UTF-8", 1);
}

int mingw_platform_has_symlinks(void)
Expand Down
61 changes: 27 additions & 34 deletions config.mak.uname
Original file line number Diff line number Diff line change
Expand Up @@ -465,14 +465,8 @@ ifeq ($(uname_S),Windows)
GIT_VERSION := $(GIT_VERSION).MSVC
pathsep = ;
# Assume that this is built in Git for Windows' SDK
ifeq (MINGW32,$(MSYSTEM))
prefix = /mingw32
else
ifeq (CLANGARM64,$(MSYSTEM))
prefix = /clangarm64
else
prefix = /mingw64
endif
ifneq (,$(MSYSTEM))
prefix = $(MINGW_PREFIX)
endif
# Prepend MSVC 64-bit tool-chain to PATH.
#
Expand Down Expand Up @@ -525,7 +519,8 @@ ifeq ($(uname_S),Windows)
NO_POSIX_GOODIES = UnfortunatelyYes
NATIVE_CRLF = YesPlease
DEFAULT_HELP_FORMAT = html
ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
SKIP_DASHED_BUILT_INS = YabbaDabbaDoo
ifneq (,$(MINGW_PREFIX))
# Move system config into top-level /etc/
ETC_GITCONFIG = ../etc/gitconfig
ETC_GITATTRIBUTES = ../etc/gitattributes
Expand All @@ -541,7 +536,9 @@ endif
compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/trace2_win32_process_info.o \
compat/win32/dirent.o
COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY \
-DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\"" \
-DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
# invalidcontinue.obj allows Git's source code to close the same file
# handle twice, or to access the osfhandle of an already-closed stdout
Expand Down Expand Up @@ -718,6 +715,7 @@ ifeq ($(uname_S),MINGW)
FSMONITOR_DAEMON_BACKEND = win32
FSMONITOR_OS_SETTINGS = win32

SKIP_DASHED_BUILT_INS = YabbaDabbaDoo
RUNTIME_PREFIX = YesPlease
HAVE_WPGMPTR = YesWeDo
NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
Expand Down Expand Up @@ -756,38 +754,33 @@ ifeq ($(uname_S),MINGW)
ifneq (,$(findstring -O,$(filter-out -O0 -Og,$(CFLAGS))))
BASIC_LDFLAGS += -Wl,--dynamicbase
endif
ifeq (MINGW32,$(MSYSTEM))
prefix = /mingw32
HOST_CPU = i686
BASIC_LDFLAGS += -Wl,--pic-executable,-e,_mainCRTStartup
endif
ifeq (MINGW64,$(MSYSTEM))
prefix = /mingw64
HOST_CPU = x86_64
BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
else ifeq (CLANGARM64,$(MSYSTEM))
prefix = /clangarm64
HOST_CPU = aarch64
BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
else
COMPAT_CFLAGS += -D_USE_32BIT_TIME_T
BASIC_LDFLAGS += -Wl,--large-address-aware
ifneq (,$(MSYSTEM))
ifeq ($(MINGW_PREFIX),$(filter-out /%,$(MINGW_PREFIX)))
# Override if empty or does not start with a slash
MINGW_PREFIX := /$(shell echo '$(MSYSTEM)' | tr A-Z a-z)
endif
prefix = $(MINGW_PREFIX)
HOST_CPU = $(patsubst %-w64-mingw32,%,$(MINGW_CHOST))
BASIC_LDFLAGS += -Wl,--pic-executable
COMPAT_CFLAGS += -DDETECT_MSYS_TTY \
-DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" \
-DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\""
ifeq (MINGW32,$(MSYSTEM))
BASIC_LDFLAGS += -Wl,--large-address-aware
endif
# Move system config into top-level /etc/
ETC_GITCONFIG = ../etc/gitconfig
ETC_GITATTRIBUTES = ../etc/gitattributes
endif
CC = gcc
COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \
-fstack-protector-strong
COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -fstack-protector-strong
EXTLIBS += -lntdll
EXTRA_PROGRAMS += headless-git$X
INSTALL = /bin/install
INTERNAL_QSORT = YesPlease
HAVE_LIBCHARSET_H = YesPlease
USE_GETTEXT_SCHEME = fallthrough
USE_LIBPCRE = YesPlease
ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
# Move system config into top-level /etc/
ETC_GITCONFIG = ../etc/gitconfig
ETC_GITATTRIBUTES = ../etc/gitattributes
endif
NO_PYTHON =
endif
ifeq ($(uname_S),QNX)
COMPAT_CFLAGS += -DSA_RESTART=0
Expand Down
9 changes: 8 additions & 1 deletion contrib/buildsystems/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
_CONSOLE DETECT_MSYS_TTY STRIP_EXTENSION=".exe" NO_SYMLINK_HEAD UNRELIABLE_FSTAT
NOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0
OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP
HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET HAVE_RTLGENRANDOM)
HAVE_WPGMPTR HAVE_RTLGENRANDOM)
if(CMAKE_GENERATOR_PLATFORM STREQUAL "x64")
add_compile_definitions(ENSURE_MSYSTEM_IS_SET="MINGW64" MINGW_PREFIX="mingw64")
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "arm64")
add_compile_definitions(ENSURE_MSYSTEM_IS_SET="CLANGARM64" MINGW_PREFIX="clangarm64")
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "x86")
add_compile_definitions(ENSURE_MSYSTEM_IS_SET="MINGW32" MINGW_PREFIX="mingw32")
endif()
list(APPEND compat_SOURCES
compat/mingw.c
compat/winansi.c
Expand Down
7 changes: 4 additions & 3 deletions gitk-git/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,14 @@ are also accepted.
All commits must be signed off (use `git commit --signoff`) and should
have commit messages prefixed with `gitk:`.

Email Patches
-------------

Send patches to git@vger.kernel.org and CC j6t@kdbg.org. See the Git
project's [patch submission guidelines](https://git-scm.com/docs/SubmittingPatches)
for detailed instructions on creating and sending patches.

Please do not submit work that originated from AI, because this project
is down-streamed to the Git project, which has a rather
[strict AI guideline](https://git-scm.com/docs/SubmittingPatches#ai).

License
=======

Expand Down
Loading