git/git.git
5 years agogit-p4: do not terminate creating tag for unknown commit
Luke Diamand [Thu, 27 Aug 2015 07:18:57 +0000 (08:18 +0100)]
git-p4: do not terminate creating tag for unknown commit

If p4 reports a tag for a commit that git-p4 does not know
about (e.g. because it references a P4 changelist that was
imported prior to the point at which the repo was cloned into
git), make sure that the error is correctly caught and handled.
rather than just crashing.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agogit-p4: failing test for ignoring invalid p4 labels
Luke Diamand [Thu, 27 Aug 2015 07:18:56 +0000 (08:18 +0100)]
git-p4: failing test for ignoring invalid p4 labels

When importing a label which references a commit that git-p4 does
not know about, git-p4 should skip it and go on to process other
labels that can be imported.

Instead it crashes when attempting to find the missing commit in
the git history. This test demonstrates the problem.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSixth batch for 2.6
Junio C Hamano [Wed, 26 Aug 2015 22:47:48 +0000 (15:47 -0700)]
Sixth batch for 2.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'sg/help-group'
Junio C Hamano [Wed, 26 Aug 2015 22:45:39 +0000 (15:45 -0700)]
Merge branch 'sg/help-group'

We rewrote one of the build scripts in Perl but this reimplements
in Bourne shell.

* sg/help-group:
  generate-cmdlist: re-implement as shell script

5 years agoMerge branch 'sg/wt-status-header-inclusion'
Junio C Hamano [Wed, 26 Aug 2015 22:45:38 +0000 (15:45 -0700)]
Merge branch 'sg/wt-status-header-inclusion'

* sg/wt-status-header-inclusion:
  wt-status: move #include "pathspec.h" to the header

5 years agoMerge branch 'as/docfix-reflog-expire-unreachable'
Junio C Hamano [Wed, 26 Aug 2015 22:45:37 +0000 (15:45 -0700)]
Merge branch 'as/docfix-reflog-expire-unreachable'

* as/docfix-reflog-expire-unreachable:
  Documentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable

5 years agoMerge branch 'sg/t3020-typofix'
Junio C Hamano [Wed, 26 Aug 2015 22:45:35 +0000 (15:45 -0700)]
Merge branch 'sg/t3020-typofix'

* sg/t3020-typofix:
  t3020: fix typo in test description

5 years agoMerge branch 'jc/calloc-pathspec'
Junio C Hamano [Wed, 26 Aug 2015 22:45:33 +0000 (15:45 -0700)]
Merge branch 'jc/calloc-pathspec'

* jc/calloc-pathspec:
  ps_matched: xcalloc() takes nmemb and then element size

5 years agoMerge branch 'dt/untracked-sparse'
Junio C Hamano [Wed, 26 Aug 2015 22:45:33 +0000 (15:45 -0700)]
Merge branch 'dt/untracked-sparse'

Test update.

* dt/untracked-sparse:
  t7063: use --force-untracked-cache to speed up a bit

5 years agoMerge branch 'pt/am-builtin'
Junio C Hamano [Wed, 26 Aug 2015 22:45:33 +0000 (15:45 -0700)]
Merge branch 'pt/am-builtin'

Rewrite "am" in "C".

* pt/am-builtin:
  i18n: am: fix typo in description of -b option

5 years agoMerge branch 'pt/am-builtin-abort-fix'
Junio C Hamano [Wed, 26 Aug 2015 22:45:32 +0000 (15:45 -0700)]
Merge branch 'pt/am-builtin-abort-fix'

"git am" that was recently reimplemented in C had a performance
regression in "git am --abort" that goes back to the version before
an attempted (and failed) patch application.

* pt/am-builtin-abort-fix:
  am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

5 years agoMerge branch 'po/po-readme'
Junio C Hamano [Wed, 26 Aug 2015 22:45:32 +0000 (15:45 -0700)]
Merge branch 'po/po-readme'

* po/po-readme:
  po/README: Update directions for l10n contributors

5 years agoMerge branch 'jv/send-email-selective-smtp-auth'
Junio C Hamano [Wed, 26 Aug 2015 22:45:31 +0000 (15:45 -0700)]
Merge branch 'jv/send-email-selective-smtp-auth'

"git send-email" learned a new option --smtp-auth to limit the SMTP
AUTH mechanisms to be used to a subset of what the system library
supports.

* jv/send-email-selective-smtp-auth:
  send-email: provide whitelist of SMTP AUTH mechanisms

5 years agoMerge branch 'ep/http-configure-ssl-version'
Junio C Hamano [Wed, 26 Aug 2015 22:45:31 +0000 (15:45 -0700)]
Merge branch 'ep/http-configure-ssl-version'

A new configuration variable http.sslVersion can be used to specify
what specific version of SSL/TLS to use to make a connection.

* ep/http-configure-ssl-version:
  http: add support for specifying the SSL version

5 years agoMerge branch 'ss/fix-config-fd-leak'
Junio C Hamano [Wed, 26 Aug 2015 22:45:30 +0000 (15:45 -0700)]
Merge branch 'ss/fix-config-fd-leak'

* ss/fix-config-fd-leak:
  config: close config file handle in case of error

5 years agoi18n: am: fix typo in description of -b option
Jiang Xin [Wed, 26 Aug 2015 15:51:19 +0000 (23:51 +0800)]
i18n: am: fix typo in description of -b option

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSync with maint
Junio C Hamano [Tue, 25 Aug 2015 23:09:30 +0000 (16:09 -0700)]
Sync with maint

* maint:
  pull: pass upload_pack only when it was given

5 years agoMerge branch 'jk/guess-repo-name-regression-fix' into maint
Junio C Hamano [Tue, 25 Aug 2015 23:09:17 +0000 (16:09 -0700)]
Merge branch 'jk/guess-repo-name-regression-fix' into maint

"git clone $URL" in recent releases of Git contains a regression in
the code that invents a new repository name incorrectly based on
the $URL.  This has been corrected.

* jk/guess-repo-name-regression-fix:
  clone: use computed length in guess_dir_name
  clone: add tests for output directory

5 years agoMerge branch 'jk/test-with-x' into maint
Junio C Hamano [Tue, 25 Aug 2015 23:09:16 +0000 (16:09 -0700)]
Merge branch 'jk/test-with-x' into maint

Running tests with the "-x" option to make them verbose had some
unpleasant interactions with other features of the test suite.

* jk/test-with-x:
  test-lib: disable trace when test is not verbose
  test-lib: turn off "-x" tracing during chain-lint check

5 years agoMerge branch 'sb/check-return-from-read-ref' into maint
Junio C Hamano [Tue, 25 Aug 2015 23:09:16 +0000 (16:09 -0700)]
Merge branch 'sb/check-return-from-read-ref' into maint

* sb/check-return-from-read-ref:
  transport-helper: die on errors reading refs.

5 years agoMerge branch 'mm/pull-upload-pack' into maint
Junio C Hamano [Tue, 25 Aug 2015 23:09:15 +0000 (16:09 -0700)]
Merge branch 'mm/pull-upload-pack' into maint

"git pull" in recent releases of Git has a regression in the code
that allows custom path to the --upload-pack=<program>.  This has
been corrected.

Note that this is irrelevant for 'master' with "git pull" rewritten
in C.

* mm/pull-upload-pack:
  pull: pass upload_pack only when it was given
  pull.sh: quote $upload_pack when passing it to git-fetch

5 years agopull: pass upload_pack only when it was given
Junio C Hamano [Tue, 25 Aug 2015 23:06:53 +0000 (16:06 -0700)]
pull: pass upload_pack only when it was given

The upload_pack shell variable is initialized to an empty string, so
conditional expansion with ${upload_pack+"$upload_pack"} would not
work very well.  You need a colon there.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoFifth batch for 2.6
Junio C Hamano [Tue, 25 Aug 2015 22:00:15 +0000 (15:00 -0700)]
Fifth batch for 2.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'cb/open-noatime-clear-errno'
Junio C Hamano [Tue, 25 Aug 2015 21:57:10 +0000 (14:57 -0700)]
Merge branch 'cb/open-noatime-clear-errno'

When trying to see that an object does not exist, a state errno
leaked from our "first try to open a packfile with O_NOATIME and
then if it fails retry without it" logic on a system that refuses
O_NOATIME.  This confused us and caused us to die, saying that the
packfile is unreadable, when we should have just reported that the
object does not exist in that packfile to the caller.

* cb/open-noatime-clear-errno:
  git_open_noatime: return with errno=0 on success

5 years agoMerge branch 'mh/tempfile'
Junio C Hamano [Tue, 25 Aug 2015 21:57:09 +0000 (14:57 -0700)]
Merge branch 'mh/tempfile'

The "lockfile" API has been rebuilt on top of a new "tempfile" API.

* mh/tempfile:
  credential-cache--daemon: use tempfile module
  credential-cache--daemon: delete socket from main()
  gc: use tempfile module to handle gc.pid file
  lock_repo_for_gc(): compute the path to "gc.pid" only once
  diff: use tempfile module
  setup_temporary_shallow(): use tempfile module
  write_shared_index(): use tempfile module
  register_tempfile(): new function to handle an existing temporary file
  tempfile: add several functions for creating temporary files
  prepare_tempfile_object(): new function, extracted from create_tempfile()
  tempfile: a new module for handling temporary files
  commit_lock_file(): use get_locked_file_path()
  lockfile: add accessor get_lock_file_path()
  lockfile: add accessors get_lock_file_fd() and get_lock_file_fp()
  create_bundle(): duplicate file descriptor to avoid closing it twice
  lockfile: move documentation to lockfile.h and lockfile.c

5 years agoMerge branch 'pt/am-builtin-options'
Junio C Hamano [Tue, 25 Aug 2015 21:57:08 +0000 (14:57 -0700)]
Merge branch 'pt/am-builtin-options'

After "git am --opt1" stops, running "git am --opt2" pays attention
to "--opt2" only for the patch that caused the original invocation
to stop.

* pt/am-builtin-options:
  am: let --signoff override --no-signoff
  am: let command-line options override saved options
  test_terminal: redirect child process' stdin to a pty

5 years agoMerge branch 'dt/refs-pseudo'
Junio C Hamano [Tue, 25 Aug 2015 21:57:08 +0000 (14:57 -0700)]
Merge branch 'dt/refs-pseudo'

To prepare for allowing a different "ref" backend to be plugged in
to the system, update_ref()/delete_ref() have been taught about
ref-like things like MERGE_HEAD that are per-worktree (they will
always be written to the filesystem inside $GIT_DIR).

* dt/refs-pseudo:
  pseudoref: check return values from read_ref()
  sequencer: replace write_cherry_pick_head with update_ref
  bisect: use update_ref
  pseudorefs: create and use pseudoref update and delete functions
  refs: add ref_type function
  refs: introduce pseudoref and per-worktree ref concepts

5 years agoMerge branch 'dt/notes-multiple'
Junio C Hamano [Tue, 25 Aug 2015 21:57:08 +0000 (14:57 -0700)]
Merge branch 'dt/notes-multiple'

When linked worktree is used, simultaneous "notes merge" instances
for the same ref in refs/notes/* are prevented from stomping on
each other.

* dt/notes-multiple:
  notes: handle multiple worktrees
  worktrees: add find_shared_symref

5 years agoMerge branch 'nd/dwim-wildcards-as-pathspecs'
Junio C Hamano [Tue, 25 Aug 2015 21:57:07 +0000 (14:57 -0700)]
Merge branch 'nd/dwim-wildcards-as-pathspecs'

Test updates for Windows.

* nd/dwim-wildcards-as-pathspecs:
  t2019: skip test requiring '*' in a file name non Windows

5 years agoMerge branch 'jk/long-error-messages'
Junio C Hamano [Tue, 25 Aug 2015 21:57:06 +0000 (14:57 -0700)]
Merge branch 'jk/long-error-messages'

The codepath to produce error messages had a hard-coded limit to
the size of the message, primarily to avoid memory allocation while
calling die().

* jk/long-error-messages:
  vreportf: avoid intermediate buffer
  vreportf: report to arbitrary filehandles

5 years agoMerge branch 'ee/clean-remove-dirs'
Junio C Hamano [Tue, 25 Aug 2015 21:57:06 +0000 (14:57 -0700)]
Merge branch 'ee/clean-remove-dirs'

Test updates for Windows.

* ee/clean-remove-dirs:
  t7300-clean: require POSIXPERM for chmod 0 test

5 years agoMerge branch 'jh/strbuf-read-use-read-in-full'
Junio C Hamano [Tue, 25 Aug 2015 21:57:05 +0000 (14:57 -0700)]
Merge branch 'jh/strbuf-read-use-read-in-full'

strbuf_read() used to have one extra iteration (and an unnecessary
strbuf_grow() of 8kB), which was eliminated.

* jh/strbuf-read-use-read-in-full:
  strbuf_read(): skip unnecessary strbuf_grow() at eof

5 years agogenerate-cmdlist: re-implement as shell script
Eric Sunshine [Sun, 23 Aug 2015 21:31:09 +0000 (17:31 -0400)]
generate-cmdlist: re-implement as shell script

527ec39 (generate-cmdlist: parse common group commands, 2015-05-21)
replaced generate-cmdlist.sh with a more functional Perl version,
generate-cmdlist.perl. The Perl version gleans named tags from a new
"common groups" section in command-list.txt and recognizes those
tags in "command list" section entries in place of the old 'common'
tag. This allows git-help to, not only recognize, but also group
common commands.

Although the tests require Perl, 527ec39 creates an unconditional
dependence upon Perl in the build system itself, which can not be
overridden with NO_PERL. Such a dependency may be undesirable; for
instance, the 'git-lite' package in the FreeBSD ports tree is
intended as a minimal Git installation (which may, for example, be
useful on servers needing only local clone and update capability),
which, historically, has not depended upon Perl[1].

Therefore, revive generate-cmdlist.sh and extend it to recognize
"common groups" and its named tags. Retire generate-cmdlist.perl.

[1]: http://thread.gmane.org/gmane.comp.version-control.git/275905/focus=276132

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agowt-status: move #include "pathspec.h" to the header
SZEDER Gábor [Thu, 20 Aug 2015 14:06:27 +0000 (16:06 +0200)]
wt-status: move #include "pathspec.h" to the header

The declaration of 'struct wt_status' requires the declararion of 'struct
pathspec'.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoDocumentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable
Andreas Schwab [Fri, 21 Aug 2015 15:06:18 +0000 (17:06 +0200)]
Documentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable

Change <ref> to <pattern> in the description of
gc.*.reflogExpireUnreachable, since that is what the text refers to.

Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot3020: fix typo in test description
SZEDER Gábor [Thu, 20 Aug 2015 13:58:55 +0000 (15:58 +0200)]
t3020: fix typo in test description

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agops_matched: xcalloc() takes nmemb and then element size
Junio C Hamano [Thu, 20 Aug 2015 16:57:32 +0000 (09:57 -0700)]
ps_matched: xcalloc() takes nmemb and then element size

Even though multiplication is commutative, the order of arguments
should be xcalloc(nmemb, size).  ps_matched is an array of 1-byte
element whose size is the same as the number of pathspec elements.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSync with maint
Junio C Hamano [Wed, 19 Aug 2015 21:49:37 +0000 (14:49 -0700)]
Sync with maint

* maint:
  Start preparing for 2.5.1

5 years agoFourth batch for 2.6
Junio C Hamano [Wed, 19 Aug 2015 21:46:09 +0000 (14:46 -0700)]
Fourth batch for 2.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'tb/complete-rebase-i-edit-todo'
Junio C Hamano [Wed, 19 Aug 2015 21:48:56 +0000 (14:48 -0700)]
Merge branch 'tb/complete-rebase-i-edit-todo'

The command-line completion script (in contrib/) has been updated.

* tb/complete-rebase-i-edit-todo:
  completion: offer '--edit-todo' during interactive rebase

5 years agoMerge branch 'jk/git-path'
Junio C Hamano [Wed, 19 Aug 2015 21:48:56 +0000 (14:48 -0700)]
Merge branch 'jk/git-path'

git_path() and mkpath() are handy helper functions but it is easy
to misuse, as the callers need to be careful to keep the number of
active results below 4.  Their uses have been reduced.

* jk/git-path:
  memoize common git-path "constant" files
  get_repo_path: refactor path-allocation
  find_hook: keep our own static buffer
  refs.c: remove_empty_directories can take a strbuf
  refs.c: avoid git_path assignment in lock_ref_sha1_basic
  refs.c: avoid repeated git_path calls in rename_tmp_log
  refs.c: simplify strbufs in reflog setup and writing
  path.c: drop git_path_submodule
  refs.c: remove extra git_path calls from read_loose_refs
  remote.c: drop extraneous local variable from migrate_file
  prefer mkpathdup to mkpath in assignments
  prefer git_pathdup to git_path in some possibly-dangerous cases
  add_to_alternates_file: don't add duplicate entries
  t5700: modernize style
  cache.h: complete set of git_path_submodule helpers
  cache.h: clarify documentation for git_path, et al

5 years agoMerge branch 'jc/finalize-temp-file'
Junio C Hamano [Wed, 19 Aug 2015 21:48:55 +0000 (14:48 -0700)]
Merge branch 'jc/finalize-temp-file'

Long overdue micro clean-up.

* jc/finalize-temp-file:
  sha1_file.c: rename move_temp_to_file() to finalize_object_file()

5 years agoMerge branch 'ps/guess-repo-name-at-root'
Junio C Hamano [Wed, 19 Aug 2015 21:48:54 +0000 (14:48 -0700)]
Merge branch 'ps/guess-repo-name-at-root'

"git clone $URL", when cloning from a site whose sole purpose is to
host a single repository (hence, no path after <scheme>://<site>/),
tried to use the site name as the new repository name, but did not
remove username or password when <site> part was of the form
<user>@<pass>:<host>.  The code is taught to redact these.

* ps/guess-repo-name-at-root:
  clone: abort if no dir name could be guessed
  clone: do not use port number as dir name
  clone: do not include authentication data in guessed dir

5 years agoMerge branch 'jk/guess-repo-name-regression-fix'
Junio C Hamano [Wed, 19 Aug 2015 21:48:54 +0000 (14:48 -0700)]
Merge branch 'jk/guess-repo-name-regression-fix'

"git clone $URL" in recent releases of Git contains a regression in
the code that invents a new repository name incorrectly based on
the $URL.  This has been corrected.

* jk/guess-repo-name-regression-fix:
  clone: use computed length in guess_dir_name
  clone: add tests for output directory

5 years agoMerge branch 'jk/negative-hiderefs'
Junio C Hamano [Wed, 19 Aug 2015 21:48:53 +0000 (14:48 -0700)]
Merge branch 'jk/negative-hiderefs'

A negative !ref entry in multi-value transfer.hideRefs
configuration can be used to say "don't hide this one".

* jk/negative-hiderefs:
  refs: support negative transfer.hideRefs
  docs/config.txt: reorder hideRefs config

5 years agoMerge branch 'jk/test-with-x'
Junio C Hamano [Wed, 19 Aug 2015 21:48:53 +0000 (14:48 -0700)]
Merge branch 'jk/test-with-x'

Running tests with the "-x" option to make them verbose had some
unpleasant interactions with other features of the test suite.

* jk/test-with-x:
  test-lib: disable trace when test is not verbose
  test-lib: turn off "-x" tracing during chain-lint check

5 years agoMerge branch 'ps/t1509-chroot-test-fixup'
Junio C Hamano [Wed, 19 Aug 2015 21:48:52 +0000 (14:48 -0700)]
Merge branch 'ps/t1509-chroot-test-fixup'

t1509 test that requires a dedicated VM environment had some
bitrot, which has been corrected.

* ps/t1509-chroot-test-fixup:
  tests: fix cleanup after tests in t1509-root-worktree
  tests: fix broken && chains in t1509-root-worktree

5 years agoMerge branch 'sb/check-return-from-read-ref'
Junio C Hamano [Wed, 19 Aug 2015 21:48:52 +0000 (14:48 -0700)]
Merge branch 'sb/check-return-from-read-ref'

* sb/check-return-from-read-ref:
  transport-helper: die on errors reading refs.

5 years agoMerge branch 'mm/pull-upload-pack'
Junio C Hamano [Wed, 19 Aug 2015 21:48:51 +0000 (14:48 -0700)]
Merge branch 'mm/pull-upload-pack'

"git pull" in recent releases of Git has a regression in the code
that allows custom path to the --upload-pack=<program>.  This has
been corrected.

Note that this is irrelevant for 'master' with "git pull" rewritten
in C.

* mm/pull-upload-pack:
  pull.sh: quote $upload_pack when passing it to git-fetch

5 years agoStart preparing for 2.5.1
Junio C Hamano [Wed, 19 Aug 2015 21:26:31 +0000 (14:26 -0700)]
Start preparing for 2.5.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'ta/docfix-index-format-tech' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:34 +0000 (14:41 -0700)]
Merge branch 'ta/docfix-index-format-tech' into maint

* ta/docfix-index-format-tech:
  typofix for index-format.txt

5 years agoMerge branch 'sb/parse-options-codeformat' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:33 +0000 (14:41 -0700)]
Merge branch 'sb/parse-options-codeformat' into maint

* sb/parse-options-codeformat:
  parse-options: align curly braces for all options

5 years agoMerge branch 'sb/remove-unused-var-from-builtin-add' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:33 +0000 (14:41 -0700)]
Merge branch 'sb/remove-unused-var-from-builtin-add' into maint

* sb/remove-unused-var-from-builtin-add:
  add: remove dead code

5 years agoMerge branch 'kn/tag-doc-fix' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:32 +0000 (14:41 -0700)]
Merge branch 'kn/tag-doc-fix' into maint

* kn/tag-doc-fix:
  Documentation/tag: remove double occurance of "<pattern>"

5 years agoMerge branch 'es/doc-clean-outdated-tools' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:31 +0000 (14:41 -0700)]
Merge branch 'es/doc-clean-outdated-tools' into maint

* es/doc-clean-outdated-tools:
  Documentation/git-tools: retire manually-maintained list
  Documentation/git-tools: drop references to defunct tools
  Documentation/git-tools: fix item text formatting
  Documentation/git-tools: improve discoverability of Git wiki
  Documentation/git: drop outdated Cogito reference

5 years agoMerge branch 'nd/export-worktree' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:30 +0000 (14:41 -0700)]
Merge branch 'nd/export-worktree' into maint

Running an aliased command from a subdirectory when the .git thing
in the working tree is a gitfile pointing elsewhere did not work.

* nd/export-worktree:
  setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR

5 years agoMerge branch 'mh/fast-import-optimize-current-from' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:29 +0000 (14:41 -0700)]
Merge branch 'mh/fast-import-optimize-current-from' into maint

Often a fast-import stream builds a new commit on top of the
previous commit it built, and it often unconditionally emits a
"from" command to specify the first parent, which can be omitted in
such a case.  This caused fast-import to forget the tree of the
previous commit and then re-read it from scratch, which was
inefficient.  Optimize for this common case.

* mh/fast-import-optimize-current-from:
  fast-import: do less work when given "from" matches current branch head

5 years agoMerge branch 'ib/scripted-parse-opt-better-hint-string' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:29 +0000 (14:41 -0700)]
Merge branch 'ib/scripted-parse-opt-better-hint-string' into maint

The "rev-parse --parseopt" mode parsed the option specification
and the argument hint in a strange way to allow '=' and other
special characters in the option name while forbidding them from
the argument hint.  This made it impossible to define an option
like "--pair <key>=<value>" with "pair=key=value" specification,
which instead would have defined a "--pair=key <value>" option.

* ib/scripted-parse-opt-better-hint-string:
  rev-parse --parseopt: allow [*=?!] in argument hints

5 years agoMerge branch 'se/doc-checkout-ours-theirs' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:28 +0000 (14:41 -0700)]
Merge branch 'se/doc-checkout-ours-theirs' into maint

A "rebase" replays changes of the local branch on top of something
else, as such they are placed in stage #3 and referred to as
"theirs", while the changes in the new base, typically a foreign
work, are placed in stage #2 and referred to as "ours".  Clarify
the "checkout --ours/--theirs".

* se/doc-checkout-ours-theirs:
  checkout: document subtlety around --ours/--theirs

5 years agoMerge branch 'cb/uname-in-untracked' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:27 +0000 (14:41 -0700)]
Merge branch 'cb/uname-in-untracked' into maint

An experimental "untracked cache" feature used uname(2) in a
slightly unportable way.

* cb/uname-in-untracked:
  untracked: fix detection of uname(2) failure

5 years agoMerge branch 'as/sparse-checkout-removal' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:27 +0000 (14:41 -0700)]
Merge branch 'as/sparse-checkout-removal' into maint

"sparse checkout" misbehaved for a path that is excluded from the
checkout when switching between branches that differ at the path.

* as/sparse-checkout-removal:
  unpack-trees: don't update files with CE_WT_REMOVE set

5 years agoMerge branch 'db/send-pack-user-signingkey' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:26 +0000 (14:41 -0700)]
Merge branch 'db/send-pack-user-signingkey' into maint

The low-level "git send-pack" did not honor 'user.signingkey'
configuration variable when sending a signed-push.

* db/send-pack-user-signingkey:
  builtin/send-pack.c: respect user.signingkey

5 years agoMerge branch 'jx/do-not-crash-receive-pack-wo-head' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:26 +0000 (14:41 -0700)]
Merge branch 'jx/do-not-crash-receive-pack-wo-head' into maint

An attempt to delete a ref by pushing into a repositorywhose HEAD
symbolic reference points at an unborn branch that cannot be
created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
points at refs/heads/a) failed.

* jx/do-not-crash-receive-pack-wo-head:
  receive-pack: crash when checking with non-exist HEAD

5 years agoMerge branch 'da/subtree-date-confusion' into maint
Junio C Hamano [Wed, 19 Aug 2015 21:41:24 +0000 (14:41 -0700)]
Merge branch 'da/subtree-date-confusion' into maint

"git subtree" (in contrib/) depended on "git log" output to be
stable, which was a no-no.  Apply a workaround to force a
particular date format.

* da/subtree-date-confusion:
  contrib/subtree: ignore log.date configuration

5 years agoam --skip/--abort: merge HEAD/ORIG_HEAD tree into index
Paul Tan [Wed, 19 Aug 2015 08:22:22 +0000 (16:22 +0800)]
am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

After running "git am --abort", and then running "git reset --hard",
files that were not modified would still be re-checked out.

This is because clean_index() in builtin/am.c mistakenly called the
read_tree() function, which overwrites all entries in the index,
including the stat info.

"git am --skip" did not seem to have this issue because am_skip() called
am_run(), which called refresh_cache() to update the stat info. However,
there's still a performance penalty as the lack of stat info meant that
refresh_cache() would have to scan all files for changes.

Fix this by using unpack_trees() instead to merge the tree into the
index, so that the stat info from the index is kept.

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot7063: use --force-untracked-cache to speed up a bit
Nguyễn Thái Ngọc Duy [Wed, 19 Aug 2015 13:01:24 +0000 (20:01 +0700)]
t7063: use --force-untracked-cache to speed up a bit

When in the middle of t7063, we are sure untracked cache is supported,
so we can use --force-untracked-cache to skip the support detection
phase and save a few seconds. It's also good that --force-untracked-cache
is exercised in the test suite.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoThird batch for 2.6
Junio C Hamano [Mon, 17 Aug 2015 22:09:25 +0000 (15:09 -0700)]
Third batch for 2.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'dt/untracked-sparse'
Junio C Hamano [Mon, 17 Aug 2015 22:07:52 +0000 (15:07 -0700)]
Merge branch 'dt/untracked-sparse'

Allow untracked cache (experimental) to be used when sparse
checkout (experimental) is also in use.

* dt/untracked-sparse:
  untracked-cache: support sparse checkout

5 years agoMerge branch 'ta/docfix-index-format-tech'
Junio C Hamano [Mon, 17 Aug 2015 22:07:52 +0000 (15:07 -0700)]
Merge branch 'ta/docfix-index-format-tech'

* ta/docfix-index-format-tech:
  typofix for index-format.txt

5 years agoMerge branch 'mh/get-remote-group-fix'
Junio C Hamano [Mon, 17 Aug 2015 22:07:51 +0000 (15:07 -0700)]
Merge branch 'mh/get-remote-group-fix'

An off-by-one error made "git remote" to mishandle a remote with a
single letter nickname.

* mh/get-remote-group-fix:
  get_remote_group(): use skip_prefix()
  get_remote_group(): eliminate superfluous call to strcspn()
  get_remote_group(): rename local variable "space" to "wordlen"
  get_remote_group(): handle remotes with single-character names

5 years agoMerge branch 'kd/pull-rebase-autostash'
Junio C Hamano [Mon, 17 Aug 2015 22:07:50 +0000 (15:07 -0700)]
Merge branch 'kd/pull-rebase-autostash'

"git pull --rebase" has been taught to pay attention to
rebase.autostash configuration.

* kd/pull-rebase-autostash:
  pull: allow dirty tree when rebase.autostash enabled

5 years agosend-email: provide whitelist of SMTP AUTH mechanisms
Jan Viktorin [Tue, 11 Aug 2015 23:39:44 +0000 (01:39 +0200)]
send-email: provide whitelist of SMTP AUTH mechanisms

When sending an e-mail, the client and server must agree on an
authentication mechanism. Some servers (due to misconfiguration
or a bug) deny valid credentials for certain mechanisms. In this
patch, a new option --smtp-auth and configuration entry smtpAuth
are introduced. If smtp_auth is defined, it works as a whitelist
of allowed mechanisms for authentication selected from the ones
supported by the installed SASL perl library.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agopo/README: Update directions for l10n contributors
Philip Oakley [Sun, 16 Aug 2015 07:56:56 +0000 (15:56 +0800)]
po/README: Update directions for l10n contributors

Some Linux distributions (such as Ubuntu) have their own l10n workflows,
and their translations may be different.  Add notes for this case for
l10n translators.

Signed-off-by: Philip Oakley <philipoakley@iee.org>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: add support for specifying the SSL version
Elia Pinto [Fri, 14 Aug 2015 19:37:43 +0000 (21:37 +0200)]
http: add support for specifying the SSL version

Teach git about a new option, "http.sslVersion", which permits one
to specify the SSL version to use when negotiating SSL connections.
The setting can be overridden by the GIT_SSL_VERSION environment
variable.

Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoconfig: close config file handle in case of error
Sven Strickroth [Fri, 14 Aug 2015 20:21:17 +0000 (22:21 +0200)]
config: close config file handle in case of error

When updating an existing configuration file, we did not always
close the filehandle that is reading from the current configuration
file when we encountered an error (e.g. when unsetting a variable
that does not exist).

Signed-off-by: Sven Strickroth <email@cs-ware.de>
Signed-off-by: Sup Yut Sum <ch3cooli@gmail.com>
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocredential-cache--daemon: use tempfile module
Michael Haggerty [Mon, 10 Aug 2015 09:47:51 +0000 (11:47 +0200)]
credential-cache--daemon: use tempfile module

Use the tempfile module to ensure that the socket file gets deleted on
program exit.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agocredential-cache--daemon: delete socket from main()
Michael Haggerty [Mon, 10 Aug 2015 09:47:50 +0000 (11:47 +0200)]
credential-cache--daemon: delete socket from main()

main() is responsible for cleaning up the socket in the case of
errors, so it is reasonable to also make it responsible for cleaning
it up when there are no errors. This change also makes the next step
easier.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agogc: use tempfile module to handle gc.pid file
Michael Haggerty [Mon, 10 Aug 2015 09:47:49 +0000 (11:47 +0200)]
gc: use tempfile module to handle gc.pid file

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agolock_repo_for_gc(): compute the path to "gc.pid" only once
Michael Haggerty [Mon, 10 Aug 2015 09:47:48 +0000 (11:47 +0200)]
lock_repo_for_gc(): compute the path to "gc.pid" only once

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agodiff: use tempfile module
Michael Haggerty [Wed, 12 Aug 2015 17:12:01 +0000 (19:12 +0200)]
diff: use tempfile module

Also add some code comments explaining how the fields in "struct
diff_tempfile" are used.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoSecond batch for 2.6
Junio C Hamano [Wed, 12 Aug 2015 21:16:31 +0000 (14:16 -0700)]
Second batch for 2.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'sb/remove-unused-var-from-builtin-add'
Junio C Hamano [Wed, 12 Aug 2015 21:09:58 +0000 (14:09 -0700)]
Merge branch 'sb/remove-unused-var-from-builtin-add'

* sb/remove-unused-var-from-builtin-add:
  add: remove dead code

5 years agoMerge branch 'sb/parse-options-codeformat'
Junio C Hamano [Wed, 12 Aug 2015 21:09:57 +0000 (14:09 -0700)]
Merge branch 'sb/parse-options-codeformat'

* sb/parse-options-codeformat:
  parse-options: align curly braces for all options

5 years agoMerge branch 'dt/unpack-trees-cache-tree-revalidate'
Junio C Hamano [Wed, 12 Aug 2015 21:09:57 +0000 (14:09 -0700)]
Merge branch 'dt/unpack-trees-cache-tree-revalidate'

The code to perform multi-tree merges has been taught to repopulate
the cache-tree upon a successful merge into the index, so that
subsequent "diff-index --cached" (hence "status") and "write-tree"
(hence "commit") will go faster.

The same logic in "git checkout" may now be removed, but that is a
separate issue.

* dt/unpack-trees-cache-tree-revalidate:
  unpack-trees: populate cache-tree on successful merge

5 years agoMerge branch 'dt/reflog-tests'
Junio C Hamano [Wed, 12 Aug 2015 21:09:56 +0000 (14:09 -0700)]
Merge branch 'dt/reflog-tests'

Tests that assume how reflogs are represented on the filesystem too
much have been corrected.

* dt/reflog-tests:
  tests: remove some direct access to .git/logs
  t/t7509: remove unnecessary manipulation of reflog

5 years agoMerge branch 'es/worktree-add-cleanup'
Junio C Hamano [Wed, 12 Aug 2015 21:09:56 +0000 (14:09 -0700)]
Merge branch 'es/worktree-add-cleanup'

The "new-worktree-mode" hack in "checkout" that was added in
nd/multiple-work-trees topic has been removed by updating the
implementation of new "worktree add".

* es/worktree-add-cleanup: (25 commits)
  Documentation/git-worktree: fix duplicated 'from'
  Documentation/config: mention "now" and "never" for 'expire' settings
  Documentation/git-worktree: fix broken 'linkgit' invocation
  checkout: drop intimate knowledge of newly created worktree
  worktree: populate via "git reset --hard" rather than "git checkout"
  worktree: avoid resolving HEAD unnecessarily
  worktree: make setup of new HEAD distinct from worktree population
  worktree: detect branch-name/detached and error conditions locally
  worktree: add_worktree: construct worktree-population command locally
  worktree: elucidate environment variables intended for child processes
  worktree: make branch creation distinct from worktree population
  worktree: add: suppress auto-vivication with --detach and no <branch>
  worktree: make --detach mutually exclusive with -b/-B
  worktree: introduce options container
  worktree: simplify new branch (-b/-B) option checking
  worktree: improve worktree setup message
  branch: publish die_if_checked_out()
  checkout: teach check_linked_checkout() about symbolic link HEAD
  checkout: check_linked_checkout: simplify symref parsing
  checkout: check_linked_checkout: improve "already checked out" aesthetic
  ...

5 years agoMerge branch 'pt/am-builtin'
Junio C Hamano [Wed, 12 Aug 2015 21:09:55 +0000 (14:09 -0700)]
Merge branch 'pt/am-builtin'

Rewrite "am" in "C".

* pt/am-builtin: (46 commits)
  git-am: add am.threeWay config variable
  builtin-am: remove redirection to git-am.sh
  builtin-am: check for valid committer ident
  builtin-am: implement legacy -b/--binary option
  builtin-am: implement -i/--interactive
  builtin-am: support and auto-detect mercurial patches
  builtin-am: support and auto-detect StGit series files
  builtin-am: support and auto-detect StGit patches
  builtin-am: rerere support
  builtin-am: invoke post-applypatch hook
  builtin-am: invoke pre-applypatch hook
  builtin-am: invoke applypatch-msg hook
  builtin-am: support automatic notes copying
  builtin-am: invoke post-rewrite hook
  builtin-am: implement -S/--gpg-sign, commit.gpgsign
  builtin-am: implement --committer-date-is-author-date
  builtin-am: implement --ignore-date
  builtin-am: pass git-apply's options to git-apply
  builtin-am: implement --[no-]scissors
  builtin-am: support --keep-cr, am.keepcr
  ...

5 years agoMerge branch 'es/worktree-add'
Junio C Hamano [Wed, 12 Aug 2015 21:09:54 +0000 (14:09 -0700)]
Merge branch 'es/worktree-add'

Remove remaining cruft from  "git checkout --to", which
transitioned to "git worktree add".

* es/worktree-add:
  config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
  Documentation/git-worktree: wordsmith worktree-related manpages
  Documentation/config: fix stale "git prune --worktree" reference
  Documentation/git-worktree: fix incorrect reference to file "locked"
  Documentation/git-worktree: consistently use term "linked working tree"

5 years agoMerge branch 'ad/bisect-cleanup'
Junio C Hamano [Wed, 12 Aug 2015 21:09:53 +0000 (14:09 -0700)]
Merge branch 'ad/bisect-cleanup'

Code and documentation clean-up to "git bisect".

* ad/bisect-cleanup:
  bisect: don't mix option parsing and non-trivial code
  bisect: simplify the addition of new bisect terms
  bisect: replace hardcoded "bad|good" by variables
  Documentation/bisect: revise overall content
  Documentation/bisect: move getting help section to the end
  bisect: correction of typo

5 years agogit_open_noatime: return with errno=0 on success
Clemens Buchacher [Tue, 4 Aug 2015 08:24:29 +0000 (10:24 +0200)]
git_open_noatime: return with errno=0 on success

In read_sha1_file_extended we die if read_object fails with a fatal
error. We detect a fatal error if errno is non-zero and is not
ENOENT. If the object could not be read because it does not exist,
this is not considered a fatal error and we want to return NULL.

Somewhere down the line, read_object calls git_open_noatime to open
a pack index file, for example. We first try open with O_NOATIME.
If O_NOATIME fails with EPERM, we retry without O_NOATIME. When the
second open succeeds, errno is however still set to EPERM from the
first attempt. When we finally determine that the object does not
exist, read_object returns NULL and read_sha1_file_extended dies
with a fatal error:

    fatal: failed to read object <sha1>: Operation not permitted

Fix this by resetting errno to zero before we call open again.

Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Clemens Buchacher <clemens.buchacher@intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoam: let --signoff override --no-signoff
Paul Tan [Tue, 4 Aug 2015 14:08:51 +0000 (22:08 +0800)]
am: let --signoff override --no-signoff

After resolving a conflicting patch, a user may wish to sign off the
patch to declare that the patch has been modified. As such, the user
will expect that running "git am --signoff --continue" will append the
signoff to the commit message.

However, the --signoff option is only taken into account during the
mail-parsing stage. If the --signoff option is set, then the signoff
will be appended to the commit message. Since the mail-parsing stage
comes before the patch application stage, the --signoff option, if
provided on the command-line when resuming, will have no effect at all.

We cannot move the append_signoff() call to the patch application stage
as the applypatch-msg hook and interactive mode, which run before patch
application, may expect the signoff to be there.

Fix this by taking note if the user explictly set the --signoff option
on the command-line, and append the signoff to the commit message when
resuming if so.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoam: let command-line options override saved options
Paul Tan [Tue, 4 Aug 2015 14:08:50 +0000 (22:08 +0800)]
am: let command-line options override saved options

When resuming, git-am mistakenly ignores command-line options.

For instance, when a patch fails to apply with "git am patch",
subsequently running "git am --3way" would not cause git-am to fall
back on attempting a threeway merge.  This occurs because by default
the --3way option is saved as "false", and the saved am options are
loaded after the command-line options are parsed, thus overwriting
the command-line options when resuming.

Fix this by moving the am_load() function call before parse_options(),
so that command-line options will override the saved am options.

The purpose of supporting this use case is to enable users to "wiggle"
that one conflicting patch. As such, it is expected that the
command-line options do not affect subsequent applied patches. Implement
this by calling am_load() once we apply the conflicting patch
successfully.

Noticed-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agotest_terminal: redirect child process' stdin to a pty
Paul Tan [Tue, 4 Aug 2015 14:08:49 +0000 (22:08 +0800)]
test_terminal: redirect child process' stdin to a pty

When resuming, git-am detects if we are trying to feed it patches or not
by checking if stdin is a TTY.

However, the test library redirects stdin to /dev/null. This makes it
difficult, for instance, to test the behavior of "git am -3" when
resuming, as git-am will think we are trying to feed it patches and
error out.

Support this use case by extending test-terminal.perl to create a
pseudo-tty for the child process' standard input as well.

Note that due to the way the code is structured, the child's stdin
pseudo-tty will be closed when we finish reading from our stdin. This
means that in the common case, where our stdin is attached to /dev/null,
the child's stdin pseudo-tty will be closed immediately. Some operations
like isatty(), which git-am uses, require the file descriptor to be
open, and hence if the success of the command depends on such functions,
test_terminal's stdin should be redirected to a source with large amount
of data to ensure that the child's stdin is not closed, e.g.

test_terminal git am --3way </dev/zero

Cc: Jonathan Nieder <jrnieder@gmail.com>
Cc: Jeff King <peff@peff.net>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agopseudoref: check return values from read_ref()
David Turner [Wed, 15 Jul 2015 22:05:28 +0000 (18:05 -0400)]
pseudoref: check return values from read_ref()

These codepaths attempt to compare the "expected" current value with
the actual current value, but did not check if we successfully read
the current value before comparison.

Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot2019: skip test requiring '*' in a file name non Windows
Johannes Sixt [Tue, 11 Aug 2015 20:38:46 +0000 (22:38 +0200)]
t2019: skip test requiring '*' in a file name non Windows

A test case introduced by ae454f61 (Add tests for wildcard "path vs ref"
disambiguation) allocates a file named '*.c'. This does not work on
Windows, because the OS forbids file names containing wildcard
characters. The test case fails where the shell attempts to allocate the
file. Skip the test on Windows.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot7300-clean: require POSIXPERM for chmod 0 test
Johannes Sixt [Tue, 11 Aug 2015 20:29:48 +0000 (22:29 +0200)]
t7300-clean: require POSIXPERM for chmod 0 test

A test case introduced by 91479b9c (t7300: add tests to document
behavior of clean and nested git) uses 'chmod 0' to verify that a
subdirectory that has an unreadable .git file is not removed. This can
work only when the system pays attention to the permissions set with
'chmod'. Therefore, set the POSIXPERM prerequisite on the test case.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agovreportf: avoid intermediate buffer
Jeff King [Tue, 11 Aug 2015 18:13:59 +0000 (14:13 -0400)]
vreportf: avoid intermediate buffer

When we call "die(fmt, args...)", we end up in vreportf with
two pieces of information:

  1. The prefix "fatal: "

  2. The original fmt and va_list of args.

We format item (2) into a temporary buffer, and then fprintf
the prefix and the temporary buffer, along with a newline.
This has the unfortunate side effect of truncating any error
messages that are longer than 4096 bytes.

Instead, let's use separate calls for the prefix and
newline, letting us hand the item (2) directly to vfprintf.
This is essentially undoing d048a96 (print
warning/error/fatal messages in one shot, 2007-11-09), which
tried to have the whole output end up in a single `write`
call.

But we can address this instead by explicitly requesting
line-buffering for the output handle, and by making sure
that the buffer is empty before we start (so that outputting
the prefix does not cause a flush due to hitting the buffer
limit).

We may still break the output into two writes if the content
is larger than our buffer, but there's not much we can do
there; depending on the stdio implementation, that might
have happened even with a single fprintf call.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agovreportf: report to arbitrary filehandles
Jeff King [Tue, 11 Aug 2015 18:06:15 +0000 (14:06 -0400)]
vreportf: report to arbitrary filehandles

The vreportf function always goes to stderr, but run-command
wants child errors to go to the parent's original stderr. To
solve this, commit a5487dd duplicates the stderr fd and
installs die and error handlers to direct the output
appropriately (which later turned into the vwritef
function). This has two downsides, though:

  - we make multiple calls to write(), which contradicts the
    "write at once" logic from d048a96 (print
    warning/error/fatal messages in one shot, 2007-11-09).

  - the custom handlers basically duplicate the normal
    handlers.  They're only a few lines of code, but we
    should not have to repeat the magic "exit(128)", for
    example.

We can solve the first by using fdopen() on the duplicated
descriptor. We can't pass this to vreportf, but we could
introduce a new vreportf_to to handle it.

However, to fix the second problem, we instead introduce a
new "set_error_handle" function, which lets the normal
vreportf calls output to a handle besides stderr. Thus we
can get rid of our custom handlers entirely, and just ask
the regular handlers to output to our new descriptor.

And as vwritef has no more callers, it can just go away.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agonotes: handle multiple worktrees
David Turner [Mon, 10 Aug 2015 17:52:45 +0000 (13:52 -0400)]
notes: handle multiple worktrees

Before creating NOTES_MERGE_REF, check NOTES_MERGE_REF using
find_shared_symref and die if we find one.  This prevents simultaneous
merges to the same notes branch from different worktrees.

Signed-off-by: David Turner <dturner@twopensource.com>
Reviewed-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoworktrees: add find_shared_symref
David Turner [Mon, 10 Aug 2015 17:52:44 +0000 (13:52 -0400)]
worktrees: add find_shared_symref

Add a new function, find_shared_symref, which contains the heart of
die_if_checked_out, but works for any symref, not just HEAD.  Refactor
die_if_checked_out to use the same infrastructure as
find_shared_symref.

Soon, we will use find_shared_symref to protect notes merges in
worktrees.

Signed-off-by: David Turner <dturner@twopensource.com>
Reviewed-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>