git/git.git
4 years agoMerge branch 'ew/http-do-not-forget-to-call-curl-multi-remove-handle'
Junio C Hamano [Wed, 21 Sep 2016 22:15:23 +0000 (15:15 -0700)]
Merge branch 'ew/http-do-not-forget-to-call-curl-multi-remove-handle'

The http transport (with curl-multi option, which is the default
these days) failed to remove curl-easy handle from a curlm session,
which led to unnecessary API failures.

* ew/http-do-not-forget-to-call-curl-multi-remove-handle:
  http: always remove curl easy from curlm session on release
  http: consolidate #ifdefs for curl_multi_remove_handle
  http: warn on curl_multi_add_handle failures

4 years agoMerge branch 'bw/pathspec-remove-unused-extern-decl'
Junio C Hamano [Wed, 21 Sep 2016 22:15:22 +0000 (15:15 -0700)]
Merge branch 'bw/pathspec-remove-unused-extern-decl'

Code cleanup.

* bw/pathspec-remove-unused-extern-decl:
  pathspec: remove unnecessary function prototypes

4 years agoMerge branch 'ks/pack-objects-bitmap'
Junio C Hamano [Wed, 21 Sep 2016 22:15:21 +0000 (15:15 -0700)]
Merge branch 'ks/pack-objects-bitmap'

Some codepaths in "git pack-objects" were not ready to use an
existing pack bitmap; now they are and as the result they have
become faster.

* ks/pack-objects-bitmap:
  pack-objects: use reachability bitmap index when generating non-stdout pack
  pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use

4 years agoMerge branch 'jk/patch-ids-no-merges'
Junio C Hamano [Wed, 21 Sep 2016 22:15:20 +0000 (15:15 -0700)]
Merge branch 'jk/patch-ids-no-merges'

"git log --cherry-pick" used to include merge commits as candidates
to be matched up with other commits, resulting a lot of wasted time.
The patch-id generation logic has been updated to ignore merges to
avoid the wastage.

* jk/patch-ids-no-merges:
  patch-ids: refuse to compute patch-id for merge commit
  patch-ids: turn off rename detection

4 years agoMerge branch 'jk/delta-base-cache'
Junio C Hamano [Wed, 21 Sep 2016 22:15:20 +0000 (15:15 -0700)]
Merge branch 'jk/delta-base-cache'

Recently we updated the code to manage the in-core cache that holds
objects that have recently been used to reconstitute other objects
that are stored as deltas against them, but the update used an
incorrect API function to manage the list of these objects.  This
has been fixed.

* jk/delta-base-cache:
  add_delta_base_cache: use list_for_each_safe

4 years agoMerge branch 'et/add-chmod-x'
Junio C Hamano [Wed, 21 Sep 2016 22:15:19 +0000 (15:15 -0700)]
Merge branch 'et/add-chmod-x'

"git add --chmod=+x" added recently lacked documentation, which has
been corrected.

* et/add-chmod-x:
  add: document the chmod option

4 years agoMerge branch 'js/cat-file-filters'
Junio C Hamano [Wed, 21 Sep 2016 22:15:18 +0000 (15:15 -0700)]
Merge branch 'js/cat-file-filters'

Even though "git hash-objects", which is a tool to take an
on-filesystem data stream and put it into the Git object store,
allowed to perform the "outside-world-to-Git" conversions (e.g.
end-of-line conversions and application of the clean-filter), and
it had the feature on by default from very early days, its reverse
operation "git cat-file", which takes an object from the Git object
store and externalize for the consumption by the outside world,
lacked an equivalent mechanism to run the "Git-to-outside-world"
conversion.  The command learned the "--filters" option to do so.

* js/cat-file-filters:
  cat-file: support --textconv/--filters in batch mode
  cat-file --textconv/--filters: allow specifying the path separately
  cat-file: introduce the --filters option
  cat-file: fix a grammo in the man page

4 years agoMerge branch 'jt/accept-capability-advertisement-when-fetching-from-void'
Junio C Hamano [Wed, 21 Sep 2016 22:15:17 +0000 (15:15 -0700)]
Merge branch 'jt/accept-capability-advertisement-when-fetching-from-void'

JGit can show a fake ref "capabilities^{}" to "git fetch" when it
does not advertise any refs, but "git fetch" was not prepared to
see such an advertisement.  When the other side disconnects without
giving any ref advertisement, we used to say "there may not be a
repository at that URL", but we may have seen other advertisement
like "shallow" and ".have" in which case we definitely know that a
repository is there.  The code to detect this case has also been
updated.

* jt/accept-capability-advertisement-when-fetching-from-void:
  connect: advertized capability is not a ref
  connect: tighten check for unexpected early hang up
  tests: move test_lazy_prereq JGIT to test-lib.sh

4 years agoSync with maint
Junio C Hamano [Mon, 19 Sep 2016 20:55:18 +0000 (13:55 -0700)]
Sync with maint

* maint:
  Start preparing for 2.10.1

4 years agoStart preparing for 2.10.1
Junio C Hamano [Mon, 19 Sep 2016 20:54:50 +0000 (13:54 -0700)]
Start preparing for 2.10.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'sb/diff-cleanup' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:45 +0000 (13:51 -0700)]
Merge branch 'sb/diff-cleanup' into maint

Code cleanup.

* sb/diff-cleanup:
  diff: remove dead code
  diff: omit found pointer from emit_callback
  diff.c: use diff_options directly

4 years agoMerge branch 'ah/misc-message-fixes' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:45 +0000 (13:51 -0700)]
Merge branch 'ah/misc-message-fixes' into maint

Message cleanup.

* ah/misc-message-fixes:
  unpack-trees: do not capitalize "working"
  git-merge-octopus: do not capitalize "octopus"
  git-rebase--interactive: fix English grammar
  cat-file: put spaces around pipes in usage string
  am: put spaces around pipe in usage string

4 years agoMerge branch 'sb/transport-report-missing-submodule-on-stderr' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:45 +0000 (13:51 -0700)]
Merge branch 'sb/transport-report-missing-submodule-on-stderr' into maint

Message cleanup.

* sb/transport-report-missing-submodule-on-stderr:
  transport: report missing submodule pushes consistently on stderr

4 years agoMerge branch 'sb/xdiff-remove-unused-static-decl' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:44 +0000 (13:51 -0700)]
Merge branch 'sb/xdiff-remove-unused-static-decl' into maint

Code cleanup.

* sb/xdiff-remove-unused-static-decl:
  xdiff: remove unneeded declarations

4 years agoMerge branch 'js/t9903-chaining' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:44 +0000 (13:51 -0700)]
Merge branch 'js/t9903-chaining' into maint

Test fix.

* js/t9903-chaining:
  t9903: fix broken && chain

4 years agoMerge branch 'rs/hex2chr' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:43 +0000 (13:51 -0700)]
Merge branch 'rs/hex2chr' into maint

Code cleanup.

* rs/hex2chr:
  introduce hex2chr() for converting two hexadecimal digits to a character

4 years agoMerge branch 'rs/compat-strdup' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:42 +0000 (13:51 -0700)]
Merge branch 'rs/compat-strdup' into maint

Code cleanup.

* rs/compat-strdup:
  compat: move strdup(3) replacement to its own file

4 years agoMerge branch 'jk/squelch-false-warning-from-gcc-o3' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:41 +0000 (13:51 -0700)]
Merge branch 'jk/squelch-false-warning-from-gcc-o3' into maint

Compilation fix.

* jk/squelch-false-warning-from-gcc-o3:
  color_parse_mem: initialize "struct color" temporary
  error_errno: use constant return similar to error()

4 years agoMerge branch 'ep/use-git-trace-curl-in-tests' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:41 +0000 (13:51 -0700)]
Merge branch 'ep/use-git-trace-curl-in-tests' into maint

Update a few tests that used to use GIT_CURL_VERBOSE to use the
newer GIT_TRACE_CURL.

* ep/use-git-trace-curl-in-tests:
  t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
  t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
  test-lib.sh: preserve GIT_TRACE_CURL from the environment
  t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var

4 years agoMerge branch 'js/t6026-clean-up' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:41 +0000 (13:51 -0700)]
Merge branch 'js/t6026-clean-up' into maint

A test spawned a short-lived background process, which sometimes
prevented the test directory from getting removed at the end of the
script on some platforms.

* js/t6026-clean-up:
  t6026-merge-attr: clean up background process at end of test case

4 years agoMerge branch 'jc/forbid-symbolic-ref-d-HEAD' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:40 +0000 (13:51 -0700)]
Merge branch 'jc/forbid-symbolic-ref-d-HEAD' into maint

"git symbolic-ref -d HEAD" happily removes the symbolic ref, but
the resulting repository becomes an invalid one.  Teach the command
to forbid removal of HEAD.

* jc/forbid-symbolic-ref-d-HEAD:
  symbolic-ref -d: do not allow removal of HEAD

4 years agoMerge branch 'jc/submodule-anchor-git-dir' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:40 +0000 (13:51 -0700)]
Merge branch 'jc/submodule-anchor-git-dir' into maint

Having a submodule whose ".git" repository is somehow corrupt
caused a few commands that recurse into submodules loop forever.

* jc/submodule-anchor-git-dir:
  submodule: avoid auto-discovery in prepare_submodule_repo_env()

4 years agoMerge branch 'jk/test-lib-drop-pid-from-results' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:39 +0000 (13:51 -0700)]
Merge branch 'jk/test-lib-drop-pid-from-results' into maint

The test framework left the number of tests and success/failure
count in the t/test-results directory, keyed by the name of the
test script plus the process ID.  The latter however turned out not
to serve any useful purpose.  The process ID part of the filename
has been removed.

* jk/test-lib-drop-pid-from-results:
  test-lib: drop PID from test-results/*.count

4 years agoMerge branch 'bh/diff-highlight-graph' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:38 +0000 (13:51 -0700)]
Merge branch 'bh/diff-highlight-graph' into maint

"diff-highlight" script (in contrib/) learned to work better with
"git log -p --graph" output.

* bh/diff-highlight-graph:
  diff-highlight: avoid highlighting combined diffs
  diff-highlight: add multi-byte tests
  diff-highlight: ignore test cruft
  diff-highlight: add support for --graph output
  diff-highlight: add failing test for handling --graph output
  diff-highlight: add some tests

4 years agoMerge branch 'po/range-doc' into maint
Junio C Hamano [Mon, 19 Sep 2016 20:51:37 +0000 (13:51 -0700)]
Merge branch 'po/range-doc' into maint

Clarify various ways to specify the "revision ranges" in the
documentation.

* po/range-doc:
  doc: revisions: sort examples and fix alignment of the unchanged
  doc: revisions: show revision expansion in examples
  doc: revisions - clarify reachability examples
  doc: revisions - define `reachable`
  doc: gitrevisions - clarify 'latter case' is revision walk
  doc: gitrevisions - use 'reachable' in page description
  doc: revisions: single vs multi-parent notation comparison
  doc: revisions: extra clarification of <rev>^! notation effects
  doc: revisions: give headings for the two and three dot notations
  doc: show the actual left, right, and boundary marks
  doc: revisions - name the left and right sides
  doc: use 'symmetric difference' consistently

4 years agoThird batch for 2.11
Junio C Hamano [Mon, 19 Sep 2016 20:48:25 +0000 (13:48 -0700)]
Third batch for 2.11

This round they are somewhat bigger topics.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'bc/object-id'
Junio C Hamano [Mon, 19 Sep 2016 20:47:19 +0000 (13:47 -0700)]
Merge branch 'bc/object-id'

The "unsigned char sha1[20]" to "struct object_id" conversion
continues.  Notable changes in this round includes that ce->sha1,
i.e. the object name recorded in the cache_entry, turns into an
object_id.

It had merge conflicts with a few topics in flight (Christian's
"apply.c split", Dscho's "cat-file --filters" and Jeff Hostetler's
"status --porcelain-v2").  Extra sets of eyes double-checking for
mismerges are highly appreciated.

* bc/object-id:
  builtin/reset: convert to use struct object_id
  builtin/commit-tree: convert to struct object_id
  builtin/am: convert to struct object_id
  refs: add an update_ref_oid function.
  sha1_name: convert get_sha1_mb to struct object_id
  builtin/update-index: convert file to struct object_id
  notes: convert init_notes to use struct object_id
  builtin/rm: convert to use struct object_id
  builtin/blame: convert file to use struct object_id
  Convert read_mmblob to take struct object_id.
  notes-merge: convert struct notes_merge_pair to struct object_id
  builtin/checkout: convert some static functions to struct object_id
  streaming: make stream_blob_to_fd take struct object_id
  builtin: convert textconv_object to use struct object_id
  builtin/cat-file: convert some static functions to struct object_id
  builtin/cat-file: convert struct expand_data to use struct object_id
  builtin/log: convert some static functions to use struct object_id
  builtin/blame: convert struct origin to use struct object_id
  builtin/apply: convert static functions to struct object_id
  cache: convert struct cache_entry to use struct object_id

4 years agoMerge branch 'mh/ref-store'
Junio C Hamano [Mon, 19 Sep 2016 20:47:19 +0000 (13:47 -0700)]
Merge branch 'mh/ref-store'

The ref-store abstraction was introduced to the refs API so that we
can plug in different backends to store references.

* mh/ref-store: (38 commits)
  refs: implement iteration over only per-worktree refs
  refs: make lock generic
  refs: add method to rename refs
  refs: add methods to init refs db
  refs: make delete_refs() virtual
  refs: add method for initial ref transaction commit
  refs: add methods for reflog
  refs: add method iterator_begin
  files_ref_iterator_begin(): take a ref_store argument
  split_symref_update(): add a files_ref_store argument
  lock_ref_sha1_basic(): add a files_ref_store argument
  lock_ref_for_update(): add a files_ref_store argument
  commit_ref_update(): add a files_ref_store argument
  lock_raw_ref(): add a files_ref_store argument
  repack_without_refs(): add a files_ref_store argument
  refs: make peel_ref() virtual
  refs: make create_symref() virtual
  refs: make pack_refs() virtual
  refs: make verify_refname_available() virtual
  refs: make read_raw_ref() virtual
  ...

4 years agoMerge branch 'cc/apply-am'
Junio C Hamano [Mon, 19 Sep 2016 20:47:17 +0000 (13:47 -0700)]
Merge branch 'cc/apply-am'

"git am" has been taught to make an internal call to "git apply"'s
innards without spawning the latter as a separate process.

* cc/apply-am: (41 commits)
  builtin/am: use apply API in run_apply()
  apply: learn to use a different index file
  apply: pass apply state to build_fake_ancestor()
  apply: refactor `git apply` option parsing
  apply: change error_routine when silent
  usage: add get_error_routine() and get_warn_routine()
  usage: add set_warn_routine()
  apply: don't print on stdout in verbosity_silent mode
  apply: make it possible to silently apply
  apply: use error_errno() where possible
  apply: make some parsing functions static again
  apply: move libified code from builtin/apply.c to apply.{c,h}
  apply: rename and move opt constants to apply.h
  builtin/apply: rename option parsing functions
  builtin/apply: make create_one_file() return -1 on error
  builtin/apply: make try_create_file() return -1 on error
  builtin/apply: make write_out_results() return -1 on error
  builtin/apply: make write_out_one_result() return -1 on error
  builtin/apply: make create_file() return -1 on error
  builtin/apply: make add_index_file() return -1 on error
  ...

4 years agoSecond batch for 2.11
Junio C Hamano [Thu, 15 Sep 2016 21:13:06 +0000 (14:13 -0700)]
Second batch for 2.11

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'js/git-gui-commit-gpgsign'
Junio C Hamano [Thu, 15 Sep 2016 21:11:16 +0000 (14:11 -0700)]
Merge branch 'js/git-gui-commit-gpgsign'

"git commit-tree" stopped reading commit.gpgsign configuration
variable that was meant for Porcelain "git commit" in Git 2.9; we
forgot to update "git gui" to look at the configuration to match
this change.

* js/git-gui-commit-gpgsign:
  git-gui: respect commit.gpgsign again

4 years agoMerge branch 'js/sequencer-wo-die'
Junio C Hamano [Thu, 15 Sep 2016 21:11:16 +0000 (14:11 -0700)]
Merge branch 'js/sequencer-wo-die'

Lifts calls to exit(2) and die() higher in the callchain in
sequencer.c files so that more helper functions in it can be used
by callers that want to handle error conditions themselves.

* js/sequencer-wo-die:
  sequencer: ensure to release the lock when we could not read the index
  sequencer: lib'ify checkout_fast_forward()
  sequencer: lib'ify fast_forward_to()
  sequencer: lib'ify save_opts()
  sequencer: lib'ify save_todo()
  sequencer: lib'ify save_head()
  sequencer: lib'ify create_seq_dir()
  sequencer: lib'ify read_populate_opts()
  sequencer: lib'ify read_populate_todo()
  sequencer: lib'ify read_and_refresh_cache()
  sequencer: lib'ify prepare_revs()
  sequencer: lib'ify walk_revs_populate_todo()
  sequencer: lib'ify do_pick_commit()
  sequencer: lib'ify do_recursive_merge()
  sequencer: lib'ify write_message()
  sequencer: do not die() in do_pick_commit()
  sequencer: lib'ify sequencer_pick_revisions()

4 years agoMerge branch 'sb/diff-cleanup'
Junio C Hamano [Thu, 15 Sep 2016 21:11:15 +0000 (14:11 -0700)]
Merge branch 'sb/diff-cleanup'

Code cleanup.

* sb/diff-cleanup:
  diff: remove dead code
  diff: omit found pointer from emit_callback
  diff.c: use diff_options directly

4 years agoMerge branch 'jk/fix-remote-curl-url-wo-proto'
Junio C Hamano [Thu, 15 Sep 2016 21:11:15 +0000 (14:11 -0700)]
Merge branch 'jk/fix-remote-curl-url-wo-proto'

"git fetch http::/site/path" did not die correctly and segfaulted
instead.

* jk/fix-remote-curl-url-wo-proto:
  remote-curl: handle URLs without protocol

4 years agoMerge branch 'ah/misc-message-fixes'
Junio C Hamano [Thu, 15 Sep 2016 21:11:15 +0000 (14:11 -0700)]
Merge branch 'ah/misc-message-fixes'

Message cleanup.

* ah/misc-message-fixes:
  unpack-trees: do not capitalize "working"
  git-merge-octopus: do not capitalize "octopus"
  git-rebase--interactive: fix English grammar
  cat-file: put spaces around pipes in usage string
  am: put spaces around pipe in usage string

4 years agoMerge branch 'sy/git-gui-i18n-ja'
Junio C Hamano [Thu, 15 Sep 2016 21:11:14 +0000 (14:11 -0700)]
Merge branch 'sy/git-gui-i18n-ja'

Update Japanese translation for "git-gui".

* sy/git-gui-i18n-ja:
  git-gui: update Japanese information
  git-gui: update Japanese translation
  git-gui: add Japanese language code
  git-gui: apply po template to Japanese translation
  git-gui: consistently use the same word for "blame" in Japanese
  git-gui: consistently use the same word for "remote" in Japanese

4 years agoMerge branch 'jk/pack-tag-of-tag'
Junio C Hamano [Thu, 15 Sep 2016 21:11:14 +0000 (14:11 -0700)]
Merge branch 'jk/pack-tag-of-tag'

"git pack-objects --include-tag" was taught that when we know that
we are sending an object C, we want a tag B that directly points at
C but also a tag A that points at the tag B.  We used to miss the
intermediate tag B in some cases.

* jk/pack-tag-of-tag:
  pack-objects: walk tag chains for --include-tag
  t5305: simplify packname handling
  t5305: use "git -C"
  t5305: drop "dry-run" of unpack-objects
  t5305: move cleanup into test block

4 years agopathspec: remove unnecessary function prototypes
Brandon Williams [Tue, 13 Sep 2016 16:52:51 +0000 (09:52 -0700)]
pathspec: remove unnecessary function prototypes

A few functions were removed in 5a76aff1 ("add: convert to use
parse_pathspec", 2013-07-14), but we forgot to remove their external
declarations from pathspec.h while doing so.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agohttp: always remove curl easy from curlm session on release
Eric Wong [Tue, 13 Sep 2016 00:25:57 +0000 (00:25 +0000)]
http: always remove curl easy from curlm session on release

We must call curl_multi_remove_handle when releasing the slot to
prevent subsequent calls to curl_multi_add_handle from failing
with CURLM_ADDED_ALREADY (in curl 7.32.1+; older versions
returned CURLM_BAD_EASY_HANDLE)

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agohttp: consolidate #ifdefs for curl_multi_remove_handle
Eric Wong [Tue, 13 Sep 2016 00:25:56 +0000 (00:25 +0000)]
http: consolidate #ifdefs for curl_multi_remove_handle

I find #ifdefs makes code difficult-to-follow.

An early version of this patch had error checking for
curl_multi_remove_handle calls, but caused some tests (e.g.
t5541) to fail under curl 7.26.0 on old Debian wheezy.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agohttp: warn on curl_multi_add_handle failures
Eric Wong [Tue, 13 Sep 2016 00:25:55 +0000 (00:25 +0000)]
http: warn on curl_multi_add_handle failures

This will be useful for tracking down curl usage errors.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoSync with maint
Junio C Hamano [Mon, 12 Sep 2016 22:35:14 +0000 (15:35 -0700)]
Sync with maint

* maint:
  l10n: zh_CN: review for git v2.10.0 l10n
  l10n: zh_CN: fixed some typos for git 2.10.0
  l10n: pt_PT: update Portuguese repository info
  l10n: pt_PT: update Portuguese translation

4 years agoFirst batch for 2.11
Junio C Hamano [Mon, 12 Sep 2016 22:35:05 +0000 (15:35 -0700)]
First batch for 2.11

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'sb/transport-report-missing-submodule-on-stderr'
Junio C Hamano [Mon, 12 Sep 2016 22:34:38 +0000 (15:34 -0700)]
Merge branch 'sb/transport-report-missing-submodule-on-stderr'

Message cleanup.

* sb/transport-report-missing-submodule-on-stderr:
  transport: report missing submodule pushes consistently on stderr

4 years agoMerge branch 'ep/use-git-trace-curl-in-tests'
Junio C Hamano [Mon, 12 Sep 2016 22:34:38 +0000 (15:34 -0700)]
Merge branch 'ep/use-git-trace-curl-in-tests'

Update a few tests that used to use GIT_CURL_VERBOSE to use the
newer GIT_TRACE_CURL.

* ep/use-git-trace-curl-in-tests:
  t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
  t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
  test-lib.sh: preserve GIT_TRACE_CURL from the environment
  t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var

4 years agoMerge branch 'sb/xdiff-remove-unused-static-decl'
Junio C Hamano [Mon, 12 Sep 2016 22:34:38 +0000 (15:34 -0700)]
Merge branch 'sb/xdiff-remove-unused-static-decl'

Code cleanup.

* sb/xdiff-remove-unused-static-decl:
  xdiff: remove unneeded declarations

4 years agoMerge branch 'js/t6026-clean-up'
Junio C Hamano [Mon, 12 Sep 2016 22:34:37 +0000 (15:34 -0700)]
Merge branch 'js/t6026-clean-up'

A test spawned a short-lived background process, which sometimes
prevented the test directory from getting removed at the end of the
script on some platforms.

* js/t6026-clean-up:
  t6026-merge-attr: clean up background process at end of test case

4 years agoMerge branch 'js/t9903-chaining'
Junio C Hamano [Mon, 12 Sep 2016 22:34:37 +0000 (15:34 -0700)]
Merge branch 'js/t9903-chaining'

* js/t9903-chaining:
  t9903: fix broken && chain

4 years agoMerge branch 'rs/hex2chr'
Junio C Hamano [Mon, 12 Sep 2016 22:34:36 +0000 (15:34 -0700)]
Merge branch 'rs/hex2chr'

* rs/hex2chr:
  introduce hex2chr() for converting two hexadecimal digits to a character

4 years agoMerge branch 'rs/compat-strdup'
Junio C Hamano [Mon, 12 Sep 2016 22:34:36 +0000 (15:34 -0700)]
Merge branch 'rs/compat-strdup'

* rs/compat-strdup:
  compat: move strdup(3) replacement to its own file

4 years agoMerge branch 'jc/forbid-symbolic-ref-d-HEAD'
Junio C Hamano [Mon, 12 Sep 2016 22:34:35 +0000 (15:34 -0700)]
Merge branch 'jc/forbid-symbolic-ref-d-HEAD'

"git symbolic-ref -d HEAD" happily removes the symbolic ref, but
the resulting repository becomes an invalid one.  Teach the command
to forbid removal of HEAD.

* jc/forbid-symbolic-ref-d-HEAD:
  symbolic-ref -d: do not allow removal of HEAD

4 years agoMerge branch 'jc/submodule-anchor-git-dir'
Junio C Hamano [Mon, 12 Sep 2016 22:34:34 +0000 (15:34 -0700)]
Merge branch 'jc/submodule-anchor-git-dir'

Having a submodule whose ".git" repository is somehow corrupt
caused a few commands that recurse into submodules loop forever.

* jc/submodule-anchor-git-dir:
  submodule: avoid auto-discovery in prepare_submodule_repo_env()

4 years agoMerge branch 'jk/squelch-false-warning-from-gcc-o3'
Junio C Hamano [Mon, 12 Sep 2016 22:34:33 +0000 (15:34 -0700)]
Merge branch 'jk/squelch-false-warning-from-gcc-o3'

* jk/squelch-false-warning-from-gcc-o3:
  color_parse_mem: initialize "struct color" temporary
  error_errno: use constant return similar to error()

4 years agoMerge branch 'jk/test-lib-drop-pid-from-results'
Junio C Hamano [Mon, 12 Sep 2016 22:34:33 +0000 (15:34 -0700)]
Merge branch 'jk/test-lib-drop-pid-from-results'

The test framework left the number of tests and success/failure
count in the t/test-results directory, keyed by the name of the
test script plus the process ID.  The latter however turned out not
to serve any useful purpose.  The process ID part of the filename
has been removed.

* jk/test-lib-drop-pid-from-results:
  test-lib: drop PID from test-results/*.count

4 years agoMerge branch 'jc/am-read-author-file'
Junio C Hamano [Mon, 12 Sep 2016 22:34:32 +0000 (15:34 -0700)]
Merge branch 'jc/am-read-author-file'

Extract a small helper out of the function that reads the authors
script file "git am" internally uses.

* jc/am-read-author-file:
  am: refactor read_author_script()

4 years agoMerge branch 'jk/diff-submodule-diff-inline'
Junio C Hamano [Mon, 12 Sep 2016 22:34:31 +0000 (15:34 -0700)]
Merge branch 'jk/diff-submodule-diff-inline'

The "git diff --submodule={short,log}" mechanism has been enhanced
to allow "--submodule=diff" to show the patch between the submodule
commits bound to the superproject.

* jk/diff-submodule-diff-inline:
  diff: teach diff to display submodule difference with an inline diff
  submodule: refactor show_submodule_summary with helper function
  submodule: convert show_submodule_summary to use struct object_id *
  allow do_submodule_path to work even if submodule isn't checked out
  diff: prepare for additional submodule formats
  graph: add support for --line-prefix on all graph-aware output
  diff.c: remove output_prefix_length field
  cache: add empty_tree_oid object and helper function

4 years agoMerge tag 'l10n-2.10.0-rnd2.3' of git://github.com/git-l10n/git-po into maint
Junio C Hamano [Mon, 12 Sep 2016 22:23:42 +0000 (15:23 -0700)]
Merge tag 'l10n-2.10.0-rnd2.3' of git://github.com/git-l10n/git-po into maint

l10n-2.10.0-rnd2.3

* tag 'l10n-2.10.0-rnd2.3' of git://github.com/git-l10n/git-po:
  l10n: zh_CN: review for git v2.10.0 l10n
  l10n: zh_CN: fixed some typos for git 2.10.0
  l10n: pt_PT: update Portuguese repository info
  l10n: pt_PT: update Portuguese translation

4 years agoadd: document the chmod option
Thomas Gummerer [Mon, 12 Sep 2016 21:08:15 +0000 (22:08 +0100)]
add: document the chmod option

The git add --chmod option was introduced in 4e55ed3 ("add: add
--chmod=+x / --chmod=-x options", 2016-05-31), but was never
documented.  Document the feature.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopack-objects: use reachability bitmap index when generating non-stdout pack
Kirill Smelkov [Sat, 10 Sep 2016 15:01:44 +0000 (18:01 +0300)]
pack-objects: use reachability bitmap index when generating non-stdout pack

Starting from 6b8fda2d (pack-objects: use bitmaps when packing objects)
if a repository has bitmap index, pack-objects can nicely speedup
"Counting objects" graph traversal phase. That however was done only for
case when resultant pack is sent to stdout, not written into a file.

The reason here is for on-disk repack by default we want:

- to produce good pack (with bitmap index not-yet-packed objects are
  emitted to pack in suboptimal order).

- to use more robust pack-generation codepath (avoiding possible
  bugs in bitmap code and possible bitmap index corruption).

Jeff King further explains:

    The reason for this split is that pack-objects tries to determine how
    "careful" it should be based on whether we are packing to disk or to
    stdout. Packing to disk implies "git repack", and that we will likely
    delete the old packs after finishing. We want to be more careful (so
    as not to carry forward a corruption, and to generate a more optimal
    pack), and we presumably run less frequently and can afford extra CPU.
    Whereas packing to stdout implies serving a remote via "git fetch" or
    "git push". This happens more frequently (e.g., a server handling many
    fetching clients), and we assume the receiving end takes more
    responsibility for verifying the data.

    But this isn't always the case. One might want to generate on-disk
    packfiles for a specialized object transfer. Just using "--stdout" and
    writing to a file is not optimal, as it will not generate the matching
    pack index.

    So it would be useful to have some way of overriding this heuristic:
    to tell pack-objects that even though it should generate on-disk
    files, it is still OK to use the reachability bitmaps to do the
    traversal.

So we can teach pack-objects to use bitmap index for initial object
counting phase when generating resultant pack file too:

- if we take care to not let it be activated under git-repack:

  See above about repack robustness and not forward-carrying corruption.

- if we know bitmap index generation is not enabled for resultant pack:

  The current code has singleton bitmap_git, so it cannot work
  simultaneously with two bitmap indices.

  We also want to avoid (at least with current implementation)
  generating bitmaps off of bitmaps. The reason here is: when generating
  a pack, not-yet-packed objects will be emitted into pack in
  suboptimal order and added to tail of the bitmap as "extended entries".
  When the resultant pack + some new objects in associated repository
  are in turn used to generate another pack with bitmap, the situation
  repeats: new objects are again not emitted optimally and just added to
  bitmap tail - not in recency order.

  So the pack badness can grow over time when at each step we have
  bitmapped pack + some other objects. That's why we want to avoid
  generating bitmaps off of bitmaps, not to let pack badness grow.

- if we keep pack reuse enabled still only for "send-to-stdout" case:

  Because pack-to-file needs to generate index for destination pack, and
  currently on pack reuse raw entries are directly written out to the
  destination pack by write_reused_pack(), bypassing needed for pack index
  generation bookkeeping done by regular codepath in write_one() and
  friends.

  ( In the future we might teach pack-reuse code about cases when index
    also needs to be generated for resultant pack and remove
    pack-reuse-only-for-stdout limitation )

This way for pack-objects -> file we get nice speedup:

    erp5.git[1] (~230MB) extracted from ~ 5GB lab.nexedi.com backup
    repository managed by git-backup[2] via

    time echo 0186ac99 | git pack-objects --revs erp5pack

before:  37.2s
after:   26.2s

And for `git repack -adb` packed git.git

    time echo 5c589a73 | git pack-objects --revs gitpack

before:   7.1s
after:    3.6s

i.e. it can be 30% - 50% speedup for pack extraction.

git-backup extracts many packs on repositories restoration. That was my
initial motivation for the patch.

[1] https://lab.nexedi.com/nexedi/erp5
[2] https://lab.nexedi.com/kirr/git-backup

NOTE

Jeff also suggests that pack.useBitmaps was probably a mistake to
introduce originally. This way we are not adding another config point,
but instead just always default to-file pack-objects not to use bitmap
index: Tools which need to generate on-disk packs with using bitmap, can
pass --use-bitmap-index explicitly. And git-repack does never pass
--use-bitmap-index, so this way we can be sure regular on-disk repacking
remains robust.

NOTE2

`git pack-objects --stdout >file.pack` + `git index-pack file.pack` is much slower
than `git pack-objects file.pack`. Extracting erp5.git pack from
lab.nexedi.com backup repository:

    $ time echo 0186ac99 | git pack-objects --stdout --revs >erp5pack-stdout.pack

    real    0m22.309s
    user    0m21.148s
    sys     0m0.932s

    $ time git index-pack erp5pack-stdout.pack

    real    0m50.873s   <-- more than 2 times slower than time to generate pack itself!
    user    0m49.300s
    sys     0m1.360s

So the time for

    `pack-object --stdout >file.pack` + `index-pack file.pack`  is  72s,

while

    `pack-objects file.pack` which does both pack and index     is  27s.

And even

    `pack-objects --no-use-bitmap-index file.pack`              is  37s.

Jeff explains:

    The packfile does not carry the sha1 of the objects. A receiving
    index-pack has to compute them itself, including inflating and applying
    all of the deltas.

that's why for `git-backup restore` we want to teach `git pack-objects
file.pack` to use bitmaps instead of using `git pack-objects --stdout
>file.pack` + `git index-pack file.pack`.

NOTE3

The speedup is now tracked via t/perf/p5310-pack-bitmaps.sh

    Test                                    56dfeb62          this tree
    --------------------------------------------------------------------------------
    5310.2: repack to disk                  8.98(8.05+0.29)   9.05(8.08+0.33) +0.8%
    5310.3: simulated clone                 2.02(2.27+0.09)   2.01(2.25+0.08) -0.5%
    5310.4: simulated fetch                 0.81(1.07+0.02)   0.81(1.05+0.04) +0.0%
    5310.5: pack to file                    7.58(7.04+0.28)   7.60(7.04+0.30) +0.3%
    5310.6: pack to file (bitmap)           7.55(7.02+0.28)   3.25(2.82+0.18) -57.0%
    5310.8: clone (partial bitmap)          1.83(2.26+0.12)   1.82(2.22+0.14) -0.5%
    5310.9: pack to file (partial bitmap)   6.86(6.58+0.30)   2.87(2.74+0.20) -58.2%

More context:

    http://marc.info/?t=146792101400001&r=1&w=2
    http://public-inbox.org/git/20160707190917.20011-1-kirr@nexedi.com/T/#t

Cc: Vicent Marti <tanoku@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Kirill Smelkov <kirr@nexedi.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use
Kirill Smelkov [Sat, 10 Sep 2016 15:01:10 +0000 (18:01 +0300)]
pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use

Since 6b8fda2d (pack-objects: use bitmaps when packing objects) there
are two codepaths in pack-objects: with & without using bitmap
reachability index.

However add_object_entry_from_bitmap(), despite its non-bitmapped
counterpart add_object_entry(), in no way does check for whether --local
or --honor-pack-keep or --incremental should be respected. In
non-bitmapped codepath this is handled in want_object_in_pack(), but
bitmapped codepath has simply no such checking at all.

The bitmapped codepath however was allowing to pass in all those options
and with bitmap indices still being used under such conditions -
potentially giving wrong output (e.g. including objects from non-local or
.keep'ed pack).

We can easily fix this by noting the following: when an object comes to
add_object_entry_from_bitmap() it can come for two reasons:

    1. entries coming from main pack covered by bitmap index, and
    2. object coming from, possibly alternate, loose or other packs.

"2" can be already handled by want_object_in_pack() and to cover
"1" we can teach want_object_in_pack() to expect that *found_pack can be
non-NULL, meaning calling client already found object's pack entry.

In want_object_in_pack() we care to start the checks from already found
pack, if we have one, this way determining the answer right away
in case neither --local nor --honour-pack-keep are active. In
particular, as p5310-pack-bitmaps.sh shows (3 consecutive runs), we do
not do harm to served-with-bitmap clones performance-wise:

    Test                      56dfeb62          this tree
    -----------------------------------------------------------------
    5310.2: repack to disk    9.08(8.20+0.25)   9.09(8.14+0.32) +0.1%
    5310.3: simulated clone   1.92(2.12+0.08)   1.93(2.12+0.09) +0.5%
    5310.4: simulated fetch   0.82(1.07+0.04)   0.82(1.06+0.04) +0.0%
    5310.6: partial bitmap    1.96(2.42+0.13)   1.95(2.40+0.15) -0.5%

    Test                      56dfeb62          this tree
    -----------------------------------------------------------------
    5310.2: repack to disk    9.11(8.16+0.32)   9.11(8.19+0.28) +0.0%
    5310.3: simulated clone   1.93(2.14+0.07)   1.92(2.11+0.10) -0.5%
    5310.4: simulated fetch   0.82(1.06+0.04)   0.82(1.04+0.05) +0.0%
    5310.6: partial bitmap    1.95(2.38+0.16)   1.94(2.39+0.14) -0.5%

    Test                      56dfeb62          this tree
    -----------------------------------------------------------------
    5310.2: repack to disk    9.13(8.17+0.31)   9.07(8.13+0.28) -0.7%
    5310.3: simulated clone   1.92(2.13+0.07)   1.91(2.12+0.06) -0.5%
    5310.4: simulated fetch   0.82(1.08+0.03)   0.82(1.08+0.03) +0.0%
    5310.6: partial bitmap    1.96(2.43+0.14)   1.96(2.42+0.14) +0.0%

with delta timings showing they are all within noise from run to run.

In the general case we do not want to call find_pack_entry_one() more than
once, because it is expensive. This patch splits the loop in
want_object_in_pack() into two parts: finding the object and seeing if it
impacts our choice to include it in the pack. We may call the inexpensive
want_found_object() twice, but we will never call find_pack_entry_one() if we
do not need to.

I appreciate help and discussing this change with Junio C Hamano and
Jeff King.

Signed-off-by: Kirill Smelkov <kirr@nexedi.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopatch-ids: refuse to compute patch-id for merge commit
Jeff King [Mon, 12 Sep 2016 17:56:41 +0000 (13:56 -0400)]
patch-ids: refuse to compute patch-id for merge commit

The patch-id code which powers "log --cherry-pick" doesn't
look at whether each commit is a merge or not. It just feeds
the commit's first parent to the diff, and ignores any
additional parents.

In theory, this might be useful if you wanted to find
equivalence between, say, a merge commit and a squash-merge
that does the same thing.  But it also promotes a false
equivalence between distinct merges. For example, every
"merge -s ours" would look identical to an empty commit
(which is true in a sense, but presumably there was a value
in merging in the discarded history). Since patch-ids are
meant for throwing away duplicates, we should err on the
side of _not_ matching such merges.

Moreover, we may spend a lot of extra time computing these
merge diffs. In the case that inspired this patch, a "git
format-patch --cherry-pick" dropped from over 3 minutes to
less than 3 seconds.

This seems pretty drastic, but is easily explained. The
command was invoked by a "git rebase" of an older topic
branch; there had been tens of thousands of commits on the
upstream branch in the meantime. In addition, this project
used a topic-branch workflow with occasional "back-merges"
from "master" to each topic (to resolve conflicts on the
topics rather than in the merge commits). So there were not
only extra merges, but the diffs for these back-merges were
generally quite large (because they represented _everything_
that had been merged to master since the topic branched).

This patch treats a merge fed to commit_patch_id() or
add_commit_patch_id() as an error, and a lookup for such a
merge via has_commit_patch_id() will always return NULL.
An earlier version of the patch tried to distinguish between
"error" and "patch id for merges not defined", but that
becomes unnecessarily complicated. The only callers are:

  1. revision traversals which want to do --cherry-pick;
     they call add_commit_patch_id(), but do not care if it
     fails. They only want to add what we can, look it up
     later with has_commit_patch_id(), and err on the side
     of not-matching.

  2. format-patch --base, which calls commit_patch_id().
     This _does_ notice errors, but should never feed a
     merge in the first place (and if it were to do so
     accidentally, then this patch is a strict improvement;
     we notice the bug rather than generating a bogus
     patch-id).

So in both cases, this does the right thing.

Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoadd_delta_base_cache: use list_for_each_safe
Jeff King [Mon, 12 Sep 2016 16:46:17 +0000 (12:46 -0400)]
add_delta_base_cache: use list_for_each_safe

We may remove elements from the list while we are iterating,
which requires using a second temporary pointer. Otherwise
stepping to the next element of the list might involve
looking at freed memory (which generally works in practice,
as we _just_ freed it, but of course is wrong to rely on;
valgrind notices it).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'js/commit-gpgsign' of ../git-gui into js/git-gui-commit-gpgsign
Junio C Hamano [Sun, 11 Sep 2016 21:53:26 +0000 (14:53 -0700)]
Merge branch 'js/commit-gpgsign' of ../git-gui into js/git-gui-commit-gpgsign

* 'js/commit-gpgsign' of ../git-gui:
  git-gui: respect commit.gpgsign again

4 years agogit-gui: respect commit.gpgsign again
Johannes Schindelin [Fri, 9 Sep 2016 12:28:24 +0000 (14:28 +0200)]
git-gui: respect commit.gpgsign again

As of v2.9.0, `git commit-tree` no longer heeds the `commit.gpgsign`
config setting. This broke committing with GPG signature in Git GUI.

This fixes https://github.com/git-for-windows/git/issues/850

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocat-file: support --textconv/--filters in batch mode
Johannes Schindelin [Fri, 9 Sep 2016 10:10:54 +0000 (12:10 +0200)]
cat-file: support --textconv/--filters in batch mode

With this patch, --batch can be combined with --textconv or --filters.
For this to work, the input needs to have the form

<object name><single white space><path>

so that the filters can be chosen appropriately.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocat-file --textconv/--filters: allow specifying the path separately
Johannes Schindelin [Fri, 9 Sep 2016 10:10:50 +0000 (12:10 +0200)]
cat-file --textconv/--filters: allow specifying the path separately

There are circumstances when it is relatively easy to figure out the
object name for a given path, but not the name of the containing tree.
For example, when looking at a diff generated by Git, the object names
are recorded, but not the revision. As a matter of fact, the revisions
from which the diff was generated may not even exist locally.

In such a case, the user would have to generate a fake revision just to
be able to use --textconv or --filters.

Let's simplify this dramatically, because we do not really need that
revision at all: all we care about is that we know the path. In the
scenario described above, we do know the path, and we just want to
specify it separately from the object name.

Example usage:

git cat-file --textconv --path=main.c 0f1937fd

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocat-file: introduce the --filters option
Johannes Schindelin [Wed, 24 Aug 2016 12:23:39 +0000 (14:23 +0200)]
cat-file: introduce the --filters option

The --filters option applies the convert_to_working_tree() filter for
the path when showing the contents of a regular file blob object;
the contents are written out as-is for other types of objects.

This feature comes in handy when a 3rd-party tool wants to work with
the contents of files from past revisions as if they had been checked
out, but without detouring via temporary files.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: zh_CN: review for git v2.10.0 l10n
Ray Chen [Wed, 7 Sep 2016 10:03:04 +0000 (18:03 +0800)]
l10n: zh_CN: review for git v2.10.0 l10n

Signed-off-by: Ray Chen <oldsharp@gmail.com>
4 years agol10n: zh_CN: fixed some typos for git 2.10.0
Jiang Xin [Mon, 5 Sep 2016 15:26:21 +0000 (23:26 +0800)]
l10n: zh_CN: fixed some typos for git 2.10.0

Reviewed-by: Ray <tvvocold@163.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
4 years agorefs: implement iteration over only per-worktree refs
David Turner [Sun, 4 Sep 2016 16:08:44 +0000 (18:08 +0200)]
refs: implement iteration over only per-worktree refs

Alternate refs backends might still use files to store per-worktree
refs. So provide a way to iterate over only the per-worktree references
in a ref_store. The other backend can set up a files ref_store and
iterate using the new DO_FOR_EACH_PER_WORKTREE_ONLY flag when iterating.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make lock generic
David Turner [Sun, 4 Sep 2016 16:08:43 +0000 (18:08 +0200)]
refs: make lock generic

Instead of including a files-backend-specific struct ref_lock, change
the generic ref_update struct to include a void pointer that backends
can use for their own arbitrary data.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: add method to rename refs
David Turner [Sun, 4 Sep 2016 16:08:42 +0000 (18:08 +0200)]
refs: add method to rename refs

This removes the last caller of function get_files_ref_store(), so
remove it.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: add methods to init refs db
David Turner [Sun, 4 Sep 2016 16:08:41 +0000 (18:08 +0200)]
refs: add methods to init refs db

Alternate refs backends might not need the refs/heads directory and so
on, so we make ref db initialization part of the backend.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make delete_refs() virtual
David Turner [Sun, 4 Sep 2016 16:08:40 +0000 (18:08 +0200)]
refs: make delete_refs() virtual

In the file-based backend, delete_refs has some special optimization
to deal with packed refs.  In other backends, we might be able to make
ref deletion faster by putting all deletions into a single
transaction.  So we need a special backend function for this.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: add method for initial ref transaction commit
David Turner [Sun, 4 Sep 2016 16:08:39 +0000 (18:08 +0200)]
refs: add method for initial ref transaction commit

Signed-off-by: Ronnie Sahlberg <rsahlberg@google.com>
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: add methods for reflog
David Turner [Sun, 4 Sep 2016 16:08:38 +0000 (18:08 +0200)]
refs: add methods for reflog

In the file-based backend, the reflog piggybacks on the ref lock.
Since other backends won't have the same sort of ref lock, ref backends
must also handle reflogs.

Signed-off-by: Ronnie Sahlberg <rsahlberg@google.com>
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: add method iterator_begin
Michael Haggerty [Sun, 4 Sep 2016 16:08:37 +0000 (18:08 +0200)]
refs: add method iterator_begin

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agofiles_ref_iterator_begin(): take a ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:36 +0000 (18:08 +0200)]
files_ref_iterator_begin(): take a ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosplit_symref_update(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:35 +0000 (18:08 +0200)]
split_symref_update(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agolock_ref_sha1_basic(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:34 +0000 (18:08 +0200)]
lock_ref_sha1_basic(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agolock_ref_for_update(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:33 +0000 (18:08 +0200)]
lock_ref_for_update(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommit_ref_update(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:32 +0000 (18:08 +0200)]
commit_ref_update(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agolock_raw_ref(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:31 +0000 (18:08 +0200)]
lock_raw_ref(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorepack_without_refs(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:30 +0000 (18:08 +0200)]
repack_without_refs(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make peel_ref() virtual
Michael Haggerty [Sun, 4 Sep 2016 16:08:29 +0000 (18:08 +0200)]
refs: make peel_ref() virtual

For now it only supports the main reference store.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make create_symref() virtual
Michael Haggerty [Sun, 4 Sep 2016 16:08:28 +0000 (18:08 +0200)]
refs: make create_symref() virtual

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make pack_refs() virtual
Michael Haggerty [Sun, 4 Sep 2016 16:08:27 +0000 (18:08 +0200)]
refs: make pack_refs() virtual

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make verify_refname_available() virtual
Michael Haggerty [Sun, 4 Sep 2016 16:08:26 +0000 (18:08 +0200)]
refs: make verify_refname_available() virtual

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: make read_raw_ref() virtual
Michael Haggerty [Sun, 4 Sep 2016 16:08:25 +0000 (18:08 +0200)]
refs: make read_raw_ref() virtual

Reference backends will be able to customize this function to implement
reference reading.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_gitlink_ref(): rename path parameter to submodule
Michael Haggerty [Sun, 4 Sep 2016 16:08:24 +0000 (18:08 +0200)]
resolve_gitlink_ref(): rename path parameter to submodule

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_gitlink_ref(): avoid memory allocation in many cases
Michael Haggerty [Sun, 4 Sep 2016 16:08:23 +0000 (18:08 +0200)]
resolve_gitlink_ref(): avoid memory allocation in many cases

If we don't have to strip trailing '/' from the submodule path, then
don't allocate and copy the submodule name.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_gitlink_ref(): implement using resolve_ref_recursively()
Michael Haggerty [Sun, 4 Sep 2016 16:08:22 +0000 (18:08 +0200)]
resolve_gitlink_ref(): implement using resolve_ref_recursively()

resolve_ref_recursively() can handle references in arbitrary files
reference stores, so use it to resolve "gitlink" (i.e., submodule)
references. Aside from removing redundant code, this allows submodule
lookups to benefit from the much more robust code that we use for
reading non-submodule references. And, since the code is now agnostic
about reference backends, it will work for any future references
backend (so move its definition to refs.c).

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_ref_recursively(): new function
Michael Haggerty [Sun, 4 Sep 2016 16:08:21 +0000 (18:08 +0200)]
resolve_ref_recursively(): new function

Add a new function, resolve_ref_recursively(), which is basically like
the old resolve_ref_unsafe() except that it takes a (ref_store *)
argument and also works for submodules.

Re-implement resolve_ref_unsafe() as a thin wrapper around
resolve_ref_recursively().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoread_raw_ref(): take a (struct ref_store *) argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:20 +0000 (18:08 +0200)]
read_raw_ref(): take a (struct ref_store *) argument

And make the function work for submodules.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_gitlink_packed_ref(): remove function
Michael Haggerty [Sun, 4 Sep 2016 16:08:19 +0000 (18:08 +0200)]
resolve_gitlink_packed_ref(): remove function

Now that resolve_packed_ref() can work with an arbitrary
files_ref_store, there is no need to have a separate
resolve_gitlink_packed_ref() function.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_packed_ref(): rename function from resolve_missing_loose_ref()
Michael Haggerty [Sun, 4 Sep 2016 16:08:18 +0000 (18:08 +0200)]
resolve_packed_ref(): rename function from resolve_missing_loose_ref()

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: reorder definitions
Michael Haggerty [Sun, 4 Sep 2016 16:08:17 +0000 (18:08 +0200)]
refs: reorder definitions

Move resolve_gitlink_ref() and related functions lower in the file to
avoid the need for forward declarations in the next step.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorefs: add a transaction_commit() method
Ronnie Sahlberg [Sun, 4 Sep 2016 16:08:16 +0000 (18:08 +0200)]
refs: add a transaction_commit() method

Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years ago{lock,commit,rollback}_packed_refs(): add files_ref_store arguments
Michael Haggerty [Sun, 4 Sep 2016 16:08:15 +0000 (18:08 +0200)]
{lock,commit,rollback}_packed_refs(): add files_ref_store arguments

These functions currently only work in the main repository, so add an
assert_main_repository() check to each function.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoresolve_missing_loose_ref(): add a files_ref_store argument
Michael Haggerty [Sun, 4 Sep 2016 16:08:14 +0000 (18:08 +0200)]
resolve_missing_loose_ref(): add a files_ref_store argument

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>