]> Kevux Git Server - rit/log
rit
11 years agoMerge branch 'es/squelch-openssl-warnings-on-macosx'
Junio C Hamano [Sun, 22 Feb 2015 20:28:30 +0000 (12:28 -0800)]
Merge branch 'es/squelch-openssl-warnings-on-macosx'

An earlier workaround to squelch unhelpful deprecation warnings
from the complier on Mac OSX unnecessarily set minimum required
version of the OS, which the user might want to raise (or lower)
for other reasons.

* es/squelch-openssl-warnings-on-macosx:
  git-compat-util: do not step on MAC_OS_X_VERSION_MIN_REQUIRED

11 years agoMerge branch 'tc/curl-vernum-output-broken-in-7.11'
Junio C Hamano [Sun, 22 Feb 2015 20:28:29 +0000 (12:28 -0800)]
Merge branch 'tc/curl-vernum-output-broken-in-7.11'

Certain older vintages of cURL give irregular output from
"curl-config --vernum", which confused our build system.

* tc/curl-vernum-output-broken-in-7.11:
  Makefile: handle broken curl version number in version check

11 years agoMerge branch 'jk/prune-mtime'
Junio C Hamano [Sun, 22 Feb 2015 20:28:28 +0000 (12:28 -0800)]
Merge branch 'jk/prune-mtime'

In v2.2.0, we broke "git prune" that runs in a repository that
borrows from an alternate object store.

* jk/prune-mtime:
  sha1_file: fix iterating loose alternate objects
  for_each_loose_file_in_objdir: take an optional strbuf path

11 years agoMerge branch 'jc/diff-files-ita'
Junio C Hamano [Sun, 22 Feb 2015 20:28:27 +0000 (12:28 -0800)]
Merge branch 'jc/diff-files-ita'

Code cleanup.

* jc/diff-files-ita:
  run_diff_files(): clarify computation of sha1 validity

11 years agoMerge branch 'ps/submodule-sanitize-path-upon-add'
Junio C Hamano [Sun, 22 Feb 2015 20:28:26 +0000 (12:28 -0800)]
Merge branch 'ps/submodule-sanitize-path-upon-add'

"git submodule add" failed to squash "path/to/././submodule" to
"path/to/submodule".

* ps/submodule-sanitize-path-upon-add:
  git-submodule.sh: fix '/././' path normalization

11 years agoMerge branch 'ab/merge-file-prefix'
Junio C Hamano [Sun, 22 Feb 2015 20:28:25 +0000 (12:28 -0800)]
Merge branch 'ab/merge-file-prefix'

"git merge-file" did not work correctly in a subdirectory.

* ab/merge-file-prefix:
  merge-file: correctly open files when in a subdir

11 years agoMerge branch 'es/blame-commit-info-fix'
Junio C Hamano [Sun, 22 Feb 2015 20:28:24 +0000 (12:28 -0800)]
Merge branch 'es/blame-commit-info-fix'

"git blame" died, trying to free an uninitialized piece of memory.

* es/blame-commit-info-fix:
  builtin/blame: destroy initialized commit_info only

11 years agoMerge branch 'ss/check-builtins-on-windows'
Junio C Hamano [Sun, 22 Feb 2015 20:28:23 +0000 (12:28 -0800)]
Merge branch 'ss/check-builtins-on-windows'

* ss/check-builtins-on-windows:
  check-builtins: strip executable suffix $X when enumerating builtins

11 years agot5500: show user name and host in diag-url
Torsten Bögershausen [Sat, 21 Feb 2015 15:52:55 +0000 (16:52 +0100)]
t5500: show user name and host in diag-url

The URL for ssh may have include a username before the hostname,
like ssh://user@host/repo.
When literal IPV6 addresses are used together with a username,
the substring "user@[::1]" must be converted into "user@::1".

Make that conversion visible for the user, and write userandhost
in the diagnostics

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot5601: add more test cases for IPV6
Torsten Bögershausen [Sat, 21 Feb 2015 15:53:01 +0000 (16:53 +0100)]
t5601: add more test cases for IPV6

Test the parsing of literall IPV6 addresses more systematically:
- with and without brackets (e.g. ::1 [::1])
- with brackets and port number: (e.g. [::1]:22)
- with username (e.g. user@::1)
- with username and brackets:
  Because user@[::1] was not supported on older Git version,
  [user@::1] had to be used as a workaround.
  Test that user@::1 user@[::1] and [user@::1] all do the same.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoconnect.c: allow ssh://user@[2001:db8::1]/repo.git
Torsten Bögershausen [Sat, 21 Feb 2015 15:52:48 +0000 (16:52 +0100)]
connect.c: allow ssh://user@[2001:db8::1]/repo.git

The ssh:// syntax was added in 2386d658 (Add first cut at "git
protocol" connect logic., 2005-07-13), it accepted
ssh://user@2001:db8::1/repo.git, which is now legacy.

Over the years the parser was improved to support [] and port numbers,
but the combination of ssh://user@[2001:db8::1]:222/repo.git did
never work.

The only only way to use a user name, a literall IPV6 address and a port
number was ssh://[user@2001:db8::1]:222/repo.git

(Thanks to Christian Taube <lists@hcf.yourweb.de> for reporting this long
standing issue)

New users would use ssh://user@[2001:db8::1]:222/repo.git,
so change the parser to handle it correctly.

Support the old legacy URLs as well, to be backwards compatible,
and avoid regressions for users which upgrade an existing installation
to a later Git version.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agosha1_name: use strlcpy() to copy strings
René Scharfe [Sat, 21 Feb 2015 19:55:22 +0000 (20:55 +0100)]
sha1_name: use strlcpy() to copy strings

Use strlcpy() instead of calling strncpy() and then setting the last
byte of the target buffer to NUL explicitly.  This shortens and
simplifies the code a bit.

Signed-of-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agopretty: use starts_with() to check for a prefix
René Scharfe [Sat, 21 Feb 2015 19:53:09 +0000 (20:53 +0100)]
pretty: use starts_with() to check for a prefix

Simplify the code and avoid duplication by using starts_with() instead
of strlen() and strncmp() to check if a line starts with "encoding ".

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agofor-each-ref: use skip_prefix() to avoid duplicate string comparison
René Scharfe [Sat, 21 Feb 2015 19:51:28 +0000 (20:51 +0100)]
for-each-ref: use skip_prefix() to avoid duplicate string comparison

Use skip_prefix() to get the part after "color:" (if present) and only
compare it with "reset" instead of comparing the whole string again.
This gets rid of the duplicate "color:" part of the string constant.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoconnect: use strcmp() for string comparison
René Scharfe [Sat, 21 Feb 2015 19:49:58 +0000 (20:49 +0100)]
connect: use strcmp() for string comparison

Get rid of magic string length constants and simply compare the strings
using strcmp().  This makes the intent of the code a bit clearer.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoDocumentation/git-am.txt: mention mailinfo.scissors config variable
Matthieu Moy [Fri, 20 Feb 2015 19:32:21 +0000 (20:32 +0100)]
Documentation/git-am.txt: mention mailinfo.scissors config variable

It was already documented, but the user had to follow the link to
git-mailinfo.txt to find it.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoDocumentation/config.txt: document mailinfo.scissors
Matthieu Moy [Fri, 20 Feb 2015 19:32:20 +0000 (20:32 +0100)]
Documentation/config.txt: document mailinfo.scissors

The variable was documented in git-mailinfo.txt, but not in config.txt.
The detailed documentation is still the one of --scissors in
git-mailinfo.txt, but we give enough information here to let the user
understand what it is about, and to make it easy to find it (e.g.
searching ">8" and "8<" finds it).

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoGit.pm: two minor typo fixes
Alexander Kuleshov [Wed, 18 Feb 2015 17:32:20 +0000 (23:32 +0600)]
Git.pm: two minor typo fixes

Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoPost 2.3 cycle (batch #3)
Junio C Hamano [Wed, 18 Feb 2015 19:53:17 +0000 (11:53 -0800)]
Post 2.3 cycle (batch #3)

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'jc/push-cert'
Junio C Hamano [Wed, 18 Feb 2015 19:45:03 +0000 (11:45 -0800)]
Merge branch 'jc/push-cert'

"git push --signed" gave an incorrectly worded error message when
the other side did not support the capability.

* jc/push-cert:
  transport-helper: fix typo in error message when --signed is not supported

11 years agoMerge branch 'jk/decimal-width-for-uintmax'
Junio C Hamano [Wed, 18 Feb 2015 19:45:02 +0000 (11:45 -0800)]
Merge branch 'jk/decimal-width-for-uintmax'

We didn't format an integer that wouldn't fit in "int" but in
"uintmax_t" correctly.

* jk/decimal-width-for-uintmax:
  decimal_width: avoid integer overflow

11 years agoMerge branch 'jk/config-no-ungetc-eof'
Junio C Hamano [Wed, 18 Feb 2015 19:45:01 +0000 (11:45 -0800)]
Merge branch 'jk/config-no-ungetc-eof'

Reading configuration from a blob object, when it ends with a lone
CR, use to confuse the configuration parser.

* jk/config-no-ungetc-eof:
  config_buf_ungetc: warn when pushing back a random character
  config: do not ungetc EOF

11 years agoMerge branch 'jk/pack-bitmap'
Junio C Hamano [Wed, 18 Feb 2015 19:45:00 +0000 (11:45 -0800)]
Merge branch 'jk/pack-bitmap'

The pack bitmap support did not build with older versions of GCC.

* jk/pack-bitmap:
  ewah: fix building with gcc < 3.4.0

11 years agoMerge branch 'jc/remote-set-url-doc'
Junio C Hamano [Wed, 18 Feb 2015 19:44:59 +0000 (11:44 -0800)]
Merge branch 'jc/remote-set-url-doc'

Clarify in the documentation that "remote.<nick>.pushURL" and
"remote.<nick>.URL" are there to name the same repository accessed
via different transports, not two separate repositories.

* jc/remote-set-url-doc:
  Documentation/git-remote.txt: stress that set-url is not for triangular

11 years agoMerge branch 'ch/new-gpg-drops-rfc-1991'
Junio C Hamano [Wed, 18 Feb 2015 19:44:58 +0000 (11:44 -0800)]
Merge branch 'ch/new-gpg-drops-rfc-1991'

Older GnuPG implementations may not correctly import the keyring
material we prepare for the tests to use.

* ch/new-gpg-drops-rfc-1991:
  t/lib-gpg: sanity-check that we can actually sign
  t/lib-gpg: include separate public keys in keyring.gpg

11 years agoMerge branch 'ye/http-accept-language'
Junio C Hamano [Wed, 18 Feb 2015 19:44:57 +0000 (11:44 -0800)]
Merge branch 'ye/http-accept-language'

Using environment variable LANGUAGE and friends on the client side,
HTTP-based transports now send Accept-Language when making requests.

* ye/http-accept-language:
  http: add Accept-Language header if possible

11 years agoMerge branch 'av/wincred-with-at-in-username-fix'
Junio C Hamano [Wed, 18 Feb 2015 19:44:56 +0000 (11:44 -0800)]
Merge branch 'av/wincred-with-at-in-username-fix'

The credential helper for Windows (in contrib/) used to mishandle
a user name with an at-sign in it.

* av/wincred-with-at-in-username-fix:
  wincred: fix get credential if username has "@"

11 years agodaemon: use callback to build interpolated path
René Scharfe [Sun, 15 Feb 2015 18:33:52 +0000 (19:33 +0100)]
daemon: use callback to build interpolated path

Provide a callback function for strbuf_expand() instead of using the
helper strbuf_expand_dict_cb().  While the resulting code is longer, it
only looks up the canonical hostname and IP address if at least one of
the placeholders %CH and %IP are used with --interpolated-path.

Use a struct for passing the directory to the callback function instead
of passing it directly to avoid having to cast away its const qualifier.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodaemon: look up client-supplied hostname lazily
René Scharfe [Sun, 15 Feb 2015 18:31:41 +0000 (19:31 +0100)]
daemon: look up client-supplied hostname lazily

Look up canonical hostname and IP address using getaddrinfo(3) or
gethostbyname(3) only if --interpolated-path or --access-hook were
specified.

Do that by introducing getter functions for canon_hostname and
ip_address and using them for all read accesses.  These wrappers call
the new helper lookup_hostname(), which sets the variables only at its
first call.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodaemon: sanitize incoming virtual hostname
Jeff King [Tue, 17 Feb 2015 19:09:24 +0000 (14:09 -0500)]
daemon: sanitize incoming virtual hostname

We use the daemon_avoid_alias function to make sure that the
pathname the user gives us is sane. However, after applying
that check, we might then interpolate the path using a
string given by the server admin, but which may contain more
untrusted data from the client. We should be sure to
sanitize this data, as well.

We cannot use daemon_avoid_alias here, as it is more strict
than we need in requiring a leading '/'. At the same time,
we can be much more strict here. We are interpreting a
hostname, which should not contain slashes or excessive runs
of dots, as those things are not allowed in DNS names.

Note that in addition to cleansing the hostname field, we
must check the "canonical hostname" (%CH) as well as the
port (%P), which we take as a raw string.  For the canonical
hostname, this comes from an actual DNS lookup on the
accessed IP, which makes it a much less likely vector for
problems. But it does not hurt to sanitize it in the same
way. Unfortunately we cannot test this case easily, as it
would involve a custom hostname lookup.

We do not need to check %IP, as it comes straight from
inet_ntop, so must have a sane form.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot5570: test git-daemon's --interpolated-path option
Jeff King [Tue, 17 Feb 2015 08:40:57 +0000 (03:40 -0500)]
t5570: test git-daemon's --interpolated-path option

We did not test this at all; let's just give a basic sanity
check that we can find a path based on virtual hosting, and
that the downcase canonicalization works.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit_connect: let user override virtual-host we send to daemon
Jeff King [Tue, 17 Feb 2015 08:37:35 +0000 (03:37 -0500)]
git_connect: let user override virtual-host we send to daemon

When we connect to a git-daemon at a given host and port, we
actually send the string "localhost:9418" to the other side,
which allows it to do virtual-hosting lookups. For testing
and debugging, we'd like to be able to send arbitrary
strings, rather than the hostname we actually connected to.

Using "insteadOf" config does not work for this purpose, as
the hostname determination happens at a very low level,
right before we feed the hostname to our lookup routines.
You could use /etc/hosts or similar to get around this, but
we cannot do that portably from our test suite.

Instead, this patch provides an environment variable that
can be used to send an arbitrary string.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agorefs.h: remove duplication in function docstrings
Michael Haggerty [Tue, 17 Feb 2015 17:00:23 +0000 (18:00 +0100)]
refs.h: remove duplication in function docstrings

Add more information to the comment introducing the four reference
transaction update functions, so that each function's docstring
doesn't have to repeat it. Add a pointer from the individual
functions' docstrings to the introductory comment.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoupdate_ref(): improve documentation
Michael Haggerty [Tue, 17 Feb 2015 17:00:22 +0000 (18:00 +0100)]
update_ref(): improve documentation

Add a docstring for update_ref(), emphasizing its similarity to
ref_transaction_update(). Rename its parameters to match those of
ref_transaction_update().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoref_transaction_verify(): new function to check a reference's value
Michael Haggerty [Tue, 17 Feb 2015 17:00:21 +0000 (18:00 +0100)]
ref_transaction_verify(): new function to check a reference's value

If NULL is passed to ref_transaction_update()'s new_sha1 parameter,
then just verify old_sha1 (under lock) without trying to change the
new value of the reference.

Use this functionality to add a new function ref_transaction_verify(),
which checks the current value of the reference under lock but doesn't
change it.

Use ref_transaction_verify() in the implementation of "git update-ref
--stdin"'s "verify" command to avoid the awkward need to "update" the
reference to its existing value.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoref_transaction_delete(): check that old_sha1 is not null_sha1
Michael Haggerty [Tue, 17 Feb 2015 17:00:20 +0000 (18:00 +0100)]
ref_transaction_delete(): check that old_sha1 is not null_sha1

It makes no sense to delete a reference that is already known not to
exist.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoref_transaction_create(): check that new_sha1 is valid
Michael Haggerty [Tue, 17 Feb 2015 17:00:19 +0000 (18:00 +0100)]
ref_transaction_create(): check that new_sha1 is valid

Creating a reference requires a new_sha1 that is not NULL and not
null_sha1.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agocommit: avoid race when creating orphan commits
Michael Haggerty [Tue, 17 Feb 2015 17:00:18 +0000 (18:00 +0100)]
commit: avoid race when creating orphan commits

If HEAD doesn't point at anything during the initial check, then we
should make sure that it *still* doesn't point at anything when we are
ready to update the reference. Otherwise, another process might commit
while we are working (e.g., while we are waiting for the user to edit
the commit message) and we will silently overwrite it.

This fixes a failing test in t7516.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agocommit: add tests of commit races
Michael Haggerty [Tue, 17 Feb 2015 17:00:17 +0000 (18:00 +0100)]
commit: add tests of commit races

Committing involves the following steps:

1. Determine the current value of HEAD (if any).
2. Create the new commit object.
3. Update HEAD.

Please note that step 2 can take arbitrarily long, because it might
involve the user editing a commit message.

If a second process sneaks in a commit during step 2, then the first
commit process should fail. This is usually done correctly, because
step 3 verifies that HEAD still points at the same commit that it
pointed to during step 1.

However, if there is a race when creating an *orphan* commit, then the
test in step 3 is skipped.

Add tests for proper handling of such races. One of the new tests
fails. It will be fixed in a moment.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoref_transaction_delete(): remove "have_old" parameter
Michael Haggerty [Tue, 17 Feb 2015 17:00:16 +0000 (18:00 +0100)]
ref_transaction_delete(): remove "have_old" parameter

Instead, verify the reference's old value if and only if old_sha1 is
non-NULL.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoref_transaction_update(): remove "have_old" parameter
Michael Haggerty [Tue, 17 Feb 2015 17:00:15 +0000 (18:00 +0100)]
ref_transaction_update(): remove "have_old" parameter

Instead, verify the reference's old value if and only if old_sha1 is
non-NULL.

ref_transaction_delete() will get the same treatment in a moment.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agostruct ref_update: move "have_old" into "flags"
Michael Haggerty [Tue, 17 Feb 2015 17:00:14 +0000 (18:00 +0100)]
struct ref_update: move "have_old" into "flags"

Instead of having a separate have_old field, record this boolean value
as a bit in the "flags" field.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agorefs.c: change some "flags" to "unsigned int"
Michael Haggerty [Tue, 17 Feb 2015 17:00:13 +0000 (18:00 +0100)]
refs.c: change some "flags" to "unsigned int"

Change the following functions' "flags" arguments from "int" to
"unsigned int":

 * ref_transaction_update()
 * ref_transaction_create()
 * ref_transaction_delete()
 * update_ref()
 * delete_ref()
 * lock_ref_sha1_basic()

Also change the "flags" member in "struct ref_update" to unsigned.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agocmd_push: pass "flags" pointer to config callback
Jeff King [Mon, 16 Feb 2015 06:13:25 +0000 (01:13 -0500)]
cmd_push: pass "flags" pointer to config callback

This will let us manipulate any transport flags which have matching
config options (there are none yet, but we will add one in
the next patch).

We could also just make "flags" a static file-scope global,
but the result is a little confusing. We end up passing it
along through do_push and push_with_options, each of which
further munge it. Having slightly-differing versions of the
flags variable available to those functions would probably
cause more confusion than it is worth. Let's just keep the
original local to cmd_push, and it can continue to pass it
through the call-stack.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agocmd_push: set "atomic" bit directly
Jeff King [Mon, 16 Feb 2015 06:12:04 +0000 (01:12 -0500)]
cmd_push: set "atomic" bit directly

This makes the code shorter and more obvious by removing an
unnecessary interim variable.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoread-cache.c: free cache entry when refreshing fails
Stefan Beller [Tue, 17 Feb 2015 18:06:14 +0000 (10:06 -0800)]
read-cache.c: free cache entry when refreshing fails

This fixes a memory leak when building the cache entries as
refresh_cache_entry may decide to return NULL, but it does not
free the cache entry structure which was passed in as an argument.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoPost 2.3 cycle (batch #2)
Junio C Hamano [Tue, 17 Feb 2015 18:22:17 +0000 (10:22 -0800)]
Post 2.3 cycle (batch #2)

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'mg/push-repo-option-doc'
Junio C Hamano [Tue, 17 Feb 2015 18:15:30 +0000 (10:15 -0800)]
Merge branch 'mg/push-repo-option-doc'

The "git push" documentation made the "--repo=<there>" option
easily misunderstood.

* mg/push-repo-option-doc:
  git-push.txt: document the behavior of --repo

11 years agoMerge branch 'jc/t4122-use-test-write-lines'
Junio C Hamano [Tue, 17 Feb 2015 18:15:29 +0000 (10:15 -0800)]
Merge branch 'jc/t4122-use-test-write-lines'

* jc/t4122-use-test-write-lines:
  t4122: use test_write_lines from test-lib-functions

11 years agoMerge branch 'jk/status-read-branch-name-fix'
Junio C Hamano [Tue, 17 Feb 2015 18:15:28 +0000 (10:15 -0800)]
Merge branch 'jk/status-read-branch-name-fix'

Code to read branch name from various files in .git/ directory
would have misbehaved if the code to write them left an empty file.

* jk/status-read-branch-name-fix:
  read_and_strip_branch: fix typo'd address-of operator

11 years agoMerge branch 'jk/remote-curl-an-array-in-struct-cannot-be-null'
Junio C Hamano [Tue, 17 Feb 2015 18:15:27 +0000 (10:15 -0800)]
Merge branch 'jk/remote-curl-an-array-in-struct-cannot-be-null'

Fix a misspelled conditional that is always true.

* jk/remote-curl-an-array-in-struct-cannot-be-null:
  do not check truth value of flex arrays

11 years agoMerge branch 'jc/diff-format-doc'
Junio C Hamano [Tue, 17 Feb 2015 18:15:25 +0000 (10:15 -0800)]
Merge branch 'jc/diff-format-doc'

The documentation incorrectly said that C(opy) and R(ename) are the
only ones that can be followed by the score number in the output in
the --raw format.

* jc/diff-format-doc:
  diff-format doc: a score can follow M for rewrite

11 years agoMerge branch 'jk/dumb-http-idx-fetch-fix'
Junio C Hamano [Tue, 17 Feb 2015 18:15:24 +0000 (10:15 -0800)]
Merge branch 'jk/dumb-http-idx-fetch-fix'

A broken pack .idx file in the receiving repository prevented the
dumb http transport from fetching a good copy of it from the other
side.

* jk/dumb-http-idx-fetch-fix:
  dumb-http: do not pass NULL path to parse_pack_index

11 years agoMerge branch 'mg/commit-author-no-match-malformed-message'
Junio C Hamano [Tue, 17 Feb 2015 18:15:23 +0000 (10:15 -0800)]
Merge branch 'mg/commit-author-no-match-malformed-message'

The error message from "git commit", when a non-existing author
name was given as value to the "--author=" parameter, has been
reworded to avoid misunderstanding.

* mg/commit-author-no-match-malformed-message:
  commit: reword --author error message

11 years agoMerge branch 'jc/doc-log-rev-list-options'
Junio C Hamano [Tue, 17 Feb 2015 18:15:22 +0000 (10:15 -0800)]
Merge branch 'jc/doc-log-rev-list-options'

"git log --help" used to show rev-list options that are irrelevant
to the "log" command.

* jc/doc-log-rev-list-options:
  Documentation: what does "git log --indexed-objects" even mean?

11 years agoMerge branch 'jc/apply-ws-fix-expands'
Junio C Hamano [Tue, 17 Feb 2015 18:15:20 +0000 (10:15 -0800)]
Merge branch 'jc/apply-ws-fix-expands'

"git apply --whitespace=fix" used to under-allocate the memory
when the fix resulted in a longer text than the original patch.

* jc/apply-ws-fix-expands:
  apply: count the size of postimage correctly
  apply: make update_pre_post_images() sanity check the given postlen
  apply.c: typofix

11 years agoMerge branch 'ak/add-i-empty-candidates'
Junio C Hamano [Tue, 17 Feb 2015 18:15:19 +0000 (10:15 -0800)]
Merge branch 'ak/add-i-empty-candidates'

The interactive "show a list and let the user choose from it"
interface "add -i" used showed and prompted to the user even when
the candidate list was empty, against which the only "choice" the
user could have made was to choose nothing.

* ak/add-i-empty-candidates:
  add -i: return from list_and_choose if there is no candidate

11 years agoMerge branch 'ks/rebase-i-abbrev'
Junio C Hamano [Tue, 17 Feb 2015 18:15:18 +0000 (10:15 -0800)]
Merge branch 'ks/rebase-i-abbrev'

The insn sheet "git rebase -i" creates did not fully honor
core.abbrev settings.

* ks/rebase-i-abbrev:
  rebase -i: use full object name internally throughout the script

11 years agoMerge branch 'mh/deref-symref-over-helper-transport'
Junio C Hamano [Tue, 17 Feb 2015 18:15:17 +0000 (10:15 -0800)]
Merge branch 'mh/deref-symref-over-helper-transport'

"git fetch" over a remote-helper that cannot respond to "list"
command could not fetch from a symbolic reference e.g. HEAD.

* mh/deref-symref-over-helper-transport:
  transport-helper: do not request symbolic refs to remote helpers

11 years agogit-send-email.perl: support no- prefix with older GetOptions
Kyle J. McKay [Sat, 31 Jan 2015 02:40:17 +0000 (18:40 -0800)]
git-send-email.perl: support no- prefix with older GetOptions

Only Perl version 5.8.0 or later is required, but that comes with
an older Getopt::Long (2.32) that does not support the 'no-'
prefix.  Support for that was added in Getopt::Long version 2.33.

Since the help only mentions the 'no-' prefix and not the 'no'
prefix, add explicit support for the 'no-' prefix to support
older GetOptions versions.

Reported-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Tested-by: Tom G. Christensen <tgc@statsbiblioteket.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit_push_config: drop cargo-culted wt_status pointer
Jeff King [Mon, 16 Feb 2015 05:46:30 +0000 (00:46 -0500)]
git_push_config: drop cargo-culted wt_status pointer

The push config callback does not expect any incoming data
via the void pointer. And if it did, it would certainly not
be a "struct wt_status". This probably got picked up
accidentally in b945901 (push: heed user.signingkey for
signed pushes, 2014-10-22), which copied the template for
the config callback from builtin/commit.c.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agotest-lib.sh: set prerequisite SANITY by testing what we really need
Torsten Bögershausen [Tue, 27 Jan 2015 15:39:01 +0000 (16:39 +0100)]
test-lib.sh: set prerequisite SANITY by testing what we really need

What we wanted out of the SANITY precondition is that the filesystem
behaves sensibly with permission bits settings.

 - You should not be able to remove a file in a read-only directory,

 - You should not be able to tell if a file in a directory exists if
   the directory lacks read or execute permission bits.

We used to cheat by approximating that condition with "is the /
writable?" test and/or "are we running as root?" test.  Neither test
is sufficient or appropriate in environments like Cygwin.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot4008: modernise style
Junio C Hamano [Sun, 15 Feb 2015 22:21:04 +0000 (14:21 -0800)]
t4008: modernise style

Update this ancient test script to a more modern style in which the
expected result is prepared inside the body of the test that uses
it.  Also, instead of using $tree, a shell variable, throughout the
test script, create a tag that points at it, to make it easier to
manually debug the test script in its trash directory.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot/diff-lib: check exact object names in compare_diff_raw
Junio C Hamano [Sun, 15 Feb 2015 21:47:36 +0000 (13:47 -0800)]
t/diff-lib: check exact object names in compare_diff_raw

The "sanitize" helper wanted to strip the similarity and
dissimilarity scores when making comparison, but it was
stripping away the object names as well.

While we do not want to require the exact object names the tests
expect to be maintained, as it would be seen as an extra burden,
this would have prevented us catching a silly bug such as showing
non 0{40} object name on the preimage side of an addition or on the
postimage side of a deletion, because all [0-9a-f]{40} strings were
considered equally OK.

In the longer term, when a test only wants to see the status of the
change without having to worry about object names, it should be
rewritten not to inspect the raw format.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agotests: do not borrow from COPYING and README from the real source
Junio C Hamano [Sun, 15 Feb 2015 21:44:24 +0000 (13:44 -0800)]
tests: do not borrow from COPYING and README from the real source

These two files have been modified since the tests started using
as test input, making the exact object names they expect to be
different from what actually happens in the trash repository they
use to run tests.

Instead, take a snapshot of these two files and keep them in
t/diff-lib/ so that we can update the real ones without having to
worry about breaking tests.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot4010: correct expected object names
Junio C Hamano [Sun, 15 Feb 2015 21:35:19 +0000 (13:35 -0800)]
t4010: correct expected object names

The output the test expects is bogus.

It was left unnoticed only because compare_diff_raw, which only
cares about the add/delete/rename/copy was used to check the result.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot9300: correct expected object names
Junio C Hamano [Sun, 15 Feb 2015 21:35:19 +0000 (13:35 -0800)]
t9300: correct expected object names

The output the test #36 expects is bogus.  There are no blob objects
whose names are 36a590... or 046d037... when this test was run.

It was left unnoticed only because compare_diff_raw, which only
cares about the add/delete/rename/copy was used to check the result.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot4008: correct stale comments
Junio C Hamano [Sun, 15 Feb 2015 20:42:59 +0000 (12:42 -0800)]
t4008: correct stale comments

A complete rewrite of a single file was originally designed to be
expressed as a deletion immediately followed by a creation of the
same file, and the comments in the test updated here were written to
reflect that design decision made in f345b0a0 (Add -B flag to diff-*
brothers., 2005-05-30).  However, we later realized that a complete
rewrite is merely how a textual diff should be represented at
366175ef (Rework -B output., 2005-06-19), and updated the actual
tests.  But we forgot to update the introductory text while doing
so.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agohex.c: reduce memory footprint of sha1_to_hex static buffers
Stefan Beller [Fri, 13 Feb 2015 21:18:49 +0000 (13:18 -0800)]
hex.c: reduce memory footprint of sha1_to_hex static buffers

41 bytes is the exact number of bytes needed for having the returned
hex string represented. 50 seems to be an arbitrary number, such
that there are no benefits from alignment to certain address boundaries.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodo not include the same header twice
Дилян Палаузов [Fri, 13 Feb 2015 14:47:39 +0000 (14:47 +0000)]
do not include the same header twice

A few files include the same header file directly more than once.

As all these headers protect themselves against repeated inclusion
by the "#ifndef FOO_H / #define FOO_H / ... / #endif" idiom, leave
only the first inclusion and remove the later inclusion as a no-op
clean-up.

Signed-off-by: Дилян Палаузов <git-dpa@aegee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agosend-email: ask confirmation if given encoding name is very short
Junio C Hamano [Fri, 13 Feb 2015 20:20:25 +0000 (12:20 -0800)]
send-email: ask confirmation if given encoding name is very short

Sometimes people respond "y<ENTER>" (or "yes<ENTER>") when asked
this question:

    Which 8bit encoding should I declare [UTF-8]?

We already have a mechanism to avoid accepting a mistyped e-mail
address (we ask to confirm when the given address lacks "@" in it);
reuse it to trigger the same confirmation when given a very short
answer.  As a typical charset name is probably at least 4 chars or
longer (e.g. "UTF8" spelled without the dash, or "Big5"), this would
prevent such a mistake.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agotransport-helper: ask the helper to set the same options for import as for fetch
Mike Hommey [Fri, 13 Feb 2015 05:24:46 +0000 (14:24 +0900)]
transport-helper: ask the helper to set the same options for import as for fetch

A remote helper is currently only told about the 'check-connectivity',
'cloning', and 'update-shallow' options when it supports the 'fetch'
command, but not when it supports 'import' instead.

This is especially important for the 'cloning' option, because it
means a remote helper that only supports 'import' can't distinguish
between a clone and a pull besides doing some assumptions from the
git directory state.

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agotransport-helper: ask the helper to set progress and verbosity options after asking...
Mike Hommey [Fri, 13 Feb 2015 05:24:45 +0000 (14:24 +0900)]
transport-helper: ask the helper to set progress and verbosity options after asking for its capabilities

Currently, a remote helper is only told about the progress and verbosity
options for the 'fetch' and 'push' commands. This means a remote helper
that implements 'import' and 'export' can never know the user requested
progress or verbosity (or lack thereof) through the command line.

Telling the remote helper about those options after asking for its
capabilities ensures it can act accordingly for all commands.

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agotransport-helper: fix typo in error message when --signed is not supported
Mike Hommey [Thu, 12 Feb 2015 10:10:01 +0000 (19:10 +0900)]
transport-helper: fix typo in error message when --signed is not supported

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agorefs: remove the gap in the REF_* constant values
Michael Haggerty [Thu, 12 Feb 2015 11:12:13 +0000 (12:12 +0100)]
refs: remove the gap in the REF_* constant values

There is no reason to "reserve" a gap between the public and private
flags values.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agorefs: move REF_DELETING to refs.c
Michael Haggerty [Thu, 12 Feb 2015 11:12:12 +0000 (12:12 +0100)]
refs: move REF_DELETING to refs.c

It is only used internally now. Document it a little bit better, too.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoxread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX
Junio C Hamano [Wed, 11 Feb 2015 21:13:10 +0000 (13:13 -0800)]
xread/xwrite: clip MAX_IO_SIZE to SSIZE_MAX

Since 0b6806b9 (xread, xwrite: limit size of IO to 8MB, 2013-08-20),
we chomp our calls to read(2) and write(2) into chunks of
MAX_IO_SIZE bytes (8 MiB), because a large IO results in a bad
latency when the program needs to be killed.  This also brought our
IO below SSIZE_MAX, which is a limit POSIX allows read(2) and
write(2) to fail when the IO size exceeds it, for OS X, where a
problem was originally reported.

However, there are other systems that define SSIZE_MAX smaller than
our default, and feeding 8 MiB to underlying read(2)/write(2) would
fail.  Make sure we clip our calls to the lower limit as well.

Reported-by: Joachim Schmitz <jojo@schmitz-digital.de>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoPost 2.3 cycle (batch #1)
Junio C Hamano [Wed, 11 Feb 2015 21:54:03 +0000 (13:54 -0800)]
Post 2.3 cycle (batch #1)

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'ah/usage-strings'
Junio C Hamano [Wed, 11 Feb 2015 21:44:19 +0000 (13:44 -0800)]
Merge branch 'ah/usage-strings'

* ah/usage-strings:
  standardize usage info string format

11 years agoMerge branch 'jc/pretty-format-doc'
Junio C Hamano [Wed, 11 Feb 2015 21:44:16 +0000 (13:44 -0800)]
Merge branch 'jc/pretty-format-doc'

* jc/pretty-format-doc:
  "log --pretty" documentation: do not forget "tformat:"

11 years agoMerge branch 'jc/unused-symbols'
Junio C Hamano [Wed, 11 Feb 2015 21:44:07 +0000 (13:44 -0800)]
Merge branch 'jc/unused-symbols'

Mark file-local symbols as "static", and drop functions that nobody
uses.

* jc/unused-symbols:
  shallow.c: make check_shallow_file_for_update() static
  remote.c: make clear_cas_option() static
  urlmatch.c: make match_urls() static
  revision.c: make save_parents() and free_saved_parents() static
  line-log.c: make line_log_data_init() static
  pack-bitmap.c: make pack_bitmap_filename() static
  prompt.c: remove git_getpass() nobody uses
  http.c: make finish_active_slot() and handle_curl_result() static

11 years agoMerge branch 'jc/push-to-checkout'
Junio C Hamano [Wed, 11 Feb 2015 21:43:56 +0000 (13:43 -0800)]
Merge branch 'jc/push-to-checkout'

Extending the js/push-to-deploy topic, the behaviour of "git push"
when updating the working tree and the index with an update to the
branch that is checked out can be tweaked by push-to-checkout hook.

* jc/push-to-checkout:
  receive-pack: support push-to-checkout hook
  receive-pack: refactor updateInstead codepath

11 years agoMerge branch 'sb/atomic-push'
Junio C Hamano [Wed, 11 Feb 2015 21:43:50 +0000 (13:43 -0800)]
Merge branch 'sb/atomic-push'

"git push" has been taught a "--atomic" option that makes push to
update more than one ref an "all-or-none" affair.

* sb/atomic-push:
  Document receive.advertiseatomic
  t5543-atomic-push.sh: add basic tests for atomic pushes
  push.c: add an --atomic argument
  send-pack.c: add --atomic command line argument
  send-pack: rename ref_update_to_be_sent to check_to_send_update
  receive-pack.c: negotiate atomic push support
  receive-pack.c: add execute_commands_atomic function
  receive-pack.c: move transaction handling in a central place
  receive-pack.c: move iterating over all commands outside execute_commands
  receive-pack.c: die instead of error in case of possible future bug
  receive-pack.c: shorten the execute_commands loop over all commands

11 years agoMerge branch 'mh/reflog-expire'
Junio C Hamano [Wed, 11 Feb 2015 21:43:38 +0000 (13:43 -0800)]
Merge branch 'mh/reflog-expire'

Restructure "reflog expire" to fit the reflogs better with the
recently updated ref API.

Looked reasonable (except that some shortlog entries stood out like
a sore thumb).

* mh/reflog-expire: (24 commits)
  refs.c: let fprintf handle the formatting
  refs.c: don't expose the internal struct ref_lock in the header file
  lock_any_ref_for_update(): inline function
  refs.c: remove unlock_ref/close_ref/commit_ref from the refs api
  reflog_expire(): new function in the reference API
  expire_reflog(): treat the policy callback data as opaque
  Move newlog and last_kept_sha1 to "struct expire_reflog_cb"
  expire_reflog(): move rewrite to flags argument
  expire_reflog(): move verbose to flags argument
  expire_reflog(): pass flags through to expire_reflog_ent()
  struct expire_reflog_cb: a new callback data type
  Rename expire_reflog_cb to expire_reflog_policy_cb
  expire_reflog(): move updateref to flags argument
  expire_reflog(): move dry_run to flags argument
  expire_reflog(): add a "flags" argument
  expire_reflog(): extract two policy-related functions
  Extract function should_expire_reflog_ent()
  expire_reflog(): use a lock_file for rewriting the reflog file
  expire_reflog(): return early if the reference has no reflog
  expire_reflog(): rename "ref" parameter to "refname"
  ...

11 years agoMerge branch 'cj/log-invert-grep'
Junio C Hamano [Wed, 11 Feb 2015 21:42:39 +0000 (13:42 -0800)]
Merge branch 'cj/log-invert-grep'

"git log --invert-grep --grep=WIP" will show only commits that do
not have the string "WIP" in their messages.

* cj/log-invert-grep:
  log: teach --invert-grep option

11 years agoMerge branch 'km/gettext-n'
Junio C Hamano [Wed, 11 Feb 2015 21:42:00 +0000 (13:42 -0800)]
Merge branch 'km/gettext-n'

* km/gettext-n:
  gettext.h: add parentheses around N_ expansion if supported

11 years agoMerge branch 'bc/http-fallback-to-password-after-krb-fails'
Junio C Hamano [Wed, 11 Feb 2015 21:41:55 +0000 (13:41 -0800)]
Merge branch 'bc/http-fallback-to-password-after-krb-fails'

After attempting and failing a password-less authentication
(e.g. kerberos), libcURL refuses to fall back to password based
Basic authentication without a bit of help/encouragement.

* bc/http-fallback-to-password-after-krb-fails:
  remote-curl: fall back to Basic auth if Negotiate fails

11 years agoMerge branch 'dk/format-patch-ignore-diff-submodule'
Junio C Hamano [Wed, 11 Feb 2015 21:41:51 +0000 (13:41 -0800)]
Merge branch 'dk/format-patch-ignore-diff-submodule'

Setting diff.submodule to 'log' made "git format-patch" produce
broken patches.

* dk/format-patch-ignore-diff-submodule:
  format-patch: ignore diff.submodule setting
  t4255: test am submodule with diff.submodule

11 years agoMerge branch 'jn/rerere-fail-on-auto-update-failure'
Junio C Hamano [Wed, 11 Feb 2015 21:41:44 +0000 (13:41 -0800)]
Merge branch 'jn/rerere-fail-on-auto-update-failure'

"git rerere" (invoked internally from many mergy operations) did
not correctly signal errors when told to update the working tree
files and failed to do so for whatever reason.

* jn/rerere-fail-on-auto-update-failure:
  rerere: error out on autoupdate failure

11 years agoMerge branch 'jk/blame-commit-label'
Junio C Hamano [Wed, 11 Feb 2015 21:39:50 +0000 (13:39 -0800)]
Merge branch 'jk/blame-commit-label'

"git blame HEAD -- missing" failed to correctly say "HEAD" when it
tried to say "No such path 'missing' in HEAD".

* jk/blame-commit-label:
  blame.c: fix garbled error message
  use xstrdup_or_null to replace ternary conditionals
  builtin/commit.c: use xstrdup_or_null instead of envdup
  builtin/apply.c: use xstrdup_or_null instead of null_strdup
  git-compat-util: add xstrdup_or_null helper

11 years agoMerge branch 'ld/p4-submit-hint'
Junio C Hamano [Wed, 11 Feb 2015 21:39:44 +0000 (13:39 -0800)]
Merge branch 'ld/p4-submit-hint'

* ld/p4-submit-hint:
  git-p4: correct --prepare-p4-only instructions

11 years agoMerge branch 'ld/p4-exclude-in-sync'
Junio C Hamano [Wed, 11 Feb 2015 21:38:41 +0000 (13:38 -0800)]
Merge branch 'ld/p4-exclude-in-sync'

Like the "clone" subcommand, allow excluding subdirectories in the
"sync" subcommand.

* ld/p4-exclude-in-sync:
  git-p4: support excluding paths on sync

11 years agogit-p4: support excluding paths on sync
Luke Diamand [Sat, 17 Jan 2015 20:56:38 +0000 (20:56 +0000)]
git-p4: support excluding paths on sync

The clone subcommand has long had support for excluding
subdirectories, but sync has not. This is a nuisance,
since as soon as you do a sync, any changed files that
were initially excluded start showing up.

Move the "exclude" command-line option into the parent
class; the actual behavior was already present there so
it simply had to be exposed.

Signed-off-by: Luke Diamand <luke@diamand.org>
Reviewed-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'jc/coding-guidelines'
Junio C Hamano [Wed, 11 Feb 2015 21:37:42 +0000 (13:37 -0800)]
Merge branch 'jc/coding-guidelines'

* jc/coding-guidelines:
  CodingGuidelines: clarify C #include rules

11 years agoMerge branch 'ak/typofixes'
Junio C Hamano [Wed, 11 Feb 2015 21:37:38 +0000 (13:37 -0800)]
Merge branch 'ak/typofixes'

* ak/typofixes:
  t/lib-terminal.sh: fix typo
  pack-bitmap: fix typo

11 years agomerge-file: correctly open files when in a subdir
Aleksander Boruch-Gruszecki [Sun, 8 Feb 2015 16:53:53 +0000 (17:53 +0100)]
merge-file: correctly open files when in a subdir

run_setup_gently() is called before merge-file. This may result in changing
current working directory, which wasn't taken into account when opening a file
for writing.

Fix by prepending the passed prefix. Previous var is left so that error
messages keep referring to the file from the user's working directory
perspective.

Signed-off-by: Aleksander Boruch-Gruszecki <aleksander.boruchgruszecki@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoapply: do not touch a file beyond a symbolic link
Junio C Hamano [Thu, 29 Jan 2015 20:41:22 +0000 (12:41 -0800)]
apply: do not touch a file beyond a symbolic link

Because Git tracks symbolic links as symbolic links, a path that
has a symbolic link in its leading part (e.g. path/to/dir/file,
where path/to/dir is a symbolic link to somewhere else, be it
inside or outside the working tree) can never appear in a patch
that validly applies, unless the same patch first removes the
symbolic link to allow a directory to be created there.

Detect and reject such a patch.

Things to note:

 - Unfortunately, we cannot reuse the has_symlink_leading_path()
   from dir.c, as that is only about the working tree, but "git
   apply" can be told to apply the patch only to the index or to
   both the index and to the working tree.

 - We cannot directly use has_symlink_leading_path() even when we
   are applying only to the working tree, as an early patch of a
   valid input may remove a symbolic link path/to/dir and then a
   later patch of the input may create a path path/to/dir/file, but
   "git apply" first checks the input without touching either the
   index or the working tree.  The leading symbolic link check must
   be done on the interim result we compute in-core (i.e. after the
   first patch, there is no path/to/dir symbolic link and it is
   perfectly valid to create path/to/dir/file).

   Similarly, when an input creates a symbolic link path/to/dir and
   then creates a file path/to/dir/file, we need to flag it as an
   error without actually creating path/to/dir symbolic link in the
   filesystem.

Instead, for any patch in the input that leaves a path (i.e. a non
deletion) in the result, we check all leading paths against the
resulting tree that the patch would create by inspecting all the
patches in the input and then the target of patch application
(either the index or the working tree).

This way, we catch a mischief or a mistake to add a symbolic link
path/to/dir and a file path/to/dir/file at the same time, while
allowing a valid patch that removes a symbolic link path/to/dir and
then adds a file path/to/dir/file.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoapply: do not read from beyond a symbolic link
Junio C Hamano [Fri, 30 Jan 2015 23:34:13 +0000 (15:34 -0800)]
apply: do not read from beyond a symbolic link

We should reject a patch, whether it renames/copies dir/file to
elsewhere with or without modificiation, or updates dir/file in
place, if "dir/" part is actually a symbolic link to elsewhere,
by making sure that the code to read the preimage does not read
from a path that is beyond a symbolic link.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoapply: do not read from the filesystem under --index
Junio C Hamano [Fri, 30 Jan 2015 23:15:59 +0000 (15:15 -0800)]
apply: do not read from the filesystem under --index

We currently read the preimage to apply a patch from the index only
when the --cached option is given.  Do so also when the command is
running under the --index option.  With --index, the index entry and
the working tree file for a path that is involved in a patch must be
identical, so this should not affect the result, but by reading from
the index, we will get the protection to avoid reading an unintended
path beyond a symbolic link automatically.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoapply: reject input that touches outside the working area
Junio C Hamano [Thu, 29 Jan 2015 23:35:24 +0000 (15:35 -0800)]
apply: reject input that touches outside the working area

By default, a patch that affects outside the working area (either a
Git controlled working tree, or the current working directory when
"git apply" is used as a replacement of GNU patch) is rejected as a
mistake (or a mischief).  Git itself does not create such a patch,
unless the user bends over backwards and specifies a non-standard
prefix to "git diff" and friends.

When `git apply` is used as a "better GNU patch", the user can pass
the `--unsafe-paths` option to override this safety check. This
option has no effect when `--index` or `--cached` is in use.

The new test was stolen from Jeff King with slight enhancements.
Note that a few new tests for touching outside the working area by
following a symbolic link are still expected to fail at this step,
but will be fixed in later steps.

Signed-off-by: Junio C Hamano <gitster@pobox.com>