summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-11-21Merge branch 'jn/eoie-ieot'Libravatar Junio C Hamano5-18/+69
As the warning message shown by existing versions of Git for unknown index extensions is a bit too alarming, two new extensions are held back and not written by default for the upcoming release. * jn/eoie-ieot: index: make index.threads=true enable ieot and eoie ieot: default to not writing IEOT section eoie: default to not writing EOIE section
2018-11-21Merge branch 'cc/delta-islands'Libravatar Junio C Hamano3-3/+6
A few issues in the implementation of "delta-islands" feature has been corrected. * cc/delta-islands: pack-objects: fix off-by-one in delta-island tree-depth computation pack-objects: zero-initialize tree_depth/layer arrays pack-objects: fix tree_depth and layer invariants
2018-11-21Merge branch 'js/rebase-am-options-fix'Libravatar Junio C Hamano1-0/+8
Recently, built-in "rebase" tightened the error checking for a few options that are passed to underlying "am", but we forgot to make the matching change to the scripted version, which has been corrected. * js/rebase-am-options-fix: legacy-rebase: backport -C<n> and --whitespace=<option> checks
2018-11-21Merge branch 'js/builtin-rebase-perf-fix-err-fix'Libravatar Junio C Hamano1-1/+2
The object name of the tree reported in a recently added error message was wrong, which has been corrected. * js/builtin-rebase-perf-fix-err-fix: rebase: warn about the correct tree's OID
2018-11-21index: make index.threads=true enable ieot and eoieLibravatar Jonathan Nieder4-16/+32
If a user explicitly sets [index] threads = true to read the index using multiple threads, ensure that index writes include the offset table by default to make that possible. This ensures that the user's intent of turning on threading is respected. In other words, permit the following configurations: - index.threads and index.recordOffsetTable unspecified: do not write the offset table yet (to avoid alarming the user with "ignoring IEOT extension" messages when an older version of Git accesses the repository) but do make use of multiple threads to read the index if the supporting offset table is present. This can also be requested explicitly by setting index.threads=true, 0, or >1 and index.recordOffsetTable=false. - index.threads=false or 1: do not write the offset table, and do not make use of the offset table. One can set index.recordOffsetTable=false as well, to be more explicit. - index.threads=true, 0, or >1 and index.recordOffsetTable unspecified: write the offset table and make use of threads at read time. This can also be requested by setting index.threads=true, 0, >1, or unspecified and index.recordOffsetTable=true. Fortunately the complication is temporary: once most Git installations have upgraded to a version with support for the IEOT and EOIE extensions, we can flip the defaults for index.recordEndOfIndexEntries and index.recordOffsetTable to true and eliminate the settings. Helped-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21pack-objects: fix off-by-one in delta-island tree-depth computationLibravatar Jeff King1-1/+3
When delta-islands are in use, we need to record the deepest path at which we find each tree and blob. Our loop to do so counts slashes, so "foo" is depth 0, "foo/bar" is depth 1, and so on. However, this neglects root trees, which are represented by the empty string. Those also have depth 0, but are at a layer above "foo". Thus, "foo" should be 1, "foo/bar" at 2, and so on. We use this depth to topo-sort the trees in resolve_tree_islands(). As a result, we may fail to visit a root tree before the sub-trees it contains, and therefore not correctly pass down the island marks. That in turn could lead to missing some delta opportunities (objects are in the same island, but we didn't realize it) or creating unwanted cross-island deltas (one object is in an island another isn't, but we don't realize). In practice, it seems to have only a small effect. Some experiments on the real-world git/git fork network at GitHub showed an improvement of only 0.14% in the resulting clone size. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21pack-objects: zero-initialize tree_depth/layer arraysLibravatar Jeff King2-2/+3
Commit 108f530385 (pack-objects: move tree_depth into 'struct packing_data', 2018-08-16) started maintaining a tree_depth array that matches the "objects" array. We extend the array when: 1. The objects array is extended, in which case we use realloc to extend the tree_depth array. 2. A caller asks to store a tree_depth for object N, and this is the first such request; we create the array from scratch and store the value for N. In the latter case, though, we use regular xmalloc(), and the depth values for any objects besides N is undefined. This happens to not trigger a bug with the current code, but the reasons are quite subtle: - we never ask about the depth for any object with index i < N. This is because we store the depth immediately for all trees and blobs. So any such "i" must be a non-tree, and therefore we will never need to care about its depth (in fact, we really only care about the depth of trees). - there are no objects at this point with index i > N, because we always fill in the depth for a tree immediately after its object entry is created (we may still allocate uninitialized depth entries, but they'll be initialized by packlist_alloc() when it initializes the entry in the "objects" array). So it works, but only by chance. To be defensive, let's zero the array, which matches the "unset" values which would be handed out by oe_tree_depth() already. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21pack-objects: fix tree_depth and layer invariantsLibravatar Jeff King1-2/+2
Commit 108f530385 (pack-objects: move tree_depth into 'struct packing_data', 2018-08-16) dynamically manages a tree_depth array in packing_data that maintains one of these invariants: 1. tree_depth is NULL (i.e., the requested options don't require us to track tree depths) 2. tree_depth is non-NULL and has as many entries as the "objects" array We maintain (2) by: a. When the objects array grows, grow tree_depth to the same size (unless it's NULL, in which case we can leave it). b. When a caller asks to set a depth via oe_set_tree_depth(), if tree_depth is NULL we allocate it. But in (b), we use the number of stored objects, _not_ the allocated size of the objects array. So we can run into a situation like this: 1. packlist_alloc() needs to store the Nth object, so it grows the objects array to M, where M > N. 2. oe_set_tree_depth() wants to store a depth, so it allocates an array of length N. Now we've violated our invariant. 3. packlist_alloc() needs to store the N+1th object. But it _doesn't_ grow the objects array, since N <= M still holds. We try to assign to tree_depth[N+1], which is out of bounds. That doesn't happen in our test scripts, because the repositories they use are so small, but it's easy to trigger by running: echo HEAD | git pack-objects --revs --delta-islands --stdout >/dev/null in any reasonably-sized repo (like git.git). We can fix it by always growing the array to match pack->nr_alloc, not pack->nr_objects. Likewise for the "layer" array from fe0ac2fb7f (pack-objects: move 'layer' into 'struct packing_data', 2018-08-16), which has the same bug. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21rebase: warn about the correct tree's OIDLibravatar Johannes Schindelin1-1/+2
This was a simple copy/paste error, and an obvious one at that: if we cannot fill the tree descriptor, we should show an error message about *that* tree, not another one. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21ieot: default to not writing IEOT sectionLibravatar Jonathan Nieder2-1/+17
As with EOIE, popular versions of Git do not support the new IEOT extension yet. When accessing a Git repository written by a more modern version of Git, they correctly ignore the unrecognized section, but in the process they loudly warn ignoring IEOT extension resulting in confusion for users. Introduce the index extension more gently by not writing it yet in this first version with support for it. Soon, once sufficiently many users are running a modern version of Git, we can flip the default so users benefit from this index extension by default. Introduce a '[index] recordOffsetTable' configuration variable to control whether the new index extension is written. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21eoie: default to not writing EOIE sectionLibravatar Jonathan Nieder3-5/+24
Since 3b1d9e04 (eoie: add End of Index Entry (EOIE) extension, 2018-10-10) Git defaults to writing the new EOIE section when writing out an index file. Usually that is a good thing because it improves threaded performance, but when a Git repository is shared with older versions of Git, it produces a confusing warning: $ git status ignoring EOIE extension HEAD detached at 371ed0defa nothing to commit, working tree clean Let's introduce the new index extension more gently. First we'll roll out the new version of Git that understands it, and then once sufficiently many users are using such a version, we can flip the default to writing it by default. Introduce a '[index] recordEndOfIndexEntries' configuration variable to allow interested users to benefit from this index extension early. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21legacy-rebase: backport -C<n> and --whitespace=<option> checksLibravatar Johannes Schindelin1-0/+8
Since 04519d720114 (rebase: validate -C<n> and --whitespace=<mode> parameters early, 2018-11-14), the built-in rebase validates the -C and --whitespace arguments early. As this commit also introduced a regression test for this, and as a later commit introduced the GIT_TEST_REBASE_USE_BUILTIN mode to run tests, we now have a "regression" in the scripted version of `git rebase` on our hands. Backport the validation to fix this. Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-19Prepare for 2.20-rc1Libravatar Junio C Hamano1-0/+29
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-19Merge branch 'sb/cocci-pending'Libravatar Junio C Hamano2-2/+46
A coding convention around the Coccinelle semantic patches to have two classes to ease code migration process has been proposed and its support has been added to the Makefile. * sb/cocci-pending: coccicheck: introduce 'pending' semantic patches
2018-11-19Merge branch 'js/test-git-installed'Libravatar Junio C Hamano4-8/+25
Update the "test installed Git" mode of our test suite to work better. * js/test-git-installed: tests: explicitly use `git.exe` on Windows tests: do not require Git to be built when testing an installed Git t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set tests: respect GIT_TEST_INSTALLED when initializing repositories tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
2018-11-19Merge branch 'dd/poll-dot-h'Libravatar Junio C Hamano3-2/+17
A build update. * dd/poll-dot-h: git-compat-util: prefer poll.h to sys/poll.h
2018-11-19Merge branch 'tb/print-size-t-with-uintmax-format'Libravatar Junio C Hamano11-23/+24
Code preparation to replace ulong vars with size_t vars where appropriate. * tb/print-size-t-with-uintmax-format: Upcast size_t variables to uintmax_t when printing
2018-11-19Merge branch 'tb/xcurl-off-t'Libravatar Junio C Hamano1-3/+4
The xcurl_off_t() helper function is used to cast size_t to curl_off_t, but some compilers gave warnings against the code to ensure the casting is done without wraparound, when size_t is narrower than curl_off_t. This warning has been squelched. * tb/xcurl-off-t: remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
2018-11-19Merge branch 'nd/format-patch-cover-letter-stat-width'Libravatar Junio C Hamano2-17/+33
"git format-patch --stat=<width>" can be used to specify the width used by the diffstat (shown in the cover letter). * nd/format-patch-cover-letter-stat-width: format-patch: respect --stat in cover letter's diffstat
2018-11-19Merge branch 'ds/push-squelch-ambig-warning'Libravatar Junio C Hamano1-0/+6
"git push" used to check ambiguities between object-names and refnames while processing the list of refs' old and new values, which was unnecessary (as it knew that it is feeding raw object names). This has been optimized out. * ds/push-squelch-ambig-warning: pack-objects: ignore ambiguous object warnings
2018-11-19Merge branch 'ab/dynamic-gettext-poison'Libravatar Junio C Hamano16-49/+59
Our testing framework uses a special i18n "poisoned localization" feature to find messages that ought to stay constant but are incorrectly marked to be translated. This feature has been made into a runtime option (it used to be a compile-time option). * ab/dynamic-gettext-poison: Makefile: ease dynamic-gettext-poison transition i18n: make GETTEXT_POISON a runtime option
2018-11-19RelNotes: name the release properlyLibravatar Junio C Hamano1-2/+2
In the title, we should state for which version this release notes document is about. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-18Git 2.20-rc0Libravatar Junio C Hamano2-1/+63
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-18Merge branch 'jk/close-duped-fd-before-unlock-for-bundle'Libravatar Junio C Hamano2-21/+24
When "git bundle" aborts due to an empty commit ranges (i.e. resulting in an empty pack), it left a file descriptor to an lockfile open, which resulted in leftover lockfile on Windows where you cannot remove a file with an open file descriptor. This has been corrected. * jk/close-duped-fd-before-unlock-for-bundle: bundle: dup() output descriptor closer to point-of-use
2018-11-18Merge branch 'ab/rebase-in-c-escape-hatch'Libravatar Junio C Hamano3-1/+22
The recently merged "rebase in C" has an escape hatch to use the scripted version when necessary, but it hasn't been documented, which has been corrected. * ab/rebase-in-c-escape-hatch: tests: add a special setup where rebase.useBuiltin is off rebase doc: document rebase.useBuiltin
2018-11-18Merge branch 'js/rebase-am-options'Libravatar Junio C Hamano2-63/+52
The way "git rebase" parses and forwards the command line options meant for underlying "git am" has been revamped, which fixed for options with parameters that were not passed correctly. * js/rebase-am-options: rebase: validate -C<n> and --whitespace=<mode> parameters early rebase: really just passthru the `git am` options
2018-11-18Merge branch 'sg/ref-filter-wo-repository'Libravatar Junio C Hamano2-0/+10
"git ls-remote --sort=<thing>" can feed an object that is not yet available into the comparison machinery and segfault, which has been corrected to check such a request upfront and reject it. * sg/ref-filter-wo-repository: ref-filter: don't look for objects when outside of a repository
2018-11-18Merge branch 'nd/doc-extensions'Libravatar Junio C Hamano3-19/+16
Doc update. * nd/doc-extensions: doc: move extensions.worktreeConfig to the right place
2018-11-18Merge branch 'js/fuzz-cxxflags'Libravatar Junio C Hamano1-2/+4
The build procedure to link for fuzzing test has been made customizable with a new Makefile variable. * js/fuzz-cxxflags: Makefile: use FUZZ_CXXFLAGS for linking fuzzers
2018-11-18Merge branch 'js/mingw-msdn-url'Libravatar Junio C Hamano1-2/+2
The URL to an MSDN page in a comment has been updated. * js/mingw-msdn-url: mingw: replace an obsolete link with the superseding one
2018-11-18Merge branch 'js/mingw-create-hard-link'Libravatar Junio C Hamano1-13/+1
Windows update. * js/mingw-create-hard-link: mingw: use `CreateHardLink()` directly
2018-11-18Merge branch 'js/config-sequence'Libravatar Junio C Hamano1-0/+2
A sanity check for start-up sequence has been added in the config API codepath. * js/config-sequence: config: report a bug if git_dir exists without commondir
2018-11-18Merge branch 'lj/mingw-pthread-cond'Libravatar Junio C Hamano2-159/+7
Code simplification. * lj/mingw-pthread-cond: win32: replace pthread_cond_*() with much simpler code
2018-11-18Merge branch 'nd/command-list-gen-fix'Libravatar Junio C Hamano1-1/+1
Build tweak. * nd/command-list-gen-fix: build: fix broken command-list.h generation with core.autocrlf
2018-11-18Merge branch 'ag/p3400-force-checkout'Libravatar Junio C Hamano1-5/+5
Perf test tweak. * ag/p3400-force-checkout: p3400: replace calls to `git checkout -b' by `git checkout -B'
2018-11-18Merge branch 'cb/notes-freeing-always-null-fix'Libravatar Junio C Hamano1-3/+1
Code cleanup. * cb/notes-freeing-always-null-fix: builtin/notes: remove unnecessary free
2018-11-18Merge branch 'js/rebase-r-and-merge-head'Libravatar Junio C Hamano4-6/+32
Bugfix for the recently graduated "git rebase --rebase-merges". * js/rebase-r-and-merge-head: status: rebase and merge can be in progress at the same time built-in rebase --skip/--abort: clean up stale .git/<name> files rebase -i: include MERGE_HEAD into files to clean up rebase -r: do not write MERGE_HEAD unless needed rebase -r: demonstrate bug with conflicting merges
2018-11-18Merge branch 'js/apply-recount-allow-noop'Libravatar Junio C Hamano2-1/+13
When editing a patch in a "git add -i" session, a hunk could be made to no-op. The "git apply" program used to reject a patch with such a no-op hunk to catch user mistakes, but it is now updated to explicitly allow a no-op hunk in an edited patch. * js/apply-recount-allow-noop: apply --recount: allow "no-op hunks"
2018-11-18Merge branch 'ra/rev-parse-exclude-glob'Libravatar Junio C Hamano2-3/+61
"rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not quite work, which has been corrected. * ra/rev-parse-exclude-glob: refs: fix some exclude patterns being ignored refs: show --exclude failure with --branches/tags/remotes=glob
2018-11-18Merge branch 'js/builtin-rebase-perf-fix'Libravatar Junio C Hamano1-33/+46
Code clean-up with correction to make the reimplemented "git rebase" a more faithful rewrite of the original, which also regains performance. * js/builtin-rebase-perf-fix: built-in rebase: reinstate `checkout -q` behavior where appropriate rebase: prepare reset_head() for more flags rebase: consolidate clean-up code before leaving reset_head()
2018-11-18Merge branch 'js/mailmap'Libravatar Junio C Hamano1-0/+13
Update the mailmap to unify multiple entries for the authors with commits since v2.10. * js/mailmap: Update .mailmap
2018-11-18Merge branch 'js/rebase-autostash-detach-fix'Libravatar Junio C Hamano2-1/+10
"git rebase --autostash" did not correctly re-attach the HEAD at times. * js/rebase-autostash-detach-fix: built-in rebase --autostash: leave the current branch alone if possible built-in rebase: demonstrate regression with --autostash
2018-11-18Merge branch 'ab/range-diff-no-patch'Libravatar Junio C Hamano3-1/+49
The "--no-patch" option, which can be used to get a high-level overview without the actual line-by-line patch difference shown, of the "range-diff" command was earlier broken, which has been corrected. * ab/range-diff-no-patch: range-diff: make diff option behavior (e.g. --stat) consistent range-diff: fix regression in passing along diff options range-diff doc: add a section about output stability
2018-11-18Merge branch 'jk/verify-sig-merge-into-void'Libravatar Junio C Hamano6-25/+64
"git merge" and "git pull" that merges into an unborn branch used to completely ignore "--verify-signatures", which has been corrected. * jk/verify-sig-merge-into-void: pull: handle --verify-signatures for unborn branch merge: handle --verify-signatures for unborn branch merge: extract verify_merge_signature() helper
2018-11-18Merge branch 'js/mingw-res-rebuild'Libravatar Junio C Hamano1-1/+1
Windows build update. * js/mingw-res-rebuild: Windows: force-recompile git.res for differing architectures
2018-11-18Merge branch 'jk/unused-parameter-fixes'Libravatar Junio C Hamano30-60/+164
Various functions have been audited for "-Wunused-parameter" warnings and bugs in them got fixed. * jk/unused-parameter-fixes: midx: double-check large object write loop assert NOARG/NONEG behavior of parse-options callbacks parse-options: drop OPT_DATE() apply: return -1 from option callback instead of calling exit(1) cat-file: report an error on multiple --batch options tag: mark "--message" option with NONEG show-branch: mark --reflog option as NONEG format-patch: mark "--no-numbered" option with NONEG status: mark --find-renames option with NONEG cat-file: mark batch options with NONEG pack-objects: mark index-version option as NONEG ls-files: mark exclude options as NONEG am: handle --no-patch-format option apply: mark include/exclude options as NONEG
2018-11-18Merge branch 'jk/curl-ldflags'Libravatar Junio C Hamano3-28/+22
The way -lcurl library gets linked has been simplified by taking advantage of the fact that we can just ask curl-config command how. * jk/curl-ldflags: build: link with curl-defined linker flags
2018-11-18Merge branch 'mg/gpg-fingerprint-test'Libravatar Junio C Hamano2-14/+70
Add a few tests for a topic already in 'master'. * mg/gpg-fingerprint-test: t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key t/t7510-signed-commit.sh: Add %GP to custom format checks
2018-11-18Merge branch 'nd/pthreads'Libravatar Junio C Hamano16-231/+186
The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS". * nd/pthreads: Clean up pthread_create() error handling read-cache.c: initialize copy_len to shut up gcc 8 read-cache.c: reduce branching based on HAVE_THREADS read-cache.c: remove #ifdef NO_PTHREADS pack-objects: remove #ifdef NO_PTHREADS preload-index.c: remove #ifdef NO_PTHREADS grep: clean up num_threads handling grep: remove #ifdef NO_PTHREADS attr.c: remove #ifdef NO_PTHREADS name-hash.c: remove #ifdef NO_PTHREADS index-pack: remove #ifdef NO_PTHREADS send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c run-command.h: include thread-utils.h instead of pthread.h thread-utils: macros to unconditionally compile pthreads API
2018-11-18Merge branch 'ds/reachable-topo-order'Libravatar Junio C Hamano11-39/+427
The revision walker machinery learned to take advantage of the commit generation numbers stored in the commit-graph file. * ds/reachable-topo-order: t6012: make rev-list tests more interesting revision.c: generation-based topo-order algorithm commit/revisions: bookkeeping before refactoring revision.c: begin refactoring --topo-order logic test-reach: add rev-list tests test-reach: add run_three_modes method prio-queue: add 'peek' operation