<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/builtin, branch next</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=next</id>
<link rel='self' href='https://git.shady.money/git/atom?h=next'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2026-05-17T14:01:22Z</updated>
<entry>
<title>Merge branch 'kk/paint-down-to-common-optim' into next</title>
<updated>2026-05-17T14:01:22Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-17T14:01:22Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=2e39c767e526b27d6526a785da4a4cfb697ade84'/>
<id>urn:sha1:2e39c767e526b27d6526a785da4a4cfb697ade84</id>
<content type='text'>
"git merge-base" optimization.

* kk/paint-down-to-common-optim:
  commit-reach: early exit paint_down_to_common for single merge-base
  commit-reach: introduce merge_base_flags enum
</content>
</entry>
<entry>
<title>Merge branch 'mm/git-url-parse' into next</title>
<updated>2026-05-15T01:46:53Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-15T01:46:53Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=416deceeebc23f1f0821455d221e6ebf4f31073e'/>
<id>urn:sha1:416deceeebc23f1f0821455d221e6ebf4f31073e</id>
<content type='text'>
The internal URL parsing logic has been made accessible via a new
subcommand "git url-parse".

* mm/git-url-parse:
  t9904: add tests for the new url-parse builtin
  doc: describe the url-parse builtin
  builtin: create url-parse command
  urlmatch: define url_parse function
  url: return URL_SCHEME_UNKNOWN instead of dying
  url: move scheme detection to URL header/source
  url: move url_is_local_not_ssh to url.h
  connect: rename enum protocol to url_scheme
</content>
</entry>
<entry>
<title>Merge branch 'kn/refs-generic-helpers' into next</title>
<updated>2026-05-15T01:46:52Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-15T01:46:52Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=62cb4e0ce2498270ee201bd854f5212148eaceaa'/>
<id>urn:sha1:62cb4e0ce2498270ee201bd854f5212148eaceaa</id>
<content type='text'>
Refactor service routines in the ref subsystem backends.

* kn/refs-generic-helpers:
  refs: use peeled tag values in reference backends
  refs: add peeled object ID to the `ref_update` struct
  refs: move object parsing to the generic layer
  update-ref: handle rejections while adding updates
  update-ref: move `print_rejected_refs()` up
  refs: return `ref_transaction_error` from `ref_transaction_update()`
  refs: extract out reflog config to generic layer
  refs: introduce `ref_store_init_options`
  refs: remove unused typedef 'ref_transaction_commit_fn'
</content>
</entry>
<entry>
<title>Merge branch 'sb/unpack-index-pack-buffer-resize' into next</title>
<updated>2026-05-13T03:21:28Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-13T03:21:28Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=2edd54bcfedd05ee7874e4968ad44899ae997576'/>
<id>urn:sha1:2edd54bcfedd05ee7874e4968ad44899ae997576</id>
<content type='text'>
Use a larger buffer size in the code paths to ingest pack stream.

* sb/unpack-index-pack-buffer-resize:
  index-pack, unpack-objects: increase input buffer from 4 KiB to 128 KiB
</content>
</entry>
<entry>
<title>Merge branch 'ps/history-fixup' into next</title>
<updated>2026-05-13T03:21:28Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-13T03:21:28Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=e6154b62727974482cece040ea7eb1400dacdb81'/>
<id>urn:sha1:e6154b62727974482cece040ea7eb1400dacdb81</id>
<content type='text'>
"git history" learned "fixup" command.

* ps/history-fixup:
  builtin/history: introduce "fixup" subcommand
  builtin/history: generalize function to commit trees
  replay: allow callers to control what happens with empty commits
</content>
</entry>
<entry>
<title>Merge branch 'js/objects-larger-than-4gb-on-windows' into next</title>
<updated>2026-05-13T03:21:26Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-13T03:21:26Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=843d2ac4700867134e6e454c9a4ed3abde774fd2'/>
<id>urn:sha1:843d2ac4700867134e6e454c9a4ed3abde774fd2</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>Merge branch 'kh/name-rev-custom-format' into next</title>
<updated>2026-05-12T02:07:48Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-05-12T02:07:48Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=c944d6131e4b19f87747416cfc1daa23af698cfb'/>
<id>urn:sha1:c944d6131e4b19f87747416cfc1daa23af698cfb</id>
<content type='text'>
A new builtin "git format-rev" is introduced for pretty formatting
one revision expression per line or commit object names found in
running text.

* kh/name-rev-custom-format:
  format-rev: introduce builtin for on-demand pretty formatting
  name-rev: make dedicated --annotate-stdin --name-only test
  name-rev: factor code for sharing with a new command
  name-rev: run clang-format before factoring code
  name-rev: wrap both blocks in braces
</content>
</entry>
<entry>
<title>commit-reach: early exit paint_down_to_common for single merge-base</title>
<updated>2026-05-12T00:33:43Z</updated>
<author>
<name>Kristofer Karlsson</name>
<email>krka@spotify.com</email>
</author>
<published>2026-05-11T12:59:12Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=93e5b1680e30650ceca889a56429a055f17033bd'/>
<id>urn:sha1:93e5b1680e30650ceca889a56429a055f17033bd</id>
<content type='text'>
Commits not in the commit-graph get GENERATION_NUMBER_INFINITY and
sort to the top of the priority queue.  After those, commits with
finite generation numbers are popped in non-increasing order.
When MERGE_BASE_FIND_ALL is not set the first doubly-painted commit
with a finite generation is therefore a best merge-base: no commit
still in the queue can be a descendant of it.  Skip the expensive
STALE drain in this case.

Add MERGE_BASE_FIND_ALL to the merge_base_flags enum.  Callers that
need every merge-base (repo_get_merge_bases_many, repo_get_merge_bases,
repo_in_merge_bases_many, remove_redundant_no_gen) pass the flag to
preserve existing behavior.  git merge-base (without --all) passes 0,
triggering the early exit.

On a 2.2M-commit merge-heavy monorepo with commit-graph:

  HEAD vs ~500:   5,229ms -&gt; 24ms
  HEAD vs ~1000:  4,214ms -&gt; 39ms
  HEAD vs ~5000:  3,799ms -&gt; 46ms
  HEAD vs ~10000: 3,827ms -&gt; 61ms

Signed-off-by: Kristofer Karlsson &lt;krka@spotify.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>commit-reach: introduce merge_base_flags enum</title>
<updated>2026-05-12T00:33:43Z</updated>
<author>
<name>Kristofer Karlsson</name>
<email>krka@spotify.com</email>
</author>
<published>2026-05-11T12:59:11Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=53f9561055e8377a18a2430262857a3650c73dab'/>
<id>urn:sha1:53f9561055e8377a18a2430262857a3650c73dab</id>
<content type='text'>
Replace the boolean ignore_missing_commits parameter in
paint_down_to_common() with an enum merge_base_flags, and thread
the flags through merge_bases_many(), get_merge_bases_many_0(),
and the public repo_get_merge_bases_many_dirty() API.

This makes callsites with boolean parameters easier to read and
prepares the function for additional flags in a subsequent commit.

No functional change: the single caller that used
ignore_missing_commits (repo_in_merge_bases_many) now sets
MERGE_BASE_IGNORE_MISSING_COMMITS in the flags word, and all
other callers pass 0.

Signed-off-by: Kristofer Karlsson &lt;krka@spotify.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>format-rev: introduce builtin for on-demand pretty formatting</title>
<updated>2026-05-12T00:09:51Z</updated>
<author>
<name>Kristoffer Haugsbakk</name>
<email>code@khaugsbakk.name</email>
</author>
<published>2026-05-11T15:45:49Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=19e3106c4510bb50c370241c06e93f050f223d5c'/>
<id>urn:sha1:19e3106c4510bb50c370241c06e93f050f223d5c</id>
<content type='text'>
Introduce a new builtin for pretty formatting one revision expression
per line or commit object names found in running text.

Sometimes you want to format commits. Most of the time you’re
walking the graph, e.g. getting a range of commits like
`master..topic`. That’s a job for git-log(1).

But there are times when you want to format commits that you encounter
on demand:

• Full hashes in running text that you might want to pretty-print
• git-last-modified(1) outputs full hashes that you can do the same
  with
• git-cherry(1) has `-v` for commit subject, but maybe you want
  something else?

But now you can’t use git-log(1), git-show(1), or git-rev-list(1):

• You can’t feed commits piecemeal to these commands, one input
  for one output; they block until standard in is closed
• You can’t feed a list of possibly duplicate commits, like the output
  of git-last-modified(1); they effectively deduplicate the output

Beyond these two points there’s also the input massage problem: you
cannot feed mixed input (revisions mixed with arbitrary text).

One might hope that git-cat-file(1) can save us. But it doesn’t
support pretty formats.

But there is one command that already both handles revisions as
arguments, revisions on standard input, and even revisions mixed in
with arbitrary text. Namely git-name-rev(1): the command for outputting
symbolic names for commits.

We made some room in `builtin/name-rev.c` two commits ago. Let’s
now add this new git-format-rev(1) command. Taking inspiration from
git-name-rev(1), there are two modes:

• revs: like git-name-rev(1) in argv mode, but one revision per line
  on standard in
• text: like git-name-rev(1) with `--annotate-stdin`

***

We need to add this command to the exception list in
`t/t1517-outside-repo.sh` because it uses “EXPERIMENTAL!”
in the usage line.

Helped-by: Phillip Wood &lt;phillip.wood@dunelm.org.uk&gt;
Helped-by: Ramsay Jones &lt;ramsay@ramsayjones.plus.com&gt;
Helped-by: Junio C Hamano &lt;gitster@pobox.com&gt;
Signed-off-by: Kristoffer Haugsbakk &lt;code@khaugsbakk.name&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
