<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/builtin, 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-04-18T00:58:45Z</updated>
<entry>
<title>Merge branch 'en/batch-prefetch' into seen</title>
<updated>2026-04-18T00:58:45Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-18T00:58:45Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=8dfa4d6d2a28d783555f6ebbc90fd3c2ba2edc3e'/>
<id>urn:sha1:8dfa4d6d2a28d783555f6ebbc90fd3c2ba2edc3e</id>
<content type='text'>
In a lazy clone, "git cherry" and "git grep" often fetch necessary
blob objects one by one from promisor remotes.  It has been corrected
to collect necessary object names and fetch them in bulk to gain
reasonable performance.

* en/batch-prefetch:
  grep: prefetch necessary blobs
  builtin/log: prefetch necessary blobs for `git cherry`
  patch-ids.h: add missing trailing parenthesis in documentation comment
</content>
</entry>
<entry>
<title>grep: prefetch necessary blobs</title>
<updated>2026-04-18T00:40:16Z</updated>
<author>
<name>Elijah Newren</name>
<email>newren@gmail.com</email>
</author>
<published>2026-04-18T00:32:27Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=e775693160b65bee01ef56c2f240bfe7a0499d5a'/>
<id>urn:sha1:e775693160b65bee01ef56c2f240bfe7a0499d5a</id>
<content type='text'>
In partial clones, `git grep` fetches necessary blobs on-demand one
at a time, which can be very slow.  In partial clones, add an extra
preliminary walk over the tree similar to grep_tree() which collects
the blobs of interest, and then prefetches them.

Signed-off-by: Elijah Newren &lt;newren@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>builtin/log: prefetch necessary blobs for `git cherry`</title>
<updated>2026-04-18T00:40:16Z</updated>
<author>
<name>Elijah Newren</name>
<email>newren@gmail.com</email>
</author>
<published>2026-04-18T00:32:26Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=578f5d57c12a8c40973408eb603df796523e3a56'/>
<id>urn:sha1:578f5d57c12a8c40973408eb603df796523e3a56</id>
<content type='text'>
In partial clones, `git cherry` fetches necessary blobs on-demand one
at a time, which can be very slow.  We would like to prefetch all
necessary blobs upfront.  To do so, we need to be able to first figure
out which blobs are needed.

`git cherry` does its work in a two-phase approach: first computing
header-only IDs (based on file paths and modes), then falling back to
full content-based IDs only when header-only IDs collide -- or, more
accurately, whenever the oidhash() of the header-only object_ids
collide.

patch-ids.c handles this by creating an ids-&gt;patches hashmap that has
all the data we need, but the problem is that any attempt to query the
hashmap will invoke the patch_id_neq() function on any colliding objects,
which causes the on-demand fetching.

Insert a new prefetch_cherry_blobs() function before checking for
collisions.  Use a temporary replacement on the ids-&gt;patches.cmpfn
in order to enumerate the blobs that would be needed without yet
fetching them, and then fetch them all at once, then restore the old
ids-&gt;patches.cmpfn.

Signed-off-by: Elijah Newren &lt;newren@gmail.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'en/backfill-fixes-and-edges' into seen</title>
<updated>2026-04-17T21:26:38Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:38Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=c9a7494880d68d218ae23a67b8fd1d0cafd980ad'/>
<id>urn:sha1:c9a7494880d68d218ae23a67b8fd1d0cafd980ad</id>
<content type='text'>
The 'git backfill' command now rejects revision-limiting options that
are incompatible with its operation, uses standard documentation for
revision ranges, and includes blobs from boundary commits by default
to improve performance of subsequent operations.

* en/backfill-fixes-and-edges:
  backfill: default to grabbing edge blobs too
  backfill: document acceptance of revision-range in more standard manner
  backfill: reject rev-list arguments that do not make sense
</content>
</entry>
<entry>
<title>Merge branch 'hn/git-checkout-m-with-stash' into seen</title>
<updated>2026-04-17T21:26:37Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:37Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=ecfeaf24459f1f7baab8bc891dfbebf2fba9f945'/>
<id>urn:sha1:ecfeaf24459f1f7baab8bc891dfbebf2fba9f945</id>
<content type='text'>
"git checkout -m another-branch" was invented to deal with local
changes to paths that are different between the current and the new
branch, but it gave only one chance to resolve conflicts.  The command
was taught to create a stash to save the local changes.

* hn/git-checkout-m-with-stash:
  checkout -m: autostash when switching branches
  checkout: rollback lock on early returns in merge_working_tree
  sequencer: teach autostash apply to take optional conflict marker labels
  sequencer: allow create_autostash to run silently
  stash: add --label-ours, --label-theirs, --label-base for apply
</content>
</entry>
<entry>
<title>Merge branch 'pt/fsmonitor-linux' into seen</title>
<updated>2026-04-17T21:26:37Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:37Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=41a92761a28293b45a2aff5123f006a5e1c538dd'/>
<id>urn:sha1:41a92761a28293b45a2aff5123f006a5e1c538dd</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 'jt/odb-transaction-write' into seen</title>
<updated>2026-04-17T21:26:35Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:35Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=24f7ca0fcbf3002306f504282bbaeeb0c34ff20a'/>
<id>urn:sha1:24f7ca0fcbf3002306f504282bbaeeb0c34ff20a</id>
<content type='text'>
ODB transaction interface is being reworked to explicitly handle
object writes.

Comments?

* jt/odb-transaction-write:
  odb/transaction: make `write_object_stream()` pluggable
  object-file: generalize packfile writes to use odb_write_stream
  object-file: avoid fd seekback by checking object size upfront
  object-file: remove flags from transaction packfile writes
  odb: update `struct odb_write_stream` read() callback
  odb/transaction: use pluggable `begin_transaction()`
  odb: split `struct odb_transaction` into separate header
</content>
</entry>
<entry>
<title>Merge branch 'ps/setup-wo-the-repository' into seen</title>
<updated>2026-04-17T21:26:34Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:34Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=7d3204e1f102c6f0b114704ec312f2867aeadf52'/>
<id>urn:sha1:7d3204e1f102c6f0b114704ec312f2867aeadf52</id>
<content type='text'>
Many uses of the_repository has been updated to use a more
appropriate struct repository instance in setup.c codepath.

* ps/setup-wo-the-repository:
  setup: stop using `the_repository` in `init_db()`
  setup: stop using `the_repository` in `create_reference_database()`
  setup: stop using `the_repository` in `initialize_repository_version()`
  setup: stop using `the_repository` in `check_repository_format()`
  setup: stop using `the_repository` in `upgrade_repository_format()`
  setup: stop using `the_repository` in `setup_git_directory()`
  setup: stop using `the_repository` in `setup_git_directory_gently()`
  setup: stop using `the_repository` in `setup_git_env()`
  setup: stop using `the_repository` in `set_git_work_tree()`
  setup: stop using `the_repository` in `setup_work_tree()`
  setup: stop using `the_repository` in `enter_repo()`
  setup: stop using `the_repository` in `verify_non_filename()`
  setup: stop using `the_repository` in `verify_filename()`
  setup: stop using `the_repository` in `path_inside_repo()`
  setup: stop using `the_repository` in `prefix_path()`
  setup: stop using `the_repository` in `is_inside_git_dir()`
  setup: stop using `the_repository` in `is_inside_worktree()`
  setup: replace use of `the_repository` in static functions
</content>
</entry>
<entry>
<title>Merge branch 'jr/bisect-custom-terms-in-output' into seen</title>
<updated>2026-04-17T21:26:33Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:33Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=89e4fd1caa51787d18b5c1856dc365d807b4eeef'/>
<id>urn:sha1:89e4fd1caa51787d18b5c1856dc365d807b4eeef</id>
<content type='text'>
"git bisect" now uses the selected terms (e.g., old/new) more
consistently in its output.

* jr/bisect-custom-terms-in-output:
  rev-parse: use selected alternate terms to look up refs
  bisect: use selected alternate terms in status output
</content>
</entry>
<entry>
<title>Merge branch 'kh/name-rev-custom-format' into seen</title>
<updated>2026-04-17T21:26:33Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-04-17T21:26:33Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=f1ad2af734baaba3acbfd6ed1fefa28115a079ac'/>
<id>urn:sha1:f1ad2af734baaba3acbfd6ed1fefa28115a079ac</id>
<content type='text'>
"git name-rev" learned to use custom format instead of the object
name in an extended SHA-1 expression form.

* kh/name-rev-custom-format:
  name-rev: learn --format=&lt;pretty&gt;
  name-rev: wrap both blocks in braces
</content>
</entry>
</feed>
