summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorLines
2026-01-31Merge branch 'fr_2.53' of github.com:jnavila/gitJiang Xin-238/+296
* 'fr_2.53' of github.com:jnavila/git: l10n: fr: v2.53
2026-01-31Merge branch 'tr-l10n' of github.com:bitigchi/git-poJiang Xin-196/+303
* 'tr-l10n' of github.com:bitigchi/git-po: l10n: tr: Update Turkish translations
2026-01-31Merge branch 'master' of github.com:nafmo/git-l10n-svJiang Xin-188/+296
* 'master' of github.com:nafmo/git-l10n-sv: l10n: sv.po: Update Swedish translation
2026-01-31l10n: zh_CN: standardize glossary termsJiang Xin-1085/+1098
Add preferred Chinese terminology notes and align existing translations to the updated glossary. AI-assisted review was used to check and improve legacy translations. Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2026-01-30RelNotes: correct "fast-import" option nameJunio C Hamano-2/+2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30t/perf/p3400: speed up setup using fast-importTian Yuchen-15/+38
The setup phase in 't/perf/p3400-rebase.sh' generates 100 commits to simulate a noisy history. It currently uses a shell loop that invokes 'git add', 'git commit', 'test_seq', and 'sort' in each iteration. This incurs significant overhead due to repeated process spawning. Optimize the setup by using 'git fast-import' to generate the commit history. Additionally, pre-compute the forward and reversed file contents to avoid repetitive execution of 'seq' and 'sort'. To ensure the test measures rebase performance against a consistent object layout (rather than the suboptimal pack/loose objects created by the raw import), perform a full repack (`git repack -a -d`) at the end of the setup. This reduces the setup time significantly while maintaining the validity of the subsequent performance tests. Performance enhancement (Average value of 5 tests): Real Rebase Before: 29.045s 13.34s After: 21.989s 12.84s Measured on Lenovo Yoga 2020, Ubuntu 24.04. Signed-off-by: Tian Yuchen <a3205153416@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30show-index: use gettext wrapping in user facing error messagesShreyansh Paliwal-11/+11
Multiple 'die()' calls in show-index.c use literal strings directly. Wrap all user-facing 'die()' messages with '_()' so they can be translated via gettext, this ensures better support for users. Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30show-index: warn when falling back to SHA-1 outside a repositoryShreyansh Paliwal-3/+6
When 'git show-index' is run outside of a repository and no hashing algorithm is specified via --object-format, it silently falls back to SHA-1, relying on the historical default. This works for existing SHA-1 based index files, but the behavior can be ambiguous and confusing when the input index file uses a different hash algorithm, such as SHA-256. Add a warning when this fallback happens to make the assumption explicit and to guide users toward using --object-format when needed. Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: verify revision argument is a commit-ishToon Claes-1/+19
Passing a non-committish revision to git-last-modified(1) triggers the following BUG: git last-modified HEAD^{tree} BUG: builtin/last-modified.c:456: paths remaining beyond boundary in last-modified Fix this error by ensuring that the given revision peels to a commit. This change also adds a test to verify git-last-modified(1) can operate on an annotated tag. For this an annotated tag is added that points to the second commit. But this causes ambiguous results when calling git-name-rev(1) with `--tags`, because now two tags point to the same commit. To remove this ambiguity, pass `--exclude=<tag>` to git-name-rev(1) to exclude the new annotated tag. Reported-by: Gusted <gusted@codeberg.org> Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: remove double error messageToon Claes-1/+1
When the user passes two revisions, they get the following output: $ git last-modified HEAD HEAD~ error: last-modified can only operate on one revision at a time error: unable to setup last-modified The error message about "unable to setup" is not very informative, remove it. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: fix memory leak when more than one commit is givenToon Claes-4/+8
When more than one commit is given, the function populate_paths_from_revs() leaks a `struct pathspec`. Plug it. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: rewrite error message when more than one commit givenToon Claes-6/+7
When more than one commit is passed to the git-last-modified(1) command, this error message was printed: error: last-modified can only operate on one tree at a time Calling these a "tree" is technically not correct. git-last-modified(1) expects revisions that peel to a commit. Rephrase the error message to: error: last-modified can only operate on one commit at a time While at it, modify the test to ensure the correct error message is printed. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-29string-list: add string_list_sort_u() that mimics "sort -u"Amisha Chhajed-16/+54
Many callsites of string_list_remove_duplicates() call it immdediately after calling string_list_sort(), understandably as the former requires string-list to be sorted, it is clear that these places are sorting only to remove duplicates and for no other reason. Introduce a helper function string_list_sort_u that combines these two calls that often appear together, to simplify these callsites. Replace the current calls of those methods with string_list_sort_u(). Signed-off-by: Amisha Chhajed <amishhhaaaa@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-29u-string-list: add unit tests for string-list methodsAmisha Chhajed-0/+209
Unit tests in u-string-list.c does not cover several methods in string-list, this gap in coverage makes it difficult to ensure no regressions are introduced in future changes. Add unit tests for the following methods to enhance coverage: string_list_remove_empty_items() unsorted_string_list_has_string() unsorted_string_list_delete_item() string_list_has_string() string_list_insert() string_list_sort() string_list_remove() Signed-off-by: Amisha Chhajed <amishhhaaaa@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-29l10n: zh_CN: updated translation for 2.53Jiang Xin-209/+345
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2026-01-29l10n: zh_CN: fix inconsistent use of standard vs. wide colonsJiang Xin-27/+27
Replace mixed usage of standard (ASCII) colons ':' with full-width (wide) colons ':' in Chinese translations to ensure typographic consistency, as reported by CAESIUS-TIM [1]. Full-width punctuation is preferred in Chinese localization for better readability and adherence to typesetting conventions. [1]: https://github.com/git-l10n/git-po/issues/884 Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2026-01-28worktree: clarify that --expire only affects missing worktreesSam Bostock-4/+10
The --expire option for "git worktree list" and "git worktree prune" only affects worktrees whose working directory path no longer exists. The help text did not make this clear, and the documentation inconsistently used "unused" for prune but "missing" for list. Update the help text and documentation to consistently describe these as "missing worktrees", and use "prune" instead of "expire" when describing the effect on missing worktrees since the terminology is clearer. While at it, expand the description of the "prune" subcommand itself to better explain what it does and when to use it, as suggested by Junio. Helped-by: Eric Sunshine <sunshine@sunshineco.com> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Sam Bostock <sam@sambostock.ca> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-28l10n: fr: v2.53Jean-Noël Avila-238/+296
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
2026-01-28l10n: zh_TW.po: update Git 2.53 translationYi-Jyun Pan-720/+348
Co-authored-by: Lumynous <lumynou5.tw@gmail.com> Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
2026-01-27RelNotes: a few spelling fixesJunio C Hamano-3/+3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-27l10n: tr: Update Turkish translationsEmir SARI-196/+303
Signed-off-by: Emir SARI <emir_sari@icloud.com>
2026-01-27l10n: sv.po: Update Swedish translationPeter Krefting-188/+296
Also fix typos reported by Tuomas Ahola. Helped-by: Tuomas Ahola <taahol@utu.fi>. Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2026-01-26Git 2.53-rc2v2.53.0-rc2Junio C Hamano-4/+1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-27l10n: po-id for 2.53Bagas Sanjaya-217/+351
Update following components: * branch.c * builtin/blame.c * builtin/config.c * builtin/fast-export.c * builtin/fast-import.c * builtin/fetch.c * builtin/gc.c * builtin/index-pack.c * builtin/pack-objects.c * builtin/patch-id.c * builtin/replay.c * builtin/repo.c * bundle-uri.c * command-list.c * object-file.c * refs/reftable-backend.c * repack-promisor.c * strbuf.c Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
2026-01-26xdiff: remove unused data from xdlclass_tPhillip Wood-3/+5
Prior to commit 6d507bd41a (xdiff: delete fields ha, line, size in xdlclass_t in favor of an xrecord_t, 2025-09-26) xdlclass_t carried a copy of all the fields in xrecord_t. That commit embedded xrecord_t in xdlclass_t to make it easier to change the types of the fields in xrecord_t. However commit 6a26019c81 (xdiff: split xrecord_t.ha into line_hash and minimal_perfect_hash, 2025-11-18) added the "minimal_perfect_hash" field to xrecord_t which is not used by xdlclass_t. To avoid wasting space stop copying the whole of xrecord_t and just copy the pointer and length that we need to intern the line. Together with the previous commit this effectively reverts 6d507bd41a. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-26xdiff: remove "line_hash" field from xrecord_tPhillip Wood-6/+7
Prior to commit 6a26019c81 (xdiff: split xrecord_t.ha into line_hash and minimal_perfect_hash, 2025-11-18) the "ha" field of xrecord_t initially held the "line_hash" value and once the line had been interned that field was updated to hold the "minimal_perfect_hash". The "line_hash" is only used to intern the line so there is no point in storing it after all the input lines have been interned. Removing the "line_hash" field from xrecord_t and storing it in xdlclass_t where it is actually used makes it clearer that it is a temporary value and it should not be used once we're calculated the "minimal_perfect_hash". This also reduces the size of xrecord_t by 25% on 64-bit platforms and 40% on 32-bit platforms. While the struct is small we create one instance per input line so any saving is welcome. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-26l10n: ga.po: Fix git-po-helper warningsAindriú Mac Giolla Eoin-2/+2
Signed-off-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
2026-01-25Revert "Merge branch 'cs/rebased-subtree-split'"Junio C Hamano-169/+55
This reverts commit 79e3055baba32e2952e6e8994cdcd4fc145ba7f0, reversing changes made to 9813aace1e52765e01e688672cdcdcbe25336ec7. Regresison report https://lore.kernel.org/git/755578cb-07e0-4b40-aa90-aacf4d45ccaa@heusel.eu/
2026-01-25fetch: delay user information post committing of transactionKarthik Nayak-54/+193
In Git 2.50 and earlier, we would display failure codes and error message as part of the status display: $ git fetch . v1.0.0:refs/heads/foo error: cannot update ref 'refs/heads/foo': trying to write non-commit object f665776185ad074b236c00751d666da7d1977dbe to branch 'refs/heads/foo' From . ! [new tag] v1.0.0 -> foo (unable to update local ref) With the addition of batched updates, this information is no longer shown to the user: $ git fetch . v1.0.0:refs/heads/foo From . * [new tag] v1.0.0 -> foo error: cannot update ref 'refs/heads/foo': trying to write non-commit object f665776185ad074b236c00751d666da7d1977dbe to branch 'refs/heads/foo' Since reference updates are batched and processed together at the end, information around the outcome is not available during individual reference parsing. To overcome this, collate and delay the output to the end. Introduce `ref_update_display_info` which will hold individual update's information and also whether the update failed or succeeded. This finally allows us to iterate over all such updates and print them to the user. Using an dynamic array and strmap does add some overhead to 'git-fetch(1)', but from benchmarking this seems to be not too bad: Benchmark 1: fetch: many refs (refformat = files, refcount = 1000, revision = master) Time (mean ± σ): 42.6 ms ± 1.2 ms [User: 13.1 ms, System: 29.8 ms] Range (min … max): 40.1 ms … 45.8 ms 47 runs Benchmark 2: fetch: many refs (refformat = files, refcount = 1000, revision = HEAD) Time (mean ± σ): 43.1 ms ± 1.2 ms [User: 12.7 ms, System: 30.7 ms] Range (min … max): 40.5 ms … 45.8 ms 48 runs Summary fetch: many refs (refformat = files, refcount = 1000, revision = master) ran 1.01 ± 0.04 times faster than fetch: many refs (refformat = files, refcount = 1000, revision = HEAD) Another approach would be to move the status printing logic to be handled post the transaction being committed. That however would require adding an iterator to the ref transaction that tracks both the outcome (success/failure) and the original refspec information for each update, which is more involved infrastructure work compared to the strmap approach here. Helped-by: Phillip Wood <phillip.wood123@gmail.com> Reported-by: Jeff King <peff@peff.net> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-25receive-pack: utilize rejected ref error detailsKarthik Nayak-2/+21
In 9d2962a7c4 (receive-pack: use batched reference updates, 2025-05-19), git-receive-pack(1) switched to using batched reference updates. This also introduced a regression wherein instead of providing detailed error messages for failed referenced updates, the users were provided generic error messages based on the error type. Now that the updates also contain detailed error message, propagate those to the client via 'rp_error'. The detailed error messages can be very verbose, for e.g. in the files backend, when trying to write a non-commit object to a branch, you would see: ! [remote rejected] 3eaec9ccf3a53f168362a6b3fdeb73426fb9813d -> branch (cannot update ref 'refs/heads/branch': trying to write non-commit object 3eaec9ccf3a53f168362a6b3fdeb73426fb9813d to branch 'refs/heads/branch') Here the refname is repeated multiple times due to how error messages are propagated and filled over the code stack. This potentially can be cleaned up in a future commit. Reported-by: Elijah Newren <newren@gmail.com> Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-25fetch: utilize rejected ref error detailsKarthik Nayak-8/+10
In 0e358de64a (fetch: use batched reference updates, 2025-05-19), git-fetch(1) switched to using batched reference updates. This also introduced a regression wherein instead of providing detailed error messages for failed referenced updates, the users were provided generic error messages based on the error type. Similar to the previous commit, switch to using detailed error messages if present for failed reference updates to fix this regression. Reported-by: Elijah Newren <newren@gmail.com> Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-25update-ref: utilize rejected error details if availableKarthik Nayak-32/+47
When git-update-ref(1) received the '--update-ref' flag, the error details generated in the refs namespace wasn't propagated with failed updates. Instead only an error code pertaining to the type of rejection was noted. This missed detailed error message which the user can act upon. The previous commits added the required code to propagate these detailed error messages from the refs namespace. Now that additional details are available, let's output this additional details to stderr. This allows users to have additional information over the already present machine parsable output. While we're here, improve the existing tests for the machine parsable output by checking for the entire output string and not just the rejection reason. Reported-by: Elijah Newren <newren@gmail.com> Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-25refs: add rejection detail to the callback functionKarthik Nayak-1/+5
The previous commit started storing the rejection details alongside the error code for rejected updates. Pass this along to the callback function `ref_transaction_for_each_rejected_update()`. Currently the field is unused, but will be integrated in the upcoming commits. Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-25refs: skip to next ref when current ref is rejectedKarthik Nayak-31/+39
In `refs_verify_refnames_available()` we have two nested loops: the outer loop iterates over all references to check, while the inner loop checks for filesystem conflicts for a given ref by breaking down its path. With batched updates, when we detect a filesystem conflict, we mark the update as rejected and execute 'continue'. However, this only skips to the next iteration of the inner loop, not the outer loop as intended. This causes the same reference to be repeatedly rejected. Fix this by using a goto statement to skip to the next reference in the outer loop. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-25Merge branch 'master' of https://github.com/j6t/git-guiJunio C Hamano-192/+310
* 'master' of https://github.com/j6t/git-gui: git-gui: mark *.po files at any directory level as UTF-8 git-gui i18n: Update Bulgarian translation (558t) git-gui i18n: Update Bulgarian translation (557t)
2026-01-25l10n: bg.po: Updated Bulgarian translation (6091t)Alexander Shopov-224/+352
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
2026-01-25git-gui: mark *.po files at any directory level as UTF-8Johannes Sixt-1/+1
When a commit is viewed in Gitk that changes a file in po/glossary, the patch text shows mojibake instead of correctly decoded UTF-8 text. Gitk retrieves the encoding attribute to decide how to treat the bytes that make up the patch text. There is an attribute definition that all files are US-ASCII, and a later attribute definition overrides this. But the override, which specifies UTF-8, applies only to *.po files in directory po/ and does not apply to subdirectories. Widen the pattern to apply to all directory levels. Signed-off-by: Johannes Sixt <j6t@kdbg.org>
2026-01-25Merge branch 'master' of github.com:alshopov/git-guiJohannes Sixt-187/+305
* 'master' of github.com:alshopov/git-gui: git-gui i18n: Update Bulgarian translation (558t)
2026-01-24git-gui i18n: Update Bulgarian translation (558t)Alexander Shopov-187/+305
- Translate new string (558t) - Add graves for disambiguation - Improve glossary translation (96t) and synchonize with git Signed-off-by: Alexander Shopov <ash@kambanaria.org>
2026-01-24Merge branch 'master' of github.com:alshopov/git-guiJohannes Sixt-4/+4
* 'master' of github.com:alshopov/git-gui: git-gui i18n: Update Bulgarian translation (557t) Signed-off-by: Johannes Sixt <j6t@kdbg.org>
2026-01-23A bit more before -rc2Junio C Hamano-2/+17
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-23Merge branch 'dk/replay-doc-omit-irrelevant-rev-list-options'Junio C Hamano-3/+5
Documentation clean-up. * dk/replay-doc-omit-irrelevant-rev-list-options: lint-gitlink: preemptively ignore all /ifn?def|endif/ macros replay: drop rev-list formatting options from manual
2026-01-23Merge branch 'js/symlink-windows'Junio C Hamano-156/+507
Upstream symbolic link support on Windows from Git-for-Windows. * js/symlink-windows: mingw: special-case index entries for symlinks with buggy size mingw: emulate `stat()` a little more faithfully mingw: try to create symlinks without elevated permissions mingw: add support for symlinks to directories mingw: implement basic `symlink()` functionality (file symlinks only) mingw: implement `readlink()` mingw: allow `mingw_chdir()` to change to symlink-resolved directories mingw: support renaming symlinks mingw: handle symlinks to directories in `mingw_unlink()` mingw: add symlink-specific error codes mingw: change default of `core.symlinks` to false mingw: factor out the retry logic mingw: compute the correct size for symlinks in `mingw_lstat()` mingw: teach dirent about symlinks mingw: let `mingw_lstat()` error early upon problems with reparse points mingw: drop the separate `do_lstat()` function mingw: implement `stat()` with symlink support mingw: don't call `GetFileAttributes()` twice in `mingw_lstat()`
2026-01-23Merge branch 'pw/mailmap-self'Junio C Hamano-0/+2
Unify entries in .mailmap file for Phillip Wood. * pw/mailmap-self: mailmap: add an entry for Phillip Wood
2026-01-23Merge branch 'js/ci-leak-skip-svn'Junio C Hamano-0/+14
Dscho observed that SVN tests are taking too much time in CI leak checking tasks, but most time is spent not in our code but in libsvn code (which happen to be written in Perl), whose leaks have little value to discover for us. Skip SVN, P4, and CVS tests in the leak checking tasks. * js/ci-leak-skip-svn: ci: skip CVS and P4 tests in leaks job, too ci(*-leaks): skip the git-svn tests to save time
2026-01-23Merge branch 'jx/build-options-gettext'Junio C Hamano-0/+3
"git bugreport" and "git version --build-options" learned to include use of 'gettext' feature, to make it easier to diagnose problems around l10n. * jx/build-options-gettext: help: report on whether or not gettext is enabled
2026-01-23Merge branch 'ty/t1005-test-path-is-helpers'Junio C Hamano-5/+5
Test clean-up. * ty/t1005-test-path-is-helpers: t1005: modernize "! test -f" to "test_path_is_missing"
2026-01-23Merge branch 'rj/cygwin-test-fixes-for-2.53'Junio C Hamano-2/+2
Test fixup. * rj/cygwin-test-fixes-for-2.53: t0610-reftable-basics: mitigate a flaky test on cygwin t9700/test.pl: fix path type expectation on cygwin
2026-01-23Merge branch 'sb/doc-update-ref-markup-fix'Junio C Hamano-1/+1
Doc mark-up fix. * sb/doc-update-ref-markup-fix: doc: fix `update-ref` `symref-create` formatting
2026-01-23Merge branch 'kh/mailmap-avila'Junio C Hamano-0/+3
* kh/mailmap-avila: .mailmap: fix and expand mappings for Jean-Noël Avila