Junio C Hamano [Tue, 30 Oct 2018 06:43:47 +0000 (15:43 +0900)]
Merge branch 'ds/reachable'
Trivial bugfix.
* ds/reachable:
commit-reach: fix cast in compare_commits_by_gen()
Junio C Hamano [Tue, 30 Oct 2018 06:43:46 +0000 (15:43 +0900)]
Merge branch 'jc/receive-deny-current-branch-fix'
The receive.denyCurrentBranch=updateInstead codepath kicked in even
when the push should have been rejected due to other reasons, such
as it does not fast-forward or the update-hook rejects it, which
has been corrected.
* jc/receive-deny-current-branch-fix:
receive: denyCurrentBranch=updateinstead should not blindly update
Junio C Hamano [Tue, 30 Oct 2018 06:43:46 +0000 (15:43 +0900)]
Merge branch 'ds/ci-commit-graph-and-midx'
One of our CI tests to run with "unusual/experimental/random"
settings now also uses commit-graph and midx.
* ds/ci-commit-graph-and-midx:
ci: add optional test variables
Junio C Hamano [Tue, 30 Oct 2018 06:43:46 +0000 (15:43 +0900)]
Merge branch 'jk/unused-function'
Developer support.
* jk/unused-function:
config.mak.dev: enable -Wunused-function
Junio C Hamano [Tue, 30 Oct 2018 06:43:45 +0000 (15:43 +0900)]
Merge branch 'cb/remove-dead-init'
Code clean-up.
* cb/remove-dead-init:
multi-pack-index: avoid dead store for struct progress
unpack-trees: avoid dead store for struct progress
Junio C Hamano [Tue, 30 Oct 2018 06:43:45 +0000 (15:43 +0900)]
Merge branch 'js/diff-notice-has-drive-prefix'
Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
Windows would strip initial parts from the paths because they
were not recognized as absolute, which has been corrected.
* js/diff-notice-has-drive-prefix:
diff: don't attempt to strip prefix from absolute Windows paths
Junio C Hamano [Tue, 30 Oct 2018 06:43:44 +0000 (15:43 +0900)]
Merge branch 'ot/ref-filter-plug-leaks'
Plugging a handful of memory leaks in the ref-filter codepath.
* ot/ref-filter-plug-leaks:
ref-filter: free item->value and item->value->s
ls-remote: release memory instead of UNLEAK
ref-filter: free memory from used_atom
Junio C Hamano [Tue, 30 Oct 2018 06:43:44 +0000 (15:43 +0900)]
Merge branch 'ds/reachable-first-parent-fix'
Correct performance regression in commit ancestry computation when
generation numbers are involved.
* ds/reachable-first-parent-fix:
commit-reach: fix first-parent heuristic
Junio C Hamano [Tue, 30 Oct 2018 06:43:44 +0000 (15:43 +0900)]
Merge branch 'rj/header-guards'
Code clean-up.
* rj/header-guards:
headers: normalize the spelling of some header guards
Junio C Hamano [Tue, 30 Oct 2018 06:43:44 +0000 (15:43 +0900)]
Merge branch 'jk/test-tool-help'
Developer support.
* jk/test-tool-help:
test-tool: show tool list on error
Junio C Hamano [Tue, 30 Oct 2018 06:43:44 +0000 (15:43 +0900)]
Merge branch 'sg/doc-show-branch-typofix'
Docfix.
* sg/doc-show-branch-typofix:
doc: fix small typo in git show-branch
Junio C Hamano [Tue, 30 Oct 2018 06:43:43 +0000 (15:43 +0900)]
Merge branch 'sb/submodule-helper-remove-cruft'
Code clean-up.
* sb/submodule-helper-remove-cruft:
builtin/submodule--helper: remove debugging leftover tracing
Junio C Hamano [Tue, 30 Oct 2018 06:43:43 +0000 (15:43 +0900)]
Merge branch 'js/pack-objects-mutex-init-fix'
A mutex used in "git pack-objects" were not correctly initialized
and this caused "git repack" to dump core on Windows.
* js/pack-objects-mutex-init-fix:
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
pack-objects (mingw): demonstrate a segmentation fault with large deltas
pack-objects: fix typo 'detla' -> 'delta'
Junio C Hamano [Tue, 30 Oct 2018 06:43:43 +0000 (15:43 +0900)]
Merge branch 'tq/branch-style-fix'
Code clean-up.
* tq/branch-style-fix:
branch: trivial style fix
Junio C Hamano [Tue, 30 Oct 2018 06:43:42 +0000 (15:43 +0900)]
Merge branch 'tq/branch-create-wo-branch-get'
Code clean-up.
* tq/branch-create-wo-branch-get:
builtin/branch.c: remove useless branch_get
Junio C Hamano [Tue, 30 Oct 2018 06:43:42 +0000 (15:43 +0900)]
Merge branch 'bc/hash-transition-part-15'
More codepaths are moving away from hardcoded hash sizes.
* bc/hash-transition-part-15:
rerere: convert to use the_hash_algo
submodule: make zero-oid comparison hash function agnostic
apply: rename new_sha1_prefix and old_sha1_prefix
apply: replace hard-coded constants
tag: express constant in terms of the_hash_algo
transport: use parse_oid_hex instead of a constant
upload-pack: express constants in terms of the_hash_algo
refs/packed-backend: express constants using the_hash_algo
packfile: express constants in terms of the_hash_algo
pack-revindex: express constants in terms of the_hash_algo
builtin/fetch-pack: remove constants with parse_oid_hex
builtin/mktree: remove hard-coded constant
builtin/repack: replace hard-coded constants
pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
object_id.cocci: match only expressions of type 'struct object_id'
Junio C Hamano [Tue, 30 Oct 2018 06:43:41 +0000 (15:43 +0900)]
Merge branch 'sb/strbuf-h-update'
Code clean-up to serve as a BCP example.
* sb/strbuf-h-update:
strbuf.h: format according to coding guidelines
Junio C Hamano [Tue, 30 Oct 2018 06:43:41 +0000 (15:43 +0900)]
Merge branch 'jk/run-command-notdot'
The implementation of run_command() API on the UNIX platforms had a
bug that caused a command not on $PATH to be found in the current
directory.
* jk/run-command-notdot:
run-command: mark path lookup errors with ENOENT
Junio C Hamano [Tue, 30 Oct 2018 06:43:41 +0000 (15:43 +0900)]
Merge branch 'tb/filter-alternate-refs'
Test fix.
* tb/filter-alternate-refs:
t5410: use longer path for sample script
Documentation/config.txt: fix typo in core.alternateRefsCommand
Junio C Hamano [Tue, 30 Oct 2018 06:43:40 +0000 (15:43 +0900)]
Merge branch 'rv/send-email-cc-misc-by'
"git send-email" learned to grab address-looking string on any
trailer whose name ends with "-by"; --suppress-cc=misc-by on the
command line, or setting sendemail.suppresscc configuration
variable to "misc-by", can be used to disable this behaviour.
This is a backward-incompatible change that may surprise existing
users.
* rv/send-email-cc-misc-by:
send-email: also pick up cc addresses from -by trailers
send-email: only consider lines containing @ or <> for automatic Cc'ing
Documentation/git-send-email.txt: style fixes
Junio C Hamano [Tue, 30 Oct 2018 06:43:40 +0000 (15:43 +0900)]
Merge branch 'lm/range-diff-submodule-fix'
"git range-diff" did not work well when the compared ranges had
changes in submodules and the "--submodule=log" was used.
* lm/range-diff-submodule-fix:
range-diff: allow to diff files regardless of submodule config
Junio C Hamano [Tue, 30 Oct 2018 06:43:39 +0000 (15:43 +0900)]
Merge branch 'ch/subtree-build'
Build update for "git subtree" (in contrib/) documentation pages.
* ch/subtree-build:
Revert "subtree: make install targets depend on build targets"
subtree: make install targets depend on build targets
subtree: add build targets 'man' and 'html'
Junio C Hamano [Tue, 30 Oct 2018 06:43:39 +0000 (15:43 +0900)]
Merge branch 'md/filter-trees'
The "rev-list --filter" feature learned to exclude all trees via
"tree:0" filter.
* md/filter-trees:
list-objects: support for skipping tree traversal
filter-trees: code clean-up of tests
list-objects-filter: implement filter tree:0
list-objects-filter-options: do not over-strbuf_init
list-objects-filter: use BUG rather than die
revision: mark non-user-given objects instead
rev-list: handle missing tree objects properly
list-objects: always parse trees gently
list-objects: refactor to process_tree_contents
list-objects: store common func args in struct
Junio C Hamano [Fri, 26 Oct 2018 05:53:16 +0000 (14:53 +0900)]
Sixth batch for 2.20
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Fri, 26 Oct 2018 05:22:15 +0000 (14:22 +0900)]
Merge branch 'js/mingw-default-ident'
The logic to select the default user name and e-mail on Windows has
been improved.
* js/mingw-default-ident:
mingw: use domain information for default email
getpwuid(mingw): provide a better default for the user name
getpwuid(mingw): initialize the structure only once
Junio C Hamano [Fri, 26 Oct 2018 05:22:15 +0000 (14:22 +0900)]
Merge branch 'ld/p4-unshelve'
"git p4 unshelve" improvements.
* ld/p4-unshelve:
git-p4: fully support unshelving changelists
git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
git-p4: do not fail in verbose mode for missing 'fileSize' key
Junio C Hamano [Fri, 26 Oct 2018 05:22:14 +0000 (14:22 +0900)]
Merge branch 'du/cherry-is-plumbing'
Doc update to mark "git cherry" as a plumbing command.
* du/cherry-is-plumbing:
doc: move git-cherry to plumbing
Junio C Hamano [Fri, 26 Oct 2018 05:22:14 +0000 (14:22 +0900)]
Merge branch 'ab/gc-doc-update'
The documentation of "git gc" has been updated to mention that it
is no longer limited to "pruning away crufts" but also updates
ancillary files like commit-graph as a part of repository
optimization.
* ab/gc-doc-update:
gc doc: mention the commit-graph in the intro
Junio C Hamano [Fri, 26 Oct 2018 05:22:13 +0000 (14:22 +0900)]
Merge branch 'js/fuzzer'
An experiment to fuzz test a few areas, hopefully we can gain more
coverage to various areas.
* js/fuzzer:
fuzz: add fuzz testing for packfile indices.
fuzz: add basic fuzz testing target.
Junio C Hamano [Fri, 26 Oct 2018 05:22:13 +0000 (14:22 +0900)]
Merge branch 'rv/alias-help'
"git cmd --help" when "cmd" is aliased used to only say "cmd is
aliased to ...". Now it shows that to the standard error stream
and runs "git $cmd --help" where $cmd is the first word of the
alias expansion.
This could be misleading for those who alias a command with options
(e.g. with "[alias] cpn = cherry-pick -n", "git cpn --help" would
show the manual of "cherry-pick", and the reader would not be told
to pay close attention to the part that describes the "--no-commit"
option until closing the pager that showed the contents of the
manual, if the pager is configured to restore the original screen,
or would not be told at all, if the pager simply makes the message
on the standard error scroll away.
* rv/alias-help:
git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
git.c: handle_alias: prepend alias info when first argument is -h
help: redirect to aliased commands for "git cmd --help"
Junio C Hamano [Fri, 26 Oct 2018 05:22:13 +0000 (14:22 +0900)]
Merge branch 'sb/diff-emit-line-ws-markup-cleanup'
Code clean-up.
* sb/diff-emit-line-ws-markup-cleanup:
diff.c: pass sign_index to emit_line_ws_markup
Junio C Hamano [Fri, 26 Oct 2018 05:22:12 +0000 (14:22 +0900)]
Merge branch 'du/get-tar-commit-id-is-plumbing'
Doc update to mark "git get-tar-commit-id" as a plumbing command.
* du/get-tar-commit-id-is-plumbing:
doc: move git-get-tar-commit-id to plumbing
Junio C Hamano [Fri, 26 Oct 2018 05:22:12 +0000 (14:22 +0900)]
Merge branch 'mm/doc-no-dashed-git'
Doc update.
* mm/doc-no-dashed-git:
doc: fix a typo and clarify a sentence
Junio C Hamano [Fri, 26 Oct 2018 05:22:11 +0000 (14:22 +0900)]
Merge branch 'du/rev-parse-is-plumbing'
Doc update.
* du/rev-parse-is-plumbing:
doc: move git-rev-parse from porcelain to plumbing
Junio C Hamano [Fri, 26 Oct 2018 05:22:11 +0000 (14:22 +0900)]
Merge branch 'np/log-graph-octopus-fix'
"git log --graph" showing an octopus merge sometimes miscounted the
number of display columns it is consuming to show the merge and its
parent commits, which has been corrected.
* np/log-graph-octopus-fix:
log: fix coloring of certain octopus merge shapes
Junio C Hamano [Fri, 26 Oct 2018 05:22:10 +0000 (14:22 +0900)]
Merge branch 'sg/split-index-racefix'
The codepath to support the experimental split-index mode had
remaining "racily clean" issues fixed.
* sg/split-index-racefix:
split-index: BUG() when cache entry refers to non-existing shared entry
split-index: smudge and add racily clean cache entries to split index
split-index: don't compare cached data of entries already marked for split index
split-index: count the number of deleted entries
t1700-split-index: date back files to avoid racy situations
split-index: add tests to demonstrate the racy split index problem
t1700-split-index: document why FSMONITOR is disabled in this test script
Junio C Hamano [Fri, 26 Oct 2018 05:22:10 +0000 (14:22 +0900)]
Merge branch 'ds/coverage-diff'
The result of coverage test can be combined with "git blame" to
check the test coverage of code introduced recently with a new
'coverage-diff' tool (in contrib/).
* ds/coverage-diff:
contrib: add coverage-diff script
Junio C Hamano [Fri, 26 Oct 2018 05:22:09 +0000 (14:22 +0900)]
Merge branch 'bc/editorconfig'
To help developers, an EditorConfig file that attempts to follow
the project convention has been added.
* bc/editorconfig:
editorconfig: indicate settings should be kept in sync
editorconfig: provide editor settings for Git developers
Junio C Hamano [Fri, 26 Oct 2018 05:22:09 +0000 (14:22 +0900)]
Merge branch 'ma/t7005-bash-workaround'
Test fix.
* ma/t7005-bash-workaround:
t7005-editor: quote filename to fix whitespace-issue
Junio C Hamano [Fri, 26 Oct 2018 05:22:08 +0000 (14:22 +0900)]
Merge branch 'rs/subtree-fixes'
Various subtree fixes.
* rs/subtree-fixes:
subtree: performance improvement for finding unexpected parent commits
subtree: improve decision on merges kept in split
subtree: use commits before rejoins for splits
subtree: make --ignore-joins pay attention to adds
subtree: refactor split of a commit into standalone method
Lucas De Marchi [Wed, 24 Oct 2018 19:46:17 +0000 (12:46 -0700)]
range-diff: allow to diff files regardless of submodule config
If we have `submodule.diff = log' in the configuration file
or `--submodule=log' is given as argument, range-diff fails
to compare both diffs and we only get the following output:
Submodule a
0000000...
0000000 (new submodule)
Even if the repository doesn't have any submodule.
That's because the mode in diff_filespec is not correct and when
flushing the diff, down in builtin_diff() we will enter the condition:
if (o->submodule_format == DIFF_SUBMODULE_LOG &&
(!one->mode || S_ISGITLINK(one->mode)) &&
(!two->mode || S_ISGITLINK(two->mode))) {
show_submodule_summary(o, one->path ? one->path : two->path,
&one->oid, &two->oid,
two->dirty_submodule);
return;
It turns out that S_ISGITLINK will return true (mode ==
0160000 here).
Similar thing happens if submodule.diff is "diff".
Do like it's done in grep.c when calling fill_filespec() and force it to
be recognized as a file by adding S_IFREG to the mode.
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Wed, 24 Oct 2018 07:37:06 +0000 (03:37 -0400)]
t5410: use longer path for sample script
t5410 creates a sample script "alternate-refs", and sets
core.alternateRefsCommand to just "alternate-refs". That
shouldn't work, as "." is not in our $PATH, and so we should
not find it.
However, due to a bug in run-command.c, we sometimes find it
anyway! Even more confusing, this bug is only in the
fork-based version of run-command. So the test passes on
Linux (etc), but fails on Windows.
In preparation for fixing the run-command bug, let's use a
more complete path here.
Reported-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Thu, 25 Oct 2018 02:41:09 +0000 (11:41 +0900)]
t0061: adjust to test-tool transition
Jeff King [Wed, 24 Oct 2018 07:38:00 +0000 (03:38 -0400)]
run-command: mark path lookup errors with ENOENT
Since commit
e3a434468f (run-command: use the
async-signal-safe execv instead of execvp, 2017-04-19),
prepare_cmd() does its own PATH lookup for any commands we
run (on non-Windows platforms).
However, its logic does not match the old execvp call when
we fail to find a matching entry in the PATH. Instead of
feeding the name directly to execv, execvp would consider
that an ENOENT error. By continuing and passing the name
directly to execv, we effectively behave as if "." was
included at the end of the PATH. This can have confusing and
even dangerous results.
The fix itself is pretty straight-forward. There's a new
test in t0061 to cover this explicitly, and I've also added
a duplicate of the ENOENT test to ensure that we return the
correct errno for this case.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Taylor Blau [Tue, 23 Oct 2018 01:32:04 +0000 (18:32 -0700)]
Documentation/config.txt: fix typo in core.alternateRefsCommand
In [1] Git learned about 'core.alternateRefsCommand', and with it, the
accompanying documentation. However, this documentation included a typo
involving the verb tense of "produced".
Match the tense of the surrounding bits by correcting this typo.
[1]:
89284c1d6c (transport.c: introduce core.alternateRefsCommand,
2018-10-08)
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
René Scharfe [Mon, 1 Oct 2018 19:16:01 +0000 (21:16 +0200)]
commit-reach: fix cast in compare_commits_by_gen()
The elements of the array to be sorted are commit pointers, so the
comparison function gets handed references to these pointers, not
pointers to commit objects. Cast to the right type and dereference
once to correctly get the commit reference.
Found using Clang's ASan and t5500.
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Fri, 19 Oct 2018 16:58:07 +0000 (18:58 +0200)]
diff: don't attempt to strip prefix from absolute Windows paths
git diff can be invoked with absolute paths. Typically, this triggers
the --no-index case. Then the absolute paths remain in the file names
that are printed in the output.
There is one peculiarity, though: When the command is invoked from a
a sub-directory in a repository, then it is attempted to strip the
sub-directory from the beginning of relative paths. Yet, to detect a
relative path the code just checks for an initial forward slash.
This mistakes a Windows style path like "D:/base" as a relative path
and the output looks like this, for example:
D:\dir\test\one>git -P diff --numstat D:\dir\base D:\dir\diff
1 1 ir/{base => diff}/1.txt
where the correct output should be
D:\dir\test\one>git -P diff --numstat D:\dir\base D:\dir\diff
1 1 D:/dir/{base => diff}/1.txt
If the sub-directory where 'git diff' is invoked is sufficiently deep
that the prefix becomes longer than the path to be printed, then the
subsequent code accesses the path out of bounds.
Use is_absolute_path() to detect Windows style absolute paths.
One might wonder whether the check for a directory separator that
is visible in the patch context should be changed from == '/' to
is_dir_sep() or not. It turns out not to be necessary. That code
only ever investigates paths that have undergone pathspec
normalization, after which there are only forward slashes even on
Windows.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Fri, 19 Oct 2018 04:57:35 +0000 (13:57 +0900)]
receive: denyCurrentBranch=updateinstead should not blindly update
The handling of receive.denyCurrentBranch=updateInstead was added to
a switch statement that handles other values of the variable, but
all the other case arms only checked a condition to reject the
attempted push, or let later logic in the same function to still
intervene, so that a push that does not fast-forward (which is
checked after the switch statement in question) is still rejected.
But the handling of updateInstead incorrectly took immediate effect,
without giving other checks a chance to intervene.
Instead of calling update_worktree() that causes the side effect
immediately, just note the fact that we will need to call the
function later, and first give other checks a chance to reject the
request. After the update-hook gets a chance to reject the push
(which happens as the last step in a series of checks), call
update_worktree() when we earlier detected the need to.
Reported-by: Rajesh Madamanchi
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Schindelin [Tue, 16 Oct 2018 21:02:52 +0000 (14:02 -0700)]
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
In
9ac3f0e5b3e4 (pack-objects: fix performance issues on packing large
deltas, 2018-07-22), a mutex was introduced that is used to guard the
call to set the delta size. This commit even added code to initialize
it, but at an incorrect spot: in `init_threaded_search()`, while the
call to `oe_set_delta_size()` (and hence to `packing_data_lock()`) can
happen in the call chain `check_object()` <- `get_object_details()` <-
`prepare_pack()` <- `cmd_pack_objects()`, which is long before the
`prepare_pack()` function calls `ll_find_deltas()` (which initializes
the threaded search).
Another tell-tale that the mutex was initialized in an incorrect spot is
that the function to initialize it lives in builtin/, while the code
that uses the mutex is defined in a libgit.a header file.
Let's use a more appropriate function: `prepare_packing_data()`, which
not only lives in libgit.a, but *has* to be called before the
`packing_data` struct is used that contains that mutex.
This fixes https://github.com/git-for-windows/git/issues/1839.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Schindelin [Tue, 16 Oct 2018 21:02:50 +0000 (14:02 -0700)]
pack-objects (mingw): demonstrate a segmentation fault with large deltas
There is a problem in the way
9ac3f0e5b3e4 (pack-objects: fix
performance issues on packing large deltas, 2018-07-22) initializes that
mutex in the `packing_data` struct. The problem manifests in a
segmentation fault on Windows, when a mutex (AKA critical section) is
accessed without being initialized. (With pthreads, you apparently do
not really have to initialize them?)
This was reported in https://github.com/git-for-windows/git/issues/1839.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Schindelin [Tue, 16 Oct 2018 21:02:49 +0000 (14:02 -0700)]
pack-objects: fix typo 'detla' -> 'delta'
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Fri, 19 Oct 2018 04:52:51 +0000 (13:52 +0900)]
Fifth batch for 2.20
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Fri, 19 Oct 2018 04:34:08 +0000 (13:34 +0900)]
Merge branch 'jt/cache-tree-allow-missing-object-in-partial-clone'
In a partial clone that will lazily be hydrated from the
originating repository, we generally want to avoid "does this
object exist (locally)?" on objects that we deliberately omitted
when we created the clone. The cache-tree codepath (which is used
to write a tree object out of the index) however insisted that the
object exists, even for paths that are outside of the partial
checkout area. The code has been updated to avoid such a check.
* jt/cache-tree-allow-missing-object-in-partial-clone:
cache-tree: skip some blob checks in partial clone
Junio C Hamano [Fri, 19 Oct 2018 04:34:08 +0000 (13:34 +0900)]
Merge branch 'tb/filter-alternate-refs'
When pushing into a repository that borrows its objects from an
alternate object store, "git receive-pack" that responds to the
push request on the other side lists the tips of refs in the
alternate to reduce the amount of objects transferred. This
sometimes is detrimental when the number of refs in the alternate
is absurdly large, in which case the bandwidth saved in potentially
fewer objects transferred is wasted in excessively large ref
advertisement. The alternate refs that are advertised are now
configurable with a pair of configuration variables.
* tb/filter-alternate-refs:
transport.c: introduce core.alternateRefsPrefixes
transport.c: introduce core.alternateRefsCommand
transport.c: extract 'fill_alternate_refs_command'
transport: drop refnames from for_each_alternate_ref
Junio C Hamano [Fri, 19 Oct 2018 04:34:07 +0000 (13:34 +0900)]
Merge branch 'jt/avoid-ls-refs'
Over some transports, fetching objects with an exact commit object
name can be done without first seeing the ref advertisements. The
code has been optimized to exploit this.
* jt/avoid-ls-refs:
fetch: do not list refs if fetching only hashes
transport: list refs before fetch if necessary
transport: do not list refs if possible
transport: allow skipping of ref listing
Junio C Hamano [Fri, 19 Oct 2018 04:34:07 +0000 (13:34 +0900)]
Merge branch 'ds/commit-graph-leakfix'
Code clean-up.
* ds/commit-graph-leakfix:
commit-graph: reduce initial oid allocation
builtin/commit-graph.c: UNLEAK variables
commit-graph: clean up leaked memory during write
Junio C Hamano [Fri, 19 Oct 2018 04:34:07 +0000 (13:34 +0900)]
Merge branch 'jt/non-blob-lazy-fetch'
A partial clone that is configured to lazily fetch missing objects
will on-demand issue a "git fetch" request to the originating
repository to fill not-yet-obtained objects. The request has been
optimized for requesting a tree object (and not the leaf blob
objects contained in it) by telling the originating repository that
no blobs are needed.
* jt/non-blob-lazy-fetch:
fetch-pack: exclude blobs when lazy-fetching trees
fetch-pack: avoid object flags if no_dependents
Junio C Hamano [Fri, 19 Oct 2018 04:34:06 +0000 (13:34 +0900)]
Merge branch 'pw/diff-color-moved-ws-fix'
Various fixes to "diff --color-moved-ws".
* pw/diff-color-moved-ws-fix:
diff --color-moved: fix a memory leak
diff --color-moved-ws: fix another memory leak
diff --color-moved-ws: fix a memory leak
diff --color-moved-ws: fix out of bounds string access
diff --color-moved-ws: fix double free crash
Junio C Hamano [Fri, 19 Oct 2018 04:34:06 +0000 (13:34 +0900)]
Merge branch 'rs/oidset-on-khash'
The oidset API was built on top of the oidmap API which in turn is
on the hashmap API. Replace the implementation to build on top of
the khash API and gain performance.
* rs/oidset-on-khash:
oidset: uninline oidset_init()
oidset: use khash
khash: factor out kh_release_*
fetch-pack: load tip_oids eagerly iff needed
fetch-pack: factor out is_unmatched_ref()
Junio C Hamano [Fri, 19 Oct 2018 04:34:05 +0000 (13:34 +0900)]
Merge branch 'rs/grep-no-recursive'
Unlike "grep", "git grep" by default recurses to the whole tree.
The command learned "git grep --recursive" option, so that "git
grep --no-recursive" can serve as a synonym to setting the
max-depth to 0.
* rs/grep-no-recursive:
grep: add -r/--[no-]recursive
Junio C Hamano [Fri, 19 Oct 2018 04:34:05 +0000 (13:34 +0900)]
Merge branch 'nd/help-commands-verbose-by-default'
"git help -a" and "git help -av" give different pieces of
information, and generally the "verbose" version is more friendly
to the new users. "git help -a" by default now uses the more
verbose output (with "--no-verbose", you can go back to the
original). Also "git help -av" now lists aliases and external
commands, which it did not used to.
* nd/help-commands-verbose-by-default:
help -a: improve and make --verbose default
Junio C Hamano [Fri, 19 Oct 2018 04:34:05 +0000 (13:34 +0900)]
Merge branch 'jc/how-to-document-api'
Doc update.
* jc/how-to-document-api:
CodingGuidelines: document the API in *.h files
Junio C Hamano [Fri, 19 Oct 2018 04:34:04 +0000 (13:34 +0900)]
Merge branch 'sm/show-superproject-while-conflicted'
A corner-case bugfix.
* sm/show-superproject-while-conflicted:
rev-parse: --show-superproject-working-tree should work during a merge
Junio C Hamano [Fri, 19 Oct 2018 04:34:04 +0000 (13:34 +0900)]
Merge branch 'jt/fetch-tips-in-partial-clone'
"git fetch $repo $object" in a partial clone did not correctly
fetch the asked-for object that is referenced by an object in
promisor packfile, which has been fixed.
* jt/fetch-tips-in-partial-clone:
fetch: in partial clone, check presence of targets
connected: document connectivity in partial clones
Junio C Hamano [Fri, 19 Oct 2018 04:34:03 +0000 (13:34 +0900)]
Merge branch 'nd/status-refresh-progress'
"git status" learns to show progress bar when refreshing the index
takes a long time.
* nd/status-refresh-progress:
status: show progress bar if refreshing the index takes too long
Junio C Hamano [Fri, 19 Oct 2018 04:34:03 +0000 (13:34 +0900)]
Merge branch 'bp/read-cache-parallel'
A new extension to the index file has been introduced, which allows
the file to be read in parallel.
* bp/read-cache-parallel:
read-cache: load cache entries on worker threads
ieot: add Index Entry Offset Table (IEOT) extension
read-cache: load cache extensions on a worker thread
config: add new index.threads config setting
eoie: add End of Index Entry (EOIE) extension
read-cache: clean up casting and byte decoding
read-cache.c: optimize reading index format v4
Junio C Hamano [Fri, 19 Oct 2018 04:34:03 +0000 (13:34 +0900)]
Merge branch 'bp/rename-test-env-var'
Some environment variables that control the runtime options of Git
used during tests are getting renamed for consistency.
* bp/rename-test-env-var:
t0000: do not get self-test disrupted by environment warnings
preload-index: update GIT_FORCE_PRELOAD_TEST support
read-cache: update TEST_GIT_INDEX_VERSION support
fsmonitor: update GIT_TEST_FSMONITOR support
preload-index: use git_env_bool() not getenv() for customization
t/README: correct spelling of "uncommon"
Junio C Hamano [Fri, 19 Oct 2018 04:34:02 +0000 (13:34 +0900)]
Merge branch 'ss/wt-status-committable'
Code clean-up in the internal machinery used by "git status" and
"git commit --dry-run".
* ss/wt-status-committable:
roll wt_status_state into wt_status and populate in the collect phase
wt-status.c: set the committable flag in the collect phase
t7501: add test of "commit --dry-run --short"
wt-status: rename commitable to committable
wt-status.c: move has_unmerged earlier in the file
Junio C Hamano [Fri, 19 Oct 2018 04:34:02 +0000 (13:34 +0900)]
Merge branch 'nd/the-index'
Various codepaths in the core-ish part learn to work on an
arbitrary in-core index structure, not necessarily the default
instance "the_index".
* nd/the-index: (23 commits)
revision.c: reduce implicit dependency the_repository
revision.c: remove implicit dependency on the_index
ws.c: remove implicit dependency on the_index
tree-diff.c: remove implicit dependency on the_index
submodule.c: remove implicit dependency on the_index
line-range.c: remove implicit dependency on the_index
userdiff.c: remove implicit dependency on the_index
rerere.c: remove implicit dependency on the_index
sha1-file.c: remove implicit dependency on the_index
patch-ids.c: remove implicit dependency on the_index
merge.c: remove implicit dependency on the_index
merge-blobs.c: remove implicit dependency on the_index
ll-merge.c: remove implicit dependency on the_index
diff-lib.c: remove implicit dependency on the_index
read-cache.c: remove implicit dependency on the_index
diff.c: remove implicit dependency on the_index
grep.c: remove implicit dependency on the_index
diff.c: remove the_index dependency in textconv() functions
blame.c: rename "repo" argument to "r"
combine-diff.c: remove implicit dependency on the_index
...
Junio C Hamano [Fri, 19 Oct 2018 04:34:01 +0000 (13:34 +0900)]
Merge branch 'nd/complete-fetch-multiple-args'
Teach bash completion that "git fetch --multiple" only takes remote
names as arguments and no refspecs.
* nd/complete-fetch-multiple-args:
completion: support "git fetch --multiple"
Derrick Stolee [Thu, 18 Oct 2018 17:24:40 +0000 (10:24 -0700)]
commit-reach: fix first-parent heuristic
The algorithm in can_all_from_reach_with_flags() performs a depth-
first-search, terminated by generation number, intending to use
a hueristic that "important" commits are found in the first-parent
history. This heuristic is valuable in scenarios like fetch
negotiation.
However, there is a problem! After the search finds a target commit,
it should pop all commits off the stack and mark them as "can reach".
This logic is incorrect, so the algorithm instead walks all reachable
commits above the generation-number cutoff.
The existing algorithm is still an improvement over the previous
algorithm, as the worst-case complexity went from quadratic to linear.
The performance measurement at the time was good, but not dramatic.
By fixing this heuristic, we reduce the number of walked commits.
We can also re-run the performance tests from commit
4fbcca4e
"commit-reach: make can_all_from_reach... linear".
Performance was measured on the Linux repository using
'test-tool reach can_all_from_reach'. The input included rows seeded by
tag values. The "small" case included X-rows as v4.[0-9]* and Y-rows as
v3.[0-9]*. This mimics a (very large) fetch that says "I have all major
v3 releases and want all major v4 releases." The "large" case included
X-rows as "v4.*" and Y-rows as "v3.*". This adds all release-candidate
tags to the set, which does not greatly increase the number of objects
that are considered, but does increase the number of 'from' commits,
demonstrating the quadratic nature of the previous code.
Small Case:
4fbcca4e~1: 0.85 s
4fbcca4e: 0.26 s (num_walked: 1,011,035)
HEAD: 0.14 s (num_walked: 8,601)
Large Case:
4fbcca4e~1: 24.0 s
4fbcca4e: 0.12 s (num_walked: 503,925)
HEAD: 0.06 s (num_walked: 217,243)
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Olga Telezhnaya [Thu, 18 Oct 2018 07:28:54 +0000 (07:28 +0000)]
ref-filter: free item->value and item->value->s
Release item->value.
Initialize item->value->s dynamically and then release its resources.
Release some local variables.
Final goal of this patch is to reduce number of memory leaks.
Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Olga Telezhnaya [Thu, 18 Oct 2018 07:28:54 +0000 (07:28 +0000)]
ls-remote: release memory instead of UNLEAK
Use ref_array_clear() to release memory instead of UNLEAK macros.
Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Olga Telezhnaya [Thu, 18 Oct 2018 07:28:54 +0000 (07:28 +0000)]
ref-filter: free memory from used_atom
Release memory from used_atom variable for reducing number of memory
leaks.
Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Carlo Marcelo Arenas Belón [Thu, 18 Oct 2018 18:59:20 +0000 (11:59 -0700)]
multi-pack-index: avoid dead store for struct progress
it is initialized unconditionally by a call to start_progress
below.
Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Carlo Marcelo Arenas Belón [Thu, 18 Oct 2018 18:46:04 +0000 (11:46 -0700)]
unpack-trees: avoid dead store for struct progress
it is unconditionally initialized a few lines below
Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Thu, 18 Oct 2018 07:05:22 +0000 (03:05 -0400)]
config.mak.dev: enable -Wunused-function
We explicitly omitted -Wunused-function when we added
-Wextra, but there is no need: the current code compiles
cleanly with it. And it's worth having, since it can let you
know when there are cascading effects from a cleanup (e.g.,
deleting one function lets you delete its static helpers).
There are cases where we may need an unused function to
exist, but we can handle these easily:
- macro-generated code like commit-slab; there we have the
MAYBE_UNUSED annotation to silence the compiler
- conditional compilation, where we may or may not need a
static helper. These generally fall into one of two
categories:
- the call should not be conditional, but rather the
function body itself should be (and may just be a
no-op on one side of the #if). That keeps the
conditional pollution out of the main code.
- call-chains of static helpers should all be in the
same #if block, so they are all-or-nothing
And if there's some case that doesn't cover, we still
have MAYBE_UNUSED as a fallback.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Derrick Stolee [Wed, 17 Oct 2018 13:00:34 +0000 (06:00 -0700)]
ci: add optional test variables
The commit-graph and multi-pack-index features introduce optional
data structures that are not required for normal Git operations.
It is important to run the normal test suite without them enabled,
but it is helpful to also run the test suite using them.
Our continuous integration scripts include a second test stage that
runs with optional GIT_TEST_* variables enabled. Add the following
two variables to that stage:
GIT_TEST_COMMIT_GRAPH
GIT_TEST_MULTI_PACK_INDEX
This will slow down the operation, as we build a commit-graph file
after every 'git commit' operation and build a multi-pack-index
during every 'git repack' operation. However, it is important that
future changes are compatible with these features.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Ramsay Jones [Wed, 17 Oct 2018 22:13:26 +0000 (23:13 +0100)]
headers: normalize the spelling of some header guards
Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Matthew DeVore [Thu, 18 Oct 2018 00:39:15 +0000 (17:39 -0700)]
list-objects: support for skipping tree traversal
The tree:0 filter does not need to traverse the trees that it has
filtered out, so optimize list-objects and list-objects-filter to skip
traversing the trees entirely. Before this patch, we iterated over all
children of the tree, and did nothing for all of them, which was
wasteful.
Signed-off-by: Matthew DeVore <matvore@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Wed, 17 Oct 2018 09:25:07 +0000 (05:25 -0400)]
test-tool: show tool list on error
Before we switched to one big test-tool binary, if you
forgot the name of a tool, you could use tab-completion in
the shell to get a hint. But these days, all you get is:
$ t/helper/test-tool approxidate
fatal: There is no test named 'approxidate'
and you're stuck reading the source code to find it. Let's
print a list of the available tools in this case.
Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Saulius Gurklys [Wed, 17 Oct 2018 05:37:41 +0000 (08:37 +0300)]
doc: fix small typo in git show-branch
Fix small typo as in document <glob> is used not <globs>.
Signed-off-by: Saulius Gurklys <s4uliu5@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Stefan Beller [Tue, 16 Oct 2018 23:45:50 +0000 (16:45 -0700)]
builtin/submodule--helper: remove debugging leftover tracing
I noticed
74d4731da1 (submodule--helper: replace connect-gitdir-workingtree
by ensure-core-worktree, 2018-08-13) had two leftover debugging statements
when reading The coverage report [1]. Remove them.
https://public-inbox.org/git/
e30a9c05-87d8-1f2b-182c-
6d6a5fefe43c@gmail.com/
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Tao Qingyun [Tue, 16 Oct 2018 14:19:20 +0000 (22:19 +0800)]
branch: trivial style fix
Signed-off-by: Tao Qingyun <taoqy@ls-a.me>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Thu, 18 Oct 2018 02:07:17 +0000 (11:07 +0900)]
Revert "subtree: make install targets depend on build targets"
This reverts commit
744f7c4c314dc0e7816ac05520e8358c8318187a.
These targets do depend on the fact that each prereq is explicitly
listed via their use of $^, which I failed to notice, and broke the
build.
Tao Qingyun [Tue, 16 Oct 2018 14:54:28 +0000 (22:54 +0800)]
builtin/branch.c: remove useless branch_get
branch_get sometimes returns current_branch, which can be NULL (e.g., if
you're on a detached HEAD). Try:
$ git branch HEAD
fatal: no such branch 'HEAD'
$ git branch ''
fatal: no such branch ''
However, it seems weird that we'd check those cases here (and provide
such lousy messages). And indeed, dropping that and letting us
eventually hit create_branch() gives a much better message:
$ git branch HEAD
fatal: 'HEAD' is not a valid branch name.
$ git branch ''
fatal: '' is not a valid branch name.
Signed-off-by: Tao Qingyun <taoqy@ls-a.me>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Christian Hesse [Tue, 16 Oct 2018 07:56:24 +0000 (09:56 +0200)]
subtree: make install targets depend on build targets
Now that we have build targets let the install targets depend on them.
Also make the targets phony.
Signed-off-by: Christian Hesse <mail@eworm.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Rasmus Villemoes [Tue, 16 Oct 2018 07:39:23 +0000 (09:39 +0200)]
send-email: also pick up cc addresses from -by trailers
When rerolling a patch series, including various Reviewed-by etc. that
may have come in, it is quite convenient to have git-send-email
automatically cc those people.
So pick up any *-by lines, with a new suppression category 'misc-by',
but special-case Signed-off-by, since that already has its own
suppression category. It seems natural to make 'misc-by' implied by
'body'.
Based-on-patch-by: Joe Perches <joe@perches.com>
Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Tue, 16 Oct 2018 07:21:17 +0000 (16:21 +0900)]
Fourth batch for 2.20
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Tue, 16 Oct 2018 07:16:09 +0000 (16:16 +0900)]
Merge branch 'sf/complete-stash-list'
The completion script (in contrib/) learned to complete a handful of
options "git stash list" command takes.
* sf/complete-stash-list:
git-completion.bash: add completion for stash list
Junio C Hamano [Tue, 16 Oct 2018 07:16:09 +0000 (16:16 +0900)]
Merge branch 'mw/doc-typofixes'
Typofixes.
* mw/doc-typofixes:
docs: typo: s/isimilar/similar/
docs: graph: remove unnecessary `graph_update()' call
docs: typo: s/go/to/
Junio C Hamano [Tue, 16 Oct 2018 07:16:08 +0000 (16:16 +0900)]
Merge branch 'js/mingw-wants-vista-or-above'
The minimum version of Windows supported by Windows port fo Git is
now set to Vista.
* js/mingw-wants-vista-or-above:
mingw: bump the minimum Windows version to Vista
mingw: set _WIN32_WINNT explicitly for Git for Windows
compat/poll: prepare for targeting Windows Vista
Junio C Hamano [Tue, 16 Oct 2018 07:16:08 +0000 (16:16 +0900)]
Merge branch 'rs/sequencer-oidset-insert-avoids-dups'
Code clean-up.
* rs/sequencer-oidset-insert-avoids-dups:
sequencer: use return value of oidset_insert()
Junio C Hamano [Tue, 16 Oct 2018 07:16:07 +0000 (16:16 +0900)]
Merge branch 'jk/oideq-hasheq-cleanup'
Code clean-up.
* jk/oideq-hasheq-cleanup:
more oideq/hasheq conversions
Junio C Hamano [Tue, 16 Oct 2018 07:16:07 +0000 (16:16 +0900)]
Merge branch 'ma/mailing-list-address-in-git-help'
Doc update.
* ma/mailing-list-address-in-git-help:
git doc: direct bug reporters to mailing list archive
Junio C Hamano [Tue, 16 Oct 2018 07:16:07 +0000 (16:16 +0900)]
Merge branch 'nd/packobjectshook-doc-fix'
Doc update.
* nd/packobjectshook-doc-fix:
config.txt: correct the note about uploadpack.packObjectsHook
Junio C Hamano [Tue, 16 Oct 2018 07:16:06 +0000 (16:16 +0900)]
Merge branch 'rt/rebase-typofix'
Typofix.
* rt/rebase-typofix:
git-rebase.sh: fix typos in error messages
Junio C Hamano [Tue, 16 Oct 2018 07:16:06 +0000 (16:16 +0900)]
Merge branch 'ma/t1400-undebug-test'
Test fix.
* ma/t1400-undebug-test:
t1400: drop debug `echo` to actually execute `test`
Junio C Hamano [Tue, 16 Oct 2018 07:16:05 +0000 (16:16 +0900)]
Merge branch 'ma/commit-graph-docs'
Doc update.
* ma/commit-graph-docs:
Doc: refer to the "commit-graph file" with dash
git-commit-graph.txt: refer to "*commit*-graph file"
git-commit-graph.txt: typeset more in monospace
git-commit-graph.txt: fix bullet lists
Junio C Hamano [Tue, 16 Oct 2018 07:16:05 +0000 (16:16 +0900)]
Merge branch 'dz/credential-doc-url-matching-rules'
Doc update.
* dz/credential-doc-url-matching-rules:
doc: clarify gitcredentials path component matching