Commit Graph

48384 Commits

Author SHA1 Message Date
Jeff King
c291293b2e everything_local: use "quick" object existence check
In b495697b82 (fetch-pack: avoid repeatedly re-scanning pack
directory, 2013-01-26), we noticed that everything_local()
could waste time trying to find and parse objects which we
_expect_ to be missing. The solution was to put
has_sha1_file() in front of parse_object() to skip the
more-expensive parse attempt.

That optimization was negated later when has_sha1_file()
learned to do the same re-scan in 45e8a74873 (has_sha1_file:
re-check pack directory before giving up, 2013-08-30).

We can restore it by using the "quick" flag to tell
has_sha1_file (actually has_object_file these days) that we
prefer speed to thoroughness for this call.  See also the
fixes in 5827a0354 and 0eeb077be7 for prior art and
discussion on using the "quick" flag for these cases.

The recently-added performance regression test in p5551
demonstrates the problem. You can see the original fix:

  Test            b495697b82^       b495697b82
  --------------------------------------------------------
  5551.4: fetch   1.68(1.33+0.35)   0.87(0.69+0.18) -48.2%

and then the regression:

  Test            45e8a74873^       45e8a74873
  ---------------------------------------------------------
  5551.4: fetch   0.96(0.77+0.19)   2.55(2.04+0.50) +165.6%

and now our fix:

  Test            HEAD^             HEAD
  --------------------------------------------------------
  5551.4: fetch   7.21(6.58+0.63)   5.47(5.04+0.43) -24.1%

You can also see that other things have gotten a lot slower
since 2013. We'll deal with those in separate patches.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-11-21 11:30:41 +09:00
Jeff King
7893bf1720 p5551: add a script to test fetch pack-dir rescans
Since fetch often deals with object-ids we don't have (yet),
it's an easy mistake for it to use a function like
parse_object() that gives the correct result (e.g., NULL)
but does so very slowly (because after failing to find the
object, we re-scan the pack directory looking for new
packs).

The regular test suite won't catch this because the end
result is correct, but we would want to know about
performance regressions, too. Let's add a test to the
regression suite.

Note that this uses a synthetic repository that has a large
number of packs. That's not ideal, as it means we're not
testing what "normal" users see (in fact, some of these
problems have existed for ages without anybody noticing
simply because a rescan on a normal repository just isn't
that expensive).

So what we're really looking for here is the spike you'd
notice in a pathological case (a lot of unknown objects
coming into a repo with a lot of packs). If that's fast,
then the normal cases should be, too.

Note that the test also makes liberal use of $MODERN_GIT for
setup; some of these regressions go back a ways, and we
should be able to use it to find the problems there.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-11-21 11:08:20 +09:00
Jeff King
0a11e40275 t/perf/lib-pack: use fast-import checkpoint to create packs
We currently use fast-import only to create a large number
of objects, and then run O(n) invocations of pack-objects to
turn them into packs.

We can do this faster by just asking fast-import to
checkpoint and create a pack for each (after telling it
not to turn loose tiny packs).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-11-21 11:07:28 +09:00
Jeff King
aa338d3508 p5550: factor out nonsense-pack creation
We have a function to create a bunch of irrelevant packs to
measure the expense of reprepare_packed_git(). Let's make
that available to other perf scripts.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-11-21 11:07:12 +09:00
Junio C Hamano
fc849d8d6b Git 2.14.3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-10-23 14:44:17 +09:00
Junio C Hamano
95c1a79630 Merge branch 'jk/info-alternates-fix' into maint
A regression fix for 2.11 that made the code to read the list of
alternate object stores overrun the end of the string.

* jk/info-alternates-fix:
  read_info_alternates: warn on non-trivial errors
  read_info_alternates: read contents into strbuf
2017-10-23 14:40:00 +09:00
Junio C Hamano
9fc7bc6568 Merge branch 'jc/fetch-refspec-doc-update' into maint
"git fetch <there> <src>:<dst>" allows an object name on the <src>
side when the other side accepts such a request since Git v2.5, but
the documentation was left stale.

* jc/fetch-refspec-doc-update:
  fetch doc: src side of refspec could be full SHA-1
2017-10-23 14:39:08 +09:00
Junio C Hamano
96c6bb566e Merge branch 'jk/write-in-full-fix' into maint
Many codepaths did not diagnose write failures correctly when disks
go full, due to their misuse of write_in_full() helper function,
which have been corrected.

* jk/write-in-full-fix:
  read_pack_header: handle signed/unsigned comparison in read result
  config: flip return value of store_write_*()
  notes-merge: use ssize_t for write_in_full() return value
  pkt-line: check write_in_full() errors against "< 0"
  convert less-trivial versions of "write_in_full() != len"
  avoid "write_in_full(fd, buf, len) != len" pattern
  get-tar-commit-id: check write_in_full() return against 0
  config: avoid "write_in_full(fd, buf, len) < len" pattern
2017-10-23 14:37:22 +09:00
Junio C Hamano
7186408f24 Merge branch 'rj/no-sign-compare' into maint
Many codepaths have been updated to squelch -Wsign-compare
warnings.

* rj/no-sign-compare:
  ALLOC_GROW: avoid -Wsign-compare warnings
  cache.h: hex2chr() - avoid -Wsign-compare warnings
  commit-slab.h: avoid -Wsign-compare warnings
  git-compat-util.h: xsize_t() - avoid -Wsign-compare warnings
2017-10-23 14:20:18 +09:00
Junio C Hamano
dd3bfe4f5f Merge branch 'ma/ts-cleanups' into maint
Assorted bugfixes and clean-ups.

* ma/ts-cleanups:
  ThreadSanitizer: add suppressions
  strbuf_setlen: don't write to strbuf_slopbuf
  pack-objects: take lock before accessing `remaining`
  convert: always initialize attr_action in convert_attrs
2017-10-23 14:19:02 +09:00
Junio C Hamano
a37b73e9bb Merge branch 'ls/travis-scriptify' into maint
The scripts to drive TravisCI has been reorganized and then an
optimization to avoid spending cycles on a branch whose tip is
tagged has been implemented.

* ls/travis-scriptify:
  travis-ci: fix "skip_branch_tip_with_tag()" string comparison
  travis: dedent a few scripts that are indented overly deeply
  travis-ci: skip a branch build if equal tag is present
  travis-ci: move Travis CI code into dedicated scripts
2017-10-23 14:17:53 +09:00
Junio C Hamano
031062dcab Merge branch 'er/fast-import-dump-refs-on-checkpoint' into maint
The checkpoint command "git fast-import" did not flush updates to
refs and marks unless at least one object was created since the
last checkpoint, which has been corrected, as these things can
happen without any new object getting created.

* er/fast-import-dump-refs-on-checkpoint:
  fast-import: checkpoint: dump branches/tags/marks even if object_count==0
2017-10-23 14:17:27 +09:00
Junio C Hamano
120ce97f9d Merge branch 'jt/fast-export-copy-modify-fix' into maint
"git fast-export" with -M/-C option issued "copy" instruction on a
path that is simultaneously modified, which was incorrect.

* jt/fast-export-copy-modify-fix:
  fast-export: do not copy from modified file
2017-10-23 14:14:51 +09:00
Junio C Hamano
5253ad109a Merge branch 'nd/worktree-kill-parse-ref' into maint
"git branch -M a b" while on a branch that is completely unrelated
to either branch a or branch b misbehaved when multiple worktree
was in use.  This has been fixed.

* nd/worktree-kill-parse-ref:
  branch: fix branch renaming not updating HEADs correctly
2017-10-23 14:14:16 +09:00
Junio C Hamano
4c2224e839 Prepare for 2.14.3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-10-18 14:24:09 +09:00
Junio C Hamano
e3e3c6a43e Merge branch 'jk/ref-filter-colors-fix' into maint
This is the "theoretically more correct" approach of simply
stepping back to the state before plumbing commands started paying
attention to "color.ui" configuration variable.

* jk/ref-filter-colors-fix:
  tag: respect color.ui config
  Revert "color: check color.ui in git_default_config()"
  Revert "t6006: drop "always" color config tests"
  Revert "color: make "always" the same as "auto" in config"
  color: make "always" the same as "auto" in config
  provide --color option for all ref-filter users
  t3205: use --color instead of color.branch=always
  t3203: drop "always" color test
  t6006: drop "always" color config tests
  t7502: use diff.noprefix for --verbose test
  t7508: use test_terminal for color output
  t3701: use test-terminal to collect color output
  t4015: prefer --color to -c color.diff=always
  test-terminal: set TERM=vt100
2017-10-18 14:20:43 +09:00
Junio C Hamano
4e4a0c6e79 Merge branch 'jc/doc-checkout' into maint
Doc update.

* jc/doc-checkout:
  checkout doc: clarify command line args for "checkout paths" mode
2017-10-18 14:19:14 +09:00
Junio C Hamano
3087feaf98 Merge branch 'tb/complete-describe' into maint
Docfix.

* tb/complete-describe:
  completion: add --broken and --dirty to describe
2017-10-18 14:19:14 +09:00
Junio C Hamano
ac86677afb Merge branch 'rs/rs-mailmap' into maint
* rs/rs-mailmap:
  .mailmap: normalize name for René Scharfe
2017-10-18 14:19:14 +09:00
Junio C Hamano
b0e5269c4e Merge branch 'rs/fsck-null-return-from-lookup' into maint
Improve behaviour of "git fsck" upon finding a missing object.

* rs/fsck-null-return-from-lookup:
  fsck: handle NULL return of lookup_blob() and lookup_tree()
2017-10-18 14:19:14 +09:00
Junio C Hamano
eeed979e6a Merge branch 'jk/sha1-loose-object-info-fix' into maint
Leakfix and futureproofing.

* jk/sha1-loose-object-info-fix:
  sha1_loose_object_info: handle errors from unpack_sha1_rest
2017-10-18 14:19:14 +09:00
Junio C Hamano
a116022e03 Merge branch 'sb/branch-avoid-repeated-strbuf-release' into maint
* sb/branch-avoid-repeated-strbuf-release:
  branch: reset instead of release a strbuf
2017-10-18 14:19:14 +09:00
Junio C Hamano
4bf90c1740 Merge branch 'rs/qsort-s' into maint
* rs/qsort-s:
  test-stringlist: avoid buffer underrun when sorting nothing
2017-10-18 14:19:14 +09:00
Junio C Hamano
3c905ddd18 Merge branch 'jn/strbuf-doc-re-reuse' into maint
* jn/strbuf-doc-re-reuse:
  strbuf doc: reuse after strbuf_release is fine
2017-10-18 14:19:13 +09:00
Junio C Hamano
116d1d4c8e Merge branch 'rs/run-command-use-alloc-array' into maint
Code clean-up.

* rs/run-command-use-alloc-array:
  run-command: use ALLOC_ARRAY
2017-10-18 14:19:13 +09:00
Junio C Hamano
073a1fd9e4 Merge branch 'rs/tag-null-pointer-arith-fix' into maint
Code clean-up.

* rs/tag-null-pointer-arith-fix:
  tag: avoid NULL pointer arithmetic
2017-10-18 14:19:12 +09:00
Junio C Hamano
ff35d2a998 Merge branch 'rs/cocci-de-paren-call-params' into maint
Code clean-up.

* rs/cocci-de-paren-call-params:
  coccinelle: remove parentheses that become unnecessary
2017-10-18 14:19:12 +09:00
Junio C Hamano
1fa0526876 Merge branch 'ad/doc-markup-fix' into maint
Docfix.

* ad/doc-markup-fix:
  doc: correct command formatting
2017-10-18 14:19:12 +09:00
Junio C Hamano
8a19eeed79 Merge branch 'mr/doc-negative-pathspec' into maint
Doc updates.

* mr/doc-negative-pathspec:
  docs: improve discoverability of exclude pathspec
2017-10-18 14:19:12 +09:00
Junio C Hamano
41052b11bc Merge branch 'jk/validate-headref-fix' into maint
Code clean-up.

* jk/validate-headref-fix:
  validate_headref: use get_oid_hex for detached HEADs
  validate_headref: use skip_prefix for symref parsing
  validate_headref: NUL-terminate HEAD buffer
2017-10-18 14:19:12 +09:00
Junio C Hamano
7f607f6bfb Merge branch 'ks/doc-use-camelcase-for-config-name' into maint
Doc update.

* ks/doc-use-camelcase-for-config-name:
  doc: camelCase the config variables to improve readability
2017-10-18 14:19:12 +09:00
Junio C Hamano
e1a05be9d0 Merge branch 'jk/doc-read-tree-table-asciidoctor-fix' into maint
A docfix.

* jk/doc-read-tree-table-asciidoctor-fix:
  doc: put literal block delimiter around table
2017-10-18 14:19:11 +09:00
Junio C Hamano
9554e71f60 Merge branch 'hn/typofix' into maint
* hn/typofix:
  submodule.h: typofix
2017-10-18 14:19:11 +09:00
Junio C Hamano
8e81361a0e Merge branch 'ks/test-readme-phrasofix' into maint
Doc updates.

* ks/test-readme-phrasofix:
  t/README: fix typo and grammatically improve a sentence
2017-10-18 14:19:10 +09:00
Junio C Hamano
0c521503a0 Merge branch 'ez/doc-duplicated-words-fix' into maint
Typofix.

* ez/doc-duplicated-words-fix:
  doc: fix minor typos (extra/duplicated words)
2017-10-18 14:19:10 +09:00
Junio C Hamano
5a4ec5cb22 Merge branch 'kd/doc-for-each-ref' into maint
Doc update.

* kd/doc-for-each-ref:
  doc/for-each-ref: explicitly specify option names
  doc/for-each-ref: consistently use '=' to between argument names and values
2017-10-18 14:19:10 +09:00
Junio C Hamano
1c45e39809 Merge branch 'cc/subprocess-handshake-missing-capabilities' into maint
Finishing touches to a topic already in 'master'.

* cc/subprocess-handshake-missing-capabilities:
  subprocess: loudly die when subprocess asks for an unsupported capability
2017-10-18 14:19:10 +09:00
Junio C Hamano
110a642801 Merge branch 'jk/system-path-cleanup' into maint
Code clean-up.

* jk/system-path-cleanup:
  git_extract_argv0_path: do nothing without RUNTIME_PREFIX
  system_path: move RUNTIME_PREFIX to a sub-function
2017-10-18 14:19:10 +09:00
Junio C Hamano
28a925bc51 Merge branch 'bb/doc-eol-dirty' into maint
Doc update.

* bb/doc-eol-dirty:
  Documentation: mention that `eol` can change the dirty status of paths
2017-10-18 14:19:09 +09:00
Junio C Hamano
0445bd7b55 Merge branch 'mg/timestamp-t-fix' into maint
A mismerge fix.

* mg/timestamp-t-fix:
  name-rev: change ULONG_MAX to TIME_MAX
2017-10-18 14:19:09 +09:00
Junio C Hamano
6da2d14c8b Merge branch 'ma/pkt-line-leakfix' into maint
A leakfix.

* ma/pkt-line-leakfix:
  pkt-line: re-'static'-ify buffer in packet_write_fmt_1()
2017-10-18 14:19:08 +09:00
Junio C Hamano
96d14cbb91 Merge branch 'jk/config-lockfile-leak-fix' into maint
A leakfix.

* jk/config-lockfile-leak-fix:
  config: use a static lock_file struct
2017-10-18 14:19:08 +09:00
Junio C Hamano
f77196e365 Merge branch 'dw/diff-highlight-makefile-fix' into maint
Build clean-up.

* dw/diff-highlight-makefile-fix:
  diff-highlight: add clean target to Makefile
2017-10-18 14:19:07 +09:00
Junio C Hamano
7c9375db0e Merge branch 'jk/drop-sha1-entry-pos' into maint
Code clean-up.

* jk/drop-sha1-entry-pos:
  sha1-lookup: remove sha1_entry_pos() from header file
  sha1_file: drop experimental GIT_USE_LOOKUP search
2017-10-18 14:19:06 +09:00
Junio C Hamano
d9e8586056 Merge branch 'tb/ref-filter-empty-modifier' into maint
In the "--format=..." option of the "git for-each-ref" command (and
its friends, i.e. the listing mode of "git branch/tag"), "%(atom:)"
(e.g. "%(refname:)", "%(body:)" used to error out.  Instead, treat
them as if the colon and an empty string that follows it were not
there.

* tb/ref-filter-empty-modifier:
  ref-filter.c: pass empty-string as NULL to atom parsers
2017-10-18 14:19:06 +09:00
Junio C Hamano
96d4b17bd6 Merge branch 'rb/compat-poll-fix' into maint
Backports a moral equivalent of 2015 fix to the poll emulation from
the upstream gnulib to fix occasional breakages on HPE NonStop.

* rb/compat-poll-fix:
  poll.c: always set revents, even if to zero
2017-10-18 14:19:05 +09:00
Junio C Hamano
dd5c88a7a5 Merge branch 'tg/memfixes' into maint
Fixes for a handful memory access issues identified by valgrind.

* tg/memfixes:
  sub-process: use child_process.args instead of child_process.argv
  http-push: fix construction of hex value from path
  path.c: fix uninitialized memory access
2017-10-18 14:19:05 +09:00
Junio C Hamano
d9f5ea42ff Merge branch 'ar/request-pull-phrasofix' into maint
Spell the name of our system as "Git" in the output from
request-pull script.

* ar/request-pull-phrasofix:
  request-pull: capitalise "Git" to make it a proper noun
2017-10-18 14:19:04 +09:00
Junio C Hamano
77cdf8c6f9 Merge branch 'jc/merge-x-theirs-docfix' into maint
The documentation for '-X<option>' for merges was misleadingly
written to suggest that "-s theirs" exists, which is not the case.

* jc/merge-x-theirs-docfix:
  merge-strategies: avoid implying that "-s theirs" exists
2017-10-18 14:19:03 +09:00
Junio C Hamano
01ae81e028 Merge branch 'rs/mailinfo-qp-decode-fix' into maint
"git mailinfo" was loose in decoding quoted printable and produced
garbage when the two letters after the equal sign are not
hexadecimal.  This has been fixed.

* rs/mailinfo-qp-decode-fix:
  mailinfo: don't decode invalid =XY quoted-printable sequences
2017-10-18 14:19:03 +09:00