Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
9f4e170
pack-objects: call release_revisions() after cruft traversal
spkrka May 27, 2026
d877b1a
revision: introduce rev_walk_mode to clarify get_revision_1()
spkrka May 27, 2026
dd4bc01
revision: use priority queue for non-limited streaming walks
spkrka May 27, 2026
dc6068d
docs: fix typos and grammar
May 29, 2026
061a68e
sub-process: use gentle handshake to avoid die() on startup failure
mmontalbo Jun 1, 2026
1891707
describe: fix --exclude, --match with --contains and --all
jacob-keller Jun 1, 2026
bb4ce23
revision.c: implement --max-count-oldest
Mroik May 19, 2026
9708b3d
gitlab-ci: rearrange Linux jobs to match GitHub's order
pks-t Jun 4, 2026
f0ba41b
gitlab-ci: add missing Linux jobs
pks-t Jun 4, 2026
43a6a00
ci: unify Linux images across GitLab and GitHub
pks-t Jun 4, 2026
bf3ed75
t7527: fix broken TAP output
pks-t Jun 4, 2026
b1688db
t7810: turn MB_REGEX check into a lazy prereq
pks-t Jun 4, 2026
d119686
t/test-lib: silence EBUSY errors on Windows during test cleanup
pks-t Jun 4, 2026
c2d2d17
t/lib-git-p4: silence output when killing p4d and its watchdog
pks-t Jun 4, 2026
389c830
t: let prove fail when parsing invalid TAP output
pks-t Jun 4, 2026
e6145d1
docs: fix typos
taahol Jun 4, 2026
179f122
mingw: kill child processes in a gentler way
dscho Jun 4, 2026
363f1d8
mingw: really handle SIGINT
dscho Jun 4, 2026
0c20c6c
unpack-trees: use repository from index instead of global
jayesh0104 Mar 31, 2026
ff7901e
bash-completions: add --max-count-oldest
Mroik Jun 10, 2026
e444fd1
Merge branch 'js/win-kill-child-more-gently'
gitster Jun 16, 2026
c534ec3
Merge branch 'mf/revision-max-count-oldest'
gitster Jun 16, 2026
6e148f8
Merge branch 'kk/streaming-walk-pqueue'
gitster Jun 16, 2026
7afc0f1
Merge branch 'jk/describe-contains-all-match-fix'
gitster Jun 16, 2026
e02da45
Merge branch 'ps/t7527-fix-tap-output'
gitster Jun 16, 2026
49cf098
Merge branch 'jd/unpack-trees-wo-the-repository'
gitster Jun 16, 2026
5255d04
Merge branch 'wy/docs-typofixes'
gitster Jun 16, 2026
5105e38
Merge branch 'mm/subprocess-handshake-fix'
gitster Jun 16, 2026
4c2c767
Merge branch 'ta/typofixes'
gitster Jun 16, 2026
0fae78c
topic flush before -rc1 (batch 2)
gitster Jun 16, 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
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ jobs:
image: alpine:latest
# Supported until 2025-04-02.
- jobname: linux32
image: i386/ubuntu:focal
image: i386/ubuntu:20.04
# A RHEL 8 compatible distro. Supported until 2029-05-31.
- jobname: almalinux-8
image: almalinux:8
Expand Down
23 changes: 15 additions & 8 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ test:linux:
- jobname: linux-reftable
image: ubuntu:rolling
CC: clang
- jobname: linux-breaking-changes
image: ubuntu:20.04
CC: gcc
- jobname: fedora-breaking-changes-meson
image: fedora:latest
- jobname: linux-TEST-vars
image: ubuntu:20.04
CC: gcc
CC_PACKAGE: gcc-8
- jobname: linux-breaking-changes
image: ubuntu:rolling
CC: gcc
- jobname: fedora-breaking-changes-meson
image: fedora:latest
- jobname: linux-leaks
image: ubuntu:rolling
CC: gcc
Expand All @@ -60,13 +60,20 @@ test:linux:
- jobname: linux-asan-ubsan
image: ubuntu:rolling
CC: clang
- jobname: linux-meson
image: ubuntu:rolling
CC: gcc
- jobname: linux-musl-meson
image: alpine:latest
# Supported until 2025-04-02.
- jobname: linux32
image: i386/ubuntu:20.04
- jobname: linux-meson
image: ubuntu:rolling
CC: gcc
# 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
artifacts:
paths:
- t/failed-test-artifacts
Expand Down
37 changes: 37 additions & 0 deletions Documentation/RelNotes/2.55.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ UI, Workflows & Features
that the user meant "git config set foo.bar baz". Give advice when
giving an error message.

* "git rev-list" (and "git log" family of commands) learned a new "--max-count-oldest"
that picks oldest N commits in the range instead of the usual newest.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
Expand Down Expand Up @@ -188,6 +191,19 @@ Performance, Internal Implementation, Development Support etc.
variables into 'repo_config_values' to tie them to a specific
repository instance, avoiding cross-repository state leakage.

* Streaming revision walks have been optimized by using a priority queue
for date-sorting commits, speeding up walks repositories with many
merges.

* A recent regression in t7527 that broke TAP output has been fixed,
some other test noise that also broke TAP output has been silenced,
and 'prove' is now configured to fail on invalid TAP output to
prevent future regressions.

* A handful of inappropriate uses of the_repository have been
rewritten to use the right repository structure instance in the
unpack-trees.c codepath.


Fixes since v2.54
-----------------
Expand Down Expand Up @@ -348,6 +364,27 @@ Fixes since v2.54
has been improved.
(merge 4a1eb9304a lo/doc-format-patch-subject-prefix later to maint).

* Advanced emulation of kill() used on Windows in GfW has been
upstreamed to improve the symptoms like left-behind .lock files and
that fails to let the child clean-up itself when it gets killed.
(merge 363f1d8b3a js/win-kill-child-more-gently later to maint).

* The 'git describe --contains --all' command has been fixed to
properly honor the '--match' and '--exclude' options by passing
them down to 'git name-rev' with the appropriate reference
prefixes.
(merge 1891707d1b jk/describe-contains-all-match-fix later to maint).

* Various typos, grammatical errors, and duplicated words in both
documentation and code comments have been corrected.
(merge dc6068df67 wy/docs-typofixes later to maint).

* The subprocess handshake during startup has been made gentler by using
packet_read_line_gently() instead of packet_read_line() to prevent the
parent Git process from dying abruptly when a configured subprocess
(e.g., a clean/smudge filter) fails to start.
(merge 061a68e443 mm/subprocess-handshake-fix later to maint).

* Other code cleanup, docfix, build fix, etc.
(merge 80f4b802e9 ja/doc-difftool-synopsis-style later to maint).
(merge b96490241e jc/doc-timestamps-in-stat later to maint).
Expand Down
2 changes: 1 addition & 1 deletion Documentation/config/sideband.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ sideband.allowControlCharacters::
Allow control sequences that move the cursor. This is
disabled by default.
`erase`::
Allow control sequences that erase charactrs. This is
Allow control sequences that erase characters. This is
disabled by default.
`false`::
Mask all control characters other than line feeds and
Expand Down
2 changes: 1 addition & 1 deletion Documentation/fetch-options.adoc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
`--all`::
`--no-all`::
Fetch all remotes, except for the ones that has the
Fetch all remotes, except for the ones that have the
`remote.<name>.skipFetchAll` configuration variable set.
This overrides the configuration variable `fetch.all`.

Expand Down
2 changes: 1 addition & 1 deletion Documentation/git-format-rev.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ OPTIONS
The argument `rev` is also accepted.

`text`;; Formats all commit object names found in freeform text. These
must the full object names, i.e. abbreviated hexidecimal object
must be full object names, i.e. abbreviated hexadecimal object
names will not be interpreted.
+
Anything that is parsed as an object name but that is not found to be a
Expand Down
5 changes: 4 additions & 1 deletion Documentation/rev-list-options.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ ordering and formatting options, such as `--reverse`.
`-<number>`::
`-n <number>`::
`--max-count=<number>`::
Limit the output to _<number>_ commits.
Limit the output to the first _<number>_ commits that would be shown.

`--max-count-oldest=<number>`::
Limit the output to the last _<number>_ commits that would be shown.

`--skip=<number>`::
Skip _<number>_ commits before starting to show the commit output.
Expand Down
18 changes: 15 additions & 3 deletions builtin/describe.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,13 +712,25 @@ int cmd_describe(int argc,
NULL);
if (always)
strvec_push(&args, "--always");
if (!all) {
if (!all)
strvec_push(&args, "--tags");

for_each_string_list_item(item, &patterns)
strvec_pushf(&args, "--refs=refs/tags/%s", item->string);
for_each_string_list_item(item, &exclude_patterns)
strvec_pushf(&args, "--exclude=refs/tags/%s", item->string);

if (all) {
for_each_string_list_item(item, &patterns)
strvec_pushf(&args, "--refs=refs/tags/%s", item->string);
strvec_pushf(&args, "--refs=refs/heads/%s", item->string);
for_each_string_list_item(item, &exclude_patterns)
strvec_pushf(&args, "--exclude=refs/tags/%s", item->string);
strvec_pushf(&args, "--exclude=refs/heads/%s", item->string);
for_each_string_list_item(item, &patterns)
strvec_pushf(&args, "--refs=refs/remotes/%s", item->string);
for_each_string_list_item(item, &exclude_patterns)
strvec_pushf(&args, "--exclude=refs/remotes/%s", item->string);
}

if (argc)
strvec_pushv(&args, argv);
else
Expand Down
1 change: 1 addition & 0 deletions builtin/pack-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -4281,6 +4281,7 @@ static void enumerate_and_traverse_cruft_objects(struct string_list *fresh_packs
traverse_commit_list(&revs, show_cruft_commit, show_cruft_object, NULL);

stop_progress(&progress_state);
release_revisions(&revs);
}

static void read_cruft_objects(void)
Expand Down
2 changes: 1 addition & 1 deletion ci/lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ then
CI_OS_NAME=osx
JOBS=$(nproc)
;;
*,alpine:*|*,fedora:*|*,ubuntu:*|*,i386/ubuntu:*)
*,almalinux:*|*,alpine:*|*,debian:*|*,fedora:*|*,ubuntu:*|*,i386/ubuntu:*)
CI_OS_NAME=linux
JOBS=$(nproc)
;;
Expand Down
2 changes: 1 addition & 1 deletion combine-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -666,7 +666,7 @@ static int make_hunks(struct sline *sline, unsigned long cnt,
* (-) line, which records from what parents the line
* was removed; this line does not appear in the result.
* then check the set of parents the result has difference
* from, from all lines. If there are lines that has
* from, from all lines. If there are lines that have
* different set of parents that the result has differences
* from, that means we have more than two versions.
*
Expand Down
13 changes: 0 additions & 13 deletions commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -760,19 +760,6 @@ void commit_list_free(struct commit_list *list)
pop_commit(&list);
}

struct commit_list * commit_list_insert_by_date(struct commit *item, struct commit_list **list)
{
struct commit_list **pp = list;
struct commit_list *p;
while ((p = *pp) != NULL) {
if (p->item->date < item->date) {
break;
}
pp = &p->next;
}
return commit_list_insert(item, pp);
}

static int commit_list_compare_by_date(const struct commit_list *a,
const struct commit_list *b)
{
Expand Down
2 changes: 0 additions & 2 deletions commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,6 @@ int commit_list_contains(struct commit *item,
struct commit_list **commit_list_append(struct commit *commit,
struct commit_list **next);
unsigned commit_list_count(const struct commit_list *l);
struct commit_list *commit_list_insert_by_date(struct commit *item,
struct commit_list **list);
void commit_list_sort_by_date(struct commit_list **list);

/* Shallow copy of the input list */
Expand Down
38 changes: 30 additions & 8 deletions compat/mingw.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "symlinks.h"
#include "trace2.h"
#include "win32.h"
#include "win32/exit-process.h"
#include "win32/lazyload.h"
#include "wrapper.h"
#include <aclapi.h>
Expand Down Expand Up @@ -2251,16 +2252,28 @@ int mingw_execvp(const char *cmd, char *const *argv)
int mingw_kill(pid_t pid, int sig)
{
if (pid > 0 && sig == SIGTERM) {
HANDLE h = OpenProcess(PROCESS_TERMINATE, FALSE, pid);

if (TerminateProcess(h, -1)) {
HANDLE h = OpenProcess(PROCESS_CREATE_THREAD |
PROCESS_QUERY_INFORMATION |
PROCESS_VM_OPERATION | PROCESS_VM_WRITE |
PROCESS_VM_READ | PROCESS_TERMINATE,
FALSE, pid);
int ret;

if (h)
ret = exit_process(h, 128 + sig);
else {
h = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
if (!h) {
errno = err_win_to_posix(GetLastError());
return -1;
}
ret = terminate_process_tree(h, 128 + sig);
}
if (ret) {
errno = err_win_to_posix(GetLastError());
CloseHandle(h);
return 0;
}

errno = err_win_to_posix(GetLastError());
CloseHandle(h);
return -1;
return ret;
} else if (pid > 0 && sig == 0) {
HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
if (h) {
Expand Down Expand Up @@ -3610,7 +3623,14 @@ static void adjust_symlink_flags(void)
symlink_file_flags |= 2;
symlink_directory_flags |= 2;
}
}

static BOOL WINAPI handle_ctrl_c(DWORD ctrl_type)
{
if (ctrl_type != CTRL_C_EVENT)
return FALSE; /* we did not handle this */
mingw_raise(SIGINT);
return TRUE; /* we did handle this */
}

#ifdef _MSC_VER
Expand Down Expand Up @@ -3647,6 +3667,8 @@ int wmain(int argc, const wchar_t **wargv)
#endif
#endif

SetConsoleCtrlHandler(handle_ctrl_c, TRUE);

maybe_redirect_std_handles();
adjust_symlink_flags();

Expand Down
Loading