Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
dd3693e
transport-helper, connect: use clean_on_exit to reap children on abno…
cshung Mar 12, 2026
736cef8
object-file: fix sparse 'plain integer as NULL pointer' error
ramsay-jones Mar 19, 2026
7f75767
Merge branch 'ps/object-counting' into ps/odb-generic-object-name-han…
gitster Mar 20, 2026
1382e54
oidtree: modernize the code a bit
pks-t Mar 20, 2026
fe446b0
oidtree: extend iteration to allow for arbitrary return codes
pks-t Mar 20, 2026
cfd575f
odb: introduce `struct odb_for_each_object_options`
pks-t Mar 20, 2026
284b786
object-name: move logic to iterate through loose prefixed objects
pks-t Mar 20, 2026
e30bff8
object-name: move logic to iterate through packed prefixed objects
pks-t Mar 20, 2026
28c9254
object-name: extract function to parse object ID prefixes
pks-t Mar 20, 2026
d2612fe
object-name: backend-generic `repo_collect_ambiguous()`
pks-t Mar 20, 2026
eac58de
object-name: backend-generic `get_short_oid()`
pks-t Mar 20, 2026
e9b7caa
object-name: merge `update_candidates()` and `match_prefix()`
pks-t Mar 20, 2026
67f47ea
object-name: abbreviate loose object names without `disambiguate_state`
pks-t Mar 20, 2026
1a2842d
object-name: simplify computing common prefixes
pks-t Mar 20, 2026
ab3ab10
object-name: move logic to compute loose abbreviation length
pks-t Mar 20, 2026
6c2ede6
object-file: move logic to compute packed abbreviation length
pks-t Mar 20, 2026
83869e1
odb: introduce generic `odb_find_abbrev_len()`
pks-t Mar 20, 2026
e8b79a9
replay: support replaying down from root commit
To1ne Mar 24, 2026
4d5fb93
revision: make handle_dotdot() interface less confusing
peff Mar 26, 2026
268a9ca
rev-parse: simplify dotdot parsing
peff Mar 26, 2026
22b985e
revision: avoid writing to const string for parent marks
peff Mar 26, 2026
213b213
rev-parse: avoid writing to const string for parent marks
peff Mar 26, 2026
d385845
config: store allocated string in non-const pointer
peff Mar 26, 2026
81e2906
pack-objects: plug leak in `read_stdin_packs()`
ttaylorr Mar 27, 2026
d31d1f2
pack-objects: refactor `read_packs_list_from_stdin()` to use `strmap`
ttaylorr Mar 27, 2026
5a4381f
t7704: demonstrate failure with once-cruft objects above the geometri…
ttaylorr Mar 27, 2026
3f7c0e7
pack-objects: support excluded-open packs with --stdin-packs
ttaylorr Mar 27, 2026
9ad29df
repack: mark non-MIDX packs above the split as excluded-open
ttaylorr Mar 27, 2026
d8e34f9
t2000: modernise overall structure
alibaba0010 Mar 27, 2026
849988b
t6101: avoid suppressing git's exit code
trieu1162000 Mar 28, 2026
0f0ce07
doc: gitignore: clarify pattern base for info/exclude and core.exclud…
shreyp135 Mar 28, 2026
3402850
docs: fix "git stash [push]" documentation
Sporarum Mar 30, 2026
66dd13f
unify and bump _WIN32_WINNT definition to Windows 8.1
rimrul Apr 6, 2026
2f8c3f6
compat/winansi: drop pre-Vista workaround
rimrul Apr 6, 2026
d75badf
Merge branch 'ps/odb-generic-object-name-handling'
gitster Apr 6, 2026
03311dc
Merge branch 'tb/stdin-packs-excluded-but-open'
gitster Apr 6, 2026
da54784
Merge branch 'tc/replay-down-to-root'
gitster Apr 6, 2026
0713d3b
Merge branch 'za/t2000-modernise'
gitster Apr 6, 2026
039888f
Merge branch 'th/t6101-unhide-git-failures'
gitster Apr 6, 2026
e44fbc2
Merge branch 'sp/doc-gitignore-oowt'
gitster Apr 6, 2026
a2dc765
Merge branch 'qb/doc-git-stash-push-optionality'
gitster Apr 6, 2026
87972f3
Merge branch 'aa/reap-transport-child-processes'
gitster Apr 6, 2026
fbd0428
Merge branch 'jk/c23-const-preserving-fixes'
gitster Apr 6, 2026
1adf5bc
A handful before -rc1
gitster Apr 6, 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
20 changes: 20 additions & 0 deletions Documentation/RelNotes/2.54.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ UI, Workflows & Features
* "git replay" (experimental) learns, in addition to "pick" and
"replay", a new operating mode "revert".

* git replay now supports replaying down to the root commit.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
Expand Down Expand Up @@ -283,6 +285,21 @@ Performance, Internal Implementation, Development Support etc.
is buggy and breaks our existing tests, which unfortunately
have been rewritten to avoid triggering the bug.

* Object name handling (disambiguation and abbreviation) has been
refactored to be backend-generic, moving logic into the respective
object database backends.

* pack-objects's --stdin-packs=follow mode learns to handle
excluded-but-open packs.

* A few code paths that spawned child processes for network
connection weren't wait(2)ing for their children and letting "init"
reap them instead; they have been tightened.

* Adjust the codebase for C23 that changes functions like strchr()
that discarded constness when they return a pointer into a const
string to preserve constness.


Fixes since v2.53
-----------------
Expand Down Expand Up @@ -512,3 +529,6 @@ Fixes since v2.53
(merge 37182267a0 kh/doc-interpret-trailers-1 later to maint).
(merge f64c50e768 jc/rerere-modern-strbuf-handling later to maint).
(merge 699248d89e th/t8003-unhide-git-failures later to maint).
(merge d8e34f971b za/t2000-modernise later to maint).
(merge 849988bc74 th/t6101-unhide-git-failures later to maint).
(merge 0f0ce07625 sp/doc-gitignore-oowt later to maint).
25 changes: 18 additions & 7 deletions Documentation/git-pack-objects.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,24 @@ base-name::
included packs (those not beginning with `^`), excluding any
objects listed in the excluded packs (beginning with `^`).
+
When `mode` is "follow", objects from packs not listed on stdin receive
special treatment. Objects within unlisted packs will be included if
those objects are (1) reachable from the included packs, and (2) not
found in any excluded packs. This mode is useful, for example, to
resurrect once-unreachable objects found in cruft packs to generate
packs which are closed under reachability up to the boundary set by the
excluded packs.
When `mode` is "follow" packs may additionally be prefixed with `!`,
indicating that they are excluded but not necessarily closed under
reachability. In addition to objects in included packs, the resulting
pack may include additional objects based on the following:
+
--
* If any packs are marked with `!`, then objects reachable from such
packs or included ones via objects outside of excluded-closed packs
will be included. In this case, all `^` packs are treated as closed
under reachability.
* Otherwise (if there are no `!` packs), objects within unlisted packs
will be included if those objects are (1) reachable from the
included packs, and (2) not found in any excluded packs.
--
+
This mode is useful, for example, to resurrect once-unreachable
objects found in cruft packs to generate packs which are closed under
reachability up to the boundary set by the excluded packs.
+
Incompatible with `--revs`, or options that imply `--revs` (such as
`--all`), with the exception of `--unpacked`, which is compatible.
Expand Down
10 changes: 4 additions & 6 deletions Documentation/git-stash.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ git stash drop [-q | --quiet] [<stash>]
git stash pop [--index] [-q | --quiet] [<stash>]
git stash apply [--index] [-q | --quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
git stash [push] [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
[-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
[--pathspec-from-file=<file> [--pathspec-file-nul]]
[--] [<pathspec>...]]
[--] [<pathspec>...]
git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
[-u | --include-untracked] [-a | --all] [<message>]
git stash clear
Expand Down Expand Up @@ -60,10 +60,8 @@ COMMANDS
the description along with the stashed state.
+
For quickly making a snapshot, you can omit "push". In this mode,
non-option arguments are not allowed to prevent a misspelled
subcommand from making an unwanted stash entry. The two exceptions to this
are `stash -p` which acts as alias for `stash push -p` and pathspec elements,
which are allowed after a double hyphen `--` for disambiguation.
pathspec elements are only allowed after a double hyphen `--`
to prevent a misspelled subcommand from making an unwanted stash entry.

`save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-u | --include-untracked] [-a | --all] [-q | --quiet] [<message>]`::

Expand Down
5 changes: 5 additions & 0 deletions Documentation/gitignore.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@ PATTERN FORMAT
particular `.gitignore` file itself. Otherwise the pattern may also
match at any level below the `.gitignore` level.
- Patterns read from exclude sources that are outside the working tree,
such as $GIT_DIR/info/exclude and core.excludesFile, are treated as if
they are specified at the root of the working tree, i.e. a leading "/"
in such patterns anchors the match at the root of the repository.
- If there is a separator at the end of the pattern then the pattern
will only match directories, otherwise the pattern can match both
files and directories.
Expand Down
7 changes: 5 additions & 2 deletions builtin/cat-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,9 @@ static void batch_each_object(struct batch_options *opt,
.callback = callback,
.payload = _payload,
};
struct odb_for_each_object_options opts = {
.flags = flags,
};
struct bitmap_index *bitmap = NULL;
struct odb_source *source;

Expand All @@ -860,7 +863,7 @@ static void batch_each_object(struct batch_options *opt,
odb_prepare_alternates(the_repository->objects);
for (source = the_repository->objects->sources; source; source = source->next) {
int ret = odb_source_loose_for_each_object(source, NULL, batch_one_object_oi,
&payload, flags);
&payload, &opts);
if (ret)
break;
}
Expand All @@ -884,7 +887,7 @@ static void batch_each_object(struct batch_options *opt,
for (source = the_repository->objects->sources; source; source = source->next) {
struct odb_source_files *files = odb_source_files_downcast(source);
int ret = packfile_store_for_each_object(files->packed, &oi,
batch_one_object_oi, &payload, flags);
batch_one_object_oi, &payload, &opts);
if (ret)
break;
}
Expand Down
7 changes: 4 additions & 3 deletions builtin/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -838,6 +838,7 @@ static int get_urlmatch(const struct config_location_options *opts,
const char *var, const char *url)
{
int ret;
char *section;
char *section_tail;
struct config_display_options display_opts = *_display_opts;
struct string_list_item *item;
Expand All @@ -851,8 +852,8 @@ static int get_urlmatch(const struct config_location_options *opts,
if (!url_normalize(url, &config.url))
die("%s", config.url.err);

config.section = xstrdup_tolower(var);
section_tail = strchr(config.section, '.');
config.section = section = xstrdup_tolower(var);
section_tail = strchr(section, '.');
if (section_tail) {
*section_tail = '\0';
config.key = section_tail + 1;
Expand Down Expand Up @@ -886,7 +887,7 @@ static int get_urlmatch(const struct config_location_options *opts,
string_list_clear(&values, 1);
free(config.url.url);

free((void *)config.section);
free(section);
return ret;
}

Expand Down
Loading