The sequencer has been fixed to ensure that the 'REBASE_HEAD' and
'AUTO_MERGE' refs are properly removed after a rebase finishes,
even when the final pick stops for conflicts and is later resumed
or skipped.
* pw/sequencer-delete-rebase-head:
sequencer: remove AUTO_MERGE at the end of a rebase
sequencer: remove REBASE_HEAD at the end of a rebase
test_ref_missing(): improve error message
The 'git status' command has been optimized to acquire the index
lock only when writing the updated index, rather than holding it
during the entire working tree traversal, avoiding lock
contention. Index validation has also been improved to use stat
data to detect concurrent modifications when 'index.skipHash' is
enabled.
* mc/status-index-lock:
status: lock the index only to write it
read-cache: verify skipHash index by stat data
The CI scripts have been updated to fail the build immediately when
optional dependencies like Perforce, Git-LFS, or JGit fail to
install, instead of silently skipping their tests..
* hn/ci-fail-on-missing-deps:
ci: fail the build if perforce, git-lfs, or JGit fail to install
ci: drop quarantine removal for macos perforce binaries
The obsolete 'gittutorial-2' documentation and all references to it
have been removed from the documentation tree and 'command-list.txt'.
* je/doc-remove-gittutorial-2:
doc: remove references to gittutorial-2
doc: remove gittutorial-2
A test script 't7104' has been modernized to use 'test_path_is_file'
instead of 'test -f'.
* tk/t7104-test-path-is-file:
t7104: use test_path_is_file instead of test -f
The coding guidelines have been updated to officially allow the use
of C99 compound literals, as the test balloon has been flying
without issues since late 2024.
* pw/allow-compound-literals:
CodingGuidelines: allow compound literals
The error message given when pathname is too long has been updated
to use the pluralized translation function, Q_().
* kf/archive-zip-msg-i18n:
archive-zip: refactor 'path too long' error message to use Q_()
The CI workflow has been updated to pin GitHub Actions to their full
commit IDs rather than version tags, which secures the CI
environment against potential supply-chain attacks.
* tb/ci-pin-actions:
ci: pin actions in the main workflow to full commit IDs
The unused 'USE_THE_REPOSITORY_VARIABLE' macro has been removed from
'diffcore-break.c'.
* oa/diffcore-break-remove-use-the-repository-variable:
diffcore-break: remove USE_THE_REPOSITORY_VARIABLE
The 'unit-test' runner has been taught to safely ignore the
'--long-tests' ('-l') option, preventing it from failing when the
same compatibility arguments are passed to both unit and
integration tests. The list of ignored arguments has also been
sorted.
* ks/unit-tests-ignore-long-tests:
unit-tests: ignore --long-tests
unit-tests: reshuffle NOOP arguments to maintain order
A new user manual page on how to resolve merge conflicts has been
introduced, and other commands that could encounter conflicts have
been updated to link to it.
* je/doc-merge-conflicts:
doc: git-pull: link to new merge conflicts guide
doc: git-cherry-pick: link to new merge conflicts guide
doc: git-revert: link to new merge conflicts guide
doc: git-rebase: link to new merge conflicts guide
doc: git-merge: link to new merge conflicts guide
doc: add new gitmergeconflicts man page
A test in 't1450-fsck.sh' failed on older macOS when overwriting a
read-only loose object, which has been corrected by using 'mv -f'.
* tb/t1450-use-mv-f:
t1450: use 'mv -f' when overwriting a read-only file
The global state 'the_repository' in 'diffcore-rename.c' has been
removed by utilizing the repository pointer available within the
'diff_options' context structure.
* oa/diffcore-rename-no-the-repository:
diffcore-rename: stop using the_repository
The --dry-run option of git reflog expire has been corrected to
report "would prune" instead of "prune" when refs are named on the
command line, bringing it in line with the behavior of the --all
option.
* lb/reflog-expire-dry-run-fix:
builtin/reflog: say "would prune" for named refs with --dry-run
The command-line completion for 'git stash' has been updated to
dynamically discover subcommands and to correct a Zsh-specific
formatting issue where stash references were improperly unquoted.
Additionally, the deprecated 'save' subcommand has been removed from
completions and synopsis documentation.
* dk/stash-completion-updates:
completion: drop "stash save" completion altogether
doc: drop usage mentions of "git stash save"
completion: fix Zsh handling of stash names
Completion: extract common stash listing code
completion: simplify stash subcommand completion
The test script 't0081-find-pack.sh' has been updated to use the
'test_path_is_file' helper instead of the raw 'test -f' command.
* ss/t0081-test-path-is-file:
t0081: modernize the code testing whether a file exists
The advice subsystem has been updated to suggest using the
'--global' option when recommending a command snippet to squelch
future advice messages, since global configuration is generally
more appropriate for user-level preferences than per-repository
settings.
* jc/advice-config-set-global:
advice: give cut-and-pasteable advice to squelch
The documentation on contributing has been updated to emphasize the
importance of discussing review feedback before sending the next
iteration, and the section on sending an updated version has been
moved to appear after the discussion of the review process.
* jc/myfirstcontribution-discuss-then-reroll:
MyFirstContribution: clarify that "reviewing" is a discussion
MyFirstContribution: move "how to send v2" after discussing reviews
The 'rerere' subsystem has been libified to remove its dependency on
the global 'the_repository' state and global tracking variables,
allowing it to operate correctly in multi-repository contexts.
* ps/rerere-remove-global-state:
rerere: get rid of global rerere cache state
rerere: bundle global state into a struct
rerere: stop using `the_repository`
rerere: cache result of `is_rerere_enabled()`
rerere: remove redundant calls to `repo_config()`
rerere: stop using `the_repository` in internal helpers
rerere: stop using `the_repository` in `rerere_path()`
The hook.<event>.enabled configuration variable has been extended to
also disable traditional hookdir hooks in addition to configured
hooks. In addition, the hook configuration parser has been updated
to treat missing values for boolean variables like enabled and
parallel as true.
* tb/hook-enabled-covers-traditional-hooks:
hook: accept .enabled and .parallel given without a value
hook: make hook.<event>.enabled cover the hookdir hook
The 'git switch' and 'git checkout' commands have been updated to
complete the branch switch instead of aborting when the tracking
configuration fails to write, matching the behavior of 'git push -u'.
* ti/checkout-track-failure:
checkout: finish switching when the tracking config cannot be written
branch: return an error from setup_tracking()
The hint printed when tracking configuration fails to be written has
been corrected to produce a valid remote-tracking branch name.
* ti/branch-set-upstream-hint-fix:
branch: strip refs/heads/ from the --set-upstream-to hint
The messages 'git checkout' prints to describe orphaned commits and
multiple references have been updated to use the Q_() macro, allowing
translators to use the correct plural forms for numbers greater than
one.
* tj/checkout-orphan-more-plural:
checkout: use Q_() for messages with counts
The verbose "Checking connectivity" message in 'git fsck' has been
updated to use the pluralizing translation macro.
* ag/fsck-connectivity-msg-i18n:
fsck: use Q_() for the verbose connectivity message
The connectivity check in 'git fetch' and 'git receive-pack' has
been optimized with an alternative incremental mode, available via
'transfer.connectivityCheck=incremental'. Instead of walking the
full object closure of the boundary commits, it compares the trees
of incoming commits against their trusted parent trees, skipping
unchanged subtrees.
* kk/connectivity-check-incremental:
connected: add "auto" connectivity check mode
connected: add incremental connectivity check via rev-list
connected: add transfer.connectivityCheck config
connected: drop dependency on `the_repository`
p5413: add perf tests for connectivity check
Documentation: describe connectivity checking
The creation of '.keep' lockfiles during object database
transactions has been deferred to commit time, explicitly managing
the lockfiles within the files backend rather than relying on
'git-index-pack', to prevent race conditions that could lead to
concurrent lockfiles being erroneously deleted.
* jt/odb-keep-lockfile-fix:
object-file: write ".keep" lockfiles during transaction commit
object-file: explicitly write ".keep" lockfile
pack-write: lift and expose index-pack report parsing
pack-write: make index-pack output comment hash agnostic
A test script ('t2104') has been updated to avoid piping the output of
a 'git' command into another command, which would hide its exit code.
* cu/t2104-avoid-pipes:
t2104: avoid suppressing git's exit code
The Makefile has been updated to explicitly pass '--target-dir
target' to 'cargo' when building the 'gitcore' library, fixing a
link error that occurs when the user has a custom target directory
configured via 'CARGO_TARGET_DIR' or their Cargo configuration.
* ak/cargo-pin-target-dir:
Makefile: pin cargo --target-dir to ./target
The test in 't5301' has been modernized to use the
'test_path_is_file' helper instead of the raw 'test -f' command.
* rk/t5301-use-test-path-helpers:
t5301: use test_path_is_file instead of test -f
The loose refs cache in the files backend has been updated to avoid
caching root refs (like 'HEAD'), preventing them from being omitted
from subsequent iterators that explicitly request them when a
previous iterator populated the cache without them.
* ak/refs-files-root-refs-cache:
refs/files: keep root refs out of loose ref cache
The macOS CI jobs have been updated to use a mixture of 'macos-15' and
'macos-latest' images, as the 'macos-14' hosted runner image is being
deprecated by GitHub.
* jc/ci-update-macos-15:
github-ci: update macos jobs from macos-14
Fix an obvious spelling error in `Documentation/config/log.adoc`
"overriden" -> "overridden"
Signed-off-by: Hardik Kumar <hardikxk@gmail.com>
Acked-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
The ZIP archive creation code has been updated to omit the 'UT'
extended timestamp extra field when the commit time exceeds the
32-bit positive signed integer limit, avoiding integer wraparound
for dates past the year 2038.
* rs/archive-zip-omit-out-of-range-mtime:
archive-zip: omit UT extra field if mtime is out of range
The internal config file parser has been updated to treat the
content read from a blob as a sequence of unsigned bytes, preventing
bytes with the high bit set from being mistakenly interpreted as
'EOF'.
* of/config-buf-fgetc-unsigned:
config: read the bytes of a blob as unsigned characters
The 'git bundle create' command has been updated to initialize the
revs_copy structure at declaration. This prevents a potential crash
caused by reading uninitialized stack memory during cleanup when an
unrecognized argument is provided.
* of/bundle-uninitialized-memory-fix:
bundle: do not free uninitialized memory on bad arguments
The internal write_index_as_tree() function has been updated to
take the index lock gently. This allows it to skip the optional
cache-tree write-back when the lock is held by another process,
preventing commands like 'git rebase' from dying due to background
tasks holding the lock.
* sw/cache-tree-ignore-locked-index:
cache-tree: do not die when the index is locked
The '--dry-run' option of 'git repack --drop-filtered' used to
actually rebuild packs and delete redundant ones, which has been
corrected to only list the candidates without making changes.
* ss/repack-drop-filtered-dry-run:
repack: do not rebuild packs on --dry-run
Instead of failing to record conflicts to be resolved immediately,
wait while "rerere gc" is ongoing.
* tb/rerere-wait-for-merge-rr-lock:
rerere: add "gc --skip-locked" for auto maintenance
rerere: wait for MERGE_RR.lock before giving up
The lazy prerequisite set-up script can be fed as a here-doc, just
like test_expect_{success,failure} scripts these days.
* jk/test-lazy-prereq-heredoc:
test-lib: allow lazy prerequisite snippets as here-docs
If there are conflicts when picking a commit, the merge machinery
creates a ref called AUTO_MERGE that the user can use to compare their
conflict resolution to the conflicted result. The sequencer tries to
remove that ref on every iteration of the loop that picks commits,
but it is only written if we stop for conflicts, so it only needs
to be removed when we enter the loop, not on every iteration. The
ref is not removed after the loop has finished, which means that if
the last pick has conflicts it is left behind after the rebase has
finished. Fix this by removing the ref before the start of the loop
in pick_commits() as the last commit did for REBASE_HEAD. The tests
modified by the last commit are extended to check AUTO_MERGE as well.
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
When "git rebase" stops for an "edit" command, a rescheduled command,
or for the user to resolve conflicts, it creates a ref called
REBASE_HEAD pointing to the commit that is being picked. The ref is
deleted at the start of each iteration of the loop that picks commits,
but not after the loop ends. That means if there are conflicts on the
last commit to be picked, REBASE_HEAD is left behind after the rebase
finishes. Fix that by deleting REBASE_HEAD where it is created in
do_commit() if the commit succeeds, and before we enter the loop in
pick_commits() so that it is removed when continuing a rebase after
a conflict resolution or failed commit.
Several existing tests are extended to check that REBASE_HEAD is
present when we stop for conflicts and is absent when the rebase
finishes.
Reported-by: Long 76 <long76.git@mail.ru>
Reported-by: Matt Hunter <m@lfurio.us>
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
If the ref being checked exists, then test_ref_missing() does not print
the name of the ref in the error message. So, if there is more than
one call to test_ref_missing() in a test, it is hard to understand
which one failed by looking at the test output. Fix that by printing
the name of the ref that erroneously exists.
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>