Commit Graph

98855 Commits

Author SHA1 Message Date
Sebastian Schuberth
f6ffe2eaaf gitk: Use an external icon file on Windows
Git for Windows now ships with the new Git icon from git-scm.com. Use that
icon file if it exists instead of the old procedurally drawn one.

This patch was sent upstream but so far no decision on its inclusion was
made, so commit it to our fork.

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
2019-05-19 19:29:20 +02:00
Karsten Blees
aa198db133 gitk: Unicode file name support
Assumes file names in git tree objects are UTF-8 encoded.

On most unix systems, the system encoding (and thus the TCL system
encoding) will be UTF-8, so file names will be displayed correctly.

On Windows, it is impossible to set the system encoding to UTF-8.
Changing the TCL system encoding (via 'encoding system ...', e.g. in the
startup code) is explicitly discouraged by the TCL docs.

Change gitk functions dealing with file names to always convert
from and to UTF-8.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-05-19 19:29:19 +02:00
Johannes Schindelin
461161794b Start the merging-rebase to v2.22.0-rc1
This commit starts the rebase of b350563db2 to 556d02c990

Note: this merge was performed on the `prepare-for-v2.22.0` branch that
tracks the v2.22.0-rc<N> updates, and from which Git for Windows'
previews are built. At this time, Git for Windows' `master` still
follows the v2.21.x train just in case that a release is needed before
v2.22.0.

But `master` advanced in the meantime, merging a PR to help with
commit-graph lock contention during `git gc` when `gc.writeCommitGraph`
is set to `true`.

So this is actually an octopus merge between v2.22.0-rc1,
`prepare-for-v2.22.0` *and* `master`, taking no changes from the latter
in preparation for rebuilding the (rebased) branch thicket of Git for
Windows on top of v2.22.0-rc1.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-05-19 19:16:26 +02:00
Johannes Schindelin
69e7a4cd2f Merge pull request #2198 from dscho/avoid-commit-graph-lock-contention
Avoid commit-graph lock contention
2019-05-19 19:09:39 +02:00
Johannes Schindelin
a28b2de982 Merge branch 'close-graph-everywhere'
This topic branch is a backport of
https://github.com/gitgitgadget/git/pull/208, which avoids a lock
contention in `git gc --auto` where the `git gc` process holds a read
lock to the `commit-graph` file (if `core.commitgraph=true`) and the
spawned `git commit-graph write` (if `gc.writecommitgraph=true`) tries
to overwrite it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-05-19 16:47:32 +02:00
Derrick Stolee
c5007fc487 packfile: close_all_packs to close_object_store
The close_all_packs() method is now responsible for more than just pack-files.
It also closes the commit-graph and the multi-pack-index. Rename the function
to be more descriptive of its larger role. The name also fits because the
input parameter is a raw_object_store.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
2019-05-19 16:47:22 +02:00
Derrick Stolee
bdf80cb75e packfile: close commit-graph in close_all_packs
The close_all_packs() method is used to close all read handles to
pack-files and the multi-pack-index before running 'git gc --auto'.
This is particularly important on the Windows platform, where read
handles block any writes to those files. Replacing one of these
files with a rename() will fail in this situation.

The commit-graph also performs a rename, so is susceptable to this
problem. We are careful to close the commit-graph before writing,
but that doesn't work when a 'git fetch' (or similar) process runs
'git gc --auto' which may write a commit-graph.

Here, close the commit-graph as part of close_all_packs().

Reported-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
2019-05-19 16:45:56 +02:00
Derrick Stolee
46cecd986f commit-graph: use raw_object_store when closing
The close_commit_graph() method took a repository struct, but then
only uses the raw_object_store within. Change the function prototype
to make the method more flexible.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
2019-05-19 16:45:56 +02:00
Junio C Hamano
aa25c82427 Git 2.22-rc1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-05-19 16:46:42 +09:00
Junio C Hamano
fab4a8a396 Merge branch 'js/difftool-no-index'
The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
mode; they are now explicitly marked as mutually incompatible.

* js/difftool-no-index:
  difftool --no-index: error out on --dir-diff (and don't crash)
2019-05-19 16:45:35 +09:00
Junio C Hamano
8c59ba9a76 Merge branch 'jk/get-oid-indexed-object-name'
The codepath to parse :<path> that obtains the object name for an
indexed object has been made more robust.

* jk/get-oid-indexed-object-name:
  get_oid: handle NULL repo->index
2019-05-19 16:45:35 +09:00
Junio C Hamano
bca6aba72e Merge branch 'jc/set-packet-header-signature-fix'
Code clean-up.

* jc/set-packet-header-signature-fix:
  pkt-line: drop 'const'-ness of a param to set_packet_header()
2019-05-19 16:45:35 +09:00
Junio C Hamano
8cbad4935e Merge branch 'cb/http-push-null-in-message-fix'
Code clean-up.

* cb/http-push-null-in-message-fix:
  http-push: prevent format overflow warning with gcc >= 9
2019-05-19 16:45:35 +09:00
Junio C Hamano
4ecaedec04 Merge branch 'js/stash-in-c-use-builtin-doc'
Doc update.

* js/stash-in-c-use-builtin-doc:
  stash: document stash.useBuiltin
2019-05-19 16:45:34 +09:00
Junio C Hamano
dc58922cf0 Merge branch 'tz/test-lib-check-working-jgit'
A prerequiste check in the test suite to see if a working jgit is
available was made more robust.

* tz/test-lib-check-working-jgit:
  test-lib: try harder to ensure a working jgit
2019-05-19 16:45:34 +09:00
Junio C Hamano
7a09f5f1b6 Merge branch 'js/parseopt-unknown-cb-returns-an-enum'
Code clean-up.

* js/parseopt-unknown-cb-returns-an-enum:
  parse-options: adjust `parse_opt_unknown_cb()`s declared return type
2019-05-19 16:45:34 +09:00
Junio C Hamano
ed8a451689 Merge branch 'ab/sha1dc'
Update collision-detecting SHA-1 code to build properly on HP-UX.

* ab/sha1dc:
  sha1dc: update from upstream
2019-05-19 16:45:34 +09:00
Junio C Hamano
e0708c24d5 Merge branch 'js/rebase-i-label-shown-in-status-fix'
"git status" did not know that the "label" instruction in the
todo-list "rebase -i -r" uses should not be shown as a hex object
name.

* js/rebase-i-label-shown-in-status-fix:
  status: fix display of rebase -ir's `label` command
2019-05-19 16:45:33 +09:00
Junio C Hamano
dd5b7dc8ed Merge branch 'es/check-non-portable-pre-5.10'
Developer support update.

* es/check-non-portable-pre-5.10:
  check-non-portable-shell: support Perl versions older than 5.10
2019-05-19 16:45:33 +09:00
Junio C Hamano
bd96a7871a Merge branch 'ds/trace2-document-env-vars'
Doc update.

* ds/trace2-document-env-vars:
  trace2: add variable description to git.txt
2019-05-19 16:45:33 +09:00
Junio C Hamano
cfd635c742 Merge branch 'js/fsmonitor-refresh-after-discarding-index'
The fsmonitor interface got out of sync after the in-core index
file gets discarded, which has been corrected.

* js/fsmonitor-refresh-after-discarding-index:
  fsmonitor: force a refresh after the index was discarded
  fsmonitor: demonstrate that it is not refreshed after discard_index()
2019-05-19 16:45:33 +09:00
Junio C Hamano
521d3ef38a Merge branch 'cm/notes-comment-fix'
A stale in-code comment has been updated.

* cm/notes-comment-fix:
  notes: correct documentation of format_display_notes()
2019-05-19 16:45:32 +09:00
Junio C Hamano
b3e0981f28 Merge branch 'tt/no-ipv6-fallback-for-winxp'
Code cleanup.

* tt/no-ipv6-fallback-for-winxp:
  mingw: remove obsolete IPv6-related code
2019-05-19 16:45:32 +09:00
Junio C Hamano
0b076b4c0e Merge branch 'js/t5580-unc-alternate-test'
An additional test for MinGW

* js/t5580-unc-alternate-test:
  t5580: verify that alternates can be UNC paths
2019-05-19 16:45:32 +09:00
Junio C Hamano
b5fb62bf49 Merge branch 'ds/cvsexportcommit-force-text'
"git cvsexportcommit" running on msys did not expect cvsnt showed
"cvs status" output with CRLF line endings.

* ds/cvsexportcommit-force-text:
  cvsexportcommit: force crlf translation
2019-05-19 16:45:31 +09:00
Junio C Hamano
6f3d93f7ac Merge branch 'sg/ci-libsvn-perl'
To run tests for Git SVN, our scripts for CI used to install the
git-svn package (in the hope that it would bring in the right
dependencies).  This has been updated to install the more direct
dependency, namely, libsvn-perl.

* sg/ci-libsvn-perl:
  ci: install 'libsvn-perl' instead of 'git-svn'
2019-05-19 16:45:31 +09:00
Junio C Hamano
717dad8ebc Merge branch 'bl/t4253-exit-code-from-format-patch'
Avoid patterns to pipe output from a git command to feed another
command in tests.

* bl/t4253-exit-code-from-format-patch:
  t4253-am-keep-cr-dos: avoid using pipes
2019-05-19 16:45:31 +09:00
Junio C Hamano
454b419729 Merge branch 'ds/midx-too-many-packs'
The code to generate the multi-pack idx file was not prepared to
see too many packfiles and ran out of open file descriptor, which
has been corrected.

* ds/midx-too-many-packs:
  midx: add packs to packed_git linked list
  midx: pass a repository pointer
2019-05-19 16:45:30 +09:00
Junio C Hamano
97616ca488 Merge branch 'en/unicode-in-refnames'
On a filesystem like HFS+, the names of the refs stored as filesystem
entities may become different from what the end-user expects, just
like files in the working tree get "renamed".  Work around the
mismatch by paying attention to the core.precomposeUnicode
configuration.

* en/unicode-in-refnames:
  Honor core.precomposeUnicode in more places
2019-05-19 16:45:30 +09:00
Junio C Hamano
85ac27e04f Merge branch 'dl/difftool-mergetool'
Update "git difftool" and "git mergetool" so that the combinations
of {diff,merge}.{tool,guitool} configuration variables serve as
fallback settings of each other in a sensible order.

* dl/difftool-mergetool:
  difftool: fallback on merge.guitool
  difftool: make --gui, --tool and --extcmd mutually exclusive
  mergetool: fallback to tool when guitool unavailable
  mergetool--lib: create gui_mode function
  mergetool: use get_merge_tool function
  t7610: add mergetool --gui tests
  t7610: unsuppress output
2019-05-19 16:45:30 +09:00
Junio C Hamano
fed9391fba Merge branch 'mh/http-fread-api-fix'
A pair of private functions in http.c that had names similar to
fread/fwrite did not return the number of elements, which was found
to be confusing.

* mh/http-fread-api-fix:
  Make fread/fwrite-like functions in http.c more like fread/fwrite.
2019-05-19 16:45:29 +09:00
Junio C Hamano
b20b8fecfb Merge branch 'js/t6500-use-windows-pid-on-mingw'
Future-proof a test against an update to MSYS2 runtime v3.x series.

* js/t6500-use-windows-pid-on-mingw:
  t6500(mingw): use the Windows PID of the shell
2019-05-19 16:45:29 +09:00
Junio C Hamano
7782066f67 Merge branch 'jk/apache-lsan'
Allow tests that involve httpd to be run under leak sanitizer, just
like we can already do so under address sanitizer.

* jk/apache-lsan:
  t/lib-httpd: pass LSAN_OPTIONS through apache
2019-05-19 16:45:29 +09:00
Junio C Hamano
2cfab60877 Merge branch 'nd/parse-options-aliases'
Attempt to use an abbreviated option in "git clone --recurs" is
responded by a request to disambiguate between --recursive and
--recurse-submodules, which is bad because these two are synonyms.
The parse-options API has been extended to define such synonyms
more easily and not produce an unnecessary failure.

* nd/parse-options-aliases:
  parse-options: don't emit "ambiguous option" for aliases
2019-05-19 16:45:28 +09:00
Junio C Hamano
4ac8371a1c Merge branch 'dl/branch-from-3dot-merge-base'
"git branch new A...B" and "git checkout -b new A...B" have been
taught that in their contexts, the notation A...B means "the merge
base between these two commits", just like "git checkout A...B"
detaches HEAD at that commit.

* dl/branch-from-3dot-merge-base:
  branch: make create_branch accept a merge base rev
  t2018: cleanup in current test
2019-05-19 16:45:28 +09:00
Junio C Hamano
3c9b393ca8 Merge branch 'js/commit-graph-parse-leakfix'
Leakfix.

* js/commit-graph-parse-leakfix:
  commit-graph: fix memory leak
2019-05-19 16:45:28 +09:00
Junio C Hamano
6795fc8afd Merge branch 'jk/cocci-batch'
Optionally "make coccicheck" can feed multiple source files to
spatch, gaining performance while spending more memory.

* jk/cocci-batch:
  coccicheck: make batch size of 0 mean "unlimited"
  coccicheck: optionally batch spatch invocations
2019-05-19 16:45:28 +09:00
Junio C Hamano
82dca958dd Merge branch 'ab/perf-installed-fix'
Performance test framework has been broken and measured the version
of Git that happens to be on $PATH, not the specified one to
measure, for a while, which has been corrected.

* ab/perf-installed-fix:
  perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
  perf tests: add "bindir" prefix to git tree test results
  perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
  perf-lib.sh: make "./run <revisions>" use the correct gits
  perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
  perf README: correct docs for 3c8f12c96c regression
2019-05-19 16:45:28 +09:00
Junio C Hamano
f42bee7d51 Merge branch 'id/windows-dep-aslr'
Allow DEP and ASLR for Windows build to for security hardening.

* id/windows-dep-aslr:
  mingw: enable DEP and ASLR
  mingw: do not let ld strip relocations
2019-05-19 16:45:27 +09:00
Junio C Hamano
d66da839d8 Merge branch 'ab/trace2-typofix'
Typofix.

* ab/trace2-typofix:
  trace2: fix up a missing "leave" entry point
2019-05-19 16:45:27 +09:00
Junio C Hamano
195d799955 Merge branch 'nd/submodule-helper-incomplete-line-fix'
Typofix.

* nd/submodule-helper-incomplete-line-fix:
  submodule--helper: add a missing \n
2019-05-19 16:45:27 +09:00
Junio C Hamano
18cfb74f31 Merge branch 'cw/diff-highlight'
Portability fix for a diff-highlight tool (in contrib/).

* cw/diff-highlight:
  diff-highlight: use correct /dev/null for UNIX and Windows
2019-05-19 16:45:26 +09:00
Junio C Hamano
1294160b27 Merge branch 'dl/warn-tagging-a-tag'
Typofix.

* dl/warn-tagging-a-tag:
  tag: fix typo in nested tagging hint
2019-05-19 16:45:26 +09:00
Johannes Schindelin
441bb2dcef Merge branch 'close-graph-everywhere'
This topic branch is a backport of
https://github.com/gitgitgadget/git/pull/208, which avoids a lock
contention in `git gc --auto` where the `git gc` process holds a read
lock to the `commit-graph` file (if `core.commitgraph=true`) and the
spawned `git commit-graph write` (if `gc.writecommitgraph=true`) tries
to overwrite it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-05-18 21:33:35 +02:00
Derrick Stolee
02c26cb318 packfile: close_all_packs to close_object_store
The close_all_packs() method is now responsible for more than just pack-files.
It also closes the commit-graph and the multi-pack-index. Rename the function
to be more descriptive of its larger role. The name also fits because the
input parameter is a raw_object_store.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
2019-05-18 21:33:31 +02:00
Derrick Stolee
56f0eed1ce packfile: close commit-graph in close_all_packs
The close_all_packs() method is used to close all read handles to
pack-files and the multi-pack-index before running 'git gc --auto'.
This is particularly important on the Windows platform, where read
handles block any writes to those files. Replacing one of these
files with a rename() will fail in this situation.

The commit-graph also performs a rename, so is susceptable to this
problem. We are careful to close the commit-graph before writing,
but that doesn't work when a 'git fetch' (or similar) process runs
'git gc --auto' which may write a commit-graph.

Here, close the commit-graph as part of close_all_packs().

Reported-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
2019-05-18 21:33:31 +02:00
Derrick Stolee
ee410f6cd3 commit-graph: use raw_object_store when closing
The close_commit_graph() method took a repository struct, but then
only uses the raw_object_store within. Change the function prototype
to make the method more flexible.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
2019-05-18 21:33:31 +02:00
Junio C Hamano
56bea28036 pkt-line: drop 'const'-ness of a param to set_packet_header()
The function's definition has a paramter of type "int" qualified as
"const".  The fact that the incoming parameter is used as read-only
in the fuction is an implementation detail that the callers should
not have to be told in the prototype declaring it (and "const" there
has no effect, as C passes parameters by value).

The prototype defined for the function in pkt-line.h lacked the
matching "const" for this reason, but apparently some compilers
(e.g. MS Visual C 2017) complain about the parameter type mismatch.

Let's squelch it by removing the "const" that is pointless in the
definition of a small and trivial function like this, which would
not help optimizing compilers nor reading humans that much.

Noticed-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-05-16 13:29:06 +09:00
Todd Zullinger
abd0f28983 test-lib: try harder to ensure a working jgit
The JGIT prereq uses `type jgit` to determine whether jgit is present.
While this is usually sufficient, it won't help if the jgit found is
badly broken.  This wastes time running tests which fail due to no fault
of our own.

Use `jgit --version` instead, to guard against cases where jgit is
present on the system, but will fail to run, e.g. because of some JRE
issue, or missing Java dependencies.  Checking that it gets far enough
to process the '--version' argument isn't perfect, but seems to be good
enough in practice.  It's also consistent with how we detect some other
dependencies, see e.g. the CURL and UNZIP prerequisites.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-05-15 14:20:01 +09:00
Jeff King
581d2fd9f2 get_oid: handle NULL repo->index
When get_oid() and its helpers see an index name like ":.gitmodules",
they try to load the index on demand, like:

  if (repo->index->cache)
	repo_read_index(repo);

However, that misses the case when "repo->index" itself is NULL; we'll
segfault in the conditional.

This never happens with the_repository; there we always point its index
field to &the_index. But a submodule repository may have a NULL index
field until somebody calls repo_read_index().

This bug is triggered by t7411, but it was hard to notice because it's
in an expect_failure block. That test was added by 2b1257e463 (t/helper:
add test-submodule-nested-repo-config, 2018-10-25). Back then we had no
easy way to access the .gitmodules blob of a submodule repo, so we
expected (and got) an error message to that effect. Later, d9b8b8f896
(submodule-config.c: use repo_get_oid for reading .gitmodules,
2019-04-16) started looking in the correct repo, which is when we
started triggering the segfault.

With this fix, the test starts passing (once we clean it up as its
comment instructs).

Note that as far as I know, this bug could not be triggered outside of
the test suite. It requires resolving an index name in a submodule, and
all of the code paths (aside from test-tool) which do that either load
the index themselves, or always pass the_repository.

Ultimately it comes from 3a7a698e93 (sha1-name.c: remove implicit
dependency on the_index, 2019-01-12), which replaced a check of
"the_index.cache" with "repo->index->cache". So even if there is another
way to trigger it, it wouldn't affect any versions before then.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-05-15 14:08:42 +09:00