AgeCommit message (Collapse)Author
2019-11-07name-hash.c: remove duplicate word in commentElijah Newren
Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2019-11-07hashmap: fix documentation misuses of -> versus .Elijah Newren
Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2019-11-07git-filter-branch.txt: correct argument name typoElijah Newren
Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2019-11-07remote-curl: unbreak http.extraHeader with custom allocatorsJohannes Schindelin
In 93b980e58f5 (http: use xmalloc with cURL, 2019-08-15), we started to ask cURL to use `xmalloc()`, and if compiled with nedmalloc, that means implicitly a different allocator than the system one. Which means that all of cURL's allocations and releases now _need_ to use that allocator. However, the `http_options()` function used `slist_append()` to add any configured extra HTTP header(s) _before_ asking cURL to use `xmalloc()`, and `http_cleanup()` would release them _afterwards_, i.e. in the presence of custom allocators, cURL would attempt to use the wrong allocator to release the memory. A naïve attempt at fixing this would move the call to `curl_global_init()` _before_ the config is parsed (i.e. before that call to `slist_append()`). However, that does not work, as we _also_ parse the config setting `http.sslbackend` and if found, call `curl_global_sslset()` which *must* be called before `curl_global_init()`, for details see: So let's instead make the config parsing entirely independent from cURL's data structures. Incidentally, this deletes two more lines than it introduces, which is nice. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-11-07Fix spelling errors in documentation outside of Documentation/Elijah Newren
Reported-by: Jens Schleusener <> Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2019-11-07Documentation: fix a bunch of typos, both old and newElijah Newren
Reported-by: Jens Schleusener <> Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2019-11-06fsmonitor: fix watchman integrationKevin Willford
When running Git commands quickly -- such as in a shell script or the test suite -- the Git commands frequently complete and start again during the same second. The example fsmonitor hooks to integrate with Watchman truncate the nanosecond times to seconds. In principle, this is fine, as Watchman claims to use inclusive comparisons [1]. The result should only be an over-representation of the changed paths since the last Git command. However, Watchman's own documentation claims "Using a timestamp is prone to race conditions in understanding the complete state of the file tree" [2]. All of their documented examples use a "clockspec" that looks like 'c:123:234'. Git should eventually learn how to store this type of string to provide a stronger integration, but that will be a more invasive change. When using GIT_TEST_FSMONITOR="$(pwd)/t7519/fsmonitor-watchman", scripts such as fail due to these race conditions. In fact, running any test script with GIT_TEST_FSMONITOR pointing at t/t7519/fsmonitor-wathcman will cause failures in the test_commit function. The 'git add "$indir$file"' command fails due to not enough time between the creation of '$file' and the 'git add' command. For now, subtract one second from the timestamp we pass to Watchman. This will make our window large enough to avoid these race conditions. Increasing the window causes tests like to pass. When the integration was introduced in def437671 (fsmonitor: add a sample integration script for Watchman, 2018-09-22), the query included an expression that would ignore files created and deleted in that window. The performance reason for this change was to ignore temporary files created by a build between Git commands. However, this causes failures in script scenarios where Git is creating or deleting files quickly. When using GIT_TEST_FSMONITOR as before, fails due to this add-and-delete race condition. By removing the "expression" from the Watchman query, we remove this race condition. It will lead to some performance degradation in the case of users creating and deleting temporary files inside their working directory between Git commands. However, that is a cost we need to pay to be correct. [1] [2] Helped-by: Derrick Stolee <> Signed-off-by: Kevin Willford <> Signed-off-by: Junio C Hamano <>
2019-11-06trace2: add dots directly to strbuf in perf_fmt_prepare()René Scharfe
The initialization function of the Trace2 performance format target sets aside a stash of dots for indenting output. Get rid of it and use strbuf_addchars() to provide dots on demand instead. This shortens the code, gets rid of a small heap allocation and is a bit more efficient. Signed-off-by: René Scharfe <> Acked-by: Jeff King <> Acked-by: Jeff Hostetler <> Signed-off-by: Junio C Hamano <>
2019-11-06fetch: avoid locking issues between Schindelin
When both `` and `fetch.writeCommitGraph` is set, we currently try to write the commit graph in each of the concurrent fetch jobs, which frequently leads to error messages like this one: fatal: Unable to create '.../.git/objects/info/commit-graphs/commit-graph-chain.lock': File exists. Let's avoid this by holding off from writing the commit graph until all fetch jobs are done. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-11-06fetch: add the command-line option `--write-commit-graph`Johannes Schindelin
This option overrides the config setting `fetch.writeCommitGraph`, if both are set. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-11-04Git 2.24v2.24.0Junio C Hamano
Signed-off-by: Junio C Hamano <>
2019-11-04Merge branch 'bc/doc-use-docbook-5'Junio C Hamano
Finishing touches to the recent update to the build procedure for the documentation. * bc/doc-use-docbook-5: manpage-bold-literal.xsl: match for namespaced "d:literal" in template
2019-11-04Merge branch 'ds/commit-graph-on-fetch'Junio C Hamano
Regression fix. * ds/commit-graph-on-fetch: commit-graph: fix writing first commit-graph during fetch demonstrate fetch.writeCommitGraph bug
2019-11-04Merge branch 'jt/delay-fetch-if-missing'Junio C Hamano
Work-around a lazy fetch glitch. * jt/delay-fetch-if-missing: fetch: delay fetch_if_missing=0 until after config
2019-11-04Merge C Hamano
* git-gui: improve Japanese translation git-gui: add a readme git-gui: support for diff3 conflict style git-gui: use existing interface to query a path's attribute git-gui (Windows): use git-bash.exe if it is available treewide: correct several "up-to-date" to "up to date" Fix build with core.autocrlf=true
2019-11-04Merge tag 'l10n-2.24.0-rnd2' of C Hamano
l10n-2.24.0-rnd2 * tag 'l10n-2.24.0-rnd2' of l10n: zh_CN: for git v2.24.0 l10n round 1~2 l10n: de.po: Update German translation l10n: sv.po: Update Swedish translation (4695t0f0u) l10n: bg.po: Updated Bulgarian translation (4694) l10n: vi(4694t): Updated translation for v2.24.0 l10n: es: 2.24.0 round 2 l10n: it.po: update the Italian translation for Git 2.24.0 round #2 l10n: fr v2.24.0 rnd2 l10n: git.pot: v2.24.0 round 2 (1 new) l10n: it.po: update the Italian translation for Git 2.24.0 l10n: fr 2.24.0 rnd 1 l10n: git.pot: v2.24.0 round 1 (35 new, 16 removed) l10n: bg.po: Updated Bulgarian translation (4693) l10n: sv.po: Update Swedish translation (4674t0f0u) l10n: Update Catalan translation
2019-11-02l10n: zh_CN: for git v2.24.0 l10n round 1~2Jiang Xin
Translate 36 new messages (4694t0f0u) for git 2.24.0. Signed-off-by: Jiang Xin <>
2019-11-02myfirstcontrib: hint to find gitgitgadget allowerEmily Shaffer
GitGitGadget, a handy tool for converting pull requests against Git into Git-mailing-list-friendly-patch-emails, requires as anti-spam that all new users be "/allow"ed by an existing user once before it will do anything for that new user. While this tutorial explained that mechanism, it did not give much hint on how to go about finding someone to allow your new pull request. So, teach our new GitGitGadget user where to look for someone who can add their name to the list. The advice in this patch is based on the advice proposed for GitGitGadget: Signed-off-by: Emily Shaffer <> Signed-off-by: Junio C Hamano <>
2019-11-02myfirstcontrib: add dependency installation stepEmily Shaffer
Indicate that the user needs some dependencies before the build will run happily on their machine; this dependency list doesn't seem to be made clear anywhere else in the project documentation. Then, so the user can be certain any build failures are due to their code and not their environment, perform a build on a clean checkout of 'master'. Also, move the note about build parallelization up here, so that it appears next to the very first build invocation in the tutorial. Reported-by: Heba Waly <> Signed-off-by: Emily Shaffer <> Signed-off-by: Junio C Hamano <>
2019-11-02myfirstcontrib: add 'psuh' to command-list.txtEmily Shaffer
Users can discover commands and their brief usage by running 'git help git' or 'git help -a'; both of these pages list all available commands based on the contents of 'command-list.txt'. That means adding a new command there is an important part of the new command process, and therefore belongs in the new command tutorial. Teach new users how to add their command, and include a brief overview of how to discover which attributes to place on the command in the list. Since 'git psuh' prints some workspace info, doesn't modify anything, and is targeted as a user-facing porcelain command, list it as a 'mainporcelain' and 'info' command. As the usage string is required to generate this documentation, don't add the command to the list until after the usage string is added to the tutorial. Reported-by: SZEDER Gábor <> Signed-off-by: Emily Shaffer <> Signed-off-by: Junio C Hamano <>
2019-11-02stash: handle staged changes in skip-worktree files correctlyJohannes Schindelin
When calling `git stash` while changes were staged for files that are marked with the `skip-worktree` bit (e.g. files that are excluded in a sparse checkout), the files are recorded as _deleted_ instead. The reason is that `git stash` tries to construct the tree reflecting the worktree essentially by copying the index to a temporary one and then updating the files from the worktree. Crucially, it calls `git diff-index` to update also those files that are in the HEAD but have been unstaged in the index. However, when the temporary index is updated via `git update-index --add --remove`, skip-worktree entries mark the files as deleted by mistake. Let's use the newly-introduced `--ignore-skip-worktree-entries` option of `git update-index` to prevent exactly this from happening. Note that the regression test case deliberately avoids replicating the scenario described above and instead tries to recreate just the symptom. Reported by Dan Thompson. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-11-02update-index: optionally leave skip-worktree entries aloneJohannes Schindelin
While `git update-index` mostly ignores paths referring to index entries whose skip-worktree bit is set, in b4d1690df11 (Teach Git to respect skip-worktree bit (reading part), 2009-08-20), for reasons that are not entirely obvious, the `--remove` option was made special: it _does_ remove index entries even if their skip-worktree bit is set. Seeing as this behavior has been in place for a decade now, it does not make sense to change it. However, in preparation for fixing a bug in `git stash` where it pretends that skip-worktree entries have actually been removed, we need a mode where `git update-index` leaves all skip-worktree entries alone, even if the `--remove` option was passed. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-11-02vreportf(): avoid relying on stdio bufferingJohannes Schindelin
The MSVC runtime behavior differs from glibc's with respect to `fprintf(stderr, ...)` in that the former writes out the message character by character. In t5516, this leads to a funny problem where a `git fetch` process as well as the `git upload-pack` process spawned by it _both_ call `die()` at the same time. The output can look like this: fatal: git uploadfata-lp: raemcokte :error: upload-pnot our arcef k6: n4ot our ea4cr1e3f 36d45ea94fca1398e86a771eda009872d63adb28598f6a9 8e86a771eda009872d6ab2886 Let's avoid this predicament altogether by rendering the entire message, including the prefix and the trailing newline, into the buffer we already have (and which is still fixed size) and then write it out via `write_in_full()`. We still clip the message to at most 4095 characters. The history of `vreportf()` with regard to this issue includes the following commits: d048a96e (2007-11-09) - 'char msg[256]' is introduced to avoid interleaving 389d1767 (2009-03-25) - Buffer size increased to 1024 to avoid truncation 625a860c (2009-11-22) - Buffer size increased to 4096 to avoid truncation f4c3edc0 (2015-08-11) - Buffer removed to avoid truncation b5a9e435 (2017-01-11) - Reverts f4c3edc0 to be able to replace control chars before sending to stderr 9ac13ec9 (2006-10-11) - Another attempt to solve interleaving. This is seemingly related to d048a96e. 137a0d0e (2007-11-19) - Addresses out-of-order for display() 34df8aba (2009-03-10) - Switches xwrite() to fprintf() in recv_sideband() to support UTF-8 emulation eac14f89 (2012-01-14) - Removes the need for fprintf() for UTF-8 emulation, so it's safe to use xwrite() again 5e5be9e2 (2016-06-28) - recv_sideband() uses xwrite() again Note that we print nothing if the `vsnprintf()` call failed to render the error message; There is little we can do in that case, and it should not happen anyway. The process may have written to `stderr` and there may be something left in the buffer kept in the stdio layer. Call `fflush(stderr)` before writing the message we prepare in this function. Helped-by: Jeff King <> Helped-by: Alexandr Miloslavskiy <> Helped-by: SZEDER Gábor <> Helped-by: Junio C Hamano <> Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-11-02RelNotes/2.24.0: fix self-contradictory noteElijah Newren
As per Wikipedia, "In current technical usage, for one to state that a feature is deprecated is merely a recommendation against using it." It is thus contradictory to claim that something is not "officially deprecated" and then to immediately state that we are both discouraging its use and pointing people elsewhere. Signed-off-by: Elijah Newren <> Reviewed-by: Taylor Blau <> Signed-off-by: Junio C Hamano <>
2019-11-02fetch.c: fix typo in a warning messageRalf Thielow
Signed-off-by: Ralf Thielow <> Reviewed-by: Jonathan Nieder <> Signed-off-by: Junio C Hamano <>
2019-11-02manpage-bold-literal.xsl: match for namespaced "d:literal" in templateMartin Ågren
We recently regressed our rendering with Asciidoctor of "literal" elements in our manpages, i.e, stuff we have placed within `backticks` in order to render as monospace. In particular, we lost the bold rendering of such literal text. The culprit is f6461b82b9 ("Documentation: fix build with Asciidoctor 2", 2019-09-15), where we switched from DocBook 4.5 to DocBook 5 with Asciidoctor. As part of the switch, we started using the namespaced DocBook XSLT stylesheets rather than the non-namespaced ones. (See f6461b82b9 for more details on why we changed to the namespaced ones.) The bold literals are implemented as an XSLT snippet <xsl:template match="literal">...</xsl:template>. Now that we use namespaces, this doesn't pick up our literals like it used to. Match for "d:literal" in addition to just "literal", after defining the d namespace. ("d" is what uses.) Note that we need to keep matching without the namespace for AsciiDoc. This boldness was introduced by 5121a6d993 ("Documentation: option to render literal text as bold for manpages", 2009-03-27) and made the default in 5945717009 ("Documentation: bold literals in man", 2016-05-31). One reason this was not caught in review is that our doc-diff tool diffs without any boldness, i.e., it "only" compares text. As pointed out by Peff in review of this patch, one can use `MAN_KEEP_FORMATTING=1 ./doc-diff <...>` This has been optically tested with AsciiDoc 8.6.10, Asciidoctor 1.5.5 and Asciidoctor 2.0.10. I've also verified that doc-diff produces the empty output for all three programs, as expected, and that with the MAN_KEEP_FORMATTING trick, AsciiDoc yields no diff, whereas with Asciidoctor, we get bold literals, just like we want. Signed-off-by: Martin Ågren <> Acked-by: brian m. carlson <> Signed-off-by: Junio C Hamano <>
2019-11-02RelNotes/2.24.0: typofixElijah Newren
Signed-off-by: Elijah Newren <> Signed-off-by: Junio C Hamano <>
2019-11-02git-diff.txt: document return code of `--no-index`Denton Liu
Within diff_no_index(), we have the following: revs->diffopt.flags.exit_with_status = 1; ... /* * The return code for --no-index imitates diff(1): * 0 = no changes, 1 = changes, else error */ return diff_result_code(&revs->diffopt, 0); Which means when `git diff` is run in `--no-index` mode, `--exit-code` is implied. However, the documentation for this is missing in git-diff.txt. Add a note about how `--exit-code` is implied in the `--no-index` documentation to cover this documentation blindspot. Signed-off-by: Denton Liu <> Signed-off-by: Junio C Hamano <>
2019-10-31l10n: de.po: Update German translationMatthias Rüster
Signed-off-by: Matthias Rüster <> Reviewed-by: Ralf Thielow <> Reviewed-by: Phillip Szelat <>
2019-10-30l10n: sv.po: Update Swedish translation (4695t0f0u)Peter Krefting
Signed-off-by: Peter Krefting <>
2019-10-30Git 2.24-rc2v2.24.0-rc2Junio C Hamano
Signed-off-by: Junio C Hamano <>
2019-10-30Merge branch 'wb/fsmonitor-bitmap-fix'Junio C Hamano
Comment update. * wb/fsmonitor-bitmap-fix: t7519-status-fsmonitor: improve comments
2019-10-30Merge branch 'rl/gitweb-blame-prev-fix'Junio C Hamano
Fix a rather old bug in gitweb---incremental blame output in javascript actions mode never worked. * rl/gitweb-blame-prev-fix: gitweb: correctly store previous rev in javascript-actions mode
2019-10-30Merge branch 'js/mingw-needs-hiding-fix'Junio C Hamano
Fix for a (rather old) buffer-overrun bug. * js/mingw-needs-hiding-fix: mingw: avoid a buffer overrun in `needs_hiding()`
2019-10-30Merge branch 'master' of Xin
* 'master' of l10n: vi(4694t): Updated translation for v2.24.0
2019-10-30Merge branch 'next' of Xin
* 'next' of l10n: es: 2.24.0 round 2
2019-10-30t7519-status-fsmonitor: improve commentsWilliam Baker
The comments for the staging/unstaging test did not accurately describe the scenario being tested. It is not essential that the test files being staged/unstaged appear at the end of the index. All that is required is that the test files are not flagged with CE_FSMONITOR_VALID and have a position in the index greater than the number of entries in the index after unstaging. The comment for this test has been updated to be more accurate with respect to the scenario that's being tested. Signed-off-by: William Baker <> Signed-off-by: Junio C Hamano <>
2019-10-30pretty: add "%aL" etc. to show local-part of email addressesPrarit Bhargava
In many projects the number of contributors is low enough that users know each other and the full email address doesn't need to be displayed. Displaying only the author's username saves a lot of columns on the screen. Existing 'e/E' (as in "%ae" and "%aE") placeholders would show the author's address as "", which would waste columns to show the same domain-part for all contributors when used in a project internal to redhat. Introduce 'l/L' placeholders that strip '@' and domain part from the e-mail address. Signed-off-by: Prarit Bhargava <> Signed-off-by: Junio C Hamano <>
2019-10-30worktree: teach "add" to ignore submodule.recurse configPhilippe Blain
"worktree add" internally calls "reset --hard", but if submodule.recurse is set, reset tries to recurse into initialized submodules, which makes start_command try to cd into non-existing submodule paths and die. Fix that by making sure that the call to reset in "worktree add" does not recurse. Signed-off-by: Philippe Blain <> Signed-off-by: Junio C Hamano <>
2019-10-29l10n: bg.po: Updated Bulgarian translation (4694)Alexander Shopov
Signed-off-by: Alexander Shopov <>
2019-10-29l10n: vi(4694t): Updated translation for v2.24.0Tran Ngoc Quan
Signed-off-by: Tran Ngoc Quan <>
2019-10-29help: add gitsubmodules to the list of guidesPhilippe Blain
The guide "gitsubmodules" was added in d480345 (submodules: overhaul documentation, 2017-06-22), but it was not added to command-list.txt when commit 1b81d8c (help: use command-list.txt for the source of guides, 2018-05-20) taught "git help" to obtain the guide list from this file. Add it now, and capitalize the first word of the description of gitsubmodules, as was done in 1b81d8c (help: use command-list.txt for the source of guides, 2018-05-20) for the other guides. Signed-off-by: Philippe Blain <> Reviewed-by: Jonathan Nieder <> Signed-off-by: Junio C Hamano <>
2019-10-29git_path(): handle `.lock` files correctlyJohannes Schindelin
Ever since worktrees were introduced, the `git_path()` function _really_ needed to be called e.g. to get at the path to `logs/HEAD` (`HEAD` is specific to the worktree, and therefore so is its reflog). However, the wrong path is returned for `logs/HEAD.lock`. This does not matter as long as the Git executable is doing the asking, as the path for that `logs/HEAD.lock` file is constructed from `git_path("logs/HEAD")` by appending the `.lock` suffix. However, Git GUI just learned to use `--git-path` instead of appending relative paths to what `git rev-parse --git-dir` returns (and as a consequence not only using the correct hooks directory, but also using the correct paths in worktrees other than the main one). While it does not seem as if Git GUI in particular is asking for `logs/HEAD.lock`, let's be safe rather than sorry. Side note: Git GUI _does_ ask for `index.lock`, but that is already resolved correctly, due to `update_common_dir()` preferring to leave unknown paths in the (worktree-specific) git directory. Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-10-29t1400: wrap setup code in test caseJohannes Schindelin
Without this, you cannot use `--run=<...>` to skip that part, and a run with `--run=0` (which is a common way to determine the test case number corresponding to a given test case title). Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2019-10-29builtin/blame.c: remove '--indent-heuristic' from usage stringSZEDER Gábor
The indent heuristic is our default diff heuristic since 33de716387 (diff: enable indent heuristic by default, 2017-05-08), but the usage string of 'git blame' still mentions it as "experimental heuristic". We could simply update the short help associated with the option, but according to the comment above the option's declaration it was "only included here to get included in the "-h" output". That made sense while the feature was still experimental and we wanted to give it more exposure, but nowadays it's unnecessary. So let's rather remove the '--indent-heuristic' option from 'git blame's usage string. Note that 'git blame' will still accept this option, as it is parsed in parse_revision_opt(). Astute readers may notice that this patch removes a comment mentioning "the following two options", but it only removes one option. The reason is that the comment is outdated: that other options was '--compaction-heuristic', and it has already been removed in 3cde4e02ee (diff: retire "compaction" heuristics, 2016-12-23), but that commit forgot to update this comment. Signed-off-by: SZEDER Gábor <> Signed-off-by: Junio C Hamano <>
2019-10-29clone: rename static function `dir_exists()`.Miriam Rubio
builtin/clone.c has a static function dir_exists() that checks if a given path exists on the filesystem. It returns true (and it is correct for it to return true) when the given path exists as a non-directory (e.g. a regular file). This is confusing. What the caller wants to check, and what this function wants to return, is if the path exists, so rename it to path_exists(). Signed-off-by: Miriam Rubio <> Signed-off-by: Junio C Hamano <>
2019-10-29Documentation/git-bisect.txt: add --no-ff to merge commandMihail Atanassov
The hotfix application example uses `git merge --no-commit` to apply temporary changes to the working tree during a bisect operation. In some situations this can be a fast-forward and `merge` will apply the hotfix branch's commits regardless of `--no-commit` (as documented in the `git merge` manual). In the pathological case this will make a `git bisect run` invocation loop indefinitely between the first bisect step and the fast-forwarded post-merge HEAD. Add `--no-ff` to the merge command to avoid this issue. Signed-off-by: Mihail Atanassov <> Reviewed-by: Jonathan Nieder <> Signed-off-by: Junio C Hamano <>
2019-10-29l10n: es: 2.24.0 round 2Christopher Diaz Riveros
Signed-off-by: Christopher Diaz Riveros <>
2019-10-28Merge branch 'l10n/it/update-italian-translation'Jiang Xin
* 'update-italian-translation' of l10n: it.po: update the Italian translation for Git 2.24.0 round #2
2019-10-28l10n: it.po: update the Italian translation for Git 2.24.0 round #2Alessandro Menti
Signed-off-by: Alessandro Menti <>