]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
6 years agoMerge branch 'jk/index-pack-dupfix'
Junio C Hamano [Fri, 14 Feb 2020 20:54:24 +0000 (12:54 -0800)] 
Merge branch 'jk/index-pack-dupfix'

The index-pack code now diagnoses a bad input packstream that
records the same object twice when it is used as delta base; the
code used to declare a software bug when encountering such an
input, but it is an input error.

* jk/index-pack-dupfix:
  index-pack: downgrade twice-resolved REF_DELTA to die()

6 years agoMerge branch 'jk/alloc-cleanups'
Junio C Hamano [Fri, 14 Feb 2020 20:54:23 +0000 (12:54 -0800)] 
Merge branch 'jk/alloc-cleanups'

Misc code clean-ups.

* jk/alloc-cleanups:
  tree-walk.c: break circular dependency with unpack-trees
  traverse_trees(): use stack array for name entries
  walker_fetch(): avoid raw array length computation
  normalize_path_copy(): document "dst" size expectations

6 years agoMerge branch 'jh/notes-fanout-fix'
Junio C Hamano [Fri, 14 Feb 2020 20:54:23 +0000 (12:54 -0800)] 
Merge branch 'jh/notes-fanout-fix'

The code to automatically shrink the fan-out in the notes tree had
an off-by-one bug, which has been killed.

* jh/notes-fanout-fix:
  notes.c: fix off-by-one error when decreasing notes fanout
  t3305: check notes fanout more carefully and robustly

6 years agoMerge branch 'pk/status-of-uncloned-submodule'
Junio C Hamano [Fri, 14 Feb 2020 20:54:23 +0000 (12:54 -0800)] 
Merge branch 'pk/status-of-uncloned-submodule'

The way "git submodule status" reports an initialized but not yet
populated submodule has not been reimplemented correctly when a
part of the "git submodule" command was rewritten in C, which has
been corrected.

* pk/status-of-uncloned-submodule:
  t7400: testcase for submodule status on unregistered inner git repos
  submodule: fix status of initialized but not cloned submodules
  t7400: add a testcase for submodule status on empty dirs

6 years agoMerge branch 'mt/use-passed-repo-more-in-funcs'
Junio C Hamano [Fri, 14 Feb 2020 20:54:22 +0000 (12:54 -0800)] 
Merge branch 'mt/use-passed-repo-more-in-funcs'

Some codepaths were given a repository instance as a parameter to
work in the repository, but passed the_repository instance to its
callees, which has been cleaned up (somewhat).

* mt/use-passed-repo-more-in-funcs:
  sha1-file: allow check_object_signature() to handle any repo
  sha1-file: pass git_hash_algo to hash_object_file()
  sha1-file: pass git_hash_algo to write_object_file_prepare()
  streaming: allow open_istream() to handle any repo
  pack-check: use given repo's hash_algo at verify_packfile()
  cache-tree: use given repo's hash_algo at verify_one()
  diff: make diff_populate_filespec() honor its repo argument

6 years agoMerge branch 'jk/diff-honor-wserrhighlight-in-plumbing'
Junio C Hamano [Fri, 14 Feb 2020 20:54:22 +0000 (12:54 -0800)] 
Merge branch 'jk/diff-honor-wserrhighlight-in-plumbing'

The diff-* plumbing family of subcommands now pay attention to the
diff.wsErrorHighlight configuration, which has been ignored before;
this allows "git add -p" to also show the whitespace problems to
the end user.

* jk/diff-honor-wserrhighlight-in-plumbing:
  diff: move diff.wsErrorHighlight to "basic" config

6 years agoMerge branch 'ds/sparse-checkout-harden'
Junio C Hamano [Fri, 14 Feb 2020 20:54:22 +0000 (12:54 -0800)] 
Merge branch 'ds/sparse-checkout-harden'

Some rough edges in the sparse-checkout feature, especially around
the cone mode, have been cleaned up.

* ds/sparse-checkout-harden:
  sparse-checkout: fix cone mode behavior mismatch
  sparse-checkout: improve docs around 'set' in cone mode
  sparse-checkout: escape all glob characters on write
  sparse-checkout: use C-style quotes in 'list' subcommand
  sparse-checkout: unquote C-style strings over --stdin
  sparse-checkout: write escaped patterns in cone mode
  sparse-checkout: properly match escaped characters
  sparse-checkout: warn on globs in cone patterns
  sparse-checkout: detect short patterns
  sparse-checkout: cone mode does not recognize "**"
  sparse-checkout: fix documentation typo for core.sparseCheckoutCone
  clone: fix --sparse option with URLs
  sparse-checkout: create leading directories
  t1091: improve here-docs
  t1091: use check_files to reduce boilerplate

6 years agoMerge branch 'ld/p4-cleanup-processes'
Junio C Hamano [Fri, 14 Feb 2020 20:54:22 +0000 (12:54 -0800)] 
Merge branch 'ld/p4-cleanup-processes'

p4 updates.

* ld/p4-cleanup-processes:
  git-p4: avoid leak of file handle when cloning
  git-p4: check for access to remote host earlier
  git-p4: cleanup better on error exit
  git-p4: create helper function importRevisions()
  git-p4: disable some pylint warnings, to get pylint output to something manageable
  git-p4: add P4CommandException to report errors talking to Perforce
  git-p4: make closeStreams() idempotent

6 years agoMerge branch 'jt/connectivity-check-optim-in-partial-clone'
Junio C Hamano [Fri, 14 Feb 2020 20:54:21 +0000 (12:54 -0800)] 
Merge branch 'jt/connectivity-check-optim-in-partial-clone'

Unneeded connectivity check is now disabled in a partial clone when
fetching into it.

* jt/connectivity-check-optim-in-partial-clone:
  fetch: forgo full connectivity check if --filter
  connected: verify promisor-ness of partial clone

6 years agoMerge branch 'jk/get-oid-error-message-i18n'
Junio C Hamano [Fri, 14 Feb 2020 20:54:21 +0000 (12:54 -0800)] 
Merge branch 'jk/get-oid-error-message-i18n'

A low-level API function get_oid(), that accepts various ways to
name an object, used to issue end-user facing error messages
without l10n, which has been updated to be translatable.

* jk/get-oid-error-message-i18n:
  sha1-name: mark get_oid() error messages for translation
  t1506: drop space after redirection operator
  t1400: avoid "test" string comparisons

6 years agoMerge branch 'ag/edit-todo-drop-check'
Junio C Hamano [Fri, 14 Feb 2020 20:54:21 +0000 (12:54 -0800)] 
Merge branch 'ag/edit-todo-drop-check'

Allow the rebase.missingCommitsCheck configuration to kick in when
"rebase --edit-todo" and "rebase --continue" restarts the procedure.

* ag/edit-todo-drop-check:
  rebase-interactive: warn if commit is dropped with `rebase --edit-todo'
  sequencer: move check_todo_list_from_file() to rebase-interactive.c

6 years agoMerge branch 'dl/test-must-fail-fixes-2'
Junio C Hamano [Fri, 14 Feb 2020 20:54:21 +0000 (12:54 -0800)] 
Merge branch 'dl/test-must-fail-fixes-2'

Test updates.

* dl/test-must-fail-fixes-2:
  t4124: only mark git command with test_must_fail
  t3507: use test_path_is_missing()
  t3507: fix indentation
  t3504: do check for conflict marker after failed cherry-pick
  t3419: stop losing return code of git command
  t3415: increase granularity of test_auto_{fixup,squash}()
  t3415: stop losing return codes of git commands
  t3310: extract common notes_merge_files_gone()
  t3030: use test_path_is_missing()
  t2018: replace "sha" with "oid"
  t2018: don't lose return code of git commands
  t2018: teach do_checkout() to accept `!` arg
  t2018: be more discerning when checking for expected exit codes
  t2018: improve style of if-statement
  t2018: add space between function name and ()
  t2018: remove trailing space from test description

6 years agoMerge branch 'ag/rebase-avoid-unneeded-checkout'
Junio C Hamano [Fri, 14 Feb 2020 20:54:20 +0000 (12:54 -0800)] 
Merge branch 'ag/rebase-avoid-unneeded-checkout'

"git rebase -i" (and friends) used to unnecessarily check out the
tip of the branch to be rebased, which has been corrected.

* ag/rebase-avoid-unneeded-checkout:
  rebase -i: stop checking out the tip of the branch to rebase

6 years agoMerge branch 'kw/fsmonitor-watchman-racefix'
Junio C Hamano [Fri, 14 Feb 2020 20:54:20 +0000 (12:54 -0800)] 
Merge branch 'kw/fsmonitor-watchman-racefix'

A new version of fsmonitor-watchman hook has been introduced, to
avoid races.

* kw/fsmonitor-watchman-racefix:
  fsmonitor: update documentation for hook version and watchman hooks
  fsmonitor: add fsmonitor hook scripts for version 2
  fsmonitor: handle version 2 of the hooks that will use opaque token
  fsmonitor: change last update timestamp on the index_state to opaque token

6 years agoMerge branch 'js/rebase-i-with-colliding-hash'
Junio C Hamano [Fri, 14 Feb 2020 20:54:20 +0000 (12:54 -0800)] 
Merge branch 'js/rebase-i-with-colliding-hash'

"git rebase -i" identifies existing commits in its todo file with
their abbreviated object name, which could become ambigous as it
goes to create new commits, and has a mechanism to avoid ambiguity
in the main part of its execution.  A few other cases however were
not covered by the protection against ambiguity, which has been
corrected.

* js/rebase-i-with-colliding-hash:
  rebase -i: also avoid SHA-1 collisions with missingCommitsCheck
  rebase -i: re-fix short SHA-1 collision
  parse_insn_line(): improve error message when parsing failed

6 years agoMerge branch 'mt/threaded-grep-in-object-store'
Junio C Hamano [Fri, 14 Feb 2020 20:54:20 +0000 (12:54 -0800)] 
Merge branch 'mt/threaded-grep-in-object-store'

Traditionally, we avoided threaded grep while searching in objects
(as opposed to files in the working tree) as accesses to the object
layer is not thread-safe.  This limitation is getting lifted.

* mt/threaded-grep-in-object-store:
  grep: use no. of cores as the default no. of threads
  grep: move driver pre-load out of critical section
  grep: re-enable threads in non-worktree case
  grep: protect packed_git [re-]initialization
  grep: allow submodule functions to run in parallel
  submodule-config: add skip_if_read option to repo_read_gitmodules()
  grep: replace grep_read_mutex by internal obj read lock
  object-store: allow threaded access to object reading
  replace-object: make replace operations thread-safe
  grep: fix racy calls in grep_objects()
  grep: fix race conditions at grep_submodule()
  grep: fix race conditions on userdiff calls

6 years agoMerge branch 'jn/promote-proto2-to-default'
Junio C Hamano [Fri, 14 Feb 2020 20:54:19 +0000 (12:54 -0800)] 
Merge branch 'jn/promote-proto2-to-default'

The transport protocol version 2 becomes the default one.

* jn/promote-proto2-to-default:
  fetch: default to protocol version 2
  protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION
  test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate
  config doc: protocol.version is not experimental
  fetch test: use more robust test for filtered objects

6 years agoMerge branch 'jk/packfile-reuse-cleanup'
Junio C Hamano [Fri, 14 Feb 2020 20:54:19 +0000 (12:54 -0800)] 
Merge branch 'jk/packfile-reuse-cleanup'

The way "git pack-objects" reuses objects stored in existing pack
to generate its result has been improved.

* jk/packfile-reuse-cleanup:
  pack-bitmap: don't rely on bitmap_git->reuse_objects
  pack-objects: add checks for duplicate objects
  pack-objects: improve partial packfile reuse
  builtin/pack-objects: introduce obj_is_packed()
  pack-objects: introduce pack.allowPackReuse
  csum-file: introduce hashfile_total()
  pack-bitmap: simplify bitmap_has_oid_in_uninteresting()
  pack-bitmap: uninteresting oid can be outside bitmapped packfile
  pack-bitmap: introduce bitmap_walk_contains()
  ewah/bitmap: introduce bitmap_word_alloc()
  packfile: expose get_delta_base()
  builtin/pack-objects: report reused packfile objects

6 years agoMerge branch 'hw/advice-add-nothing'
Junio C Hamano [Fri, 14 Feb 2020 20:54:19 +0000 (12:54 -0800)] 
Merge branch 'hw/advice-add-nothing'

Two help messages given when "git add" notices the user gave it
nothing to add have been updated to use advise() API.

* hw/advice-add-nothing:
  add: change advice config variables used by the add API
  add: use advise function to display hints

6 years agoMerge branch 'js/convert-typofix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:34 +0000 (12:42 -0800)] 
Merge branch 'js/convert-typofix' into maint

Typofix.

* js/convert-typofix:
  convert: fix typo

6 years agoMerge branch 'js/ci-squelch-doc-warning' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:33 +0000 (12:42 -0800)] 
Merge branch 'js/ci-squelch-doc-warning' into maint

Squelch unhelpful warning message during documentation build.

* js/ci-squelch-doc-warning:
  ci: ignore rubygems warning in the "Documentation" job

6 years agoMerge branch 'jb/multi-pack-index-docfix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:33 +0000 (12:42 -0800)] 
Merge branch 'jb/multi-pack-index-docfix' into maint

Doc fix.

* jb/multi-pack-index-docfix:
  pack-format: correct multi-pack-index description

6 years agoMerge branch 'ma/diff-doc-clarify-regexp-example' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:33 +0000 (12:42 -0800)] 
Merge branch 'ma/diff-doc-clarify-regexp-example' into maint

Doc clarification.

* ma/diff-doc-clarify-regexp-example:
  diff-options.txt: avoid "regex" overload in example

6 years agoMerge branch 'ms/doc-bundle-format' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:32 +0000 (12:42 -0800)] 
Merge branch 'ms/doc-bundle-format' into maint

Technical details of the bundle format has been documented.
I think this is in a good enough shape.

* ms/doc-bundle-format:
  doc: describe Git bundle format

6 years agoMerge branch 'es/submodule-fetch-message-fix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:32 +0000 (12:42 -0800)] 
Merge branch 'es/submodule-fetch-message-fix' into maint

Error message fix.

* es/submodule-fetch-message-fix:
  submodule: add newline on invalid submodule error

6 years agoMerge branch 'jb/parse-options-message-fix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:32 +0000 (12:42 -0800)] 
Merge branch 'jb/parse-options-message-fix' into maint

Error message fix.

* jb/parse-options-message-fix:
  parse-options: lose an unnecessary space in an error message

6 years agoMerge branch 'ma/filter-branch-doc-caret' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:32 +0000 (12:42 -0800)] 
Merge branch 'ma/filter-branch-doc-caret' into maint

Doc mark-up updates.

* ma/filter-branch-doc-caret:
  git-filter-branch.txt: wrap "maths" notation in backticks

6 years agoMerge branch 'km/submodule-doc-use-sm-path' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:32 +0000 (12:42 -0800)] 
Merge branch 'km/submodule-doc-use-sm-path' into maint

Docfix.

* km/submodule-doc-use-sm-path:
  submodule foreach: replace $path with $sm_path in example

6 years agoMerge branch 'pb/do-not-recurse-grep-no-index' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:31 +0000 (12:42 -0800)] 
Merge branch 'pb/do-not-recurse-grep-no-index' into maint

"git grep --no-index" should not get affected by the contents of
the .gitmodules file but when "--recurse-submodules" is given or
the "submodule.recurse" variable is set, it did.  Now these
settings are ignored in the "--no-index" mode.

* pb/do-not-recurse-grep-no-index:
  grep: ignore --recurse-submodules if --no-index is given

6 years agoMerge branch 'jt/t5616-robustify' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:31 +0000 (12:42 -0800)] 
Merge branch 'jt/t5616-robustify' into maint

Futureproofing a test not to depend on the current implementation
detail.

* jt/t5616-robustify:
  t5616: make robust to delta base change

6 years agoMerge branch 'en/fill-directory-fixes-more' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:31 +0000 (12:42 -0800)] 
Merge branch 'en/fill-directory-fixes-more' into maint

Corner case bugs in "git clean" that stems from a (necessarily for
performance reasons) awkward calling convention in the directory
enumeration API has been corrected.

* en/fill-directory-fixes-more:
  dir: point treat_leading_path() warning to the right place
  dir: restructure in a way to avoid passing around a struct dirent
  dir: treat_leading_path() and read_directory_recursive(), round 2
  clean: demonstrate a bug with pathspecs

6 years agoMerge branch 'bc/misconception-doc' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:31 +0000 (12:42 -0800)] 
Merge branch 'bc/misconception-doc' into maint

Doc updates.

* bc/misconception-doc:
  docs: mention when increasing http.postBuffer is valuable
  doc: dissuade users from trying to ignore tracked files

6 years agoMerge branch 'bc/author-committer-doc' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:31 +0000 (12:42 -0800)] 
Merge branch 'bc/author-committer-doc' into maint

Clarify documentation on committer/author identities.

* bc/author-committer-doc:
  doc: provide guidance on user.name format
  docs: expand on possible and recommended user config options
  doc: move author and committer information to git-commit(1)

6 years agoMerge branch 'ds/refmap-doc' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:30 +0000 (12:42 -0800)] 
Merge branch 'ds/refmap-doc' into maint

"git fetch --refmap=" option has got a better documentation.

* ds/refmap-doc:
  fetch: document and test --refmap=""

6 years agoMerge branch 'bc/actualmente' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:30 +0000 (12:42 -0800)] 
Merge branch 'bc/actualmente' into maint

Doc grammo fix.

* bc/actualmente:
  docs: use "currently" for the present time

6 years agoMerge branch 'rt/submodule-i18n' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:30 +0000 (12:42 -0800)] 
Merge branch 'rt/submodule-i18n' into maint

Comments update.

* rt/submodule-i18n:
  submodule.c: mark more strings for translation

6 years agoMerge branch 'jk/test-fixes' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:29 +0000 (12:42 -0800)] 
Merge branch 'jk/test-fixes' into maint

Test fixes.

* jk/test-fixes:
  t7800: don't rely on reuse_worktree_file()
  t4018: drop "debugging" cat from hunk-header tests

6 years agoMerge branch 'jk/asan-build-fix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:29 +0000 (12:42 -0800)] 
Merge branch 'jk/asan-build-fix' into maint

Work around test breakages caused by custom regex engine used in
libasan, when address sanitizer is used with more recent versions
of gcc and clang.

* jk/asan-build-fix:
  Makefile: use compat regex with SANITIZE=address

6 years agoMerge branch 'ds/sparse-cone' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:29 +0000 (12:42 -0800)] 
Merge branch 'ds/sparse-cone' into maint

The code recently added in this release to move to the entry beyond
the ones in the same directory in the index in the sparse-cone mode
did not count the number of entries to skip over incorrectly, which
has been corrected.

* ds/sparse-cone:
  .mailmap: fix GGG authoship screwup
  unpack-trees: correctly compute result count

6 years agoMerge branch 'nd/switch-and-restore' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:29 +0000 (12:42 -0800)] 
Merge branch 'nd/switch-and-restore' into maint

"git restore --staged" did not correctly update the cache-tree
structure, resulting in bogus trees to be written afterwards, which
has been corrected.

* nd/switch-and-restore:
  restore: invalidate cache-tree when removing entries with --staged

6 years agoMerge branch 'jk/no-flush-upon-disconnecting-slrpc-transport' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:28 +0000 (12:42 -0800)] 
Merge branch 'jk/no-flush-upon-disconnecting-slrpc-transport' into maint

Reduce unnecessary round-trip when running "ls-remote" over the
stateless RPC mechanism.

* jk/no-flush-upon-disconnecting-slrpc-transport:
  transport: don't flush when disconnecting stateless-rpc helper

6 years agoMerge branch 'hw/tutorial-favor-switch-over-checkout' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:28 +0000 (12:42 -0800)] 
Merge branch 'hw/tutorial-favor-switch-over-checkout' into maint

Complete an update to tutorial that encourages "git switch" over
"git checkout" that was done only half-way.

* hw/tutorial-favor-switch-over-checkout:
  doc/gitcore-tutorial: fix prose to match example command

6 years agoMerge branch 'es/unpack-trees-oob-fix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:27 +0000 (12:42 -0800)] 
Merge branch 'es/unpack-trees-oob-fix' into maint

The code that tries to skip over the entries for the paths in a
single directory using the cache-tree was not careful enough
against corrupt index file.

* es/unpack-trees-oob-fix:
  unpack-trees: watch for out-of-range index position

6 years agoMerge branch 'bc/run-command-nullness-after-free-fix' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:27 +0000 (12:42 -0800)] 
Merge branch 'bc/run-command-nullness-after-free-fix' into maint

C pedantry ;-) fix.

* bc/run-command-nullness-after-free-fix:
  run-command: avoid undefined behavior in exists_in_PATH

6 years agoMerge branch 'en/string-list-can-be-custom-sorted' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:27 +0000 (12:42 -0800)] 
Merge branch 'en/string-list-can-be-custom-sorted' into maint

API-doc update.

* en/string-list-can-be-custom-sorted:
  string-list: note in docs that callers can specify sorting function

6 years agoMerge branch 'jt/sha1-file-remove-oi-skip-cached' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:27 +0000 (12:42 -0800)] 
Merge branch 'jt/sha1-file-remove-oi-skip-cached' into maint

has_object_file() said "no" given an object registered to the
system via pretend_object_file(), making it inconsistent with
read_object_file(), causing lazy fetch to attempt fetching an
empty tree from promisor remotes.

* jt/sha1-file-remove-oi-skip-cached:
  sha1-file: remove OBJECT_INFO_SKIP_CACHED

6 years agoMerge branch 'hw/commit-advise-while-rejecting' into maint
Junio C Hamano [Fri, 14 Feb 2020 20:42:27 +0000 (12:42 -0800)] 
Merge branch 'hw/commit-advise-while-rejecting' into maint

"git commit" gives output similar to "git status" when there is
nothing to commit, but without honoring the advise.statusHints
configuration variable, which has been corrected.

* hw/commit-advise-while-rejecting:
  commit: honor advice.statusHints when rejecting an empty commit

6 years agopack-objects: support filters with bitmaps
Jeff King [Fri, 14 Feb 2020 18:22:41 +0000 (13:22 -0500)] 
pack-objects: support filters with bitmaps

Just as rev-list recently learned to combine filters and bitmaps, let's
do the same for pack-objects. The infrastructure is all there; we just
need to pass along our filter options, and the pack-bitmap code will
decide to use bitmaps or not.

This unsurprisingly makes things faster for partial clones of large
repositories (here we're cloning linux.git):

  Test                               HEAD^               HEAD
  ------------------------------------------------------------------------------
  5310.11: simulated partial clone   38.94(37.28+5.87)   11.06(11.27+4.07) -71.6%

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-bitmap: implement BLOB_LIMIT filtering
Jeff King [Fri, 14 Feb 2020 18:22:39 +0000 (13:22 -0500)] 
pack-bitmap: implement BLOB_LIMIT filtering

Just as the previous commit implemented BLOB_NONE, we can support
BLOB_LIMIT filters by looking at the sizes of any blobs in the result
and unsetting their bits as appropriate. This is slightly more expensive
than BLOB_NONE, but still produces a noticeable speedup (these results
are on git.git):

  Test                                         HEAD~2            HEAD
  ------------------------------------------------------------------------------------
  5310.9:  rev-list count with blob:none       1.80(1.77+0.02)   0.22(0.20+0.02) -87.8%
  5310.10: rev-list count with blob:limit=1k   1.99(1.96+0.03)   0.29(0.25+0.03) -85.4%

The implementation is similar to the BLOB_NONE one, with the exception
that we have to go object-by-object while walking the blob-type bitmap
(since we can't mask out the matches, but must look up the size
individually for each blob). The trick with using ctz64() is taken from
show_objects_for_type(), which likewise needs to find individual bits
(but wants to quickly skip over big chunks without blobs).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-bitmap: implement BLOB_NONE filtering
Jeff King [Fri, 14 Feb 2020 18:22:36 +0000 (13:22 -0500)] 
pack-bitmap: implement BLOB_NONE filtering

We can easily support BLOB_NONE filters with bitmaps. Since we know the
types of all of the objects, we just need to clear the result bits of
any blobs.

Note two subtleties in the implementation (which I also called out in
comments):

  - we have to include any blobs that were specifically asked for (and
    not reached through graph traversal) to match the non-bitmap version

  - we have to handle in-pack and "ext_index" objects separately.
    Arguably prepare_bitmap_walk() could be adding these ext_index
    objects to the type bitmaps. But it doesn't for now, so let's match
    the rest of the bitmap code here (it probably wouldn't be an
    efficiency improvement to do so since the cost of extending those
    bitmaps is about the same as our loop here, but it might make the
    code a bit simpler).

Here are perf results for the new test on git.git:

  Test                                    HEAD^             HEAD
  --------------------------------------------------------------------------------
  5310.9: rev-list count with blob:none   1.67(1.62+0.05)   0.22(0.21+0.02) -86.8%

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agobitmap: add bitmap_unset() function
Jeff King [Fri, 14 Feb 2020 18:22:34 +0000 (13:22 -0500)] 
bitmap: add bitmap_unset() function

We've never needed to unset an individual bit in a bitmap until now.
Typically they start with all bits unset and we bitmap_set() them, or we
are applying another bitmap as a mask. But the easiest way to apply an
object filter to a bitmap result will be to unset the individual bits.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorev-list: use bitmap filters for traversal
Jeff King [Fri, 14 Feb 2020 18:22:32 +0000 (13:22 -0500)] 
rev-list: use bitmap filters for traversal

This just passes the filter-options struct to prepare_bitmap_walk().
Since the bitmap code doesn't actually support any filters yet, it will
fallback to the non-bitmap code if any --filter is specified. But this
lets us exercise that rejection code path, as well as getting us ready
to test filters via rev-list when we _do_ support them.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-bitmap: basic noop bitmap filter infrastructure
Jeff King [Fri, 14 Feb 2020 18:22:29 +0000 (13:22 -0500)] 
pack-bitmap: basic noop bitmap filter infrastructure

Currently you can't use object filters with bitmaps, but we plan to
support at least some filters with bitmaps. Let's introduce some
infrastructure that will help us do that:

  - prepare_bitmap_walk() now accepts a list_objects_filter_options
    parameter (which can be NULL for no filtering; all the current
    callers pass this)

  - we'll bail early if the filter is incompatible with bitmaps (just as
    we would if there were no bitmaps at all). Currently all filters are
    incompatible.

  - we'll filter the resulting bitmap; since there are no supported
    filters yet, this is always a noop.

There should be no behavior change yet, but we'll support some actual
filters in a future patch.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorev-list: allow commit-only bitmap traversals
Jeff King [Fri, 14 Feb 2020 18:22:27 +0000 (13:22 -0500)] 
rev-list: allow commit-only bitmap traversals

Ever since we added reachability bitmap support, we've been able to use
it with rev-list to get the full list of objects, like:

  git rev-list --objects --use-bitmap-index --all

But you can't do so without --objects, since we weren't ready to just
show the commits. However, the internals of the bitmap code are mostly
ready for this: they avoid opening up trees when walking to fill in the
bitmaps. We just need to actually pass in the rev_info to
traverse_bitmap_commit_list() so it knows which types to bother
triggering our callback for.

For completeness, the perf test now covers both the existing --objects
case, as well as the new commits-only behavior (the objects one got way
faster when we introduced bitmaps, but obviously isn't improved now).

Here are numbers for linux.git:

  Test                         HEAD^               HEAD
  ------------------------------------------------------------------------
  5310.7: rev-list (commits)   8.29(8.10+0.19)       1.76(1.72+0.04) -78.8%
  5310.8: rev-list (objects)   8.06(7.94+0.12)       8.14(7.94+0.13) +1.0%

That run was cheating a little, as I didn't have any commit-graph in the
repository, and we'd built it by default these days when running git-gc.
Here are numbers with a commit-graph:

  Test                         HEAD^               HEAD
  ------------------------------------------------------------------------
  5310.7: rev-list (commits)   0.70(0.58+0.12)     0.51(0.46+0.04) -27.1%
  5310.8: rev-list (objects)   6.20(6.09+0.10)     6.27(6.16+0.11) +1.1%

Still an improvement, but a lot less impressive.

We could have the perf script remove any commit-graph to show the
out-sized effect, but it probably makes sense to leave it in what would
be a more typical setup.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot5310: factor out bitmap traversal comparison
Jeff King [Fri, 14 Feb 2020 18:22:25 +0000 (13:22 -0500)] 
t5310: factor out bitmap traversal comparison

We check the results of "rev-list --use-bitmap-index" by comparing it to
the same traversal without the bitmap option. However, this is a little
tricky to do because of some output differences (see the included
comment for details). Let's pull this out into a helper function, since
we'll be adding some similar tests.

While we're at it, let's also try to confirm that the bitmap output did
indeed use bitmaps. Since the code internally falls back to the
non-bitmap path in some cases, the tests are at risk of becoming trivial
noops.

This is a bit fragile, as not all outputs will differ (e.g., looking at
only the commits from a fully-bitmapped pack will end up exactly the
same as the normal traversal order, since it also matches the pack
order). So we'll provide an escape hatch by which tests can disable this
check (which should only be used after manually confirming that bitmaps
kicked in).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorev-list: allow bitmaps when counting objects
Jeff King [Fri, 14 Feb 2020 18:22:22 +0000 (13:22 -0500)] 
rev-list: allow bitmaps when counting objects

The prior commit taught "--count --objects" to work without bitmaps. We
should be able to get the same answer much more quickly with bitmaps.

Note that we punt on the max_count case here. This perhaps _could_ be
made to work if we find all of the boundary commits and treat them as
UNINTERESTING, subtracting them (and their reachable objects) from the
set we return. That implies an actual commit traversal, but we'd still
be faster due to avoiding opening up any trees. Given the complexity and
the fact that anyone is unlikely to want this, it makes sense to just
fall back to the non-bitmap case for now.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorev-list: make --count work with --objects
Jeff King [Fri, 14 Feb 2020 18:22:20 +0000 (13:22 -0500)] 
rev-list: make --count work with --objects

The current behavior from "rev-list --count --objects" is nonsensical:
we enumerate all of the objects except commits, but then give a count of
commits. This wasn't planned, and is just what the code happens to do.

Instead, let's give the answer the user almost certainly wanted: the
full count of objects.

Note that there are more complicated cases around cherry-marking, etc.
We'll punt on those for now, but let the user know that we can't produce
an answer (rather than giving them something useless).

We'll test both the new feature as well as a vanilla --count of commits,
since that surprisingly doesn't seem to be covered in the existing
tests.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorev-list: factor out bitmap-optimized routines
Jeff King [Fri, 14 Feb 2020 18:22:18 +0000 (13:22 -0500)] 
rev-list: factor out bitmap-optimized routines

There are a few operations in rev-list that are optimized for bitmaps.
Rather than having the code inline in cmd_rev_list(), let's move them
into helpers. This not only makes the flow of the main function simpler,
but it lets us replace the complex "can we do the optimization?"
conditionals with a series of early returns from the functions. That
also makes it easy to add comments explaining those conditions.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-bitmap: refuse to do a bitmap traversal with pathspecs
Jeff King [Fri, 14 Feb 2020 18:22:16 +0000 (13:22 -0500)] 
pack-bitmap: refuse to do a bitmap traversal with pathspecs

rev-list has refused to use bitmaps with pathspec limiting since
c8a70d3509 (rev-list: disable --use-bitmap-index when pruning commits,
2015-07-01). But this is true not just for rev-list, but for anyone who
calls prepare_bitmap_walk(); the code isn't equipped to handle this
case.  We never noticed because the only other callers would never pass
a pathspec limiter.

But let's push the check down into prepare_bitmap_walk() anyway. That's
a more logical place for it to live, as callers shouldn't need to know
the details (and must be prepared to fall back to a regular traversal
anyway, since there might not be bitmaps in the repository).

It would also prepare us for a day where this case _is_ handled, but
that's pretty unlikely. E.g., we could use bitmaps to generate the set
of commits, and then diff each commit to see if it matches the pathspec.
That would be slightly faster than a naive traversal that actually walks
the commits. But you'd probably do better still to make use of the newer
commit-graph feature to make walking the commits very cheap.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomingw: add a helper function to attach GDB to the current process
Johannes Schindelin [Thu, 13 Feb 2020 21:49:53 +0000 (21:49 +0000)] 
mingw: add a helper function to attach GDB to the current process

When debugging Git, the criss-cross spawning of processes can make
things quite a bit difficult, especially when a Unix shell script is
thrown in the mix that calls a `git.exe` that then segfaults.

To help debugging such things, we introduce the `open_in_gdb()` function
which can be called at a code location where the segfault happens (or as
close as one can get); This will open a new MinTTY window with a GDB
that already attached to the current process.

Inspired by Derrick Stolee.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot5580: test cloning without file://, test fetching via UNC paths
Johannes Schindelin [Thu, 13 Feb 2020 21:51:44 +0000 (21:51 +0000)] 
t5580: test cloning without file://, test fetching via UNC paths

On Windows, it is quite common to work with network drives. The format
of the paths to network drives (or "network shares", or UNC paths) is:

\\<server>\<share>\...

We already have a couple regression tests revolving around those types
of paths, but we missed cloning and fetching from UNC paths without
leading `file://` (and with backslashes instead of forward slashes).
This lil' patch closes that gap.

It gets a bit silly to add the commands to the name of the test script,
so let's just rename it while we're testing more UNC stuff.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot9001, t9116: avoid pipes
Johannes Schindelin [Fri, 14 Feb 2020 13:53:21 +0000 (13:53 +0000)] 
t9001, t9116: avoid pipes

When grepping through the output of a command in the test suite, there
is always a chance that something goes wrong, in which case there would
not be anything useful to debug.

Let's redirect the output into a file instead, and grep that file, so
that the log can be inspected easily if the grep fails.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMyFirstContribution: rephrase contact info
Emily Shaffer [Fri, 14 Feb 2020 02:03:59 +0000 (18:03 -0800)] 
MyFirstContribution: rephrase contact info

Make an effort not to discourage new users from mailing questions to
git@vger.kernel.org, and explain the purpose of the mentoring list in
contrast to the main list.

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: add RCS keyword status message
Ben Keene [Fri, 14 Feb 2020 14:44:46 +0000 (14:44 +0000)] 
git-p4: add RCS keyword status message

During the p4 submit process, git-p4 will attempt to apply a patch
to the files found in the p4 workspace. However, if P4 uses RCS
keyword expansion, this patch may fail.

When the patch fails, the user is alerted to the failure and that git-p4
will attempt to clear the expanded text from the files and re-apply
the patch. The current version of git-p4 does not tell the user the
result of the re-apply attempt after the RCS expansion has been removed
which can be confusing.

Add a new print statement after the git patch has been successfully
applied when the RCS keywords have been cleansed.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: add p4 submit hooks
Ben Keene [Fri, 14 Feb 2020 14:44:45 +0000 (14:44 +0000)] 
git-p4: add p4 submit hooks

The git command "commit" supports a number of hooks that support
changing the behavior of the commit command.  The git-p4.py program only
has one existing hook, "p4-pre-submit".  This command occurs early in
the process.  There are no hooks in the process flow for modifying
the P4 changelist text programmatically.

Adds 3 new hooks to git-p4.py to the submit option.

The new hooks are:
* p4-prepare-changelist - Execute this hook after the changelist file
  has been created. The hook will be executed even if the
  --prepare-p4-only option is set.  This hook ignores the --no-verify
  option in keeping with the existing behavior of git commit.

* p4-changelist - Execute this hook after the user has edited the
  changelist. Do not execute this hook if the user has selected the
  --prepare-p4-only option. This hook will honor the --no-verify,
  following the conventions of git commit.

* p4-post-changelist - Execute this hook after the P4 submission process
  has completed successfully. This hook takes no parameters and is
  executed regardless of the --no-verify option.  It's return value will
  not be checked.

The calls to the new hooks: p4-prepare-changelist, p4-changelist,
and p4-post-changelist should all be called inside the try-finally
block.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: restructure code in submit
Ben Keene [Fri, 14 Feb 2020 14:44:44 +0000 (14:44 +0000)] 
git-p4: restructure code in submit

In preparation for adding new hooks to the submit method of git-p4,
restructure the applyCommit function in the P4Submit class.  Make the
following changes:

* Move all the code after the definition of submitted = False into the
  Try-Finally block. This ensures that any error that occurs will
  properly recover.  This is not necessary with the current code because
  none of it should throw an exception, however the next set of changes
  will introduce exceptional code.

  Existing flow control can remain as defined - the if-block for
  prepare-p4-only sets the local variable "submitted" to True and exits
  the function. New early exits, leave submitted set to False so the
  Finally block will undo changes to the P4 workspace.

* Make the small usability change of adding an empty string to the
  print statements displayed to the user when the prepare-p4-only option
  is selected.  On Windows, the command print() may display a set of
  parentheses "()" to the user when the print() function is called with
  no parameters. By supplying an empty string, the intended blank line
  will print as expected.

* Fix a small bug when the submittedTemplate is edited by the user
  and all content in the file is removed. The existing code will throw
  an exception if the separateLine is not found in the file. Change this
  code to test for the separator line using a find() test first and only
  split on the separator if it is found.

* Additionally, add the new behavior that if the changelist file has
  been completely emptied that the Submit action for this changelist
  will be aborted.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agorev-list: fallback to non-bitmap traversal when filtering
Jeff King [Thu, 13 Feb 2020 02:17:30 +0000 (21:17 -0500)] 
rev-list: fallback to non-bitmap traversal when filtering

The "--use-bitmap-index" option is usually aspirational: if we have
bitmaps and the request can be fulfilled more quickly using them we'll
do so, but otherwise fall back to a non-bitmap traversal.

The exception is object filtering, which explicitly dies if the two
options are combined. Let's convert this to the usual fallback behavior.
This is a minor convenience for now (since the caller can easily know
that --filter and --use-bitmap-index don't combine), but will become
much more useful as we start to support _some_ filters with bitmaps, but
not others.

The test infrastructure here is bigger than necessary for checking this
one small feature. But it will serve as the basis for more filtering
bitmap tests in future patches.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-bitmap: fix leak of haves/wants object lists
Jeff King [Thu, 13 Feb 2020 02:16:33 +0000 (21:16 -0500)] 
pack-bitmap: fix leak of haves/wants object lists

When we do a bitmap-aware revision traversal, we create an object_list
for each of the "haves" and "wants" tips. After creating the result
bitmaps these are no longer needed or used, but we never free the list
memory.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agopack-bitmap: factor out type iterator initialization
Jeff King [Thu, 13 Feb 2020 02:16:15 +0000 (21:16 -0500)] 
pack-bitmap: factor out type iterator initialization

When count_object_type() wants to iterate over the bitmap of all objects
of a certain type, we have to pair up OBJ_COMMIT with bitmap->commits,
and so forth. Since we're about to add more code to iterate over these
bitmaps, let's pull the initialization into its own function.

We can also use this to simplify traverse_bitmap_commit_list(). It
accomplishes the same thing by manually passing the object type and the
bitmap to show_objects_for_type(), but using our helper we just need the
object type.

Note there's one small code change here: previously we'd simply return
zero when counting an unknown object type, and now we'll BUG(). This
shouldn't matter in practice, as all of the callers pass in only usual
commit/tree/blob/tag types.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoThe fourth batch for 2.26
Junio C Hamano [Wed, 12 Feb 2020 20:12:08 +0000 (12:12 -0800)] 
The fourth batch for 2.26

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'js/convert-typofix'
Junio C Hamano [Wed, 12 Feb 2020 20:41:39 +0000 (12:41 -0800)] 
Merge branch 'js/convert-typofix'

Typofix.

* js/convert-typofix:
  convert: fix typo

6 years agoMerge branch 'js/ci-squelch-doc-warning'
Junio C Hamano [Wed, 12 Feb 2020 20:41:39 +0000 (12:41 -0800)] 
Merge branch 'js/ci-squelch-doc-warning'

Squelch unhelpful warning message during documentation build.

* js/ci-squelch-doc-warning:
  ci: ignore rubygems warning in the "Documentation" job

6 years agoMerge branch 'jb/multi-pack-index-docfix'
Junio C Hamano [Wed, 12 Feb 2020 20:41:39 +0000 (12:41 -0800)] 
Merge branch 'jb/multi-pack-index-docfix'

Doc fix.

* jb/multi-pack-index-docfix:
  pack-format: correct multi-pack-index description

6 years agoMerge branch 'ma/diff-doc-clarify-regexp-example'
Junio C Hamano [Wed, 12 Feb 2020 20:41:38 +0000 (12:41 -0800)] 
Merge branch 'ma/diff-doc-clarify-regexp-example'

Doc clarification.

* ma/diff-doc-clarify-regexp-example:
  diff-options.txt: avoid "regex" overload in example

6 years agoMerge branch 'ms/doc-bundle-format'
Junio C Hamano [Wed, 12 Feb 2020 20:41:38 +0000 (12:41 -0800)] 
Merge branch 'ms/doc-bundle-format'

Technical details of the bundle format has been documented.

* ms/doc-bundle-format:
  doc: describe Git bundle format

6 years agoMerge branch 'es/submodule-fetch-message-fix'
Junio C Hamano [Wed, 12 Feb 2020 20:41:38 +0000 (12:41 -0800)] 
Merge branch 'es/submodule-fetch-message-fix'

Error message fix.

* es/submodule-fetch-message-fix:
  submodule: add newline on invalid submodule error

6 years agoMerge branch 'jb/parse-options-message-fix'
Junio C Hamano [Wed, 12 Feb 2020 20:41:37 +0000 (12:41 -0800)] 
Merge branch 'jb/parse-options-message-fix'

Error message fix.

* jb/parse-options-message-fix:
  parse-options: lose an unnecessary space in an error message

6 years agoMerge branch 'ma/filter-branch-doc-caret'
Junio C Hamano [Wed, 12 Feb 2020 20:41:37 +0000 (12:41 -0800)] 
Merge branch 'ma/filter-branch-doc-caret'

Doc mark-up updates.

* ma/filter-branch-doc-caret:
  git-filter-branch.txt: wrap "maths" notation in backticks

6 years agoMerge branch 'km/submodule-doc-use-sm-path'
Junio C Hamano [Wed, 12 Feb 2020 20:41:37 +0000 (12:41 -0800)] 
Merge branch 'km/submodule-doc-use-sm-path'

Docfix.

* km/submodule-doc-use-sm-path:
  submodule foreach: replace $path with $sm_path in example

6 years agoMerge branch 'jc/skip-prefix'
Junio C Hamano [Wed, 12 Feb 2020 20:41:37 +0000 (12:41 -0800)] 
Merge branch 'jc/skip-prefix'

Code simplification.

* jc/skip-prefix:
  C: use skip_prefix() to avoid hardcoded string length

6 years agoMerge branch 'pb/do-not-recurse-grep-no-index'
Junio C Hamano [Wed, 12 Feb 2020 20:41:36 +0000 (12:41 -0800)] 
Merge branch 'pb/do-not-recurse-grep-no-index'

"git grep --no-index" should not get affected by the contents of
the .gitmodules file but when "--recurse-submodules" is given or
the "submodule.recurse" variable is set, it did.  Now these
settings are ignored in the "--no-index" mode.

* pb/do-not-recurse-grep-no-index:
  grep: ignore --recurse-submodules if --no-index is given

6 years agoMerge branch 'hw/doc-git-dir'
Junio C Hamano [Wed, 12 Feb 2020 20:41:36 +0000 (12:41 -0800)] 
Merge branch 'hw/doc-git-dir'

One effect of specifying where the GIT_DIR is (either with the
environment variable, or with the "git --git-dir=<where> cmd"
option) is to disable the repository discovery.  This has been
placed a bit more stress in the documentation, as new users often
get confused.

* hw/doc-git-dir:
  git: update documentation for --git-dir

6 years agoMerge branch 'jk/push-default-doc'
Junio C Hamano [Wed, 12 Feb 2020 20:41:36 +0000 (12:41 -0800)] 
Merge branch 'jk/push-default-doc'

Doc update.

* jk/push-default-doc:
  doc: drop "explicitly given" from push.default description

6 years agoMerge branch 'jk/clang-sanitizer-fixes'
Junio C Hamano [Wed, 12 Feb 2020 20:41:36 +0000 (12:41 -0800)] 
Merge branch 'jk/clang-sanitizer-fixes'

C pedantry ;-) fix.

* jk/clang-sanitizer-fixes:
  obstack: avoid computing offsets from NULL pointer
  xdiff: avoid computing non-zero offset from NULL pointer
  avoid computing zero offsets from NULL pointer
  merge-recursive: use subtraction to flip stage
  merge-recursive: silence -Wxor-used-as-pow warning

6 years agoMerge branch 'dt/submodule-rm-with-stale-cache'
Junio C Hamano [Wed, 12 Feb 2020 20:41:35 +0000 (12:41 -0800)] 
Merge branch 'dt/submodule-rm-with-stale-cache'

Running "git rm" on a submodule failed unnecessarily when
.gitmodules is only cache-dirty, which has been corrected.

* dt/submodule-rm-with-stale-cache:
  git rm submodule: succeed if .gitmodules index stat info is zero

6 years agoMerge branch 'jt/t5616-robustify'
Junio C Hamano [Wed, 12 Feb 2020 20:41:35 +0000 (12:41 -0800)] 
Merge branch 'jt/t5616-robustify'

Futureproofing a test not to depend on the current implementation
detail.

* jt/t5616-robustify:
  t5616: make robust to delta base change

6 years agoMerge branch 'jk/escaped-wildcard-dwim'
Junio C Hamano [Wed, 12 Feb 2020 20:41:35 +0000 (12:41 -0800)] 
Merge branch 'jk/escaped-wildcard-dwim'

Disambiguation logic to tell revisions and pathspec apart has been
tweaked so that backslash-escaped glob special characters do not
count in the "wildcards are pathspec" rule.

* jk/escaped-wildcard-dwim:
  verify_filename(): handle backslashes in "wildcards are pathspecs" rule

6 years agoMerge branch 'jn/pretend-object-doc'
Junio C Hamano [Wed, 12 Feb 2020 20:41:35 +0000 (12:41 -0800)] 
Merge branch 'jn/pretend-object-doc'

Warn programmers about pretend_object_file() that allows the code
to tentatively use in-core objects.

* jn/pretend-object-doc:
  sha1-file: document how to use pretend_object_file

6 years agotests: fix --write-junit-xml with subshells
Johannes Schindelin [Wed, 12 Feb 2020 11:27:55 +0000 (11:27 +0000)] 
tests: fix --write-junit-xml with subshells

In t0000, more precisely in its `test_bool_env` test case, there are two
subshells that are supposed to fail. To be even _more_ precise, they
fail by calling the `error` function, and that is okay, because it is in
a subshell, and it is expected that those two subshell invocations fail.

However, the `error` function also tries to finalize the JUnit XML (if
that XML was asked for, via `--write-junit-xml`. As a consequence, the
XML is edited to add a `time` attribute for the `testsuite` tag. And
since there are two expected `error` calls in addition to the final
`test_done`, the `finalize_junit_xml` function is called three times and
naturally the `time` attribute is added _three times_.

Azure Pipelines is not happy with that, complaining thusly:

 ##[warning]Failed to read D:\a\1\s\t\out\TEST-t0000-basic.xml. Error : 'time' is a duplicate attribute name. Line 2, position 82..

One possible way to address this would be to unset `write_junit_xml` in
the `test_bool_env` test case.

But that would be fragile, as other `error` calls in subshells could be
introduced.

So let's just modify `finalize_junit_xml` to remove any `time` attribute
before adding the authoritative one.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: add --no-verify option
Ben Keene [Tue, 11 Feb 2020 18:58:01 +0000 (18:58 +0000)] 
git-p4: add --no-verify option

Add new command line option --no-verify:

Add a new command line option "--no-verify" to the Submit command of
git-p4.py.  This option will function in the spirit of the existing
--no-verify command line option found in git commit. It will cause the
P4 Submit function to ignore the existing p4-pre-submit.

Change the execution of the existing trigger p4-pre-submit to honor the
--no-verify option. Before exiting on failure of this hook, display
text to the user explaining which hook has failed and the impact
of using the --no-verify option.

Change the call of the p4-pre-submit hook to use the new run_git_hook
function. This is in preparation of additional hooks to be added.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: add p4-pre-submit exit text
Ben Keene [Tue, 11 Feb 2020 18:58:00 +0000 (18:58 +0000)] 
git-p4: add p4-pre-submit exit text

When the p4-pre-submit exits with a non-zero exit code, the application
will abort the process with no additional information presented to the
user. This can be confusing for new users as it may not be clear that
the p4-pre-submit action caused the error.

Add text to explain why the program aborted the submit action.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: create new function run_git_hook
Ben Keene [Tue, 11 Feb 2020 18:57:59 +0000 (18:57 +0000)] 
git-p4: create new function run_git_hook

This commit is in preparation of introducing new p4 submit hooks.

The current code in the python script git-p4.py makes the assumption
that the git hooks can be executed by subprocess.call() function.
However, when git is run on Windows, this may not work as expected.

The subprocess.call() does not cover all the use cases for properly
executing the various types of executable files on Windows.

Prepare for remediation by adding a new function, run_git_hook, that
takes 2 parameters:
* the short filename of an optionally registered git hook
* an optional list of parameters

The run_git_hook function will honor the existing behavior seen in the
current code for executing the p4-pre-submit hook:

* Hooks are looked for in core.hooksPath directory.
* If core.hooksPath is not set, then the current .git/hooks directory
  is checked.
* If the hook does not exist, the function returns True.
* If the hook file is not accessible, the function returns True.
* If the hook returns a zero exit code when executed, the function
  return True.
* If the hook returns a non-zero exit code, the function returns False.

Add the following additional functionality if git-p4.py is run on
Windows.
* If hook file is not located without an extension, search for
  any file in the associated hook directory (from the list above) that
  has the same name but with an extension.
* If the file is still not found, return True (the hook is missing)

Add a new function run_hook_command() that wraps the OS dependent
functionality for actually running the subprocess.call() with OS
dependent behavior:

If a hook file exists on Windows:
* If there is no extension, set the launch executable to be SH.EXE
  - Look for SH.EXE under the environmental variable EXEPATH in the
    bin/ directory.
  - If %EXEPATH%/bin/sh.exe exists, use this as the actual executable.
  - If %EXEPATH%/bin/sh.exe does not exist, use sh.exe
  - Execute subprocess.call() without the shell (shell=False)
* If there is an extension, execute subprocess.call() with teh shell
  (shell=True) and consider the file to be the executable.

The return value from run_hook_command() is the subprocess.call()
return value.

These functions are added in this commit, but are only staged and not
yet used.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogit-p4: rewrite prompt to be Windows compatible
Ben Keene [Tue, 11 Feb 2020 18:57:58 +0000 (18:57 +0000)] 
git-p4: rewrite prompt to be Windows compatible

The existing function prompt(prompt_text) does not work correctly when
run on Windows 10 bash terminal when launched from the sourcetree
GUI application. The stdout is not flushed properly so the prompt text
is not displayed to the user until the next flush of stdout, which is
quite confusing.

Change this method by:
* Adding flush to stderr, stdout, and stdin
* Use readline from sys.stdin instead of raw_input.

The existing strip().lower() are retained.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoconvert: fix typo
Johannes Schindelin [Tue, 11 Feb 2020 18:56:18 +0000 (18:56 +0000)] 
convert: fix typo

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocolor.c: alias RGB colors 8-15 to aixterm colors
Eyal Soha [Tue, 21 Jan 2020 16:56:23 +0000 (08:56 -0800)] 
color.c: alias RGB colors 8-15 to aixterm colors

This results in shorter output, and is _probably_ more portable. There
is at least one environment (GitHub Actions) which supports 16-color
mode but not 256-color mode. It's possible there are environments
which go the other way, but it seems unlikely.

Signed-off-by: Eyal Soha <shawarmakarma@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocolor.c: support bright aixterm colors
Eyal Soha [Tue, 21 Jan 2020 16:56:22 +0000 (08:56 -0800)] 
color.c: support bright aixterm colors

These colors are the bright variants of the 3-bit colors.  Instead of
30-37 range for the foreground and 40-47 range for the background,
they live in 90-97 and 100-107 range, respectively.

Signed-off-by: Eyal Soha <shawarmakarma@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocolor.c: refactor color_output arguments
Eyal Soha [Tue, 21 Jan 2020 16:56:21 +0000 (08:56 -0800)] 
color.c: refactor color_output arguments

color_output() takes a "type" parameter, which is either '3' or '4',
and that byte is shown in front of '0'-'7' to form "30"-"37" or
"40"-"47" in ANSI output mode for fore-ground and back-ground
colors.

Clarify the purpose of the parameter by renaming it to the
"background" that is a boolean.

Also, change the .value field in the color struct from storing 0-7
for basic 8 colors to storing 30-37 for ANSI colors.  This aligns
the code to show ANSI colors to the code for the 256 color scheme,
which already uses the actual value to be sent to the terminal.

Signed-off-by: Eyal Soha <shawarmakarma@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomailinfo: factor out some repeated header handling
Jeff King [Tue, 11 Feb 2020 17:20:05 +0000 (12:20 -0500)] 
mailinfo: factor out some repeated header handling

We do the same thing for each header: match it, copy it to a strbuf, and
decode it. Let's put that in a helper function to avoid repetition.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomailinfo: be more liberal with header whitespace
Jeff King [Tue, 11 Feb 2020 17:19:53 +0000 (12:19 -0500)] 
mailinfo: be more liberal with header whitespace

RFC822 and friends allow arbitrary whitespace after the colon of a
header and before the values. I.e.:

  Subject:foo
  Subject: foo
  Subject:  foo

all have the subject "foo". But mailinfo requires exactly one space.
This doesn't seem to be bothering anybody, but it is pickier than the
standard specifies. And we can easily just soak up arbitrary whitespace
there in our parser, so let's do so.

Note that the test covers both too little and too much whitespace, but
the "too much" case already works fine (because we later eat leading and
trailing whitespace from the values).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agomailinfo: simplify parsing of header values
Jeff King [Tue, 11 Feb 2020 17:19:23 +0000 (12:19 -0500)] 
mailinfo: simplify parsing of header values

Our code to parse header values first checks to see if a line starts
with a header, and then manually skips past the matched string to find
the value. We can do this all in one step by modeling after
skip_prefix(), which returns a pointer into the string after the
parsing.

This lets us remove some repeated strings, and will also enable us to
parse more flexibly in a future patch.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>