]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
7 years agoi18n: add--interactive: mark edit_hunk_manually message for translation
Vasco Almeida [Wed, 14 Dec 2016 12:54:32 +0000 (11:54 -0100)] 
i18n: add--interactive: mark edit_hunk_manually message for translation

Mark message of edit_hunk_manually displayed in the editing file when
user chooses 'e' option.  The message had to be unfolded to allow
translation of the $participle verb.

Some messages end up being exactly the same for some use cases, but
left it for easier change in the future, e.g., wanting to change wording
of one particular use case.

The comment character is now used according to the git configuration
core.commentchar.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: add--interactive: i18n of help_patch_cmd
Vasco Almeida [Wed, 14 Dec 2016 12:54:31 +0000 (11:54 -0100)] 
i18n: add--interactive: i18n of help_patch_cmd

Mark help message of help_patch_cmd for translation.  The message must
be unfolded to be free of variables so we can have high quality
translations.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: add--interactive: mark patch prompt for translation
Vasco Almeida [Wed, 14 Dec 2016 12:54:30 +0000 (11:54 -0100)] 
i18n: add--interactive: mark patch prompt for translation

Mark prompt message assembled in place for translation, unfolding each
use case for each entry in the %patch_modes hash table.

Previously, this script relied on whether $patch_mode was set to run the
command patch_update_cmd() or show status and loop the main loop. Now,
it uses $cmd to indicate we must run patch_update_cmd() and $patch_mode
is used to tell which flavor of the %patch_modes are we on.  This is
introduced in order to be able to mark and unfold the message prompt
knowing in which context we are.

The tracking of context was done previously by point %patch_mode_flavour
hash table to the correct entry of %patch_modes, focusing only on value
of %patch_modes. Now, we are also interested in the key ('staged',
'stash', 'checkout_head', ...).

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: add--interactive: mark plural strings
Vasco Almeida [Wed, 14 Dec 2016 12:54:29 +0000 (11:54 -0100)] 
i18n: add--interactive: mark plural strings

Mark plural strings for translation.  Unfold each action case in one
entire sentence.

Pass new keyword for xgettext to extract.

Update test to include new subroutine __n() for plural strings handling.

Update documentation to include a description of the new __n()
subroutine.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: clean.c: match string with git-add--interactive.perl
Vasco Almeida [Wed, 14 Dec 2016 12:54:28 +0000 (11:54 -0100)] 
i18n: clean.c: match string with git-add--interactive.perl

Change strings for help to match the ones in git-add--interactive.perl.
The strings now represent one entry to translate each rather then two
entries each different only by an ending newline character.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: add--interactive: mark strings with interpolation for translation
Vasco Almeida [Wed, 14 Dec 2016 12:54:27 +0000 (11:54 -0100)] 
i18n: add--interactive: mark strings with interpolation for translation

Since at this point Git::I18N.perl lacks support for Perl i18n
placeholder substitution, use of sprintf following die or error_msg is
necessary for placeholder substitution take place.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: add--interactive: mark simple here-documents for translation
Vasco Almeida [Wed, 14 Dec 2016 12:54:26 +0000 (11:54 -0100)] 
i18n: add--interactive: mark simple here-documents for translation

Mark messages in here-documents without interpolation for translation.

The here-document delimiter \EOF, which is the same as 'EOF', indicates
that the text is to be treated literally without interpolation of its
content.  Unfortunately xgettext is not able to extract here-documents
delimited with \EOF but it is with delimiter enclosed in single quotes.
So change \EOF to 'EOF', although in this case does not make
difference what variation of here-document to use since there is nothing
to interpolate.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: add--interactive: mark strings for translation
Vasco Almeida [Wed, 14 Dec 2016 12:54:25 +0000 (11:54 -0100)] 
i18n: add--interactive: mark strings for translation

Mark simple strings (without interpolation) for translation.

Brackets around first parameter of ternary operator is necessary because
otherwise xgettext fails to extract strings marked for translation from
the rest of the file.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoGit.pm: add subroutines for commenting lines
Vasco Almeida [Wed, 14 Dec 2016 12:54:24 +0000 (11:54 -0100)] 
Git.pm: add subroutines for commenting lines

Add subroutines prefix_lines and comment_lines.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoFourth batch for 2.11
Junio C Hamano [Wed, 21 Sep 2016 22:20:44 +0000 (15:20 -0700)] 
Fourth batch for 2.11

Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoMerge branch 'jk/reduce-gc-aggressive-depth'
Junio C Hamano [Wed, 21 Sep 2016 22:15:29 +0000 (15:15 -0700)] 
Merge branch 'jk/reduce-gc-aggressive-depth'

"git gc --aggressive" used to limit the delta-chain length to 250,
which is way too deep for gaining additional space savings and is
detrimental for runtime performance.  The limit has been reduced to
50.

* jk/reduce-gc-aggressive-depth:
  gc: default aggressive depth to 50

7 years agoMerge branch 'jk/rebase-i-drop-ident-check'
Junio C Hamano [Wed, 21 Sep 2016 22:15:28 +0000 (15:15 -0700)] 
Merge branch 'jk/rebase-i-drop-ident-check'

Even when "git pull --rebase=preserve" (and the underlying "git
rebase --preserve") can complete without creating any new commit
(i.e. fast-forwards), it still insisted on having a usable ident
information (read: user.email is set correctly), which was less
than nice.  As the underlying commands used inside "git rebase"
would fail with a more meaningful error message and advice text
when the bogus ident matters, this extra check was removed.

* jk/rebase-i-drop-ident-check:
  rebase-interactive: drop early check for valid ident

7 years agoMerge branch 'va/i18n'
Junio C Hamano [Wed, 21 Sep 2016 22:15:28 +0000 (15:15 -0700)] 
Merge branch 'va/i18n'

More i18n.

* va/i18n:
  i18n: update-index: mark warnings for translation
  i18n: show-branch: mark plural strings for translation
  i18n: show-branch: mark error messages for translation
  i18n: receive-pack: mark messages for translation
  notes: spell first word of error messages in lowercase
  i18n: notes: mark error messages for translation
  i18n: merge-recursive: mark verbose message for translation
  i18n: merge-recursive: mark error messages for translation
  i18n: config: mark error message for translation
  i18n: branch: mark option description for translation
  i18n: blame: mark error messages for translation

7 years agoMerge branch 'jt/format-patch-base-info-above-sig'
Junio C Hamano [Wed, 21 Sep 2016 22:15:27 +0000 (15:15 -0700)] 
Merge branch 'jt/format-patch-base-info-above-sig'

"git format-patch --base=..." feature that was recently added
showed the base commit information after "-- " e-mail signature
line, which turned out to be inconvenient.  The base information
has been moved above the signature line.

* jt/format-patch-base-info-above-sig:
  format-patch: show base info before email signature

7 years agoMerge branch 'ks/perf-build-with-autoconf'
Junio C Hamano [Wed, 21 Sep 2016 22:15:27 +0000 (15:15 -0700)] 
Merge branch 'ks/perf-build-with-autoconf'

Performance tests done via "t/perf" did not use the same set of
build configuration if the user relied on autoconf generated
configuration.

* ks/perf-build-with-autoconf:
  t/perf/run: copy config.mak.autogen & friends to build area

7 years agoMerge branch 'mr/vcs-svn-printf-ulong'
Junio C Hamano [Wed, 21 Sep 2016 22:15:27 +0000 (15:15 -0700)] 
Merge branch 'mr/vcs-svn-printf-ulong'

Code cleanup.

* mr/vcs-svn-printf-ulong:
  vcs-svn/fast_export: fix timestamp fmt specifiers

7 years agoMerge branch 'rs/xdiff-merge-overlapping-hunks-for-W-context'
Junio C Hamano [Wed, 21 Sep 2016 22:15:26 +0000 (15:15 -0700)] 
Merge branch 'rs/xdiff-merge-overlapping-hunks-for-W-context'

"git diff -W" output needs to extend the context backward to
include the header line of the current function and also forward to
include the body of the entire current function up to the header
line of the next one.  This process may have to merge to adjacent
hunks, but the code forgot to do so in some cases.

* rs/xdiff-merge-overlapping-hunks-for-W-context:
  xdiff: fix merging of hunks with -W context and -u context

7 years agoMerge branch 'rs/unpack-trees-reduce-file-scope-global'
Junio C Hamano [Wed, 21 Sep 2016 22:15:26 +0000 (15:15 -0700)] 
Merge branch 'rs/unpack-trees-reduce-file-scope-global'

Code cleanup.

* rs/unpack-trees-reduce-file-scope-global:
  unpack-trees: pass checkout state explicitly to check_updates()

7 years agoMerge branch 'rs/strbuf-remove-fix'
Junio C Hamano [Wed, 21 Sep 2016 22:15:25 +0000 (15:15 -0700)] 
Merge branch 'rs/strbuf-remove-fix'

Code cleanup.

* rs/strbuf-remove-fix:
  strbuf: use valid pointer in strbuf_remove()

7 years agoMerge branch 'rs/pack-sort-with-llist-mergesort'
Junio C Hamano [Wed, 21 Sep 2016 22:15:25 +0000 (15:15 -0700)] 
Merge branch 'rs/pack-sort-with-llist-mergesort'

Code cleanup.

* rs/pack-sort-with-llist-mergesort:
  sha1_file: use llist_mergesort() for sorting packs

7 years agoMerge branch 'rs/checkout-some-states-are-const'
Junio C Hamano [Wed, 21 Sep 2016 22:15:24 +0000 (15:15 -0700)] 
Merge branch 'rs/checkout-some-states-are-const'

Code cleanup.

* rs/checkout-some-states-are-const:
  checkout: constify parameters of checkout_stage() and checkout_merged()

7 years agoMerge branch 'jk/setup-sequence-update'
Junio C Hamano [Wed, 21 Sep 2016 22:15:23 +0000 (15:15 -0700)] 
Merge branch 'jk/setup-sequence-update'

There were numerous corner cases in which the configuration files
are read and used or not read at all depending on the directory a
Git command was run, leading to inconsistent behaviour.  The code
to set-up repository access at the beginning of a Git process has
been updated to fix them.

* jk/setup-sequence-update:
  t1007: factor out repeated setup
  init: reset cached config when entering new repo
  init: expand comments explaining config trickery
  config: only read .git/config from configured repos
  test-config: setup git directory
  t1302: use "git -C"
  pager: handle early config
  pager: use callbacks instead of configset
  pager: make pager_program a file-local static
  pager: stop loading git_default_config()
  pager: remove obsolete comment
  diff: always try to set up the repository
  diff: handle --no-index prefixes consistently
  diff: skip implicit no-index check when given --no-index
  patch-id: use RUN_SETUP_GENTLY
  hash-object: always try to set up the git repository

7 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

7 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

7 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

7 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

7 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

7 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

7 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

7 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

7 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

7 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>
7 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

7 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

7 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

7 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

7 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

7 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

7 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

7 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()

7 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

7 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

7 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

7 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()

7 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

7 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

7 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

7 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>
7 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

7 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
  ...

7 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
  ...

7 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>
7 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

7 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()

7 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

7 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

7 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

7 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

7 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

7 years agot/perf/run: copy config.mak.autogen & friends to build area
Kirill Smelkov [Tue, 13 Sep 2016 06:58:00 +0000 (09:58 +0300)] 
t/perf/run: copy config.mak.autogen & friends to build area

Otherwise for people who use autotools-based configure in main worktree,
the performance testing results will be inconsistent as work and build
trees could be using e.g. different optimization levels.

See e.g.

http://public-inbox.org/git/20160818175222.bmm3ivjheokf2qzl@sigill.intra.peff.net/

for example.

NOTE config.status has to be copied because otherwise without it the build
would want to run reconfigure this way loosing just copied config.mak.autogen.

Signed-off-by: Kirill Smelkov <kirr@nexedi.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: update-index: mark warnings for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:08 +0000 (14:59 +0000)] 
i18n: update-index: mark warnings for translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: show-branch: mark plural strings for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:07 +0000 (14:59 +0000)] 
i18n: show-branch: mark plural strings for translation

Mark plural string for translation using Q_().

Although we already know that the plural sentence is always used in the
English source, other languages have complex plural rules they must
comply according to the value of MAX_REVS.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: show-branch: mark error messages for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:06 +0000 (14:59 +0000)] 
i18n: show-branch: mark error messages for translation

Spell the first word of messages in lowercase, following the usual
style.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: receive-pack: mark messages for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:05 +0000 (14:59 +0000)] 
i18n: receive-pack: mark messages for translation

Mark messages refuse_unconfigured_deny_msg and
refuse_unconfigured_deny_delete_current_msg for translation.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agonotes: spell first word of error messages in lowercase
Vasco Almeida [Thu, 15 Sep 2016 14:59:04 +0000 (14:59 +0000)] 
notes: spell first word of error messages in lowercase

That's the usual style.

Update one test to reflect these changes.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: notes: mark error messages for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:03 +0000 (14:59 +0000)] 
i18n: notes: mark error messages for translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: merge-recursive: mark verbose message for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:02 +0000 (14:59 +0000)] 
i18n: merge-recursive: mark verbose message for translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: merge-recursive: mark error messages for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:01 +0000 (14:59 +0000)] 
i18n: merge-recursive: mark error messages for translation

Spell the first word of such error messages in lowercase,
following the usual style.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: config: mark error message for translation
Vasco Almeida [Thu, 15 Sep 2016 14:59:00 +0000 (14:59 +0000)] 
i18n: config: mark error message for translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: branch: mark option description for translation
Vasco Almeida [Thu, 15 Sep 2016 14:58:59 +0000 (14:58 +0000)] 
i18n: branch: mark option description for translation

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoi18n: blame: mark error messages for translation
Vasco Almeida [Thu, 15 Sep 2016 14:58:58 +0000 (14:58 +0000)] 
i18n: blame: mark error messages for translation

Mark error messages for translation passed to die() function.
Change "Cannot" to lowercase following the usual style.

Reflect changes to test by using test_i18ngrep.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoformat-patch: show base info before email signature
Josh Triplett [Thu, 8 Sep 2016 01:12:01 +0000 (18:12 -0700)] 
format-patch: show base info before email signature

Any text below the "-- " for the email signature gets treated as part of
the signature, and many mail clients will trim it from the quoted text
for a reply.  Move it above the signature, so people can reply to it
more easily.

Similarly, when producing the patch as a MIME attachment, the
original code placed the base info after the attached part, which
would be discarded.  Move the base info to the end of the part,
still inside the part boundary.

Add tests for the exact format of the email signature, and add tests
to ensure that the base info appears before the email signature when
producing a plain-text output, and that it appears before the part
boundary when producing a MIME attachment.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoxdiff: fix merging of hunks with -W context and -u context
René Scharfe [Wed, 14 Sep 2016 16:05:27 +0000 (18:05 +0200)] 
xdiff: fix merging of hunks with -W context and -u context

If the function context for a hunk (with -W) reaches the beginning of
the next hunk then we need to merge these two -- otherwise we'd show
some lines twice, which looks strange and even confuses git apply.  We
already do this checking and merging in xdl_emit_diff(), but forget to
consider regular context (with -u or -U).

Fix that by merging hunks already if function context of the first one
touches or overlaps regular context of the second one.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agovcs-svn/fast_export: fix timestamp fmt specifiers
Mike Ralphson [Wed, 14 Sep 2016 06:40:57 +0000 (06:40 +0000)] 
vcs-svn/fast_export: fix timestamp fmt specifiers

Two instances of %ld being used for unsigned longs

Signed-off-by: Mike Ralphson <mike.ralphson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agosha1_file: use llist_mergesort() for sorting packs
René Scharfe [Tue, 13 Sep 2016 17:54:42 +0000 (19:54 +0200)] 
sha1_file: use llist_mergesort() for sorting packs

Sort the linked list of packs directly using llist_mergesort() instead
of building an array, calling qsort(3) and fixing up the list pointers.
This is shorter and less complicated.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agounpack-trees: pass checkout state explicitly to check_updates()
René Scharfe [Tue, 13 Sep 2016 17:37:06 +0000 (19:37 +0200)] 
unpack-trees: pass checkout state explicitly to check_updates()

Add a parameter for the struct checkout variable to check_updates()
instead of using a static global variable.  Passing it explicitly makes
object ownership and usage more easily apparent.  And we get rid of a
static variable; those can be problematic in library-like code.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agocheckout: constify parameters of checkout_stage() and checkout_merged()
René Scharfe [Tue, 13 Sep 2016 17:11:52 +0000 (19:11 +0200)] 
checkout: constify parameters of checkout_stage() and checkout_merged()

Document the fact that checkout_stage() and checkout_merged() don't
change the objects passed to them by adding the modifier const.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 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>
7 years agostrbuf: use valid pointer in strbuf_remove()
René Scharfe [Tue, 13 Sep 2016 16:40:22 +0000 (18:40 +0200)] 
strbuf: use valid pointer in strbuf_remove()

The fourth argument of strbuf_splice() is passed to memcpy(3), which is
not supposed to handle NULL pointers.  Let's be extra careful and use a
valid empty string instead.  It even shortens the source code. :)

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agot1007: factor out repeated setup
Jeff King [Tue, 13 Sep 2016 03:23:12 +0000 (20:23 -0700)] 
t1007: factor out repeated setup

We have a series of 3 CRLF tests that do exactly the same
(long) setup sequence. Let's pull it out into a common setup
test, which is shorter, more efficient, and will make it
easier to add new tests.

Note that we don't have to worry about cleaning up any of
the setup which was previously per-test; we call pop_repo
after the CRLF tests, which cleans up everything.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoinit: reset cached config when entering new repo
Jeff King [Tue, 13 Sep 2016 03:24:23 +0000 (20:24 -0700)] 
init: reset cached config when entering new repo

After we copy the templates into place, we re-read the
config in case we copied in a default config file. But since
git_config() is backed by a cache these days, it's possible
that the call will not actually touch the filesystem at all;
we need to tell it that something has changed behind the
scenes.

Note that we also need to reset the shared_repository
config. At first glance, it seems like this should probably
just be folded into git_config_clear(). But unfortunately
that is not quite right. The shared repository value may
come from config, _or_ it may have been set manually. So
only the caller who knows whether or not they set it is the
one who can clear it (and indeed, if you _do_ put it into
git_config_clear(), then many tests fail, as we have to
clear the config cache any time we set a new config
variable).

There are three tests here. The first two actually pass
already, though it's largely luck: they just don't happen to
actually read any config before we enter the new repo.

But the third one does fail without this patch; we look at
core.sharedrepository while creating the directory, but need
to make sure the value from the template config overrides
it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoinit: expand comments explaining config trickery
Jeff King [Tue, 13 Sep 2016 03:24:19 +0000 (20:24 -0700)] 
init: expand comments explaining config trickery

git-init may copy "config" from the templates directory and
then re-read it. There are some comments explaining what's
going on here, but they are not grouped very well with the
matching code. Let's rearrange and expand them.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agoconfig: only read .git/config from configured repos
Jeff King [Tue, 13 Sep 2016 03:24:15 +0000 (20:24 -0700)] 
config: only read .git/config from configured repos

When git_config() runs, it looks in the system, user-wide,
and repo-level config files. It gets the latter by calling
git_pathdup(), which in turn calls get_git_dir(). If we
haven't set up the git repository yet, this may simply
return ".git", and we will look at ".git/config".  This
seems like it would be helpful (presumably we haven't set up
the repository yet, so it tries to find it), but it turns
out to be a bad idea for a few reasons:

  - it's not sufficient, and therefore hides bugs in a
    confusing way. Config will be respected if commands are
    run from the top-level of the working tree, but not from
    a subdirectory.

  - it's not always true that we haven't set up the
    repository _yet_; we may not want to do it at all. For
    instance, if you run "git init /some/path" from inside
    another repository, it should not load config from the
    existing repository.

  - there might be a path ".git/config", but it is not the
    actual repository we would find via setup_git_directory().
    This may happen, e.g., if you are storing a git
    repository inside another git repository, but have
    munged one of the files in such a way that the
    inner repository is not valid (e.g., by removing HEAD).

We have at least two bugs of the second type in git-init,
introduced by ae5f677 (lazily load core.sharedrepository,
2016-03-11). It causes init to use git_configset(), which
loads all of the config, including values from the current
repo (if any).  This shows up in two ways:

  1. If we happen to be in an existing repository directory,
     we'll read and respect core.sharedrepository from it,
     even though it should have no bearing on the new
     repository. A new test in t1301 covers this.

  2. Similarly, if we're in an existing repo that sets
     core.logallrefupdates, that will cause init to fail to
     set it in a newly created repository (because it thinks
     that the user's templates already did so). A new test
     in t0001 covers this.

We also need to adjust an existing test in t1302, which
gives another example of why this patch is an improvement.

That test creates an embedded repository with a bogus
core.repositoryformatversion of "99". It wants to make sure
that we actually stop at the bogus repo rather than
continuing upward to find the outer repo. So it checks that
"git config core.repositoryformatversion" returns 99. But
that only works because we blindly read ".git/config", even
though we _know_ we're in a repository whose vintage we do
not understand.

After this patch, we avoid reading config from the unknown
vintage repository at all, which is a safer choice.  But we
need to tweak the test, since core.repositoryformatversion
will not return 99; it will claim that it could not find the
variable at all.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agotest-config: setup git directory
Jeff King [Tue, 13 Sep 2016 03:24:10 +0000 (20:24 -0700)] 
test-config: setup git directory

The t1308 test script uses our test-config helper to read
repository-level config, but never actually sets up the
repository. This works because git_config() blindly reads
".git/config" even if we have not configured a repository.

This means that test-config won't work from a subdirectory,
though since it's just a helper for the test scripts, that's
not a big deal.

More important is that the behavior of git_config() is going
to change, and we want to make sure that t1308 continues to
work. We can just use setup_git_directory(), and not the
gentle form; there's no point in being flexible, as it's
just a helper for the tests.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agot1302: use "git -C"
Jeff King [Tue, 13 Sep 2016 03:24:00 +0000 (20:24 -0700)] 
t1302: use "git -C"

This is shorter, and saves a subshell.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agopager: handle early config
Jeff King [Tue, 13 Sep 2016 03:23:56 +0000 (20:23 -0700)] 
pager: handle early config

The pager code is often run early in the git.c startup,
before we have actually found the repository. When we ask
git_config() to look for values like core.pager, it doesn't
know where to find the repo-level config, and will blindly
examine ".git/config" if it exists. That's why t7006 shows
that many pager-related features happen to work from the
top-level of a repository, but not from a subdirectory.

This patch pulls that ".git/config" hack explicitly into the
pager code. There are two reasons for this:

  1. We'd like to clean up the git_config() behavior, as
     looking at ".git/config" when we do not have a
     configured repository is often the wrong thing to do.
     But we'd prefer not to break the pager config any worse
     than it already is.

  2. It's one very tiny step on the road to ultimately
     making the pager config work consistently. If we
     eventually get an equivalent of setup_git_directory()
     that _just_ finds the directory and doesn't chdir() or
     set up any global state, we could plug it in here
     (instead of blindly looking at ".git/config").

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agopager: use callbacks instead of configset
Jeff King [Tue, 13 Sep 2016 03:23:52 +0000 (20:23 -0700)] 
pager: use callbacks instead of configset

While the cached configset interface is more pleasant to
use, it is not appropriate for "early" config like pager
setup, which must sometimes do tricky things like reading
from ".git/config" even when we have not set up the
repository.

As a preparatory step to handling these cases better, let's
switch back to using the callback interface, which gives us
more control.

Note that this is essentially a revert of 586f414 (pager.c:
replace `git_config()` with `git_config_get_value()`,
2014-08-07), but with some minor style fixups and
modernizations.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agopager: make pager_program a file-local static
Jeff King [Tue, 13 Sep 2016 03:23:48 +0000 (20:23 -0700)] 
pager: make pager_program a file-local static

This variable is only ever used by the routines in pager.c,
and other parts of the code should always use those routines
(like git_pager()) to make decisions about which pager to
use. Let's reduce its scope to prevent accidents.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agopager: stop loading git_default_config()
Jeff King [Tue, 13 Sep 2016 03:23:44 +0000 (20:23 -0700)] 
pager: stop loading git_default_config()

In git_pager(), we really only care about getting the value
of core.pager. But to do so, we use the git_default_config()
callback, which loads many other values. Ordinarily it
isn't a big deal to load this config an extra time, as it
simply overwrites the values from the previous run. But it's
a bad idea here, for two reasons:

  1. The pager setup may be called very early in the
     program, before we have found the git repository. As a
     result, we may fail to read the correct repo-level
     config file.  This is a problem for core.pager, too,
     but we should at least try to minimize the pollution to
     other configured values.

  2. Because we call setup_pager() from git.c, basically
     every builtin command _may_ end up reading this config
     and getting an implicit git_default_config() setup.

     Which doesn't sound like a terrible thing, except that
     we don't do it consistently; it triggers only when
     stdout is a tty. So if a command forgets to load the
     default config itself (but depends on it anyway), it
     may appear to work, and then mysteriously fail when the
     pager is not in use.

We can improve this by loading _just_ the core.pager config
from git_pager().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agopager: remove obsolete comment
Jeff King [Tue, 13 Sep 2016 03:23:40 +0000 (20:23 -0700)] 
pager: remove obsolete comment

The comment at the top of pager.c claims that we've split
the code out so that Windows can do something different.
This dates back to f67b45f (Introduce trivial new pager.c
helper infrastructure, 2006-02-28), because the original
implementation used fork(). Later, we ended up sticking the
Windows #ifdefs into this file anyway. And then even later,
in ea27a18 (spawn pager via run_command interface,
2008-07-22) we unified the implementations.

So these days this comment is really saying nothing at all.
Let's drop it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agodiff: always try to set up the repository
Jeff King [Tue, 13 Sep 2016 03:23:36 +0000 (20:23 -0700)] 
diff: always try to set up the repository

If we see an explicit "--no-index", we do not bother calling
setup_git_directory_gently() at all. This means that we may
miss out on reading repo-specific config.

It's arguable whether this is correct or not. If we were
designing from scratch, making "git diff --no-index"
completely ignore the repository makes some sense. But we
are nowhere near scratch, so let's look at the existing
behavior:

  1. If you're in the top-level of a repository and run an
     explicit "diff --no-index", the config subsystem falls
     back to reading ".git/config", and we will respect repo
     config.

  2. If you're in a subdirectory of a repository, then we
     still try to read ".git/config", but it generally
     doesn't exist. So "diff --no-index" there does not
     respect repo config.

  3. If you have $GIT_DIR set in the environment, we read
     and respect $GIT_DIR/config,

  4. If you run "git diff /tmp/foo /tmp/bar" to get an
     implicit no-index, we _do_ run the repository setup,
     and set $GIT_DIR (or respect an existing $GIT_DIR
     variable). We find the repo config no matter where we
     started, and respect it.

So we already respect the repository config in a number of
common cases, and case (2) is the only one that does not.
And at least one of our tests, t4034, depends on case (1)
behaving as it does now (though it is just incidental, not
an explicit test for this behavior).

So let's bring case (2) in line with the others by always
running the repository setup, even with an explicit
"--no-index". We shouldn't need to change anything else, as the
implicit case already handles the prefix.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agodiff: handle --no-index prefixes consistently
Jeff King [Tue, 13 Sep 2016 03:23:32 +0000 (20:23 -0700)] 
diff: handle --no-index prefixes consistently

If we see an explicit "git diff --no-index ../foo ../bar",
then we do not set up the git repository at all (we already
know we are in --no-index mode, so do not have to check "are
we in a repository?"), and hence have no "prefix" within the
repository. A patch generated by this command will have the
filenames "a/../foo" and "b/../bar", no matter which
directory we are in with respect to any repository.

However, in the implicit case, where we notice that the
files are outside the repository, we will have chdir()'d to
the top-level of the repository. We then feed the prefix
back to the diff machinery. As a result, running the same
diff from a subdirectory will result in paths that look like
"a/subdir/../../foo".

Besides being unnecessarily long, this may also be confusing
to the user: they don't care about the subdir or the
repository at all; it's just where they happened to be when
running the command. We should treat this the same as the
explicit --no-index case.

One way to address this would be to chdir() back to the
original path before running our diff. However, that's a bit
hacky, as we would also need to adjust $GIT_DIR, which could
be a relative path from our top-level.

Instead, we can reuse the diff machinery's RELATIVE_NAME
option, which automatically strips off the prefix. Note that
this _also_ restricts the diff to this relative prefix, but
that's OK for our purposes: we queue our own diff pairs
manually, and do not rely on that part of the diff code.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agodiff: skip implicit no-index check when given --no-index
Jeff King [Tue, 13 Sep 2016 03:23:27 +0000 (20:23 -0700)] 
diff: skip implicit no-index check when given --no-index

We can invoke no-index mode in two ways: by an explicit
request from the user, or implicitly by noticing that we
have two paths, and at least one is outside the repository.

If the user already told us --no-index, there is no need for
us to do the implicit test at all.  However, we currently
do, and downgrade our "explicit" to DIFF_NO_INDEX_IMPLICIT.

This doesn't have any user-visible behavior, though it's not
immediately obvious why. We only trigger the implicit check
when we have exactly two non-option arguments. And the only
code that cares about implicit versus explicit is an error
message that we show when we _don't_ have two non-option
arguments.

However, it's worth fixing anyway. Besides being slightly
more efficient, it makes the code easier to follow, which
will help when we modify it in future patches.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agopatch-id: use RUN_SETUP_GENTLY
Jeff King [Tue, 13 Sep 2016 03:23:22 +0000 (20:23 -0700)] 
patch-id: use RUN_SETUP_GENTLY

Patch-id does not require a repository because it is just
processing the incoming diff on stdin, but it may look at
git config for keys like patchid.stable.

Even though we do not setup_git_directory(), this works from
the top-level of a repository because we blindly look at
".git/config" in this case. But as the included test
demonstrates, it does not work from a subdirectory.

We can fix it by using RUN_SETUP_GENTLY. We do not take any
filenames from the user on the command line, so there's no
need to adjust them via prefix_filename().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 years agohash-object: always try to set up the git repository
Jeff King [Tue, 13 Sep 2016 03:23:17 +0000 (20:23 -0700)] 
hash-object: always try to set up the git repository

When "hash-object" is run without "-w", we don't need to be
in a git repository at all; we can just hash the object and
write its sha1 to stdout. However, if we _are_ in a git
repository, we would want to know that so we can follow the
normal rules for respecting config, .gitattributes, etc.

This happens to work at the top-level of a git repository
because we blindly read ".git/config", but as the included
test shows, it does not work when you are in a subdirectory.

The solution is to just do a "gentle" setup in this case. We
already take care to use prefix_filename() on any filename
arguments we get (to handle the "-w" case), so we don't need
to do anything extra to handle the side effects of repo
setup.

An alternative would be to specify RUN_SETUP_GENTLY for this
command in git.c, and then die if "-w" is set but we are not
in a repository. However, the error messages generated at
the time of setup_git_directory() are more detailed, so it's
better to find out which mode we are in, and then call the
appropriate function.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 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>
7 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>
7 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>
7 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

7 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>