<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/compat, branch seen</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=seen</id>
<link rel='self' href='https://git.shady.money/git/atom?h=seen'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2026-05-18T05:28:59Z</updated>
<entry>
<title>Merge branch 'pt/fsmonitor-linux' into seen</title>
<updated>2026-05-18T05:28:59Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-18T05:28:59Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=7001bdddc52b67f531fd3dcad73683637bc3b794'/>
<id>urn:sha1:7001bdddc52b67f531fd3dcad73683637bc3b794</id>
<content type='text'>
The fsmonitor daemon has been implemented for Linux.

* pt/fsmonitor-linux:
  fsmonitor: convert shown khash to strset in do_handle_client
  fsmonitor: add tests for Linux
  fsmonitor: add timeout to daemon stop command
  fsmonitor: close inherited file descriptors and detach in daemon
  run-command: add close_fd_above_stderr option
  fsmonitor: implement filesystem change listener for Linux
  fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c
  fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c
  fsmonitor: use pthread_cond_timedwait for cookie wait
  compat/win32: add pthread_cond_timedwait
  fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon
  fsmonitor: fix khash memory leak in do_handle_client
  t9210, t9211: disable GIT_TEST_SPLIT_INDEX for scalar clone tests
</content>
</entry>
<entry>
<title>Merge branch 'ob/more-repo-config-values' into jch</title>
<updated>2026-05-17T13:58:51Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-17T13:58:51Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=eaa7468ed3ebfa33d9cec5e4167d704eb14c4280'/>
<id>urn:sha1:eaa7468ed3ebfa33d9cec5e4167d704eb14c4280</id>
<content type='text'>
* ob/more-repo-config-values:
  env: move "warn_on_object_refname_ambiguity" into `struct repo_config_values`
  env: move "sparse_expect_files_outside_of_patterns" into `repo_config_values`
  env: move "core_sparse_checkout_cone" into `struct repo_config_values`
  environment: move "precomposed_unicode" into `struct repo_config_values`
  environment: move "pack_compression_level" into `struct repo_config_values`
  environment: move `zlib_compression_level` into `struct repo_config_values`
  environment: move "check_stat" into `struct repo_config_values`
  environment: move "trust_ctime" into `struct repo_config_values`
</content>
</entry>
<entry>
<title>Merge branch 'js/mingw-no-nedmalloc' into jch</title>
<updated>2026-05-17T13:58:41Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-17T13:58:41Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=9d7e9747f5c2769a6ab01676a8c55a167f16d690'/>
<id>urn:sha1:9d7e9747f5c2769a6ab01676a8c55a167f16d690</id>
<content type='text'>
Stop using unmaintained custom allocator in Windows build which was
the last user of the code.

* js/mingw-no-nedmalloc:
  mingw: remove the vendored compat/nedmalloc/ subtree
  mingw: drop the build-system plumbing for nedmalloc
  mingw: stop using nedmalloc
</content>
</entry>
<entry>
<title>Merge branch 'js/objects-larger-than-4gb-on-windows' into jch</title>
<updated>2026-05-17T13:58:41Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-17T13:58:41Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=06d915a85887e2500be0ed66f4411091d2bc2ed8'/>
<id>urn:sha1:06d915a85887e2500be0ed66f4411091d2bc2ed8</id>
<content type='text'>
Update code paths that assumed "unsigned long" was long enough for
"size_t".

* js/objects-larger-than-4gb-on-windows:
  ci: run expensive tests on push builds to integration branches
  t5608: mark &gt;4GB tests as EXPENSIVE
  test-tool synthesize: add precomputed SHA-256 pack for 4 GiB + 1
  test-tool synthesize: precompute pack for 4 GiB + 1
  test-tool synthesize: use the unsafe hash for speed
  t5608: add regression test for &gt;4GB object clone
  test-tool: add a helper to synthesize large packfiles
  delta, packfile: use size_t for delta header sizes
  odb, packfile: use size_t for streaming object sizes
  git-zlib: handle data streams larger than 4GB
  index-pack, unpack-objects: use size_t for object size
</content>
</entry>
<entry>
<title>test-tool: add a helper to synthesize large packfiles</title>
<updated>2026-05-09T02:25:32Z</updated>
<author>
<name>Johannes Schindelin</name>
<email>johannes.schindelin@gmx.de</email>
</author>
<published>2026-05-08T08:16:43Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=438886aecb7546e6c5ba68cf1afd7535136f8bb4'/>
<id>urn:sha1:438886aecb7546e6c5ba68cf1afd7535136f8bb4</id>
<content type='text'>
To test Git's behavior with very large pack files, we need a way to
generate such files quickly.

A naive approach using only readily-available Git commands would take
over 10 hours for a 4GB pack file, which is prohibitive.

Side-stepping Git's machinery and actual zlib compression by writing
uncompressed content with the appropriate zlib header makes things
much faster. The fastest method using this approach generates many
small, unreachable blob objects and takes about 1.5 minutes for 4GB.
However, this cannot be used because we need to test git clone, which
requires a reachable commit history.

Generating many reachable commits with small, uncompressed blobs takes
about 4 minutes for 4GB. But this approach 1) does not reproduce the
issues we want to fix (which require individual objects larger than
4GB) and 2) is comparatively slow because of the many SHA-1
calculations.

The approach taken here generates a single large blob (filled with NUL
bytes), along with the trees and commits needed to make it reachable.
This takes about 2.5 minutes for 4.5GB, which is the fastest option
that produces a valid, clonable repository with an object large enough
to trigger the bugs we want to test.

Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>mingw: remove the vendored compat/nedmalloc/ subtree</title>
<updated>2026-05-09T02:20:12Z</updated>
<author>
<name>Johannes Schindelin</name>
<email>johannes.schindelin@gmx.de</email>
</author>
<published>2026-05-08T12:50:58Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=0b725501100547a8b9a4b8407bce479663af476a'/>
<id>urn:sha1:0b725501100547a8b9a4b8407bce479663af476a</id>
<content type='text'>
The previous two commits stopped opting into nedmalloc on Windows
and stripped out the build-system plumbing that referenced it; the
compat/nedmalloc/ subtree now has no callers and no consumers in
the build, so retire it from the tree.

Note that this patch is larger than can be sent via the mailing
list, and was originally sent in three-pieces and merged back on the
receiving end.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>mingw: optionally use legacy (non-POSIX) delete semantics</title>
<updated>2026-05-08T00:53:12Z</updated>
<author>
<name>Johannes Schindelin</name>
<email>johannes.schindelin@gmx.de</email>
</author>
<published>2026-05-07T12:51:12Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=69ed0e35a7548a17a0fcd79b265a6872bceb2d5d'/>
<id>urn:sha1:69ed0e35a7548a17a0fcd79b265a6872bceb2d5d</id>
<content type='text'>
At some point between Windows 10 Build 17134.1304 and Build 18363.657,
the default behavior of `DeleteFileW()` was changed to use POSIX
semantics (https://stackoverflow.com/a/60512798). Under those semantics,
a file can be deleted even when another process holds an active
`MapViewOfFile` view on it: the directory entry is removed immediately,
but the underlying data persists until the last handle is closed.

On older Windows versions (and Windows 10 builds before that change),
`DeleteFileW()` uses legacy semantics where deletion fails outright if
any process holds a file mapping.

To allow testing code paths that depend on the legacy behavior, introduce
a `GIT_TEST_LEGACY_DELETE` environment variable. When set, `mingw_unlink()`
uses `SetFileInformationByHandle()` with `FileDispositionInfo` (the
non-POSIX variant) instead of `DeleteFileW()`, forcing legacy delete
semantics regardless of the Windows version.

Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>environment: move "precomposed_unicode" into `struct repo_config_values`</title>
<updated>2026-04-25T10:35:41Z</updated>
<author>
<name>Olamide Caleb Bello</name>
<email>belkid98@gmail.com</email>
</author>
<published>2026-04-23T16:54:29Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=782f4aecf5d6480897553725d7b27fda0da1e615'/>
<id>urn:sha1:782f4aecf5d6480897553725d7b27fda0da1e615</id>
<content type='text'>
The `core.precomposeunicode` configuration is currently stored in the
global variable `precomposed_unicode`, which makes it shared across
repository instances within a single process.

Store it instead in `repo_config_values`, where eagerly‑parsed
repository configuration lives. `core.precomposeunicode` is parsed
eagerly because it controls Unicode path normalization on macOS,
a fundamental filesystem‑level behavior that many operations depend
on; a lazy parse could lead to inconsistent results and hamper
libification. This preserves the existing behavior while tying the
value to the repository from which it was read, avoiding cross‑
repository state leakage and continuing the effort to reduce reliance
on global configuration state.

Change the type of the field from `int` to `bool` since it is parsed
as a boolean value.

Update all references to use `repo_config_values()`.

Mentored-by: Christian Couder &lt;christian.couder@gmail.com&gt;
Mentored-by: Usman Akinyemi &lt;usmanakinyemi202@gmail.com&gt;
Signed-off-by: Olamide Caleb Bello &lt;belkid98@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>fsmonitor: implement filesystem change listener for Linux</title>
<updated>2026-04-15T15:44:33Z</updated>
<author>
<name>Paul Tarjan</name>
<email>github@paulisageek.com</email>
</author>
<published>2026-04-15T13:27:32Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=ce48de8b2c85a4e5cbeb5dd1f2cfe042dd5392e4'/>
<id>urn:sha1:ce48de8b2c85a4e5cbeb5dd1f2cfe042dd5392e4</id>
<content type='text'>
Implement the built-in fsmonitor daemon for Linux using the inotify
API, bringing it to feature parity with the existing Windows and macOS
implementations.

The implementation uses inotify rather than fanotify because fanotify
requires either CAP_SYS_ADMIN or CAP_PERFMON capabilities, making it
unsuitable for an unprivileged user-space daemon.  While inotify has
the limitation of requiring a separate watch on every directory (unlike
macOS's FSEvents, which can monitor an entire directory tree with a
single watch), it operates without elevated privileges and provides
the per-file event granularity needed for fsmonitor.

The listener uses inotify_init1(O_NONBLOCK) with a poll loop that
checks for events with a 50-millisecond timeout, keeping the inotify
queue well-drained to minimize the risk of overflows.  Bidirectional
hashmaps map between watch descriptors and directory paths for efficient
event resolution.  Directory renames are tracked using inotify's cookie
mechanism to correlate IN_MOVED_FROM and IN_MOVED_TO event pairs; a
periodic check detects stale renames where the matching IN_MOVED_TO
never arrived, forcing a resync.

New directory creation triggers recursive watch registration to ensure
all subdirectories are monitored.  The IN_MASK_CREATE flag is used
where available to prevent modifying existing watches, with a fallback
for older kernels.  When IN_MASK_CREATE is available and
inotify_add_watch returns EEXIST, it means another thread or recursive
scan has already registered the watch, so it is safe to ignore.

Remote filesystem detection uses statfs() to identify network-mounted
filesystems (NFS, CIFS, SMB, FUSE, etc.) via their magic numbers.
Mount point information is read from /proc/mounts and matched against
the statfs f_fsid to get accurate, human-readable filesystem type names
for logging.  When the .git directory is on a remote filesystem, the
IPC socket falls back to $HOME or a user-configured directory via the
fsmonitor.socketDir setting.

Based-on-patch-by: Eric DeCosta &lt;edecosta@mathworks.com&gt;
Based-on-patch-by: Marziyeh Esipreh &lt;marziyeh.esipreh@gmail.com&gt;
Signed-off-by: Paul Tarjan &lt;github@paulisageek.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c</title>
<updated>2026-04-15T15:44:33Z</updated>
<author>
<name>Paul Tarjan</name>
<email>github@paulisageek.com</email>
</author>
<published>2026-04-15T13:27:31Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=7422200bfa1728139962cbf7481f8945add9689e'/>
<id>urn:sha1:7422200bfa1728139962cbf7481f8945add9689e</id>
<content type='text'>
The fsmonitor settings logic in fsm-settings-darwin.c is not
Darwin-specific and will be reused by the upcoming Linux
implementation.  Rename it to fsm-settings-unix.c to reflect that it
is shared by all Unix platforms.

Update the build files (meson.build and CMakeLists.txt) to use
FSMONITOR_OS_SETTINGS for fsm-settings, matching the approach already
used for fsm-ipc.

Based-on-patch-by: Eric DeCosta &lt;edecosta@mathworks.com&gt;
Based-on-patch-by: Marziyeh Esipreh &lt;marziyeh.esipreh@gmail.com&gt;
Signed-off-by: Paul Tarjan &lt;github@paulisageek.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
