AgeCommit message (Collapse)Author
2020-03-17Merge branch 'jk/push-option-doc-markup-fix' into maintJunio C Hamano
Doc markup fix. * jk/push-option-doc-markup-fix: doc/config/push: use longer "--" line for preformatted example
2020-03-17Merge branch 'jk/doc-diff-parallel' into maintJunio C Hamano
Update to doc-diff. * jk/doc-diff-parallel: doc-diff: use single-colon rule in rendering Makefile
2020-03-17Merge branch 'jh/notes-fanout-fix' into maintJunio C Hamano
The code to automatically shrink the fan-out in the notes tree had an off-by-one bug, which has been killed. * jh/notes-fanout-fix: notes.c: fix off-by-one error when decreasing notes fanout t3305: check notes fanout more carefully and robustly
2020-03-17Merge branch 'jk/index-pack-dupfix' into maintJunio C Hamano
The index-pack code now diagnoses a bad input packstream that records the same object twice when it is used as delta base; the code used to declare a software bug when encountering such an input, but it is an input error. * jk/index-pack-dupfix: index-pack: downgrade twice-resolved REF_DELTA to die()
2020-03-17Merge branch 'js/rebase-i-with-colliding-hash' into maintJunio C Hamano
"git rebase -i" identifies existing commits in its todo file with their abbreviated object name, which could become ambigous as it goes to create new commits, and has a mechanism to avoid ambiguity in the main part of its execution. A few other cases however were not covered by the protection against ambiguity, which has been corrected. * js/rebase-i-with-colliding-hash: rebase -i: also avoid SHA-1 collisions with missingCommitsCheck rebase -i: re-fix short SHA-1 collision parse_insn_line(): improve error message when parsing failed
2020-03-17Merge branch 'jk/clang-sanitizer-fixes' into maintJunio C Hamano
C pedantry ;-) fix. * jk/clang-sanitizer-fixes: obstack: avoid computing offsets from NULL pointer xdiff: avoid computing non-zero offset from NULL pointer avoid computing zero offsets from NULL pointer merge-recursive: use subtraction to flip stage merge-recursive: silence -Wxor-used-as-pow warning
2020-03-17Merge branch 'dt/submodule-rm-with-stale-cache' into maintJunio C Hamano
Running "git rm" on a submodule failed unnecessarily when .gitmodules is only cache-dirty, which has been corrected. * dt/submodule-rm-with-stale-cache: git rm submodule: succeed if .gitmodules index stat info is zero
2020-03-17Merge branch 'pb/recurse-submodule-in-worktree-fix' into maintJunio C Hamano
The "--recurse-submodules" option of various subcommands did not work well when run in an alternate worktree, which has been corrected. * pb/recurse-submodule-in-worktree-fix: submodule.c: use get_git_dir() instead of get_git_common_dir() t2405: clarify test descriptions and simplify test t2405: use git -C and test_commit -C instead of subshells t7410: rename to
2020-03-17Merge branch 'es/outside-repo-errmsg-hints' into maintJunio C Hamano
An earlier update to show the location of working tree in the error message did not consider the possibility that a git command may be run in a bare repository, which has been corrected. * es/outside-repo-errmsg-hints: prefix_path: show gitdir if worktree unavailable prefix_path: show gitdir when arg is outside repo
2020-03-17Merge branch 'js/builtin-add-i-cmds' into maintJunio C Hamano
Minor bugfixes to "git add -i" that has recently been rewritten in C. * js/builtin-add-i-cmds: built-in add -i: accept open-ended ranges again built-in add -i: do not try to `patch`/`diff` an empty list of files
2020-03-17Git 2.24.2v2.24.2Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.23.2v2.23.2Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.22.3v2.22.3Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.21.2v2.21.2Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.20.3v2.20.3Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.19.4v2.19.4Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.18.3v2.18.3Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17Git 2.17.4v2.17.4Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-17l10n: sv.po: Update Swedish translation (4839t0f0u)Peter Krefting
Signed-off-by: Peter Krefting <>
2020-03-17git-gui: create a new namespace for chord script evaluationPratyush Yadav
Evaluating the script in the same namespace as the chord itself creates potential for variable name collision. And in that case the script would unknowingly use the chord's variables. For example, say the script has a variable called 'is_completed', which also exists in the chord's namespace. The script then calls 'eval' and sets 'is_completed' to 1 thinking it is setting its own variable, completely unaware of how the chord works behind the scenes. This leads to the chord never actually executing because it sees 'is_completed' as true and thinks it has already completed. Avoid the potential collision by creating a separate namespace for the script that is a child of the chord's namespace. Signed-off-by: Pratyush Yadav <>
2020-03-17git-gui: reduce Tcl version requirement from 8.6 to 8.5Pratyush Yadav
On some MacOS distributions like High Sierra, Tcl 8.5 is shipped by default. This makes git-gui error out at startup because of the version mismatch. The only part that requires Tcl 8.6 is SimpleChord, which depends on TclOO. So, don't use it and use our homegrown class.tcl instead. This means some slight syntax changes. Since class.tcl doesn't have an "unknown" method like TclOO does, we can't just call '$note', but have to use '$note activate' instead. The constructor now needs a proper namespace qualifier. Update the documentation to reflect the new syntax. As of now, the only part of git-gui that needs Tcl 8.5 is a call to 'apply' in lib/index.tcl::lambda. Keep using it until someone shows up shouting that their OS ships with 8.4 only. Then we would have to look into implementing it in pure Tcl. Signed-off-by: Pratyush Yadav <>
2020-03-17l10n: zh_CN: Revise v2.26.0 translationFangyi Zhou
Signed-off-by: Fangyi Zhou <> Reviewed-by: 依云 <> Signed-off-by: Jiang Xin <>
2020-03-17l10n: zh_CN: for git v2.26.0 l10n round 1 and 2Jiang Xin
Translate 79 new messages (4839t0f0u) for git 2.26.0. Signed-off-by: Jiang Xin <>
2020-03-16Git 2.26-rc2v2.26.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-16Merge branch 'en/test-cleanup'Junio C Hamano
Test fixes. * en/test-cleanup: t6022, t6046: fix flaky files-are-updated checks
2020-03-16Merge branch 'es/outside-repo-errmsg-hints'Junio C Hamano
An earlier update to show the location of working tree in the error message did not consider the possibility that a git command may be run in a bare repository, which has been corrected. * es/outside-repo-errmsg-hints: prefix_path: show gitdir if worktree unavailable
2020-03-16l10n: vi(4839t): Updated Vietnamese translation for v2.26.0Tran Ngoc Quan
Signed-off-by: Tran Ngoc Quan <>
2020-03-16l10n: vi: fix translation + grammarĐoàn Trần Công Danh
- context should be translated to ngữ cảnh instead of nội dung - add missing accents - switch adjective and secondary objects position: * The formatted English text will be "To remove '+/-' lines", it should be translated to "Để bỏ dòng bắt đầu với '+/-' Signed-off-by: Đoàn Trần Công Danh <>
2020-03-15prefix_path: show gitdir if worktree unavailableEmily Shaffer
If there is no worktree at present, we can still hint the user about Git's current directory by showing them the absolute path to the Git directory. Even though the Git directory doesn't make it as easy to locate the worktree in question, it can still help a user figure out what's going on while developing a script. This fixes a segmentation fault introduced in e0020b2f ("prefix_path: show gitdir when arg is outside repo", 2020-02-14). Signed-off-by: Emily Shaffer <> [jc: added minimum tests, with help from Szeder Gábor] Signed-off-by: Junio C Hamano <>
2020-03-14l10n: zh_TW.po: v2.26.0 round 2 (0 untranslated)Yi-Jyun
Revision 2. Signed-off-by: Yi-Jyun Pan <>
2020-03-14l10n: zh_TW.po: v2.26.0 round 1 (11 untranslated)Yi-Jyun
Signed-off-by: Yi-Jyun Pan <>
2020-03-14Merge branch 'js/askpass-coerce-utf8'Pratyush Yadav
Askpass can now send non-ASCII to Git on Windows. * js/askpass-coerce-utf8: git-gui--askpass: coerce answers to UTF-8 on Windows
2020-03-14git-gui--askpass: coerce answers to UTF-8 on WindowsLuke Bonanomi
This addresses the issue where Git for Windows asks the user for a password, no credential helper is available, and then Git fails to pick up non-ASCII characters from the Git GUI helper. This can be verified e.g. via echo host= | git -c credential.helper= credential fill and then pasting some umlauts. The underlying reason is that Git for Windows tries to communicate using the UTF-8 encoding no matter what the actual current code page is. So let's indulge Git for Windows and do use that encoding. This fixes Signed-off-by: Luke Bonanomi <> Helped-by: Junio C Hamano <> Signed-off-by: Johannes Schindelin <> Signed-off-by: Pratyush Yadav <>
2020-03-14Merge branch 'py/blame-status-error'Pratyush Yadav
Fixes an error popup in blame because of a missing closing bracket. * py/blame-status-error: git-gui: fix error popup when doing blame -> "Show History Context"
2020-03-13t6022, t6046: fix flaky files-are-updated checksElijah Newren
Several tests wanted to verify that files were actually modified by a merge, which it would do by checking that the mtime was updated. In order to avoid problems with the merge completing so fast that the mtime at the beginning and end of the operation was the same, these tests would first set the mtime of a file to something "old". This "old" value was usually determined as current system clock minus one second, truncated to the nearest integer. Unfortunately, it appears the system clock and filesystem clock are different and comparing across the two runs into race problems resulting in flaky tests. From date will call the gettimeofday system call which will always return the most accurate time available based on the cached kernel time, adjusted by the CPU cycle time if available to give nanosecond resolution. The timestamps stored in the file system however, are only based on the cached kernel time. ie The time calculated at the last timer interrupt. and from Does mtime get set to >= the current time? No, this depends on clock granularity. For example, gettimeofday() can return times in microseconds on my system, but ext4 rounds timestamps down to the previous ~10ms (but not exactly 10ms) increment, with the surprising result that a newly-created file is almost always created in the past: $ python -c " import os, time t0 = time.time() open('testfile', 'w').close() print os.stat('testfile').st_mtime - t0 " -0.00234484672546 So, instead of trying to compare across what are effectively two different clocks, just avoid using the system clock. Any new updates to files have to give an mtime at least as big as what is already in the file, so we could define "old" as one second before the mtime found in the file before the merge starts. But, to avoid problems with leap seconds, ntp updates, filesystems that only provide two second resolution, and other such weirdness, let's just pick an hour before the mtime found in the file before the merge starts. Also, clarify in one test where we check the mtime of different files that it really was intentional. I totally forgot the reasons for that and assumed it was a bug when asked. Reported-by: SZEDER Gábor <> Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2020-03-12Hopefully the final batch before -rc2Junio C Hamano
Signed-off-by: Junio C Hamano <>
2020-03-12Merge branch 'en/rebase-backend'Junio C Hamano
Band-aid fixes for two fallouts from switching the default "rebase" backend. * en/rebase-backend: git-rebase.txt: highlight backend differences with commit rewording sequencer: clear state upon dropping a become-empty commit i18n: unmark a message in rebase.c
2020-03-12Merge branch of into masterJiang Xin
* 'next' of l10n: es: 2.26.0 round#2
2020-03-12fsck: detect gitmodules URLs with embedded newlinesJeff King
The credential protocol can't handle values with newlines. We already detect and block any such URLs from being used with credential helpers, but let's also add an fsck check to detect and block gitmodules files with such URLs. That will let us notice the problem earlier when transfer.fsckObjects is turned on. And in particular it will prevent bad objects from spreading, which may protect downstream users running older versions of Git. We'll file this under the existing gitmodulesUrl flag, which covers URLs with option injection. There's really no need to distinguish the exact flaw in the URL in this context. Likewise, I've expanded the description of t7416 to cover all types of bogus URLs.
2020-03-12credential: detect unrepresentable values when parsing urlsJeff King
The credential protocol can't represent newlines in values, but URLs can embed percent-encoded newlines in various components. A previous commit taught the low-level writing routines to die() when encountering this, but we can be a little friendlier to the user by detecting them earlier and handling them gracefully. This patch teaches credential_from_url() to notice such components, issue a warning, and blank the credential (which will generally result in prompting the user for a username and password). We blank the whole credential in this case. Another option would be to blank only the invalid component. However, we're probably better off not feeding a partially-parsed URL result to a credential helper. We don't know how a given helper would handle it, so we're better off to err on the side of matching nothing rather than something unexpected. The die() call in credential_write() is _probably_ impossible to reach after this patch. Values should end up in credential structs only by URL parsing (which is covered here), or by reading credential protocol input (which by definition cannot read a newline into a value). But we should definitely keep the low-level check, as it's our final and most accurate line of defense against protocol injection attacks. Arguably it could become a BUG(), but it probably doesn't matter much either way. Note that the public interface of credential_from_url() grows a little more than we need here. We'll use the extra flexibility in a future patch to help fsck catch these cases.
2020-03-12t/lib-credential: use test_i18ncmp to check stderrJeff King
The credential tests have a "check" function which feeds some input to git-credential and checks the stdout and stderr. We look for exact matches in the output. For stdout, this makes sense; the output is the credential protocol. But for stderr, we may be showing various diagnostic messages, or the prompts fed to the askpass program, which could be translated. Let's mark them as such.
2020-03-12credential: avoid writing values with newlinesJeff King
The credential protocol that we use to speak to helpers can't represent values with newlines in them. This was an intentional design choice to keep the protocol simple, since none of the values we pass should generally have newlines. However, if we _do_ encounter a newline in a value, we blindly transmit it in credential_write(). Such values may break the protocol syntax, or worse, inject new valid lines into the protocol stream. The most likely way for a newline to end up in a credential struct is by decoding a URL with a percent-encoded newline. However, since the bug occurs at the moment we write the value to the protocol, we'll catch it there. That should leave no possibility of accidentally missing a code path that can trigger the problem. At this level of the code we have little choice but to die(). However, since we'd not ever expect to see this case outside of a malicious URL, that's an acceptable outcome. Reported-by: Felix Wilhelm <>
2020-03-12l10n: it.po: update the Italian translation for Git 2.26.0 round 2Alessandro Menti
Signed-off-by: Alessandro Menti <>
2020-03-12l10n: es: 2.26.0 round#2Christopher Diaz Riveros
Signed-off-by: Christopher Diaz Riveros <>
2020-03-12Merge branch of into masterJiang Xin
* 'git-l10n_git-po_master' of l10n: bg.po: Updated Bulgarian translation (4839t)
2020-03-12Merge branch of into masterJiang Xin
* 'tr_translations_2.26.1' of l10n: tr: v2.26.0 round 2
2020-03-11l10n: bg.po: Updated Bulgarian translation (4839t)Alexander Shopov
Signed-off-by: Alexander Shopov <>
2020-03-11l10n: tr: v2.26.0 round 2Emir Sarı
Signed-off-by: Emir Sarı <>
2020-03-11l10n: fr : v2.26.0 rnd 2Jean-Noël Avila
Signed-off-by: Jean-Noël Avila <>
2020-03-11git-rebase.txt: highlight backend differences with commit rewordingElijah Newren
As noted by Junio: Back when "git am" was written, it was not considered a bug that the "git am --resolved" option did not offer the user a chance to update the log message to match the adjustment of the code the user made, but honestly, I'd have to say that it is a bug in "git am" in that over time it wasn't adjusted to the new world order where we encourage users to describe what they did when the automation hiccuped by opening an editor. These days, even when automation worked well (e.g. a clean auto-merge with "git merge"), we open an editor. The world has changed, and so should the expectations. Junio also suggested providing a workaround such as allowing --no-edit together with git rebase --continue, but that should probably be done in a patch after the git-2.26.0 release. For now, just document the known difference in the Behavioral Differences section. Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>