gitweb.git
Documentation/submodule: Add --force to update synopsisBrad King Wed, 27 Feb 2013 00:41:34 +0000 (19:41 -0500)

Documentation/submodule: Add --force to update synopsis

In commit 9db31bdf (submodule: Add --force option for git submodule
update, 2011-04-01) we added the option to the implementation's usage
synopsis but forgot to add it to the synopsis in the command
documentation. Add the option to the synopsis in the same location it
is reported in usage and re-wrap the options to avoid long lines.

Signed-off-by: Brad King <brad.king@kitware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: prevent pprint_rename from underrunning inputThomas Rast Tue, 26 Feb 2013 20:47:01 +0000 (21:47 +0100)

diff: prevent pprint_rename from underrunning input

The logic described in d020e27 (diff: Fix rename pretty-print when
suffix and prefix overlap, 2013-02-23) is wrong: The proof in the
comment is valid only if both strings are the same length. *One* of
old/new can reach a-1 (b-1, resp.) if 'a' is a suffix of 'b' (or vice
versa).

Since the intent was to let the loop run down to the '/' at the end of
the common prefix, fix it by making that distinction explicit: if
there is no prefix, allow no underrun.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: filter-branch env-filter exampleTadeusz Andrzej Kadłubowski Thu, 21 Feb 2013 20:23:38 +0000 (21:23 +0100)

Documentation: filter-branch env-filter example

filter-branch --env-filter example that shows how to change the email
address in all commits before publishing a project.

Signed-off-by: Tadeusz Andrzej Kadłubowski <yess@hell.org.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-filter-branch.txt: clarify ident variables usageTadeusz Andrzej Kadłubowski Thu, 21 Feb 2013 20:22:50 +0000 (21:22 +0100)

git-filter-branch.txt: clarify ident variables usage

There is a rare edge case of git-filter-branch: a filter that unsets
identity variables from the environment. Link to git-commit-tree
clarifies how Git would fall back in this situation.

Signed-off-by: Tadeusz Andrzej Kadłubowski <yess@hell.org.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'for-junio' of git://github.com/kusma/gitJunio C Hamano Tue, 26 Feb 2013 17:17:08 +0000 (09:17 -0800)

Merge branch 'for-junio' of git://github.com/kusma/git

* 'for-junio' of git://github.com/kusma/git:
wincred: improve compatibility with windows versions
wincred: accept CRLF on stdin to simplify console usage

Revert "compat: add strtok_r()"Erik Faye-Lund Tue, 26 Feb 2013 16:58:38 +0000 (17:58 +0100)

Revert "compat: add strtok_r()"

This reverts commit 78457bc0ccc1af8b9eb776a0b17986ebd50442bc.

commit 28c5d9e ("vcs-svn: drop string_pool") previously removed
the only call-site for strtok_r. So let's get rid of the compat
implementation as well.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

wincred: improve compatibility with windows versionsKarsten Blees Thu, 10 Jan 2013 10:52:12 +0000 (11:52 +0100)

wincred: improve compatibility with windows versions

On WinXP, the windows credential helper doesn't work at all (due to missing
Cred[Un]PackAuthenticationBuffer APIs). On Win7, the credential format used
by wincred is incompatible with native Windows tools (such as the control
panel applet or 'cmdkey.exe /generic'). These Windows tools only set the
TargetName, UserName and CredentialBlob members of the CREDENTIAL
structure (where CredentialBlob is the UTF-16-encoded password).

Remove the unnecessary packing / unpacking of the password, along with the
related API definitions, for compatibility with Windows XP.

Don't use CREDENTIAL_ATTRIBUTEs to identify credentials for compatibility
with Windows credential manager tools. Parse the protocol, username, host
and path fields from the credential's target name instead.

Credentials created with an old wincred version will have mangled or empty
passwords after this change.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>

wincred: accept CRLF on stdin to simplify console usageKarsten Blees Wed, 9 Jan 2013 11:49:26 +0000 (12:49 +0100)

wincred: accept CRLF on stdin to simplify console usage

The windows credential helper currently only accepts LF on stdin, but bash
and cmd.exe both send CRLF. This prevents interactive use in the console.

Change the stdin parser to optionally accept CRLF.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>

l10n: de.po: correct translation of "bisect" messagesRalf Thielow Sat, 23 Feb 2013 16:47:32 +0000 (17:47 +0100)

l10n: de.po: correct translation of "bisect" messages

The term "bisect" was translated as "halbieren", we should
translate it as "binäre Suche" (binary search). While at
there, we should leave "bisect run" untranslated since it's
a subcommand of "git bisect".

Suggested-by: Thomas Rast <trast@inf.ethz.ch>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

l10n: de.po: translate 5 new messagesRalf Thielow Tue, 19 Feb 2013 16:59:28 +0000 (17:59 +0100)

l10n: de.po: translate 5 new messages

Translate 5 new messages came from git.pot update in 235537a
(l10n: git.pot: v1.8.2 round 3 (5 new)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Thomas Rast <trast@inf.ethz.ch>

l10n: de.po: translate 35 new messagesRalf Thielow Thu, 14 Feb 2013 17:27:00 +0000 (18:27 +0100)

l10n: de.po: translate 35 new messages

Translate 35 new messages came from git.pot update
in 9caaf23 (l10n: Update git.pot (35 new, 14 removed
messages)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Thomas Rast <trast@inf.ethz.ch>

user-manual: Standardize backtick quotingW. Trevor King Mon, 25 Feb 2013 22:53:00 +0000 (17:53 -0500)

user-manual: Standardize backtick quoting

I tried to always use backticks for:
* Paths and filenames (e.g. `.git/config`)
* Compound refs (e.g. `origin/HEAD`)
* Git commands (e.g. `git log`)
* Command arguments (e.g. `--pretty`)
* URLs (e.g. `git://`), as a subset of command arguments
* Special characters (e.g. `+` in diffs).
* Config options (e.g. `branch.<name>.remote`)

Branch and tag names are sometimes set off with double quotes,
sometimes set off with backticks, and sometimes left bare. I tried to
judge when the intention was introducing new terms or conventions
(double quotes), to reference a recently used command argument
(backticks), or to reference the abstract branch/commit (left bare).
Obviously these are not particularly crisp definitions, so my
decisions are fairly arbitrary ;). When a reference had already been
introduced, I changed further double-quoted instances to backticked
instances.

When new backticks increased the length of a line beyond others in
that block, I re-wrapped blocks to 72 columns.

Signed-off-by: W. Trevor King <wking@tremily.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix time offset calculation in case of unsigned time_tMike Gorchak Mon, 25 Feb 2013 21:53:40 +0000 (23:53 +0200)

Fix time offset calculation in case of unsigned time_t

Fix time offset calculation expression in case if time_t
is unsigned. This code works fine for signed and
unsigned time_t.

Signed-off-by: Mike Gorchak <mike.gorchak.qnx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

date.c: fix unsigned time_t comparisonMike Gorchak Mon, 25 Feb 2013 21:51:16 +0000 (23:51 +0200)

date.c: fix unsigned time_t comparison

tm_to_time_t() returns (time_t)-1 when it sees an error. On
platforms with unsigned time_t, this value will be larger than any
valid timestamp and will break the "Is this older than 10 days in
the future?" check.

Signed-off-by: Mike Gorchak <mike.gorchak.qnx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add contrib/credentials/netrc with GPG supportTed Zlatanov Mon, 25 Feb 2013 15:49:15 +0000 (10:49 -0500)

Add contrib/credentials/netrc with GPG support

This credential helper supports multiple files, returning the first one
that matches. It checks file permissions and owner. For *.gpg files,
it will run GPG to decrypt the file.

Signed-off-by: Ted Zlatanov <tzz@lifelogs.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8: accept alternate spellings of UTF-8Jeff King Mon, 25 Feb 2013 20:31:00 +0000 (15:31 -0500)

utf8: accept alternate spellings of UTF-8

The iconv implementation on many platforms will accept
variants of UTF-8, including "UTF8", "utf-8", and "utf8",
but some do not. We make allowances in our code to treat
them all identically, but we sometimes hand the string from
the user directly to iconv. In this case, the platform iconv
may or may not work.

There are really four levels of platform iconv support for
these synonyms:

1. All synonyms understood (e.g., glibc).

2. Only the official "UTF-8" understood (e.g., Windows).

3. Official "UTF-8" not understood, but some other synonym
understood (it's not known whether such a platform exists).

4. Neither "UTF-8" nor any synonym understood (e.g.,
ancient systems, or ones without utf8 support
installed).

This patch teaches git to fall back to using the official
"UTF-8" spelling when iconv_open fails (and the encoding was
one of the synonym spellings). This makes things more
convenient to users of type 2 systems, as they can now use
any of the synonyms for the log output encoding.

Type 1 systems are not affected, as iconv already works on
the first try.

Type 4 systems are not affected, as both attempts already
fail.

Type 3 systems will not benefit from the feature, but
because we only use "UTF-8" as a fallback, they will not be
regressed (i.e., you can continue to use "utf8" if your
platform supports it). We could try all the various
synonyms, but since such systems are not even known to
exist, it's not worth the effort.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

msvc: avoid collisions between "tags" and "TAGS"Ramsay Jones Thu, 31 Jan 2013 18:33:57 +0000 (18:33 +0000)

msvc: avoid collisions between "tags" and "TAGS"

Commit 2f769195 ("MinGW: avoid collisions between "tags" and "TAGS",
28-09-2010) enabled MinGW to use an ETAGS file in order to avoid
filename collisions on (Windows) case insensitive filesystems. In
addition, this prevents 'make' from issuing several warning messages.

When using the Makefile to perform an MSVC build, which is usually
executed using MinGW tools, we can also benefit from this capability.
In order to reap the above benefits, we set the ETAGS_TARGET build
variable to ETAGS in the MSVC config block.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

msvc: test-svn-fe: Fix linker "unresolved external... Ramsay Jones Thu, 31 Jan 2013 18:32:55 +0000 (18:32 +0000)

msvc: test-svn-fe: Fix linker "unresolved external" error

In particular, while linking test-svn-fe.exe, the linker complains
that the external symbol _strtoull is unresolved. A call to this
function was added in commit ddcc8c5b ("vcs-svn: skeleton of an svn
delta parser", 25-12-2010).

The NO_STRTOULL build variable attempts to provide support to old
systems which can't even declare 'unsigned long long' variables,
let alone provide the strtoll() or strtoull() functions. Setting
this build variable does not provide an implementation of these
functions. Rather, it simply allows the compat implementations
of strto{i,u}max() to use strtol() and strtoul() instead.

In order to fix the linker error on systems with NO_STRTOULL set,
currently MSVC and OSF1, we can substitute a call to strtoumax().

However, we can easily provide support for the strtoull() and
strtoll() functions on MSVC, since they are essentially already
available as _strtoui64() and _strtoi64(). This allows us to
remove NO_STRTOULL for MSVC.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

msvc: Fix build by adding missing symbol definesRamsay Jones Thu, 31 Jan 2013 18:31:30 +0000 (18:31 +0000)

msvc: Fix build by adding missing symbol defines

In particular, remote-testsvn.c fails to compile with two
undeclared identifier errors relating to the 'UINT32_MAX'
and 'STDIN_FILENO' symbols.

In order to fix the compilation errors, we add appropriate
definitions for the UINT32_MAX and STDIN_FILENO constants
to an msvc compat header file.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

msvc: git-daemon: Fix linker "unresolved external"... Ramsay Jones Thu, 31 Jan 2013 18:30:14 +0000 (18:30 +0000)

msvc: git-daemon: Fix linker "unresolved external" errors

In particular, while linking git-daemon.exe, the linker complains
that the external symbols _inet_pton and _inet_ntop are unresolved.
Commit a666b472 ("daemon: opt-out on features that require posix",
04-11-2010) addressed this problem for MinGW by configuring the
use of the internal 'compat' versions of these function.

Although the MSVC header <WS2tcpip.h> contains the prototypes for
the inet_pton and inet_ntop functions, they are only visible for
Windows API versions from 0x0600 (Windows Vista) or later. (In
addition, on Windows XP, ws2_32.dll does not export these symbols).

In order to fix the linker errors, we also configure the MSVC build
to use the internal compat versions of these functions by setting
the NO_INET_{PTON,NTOP} build variables.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

msvc: Fix compilation errors caused by poll.h emulationRamsay Jones Thu, 31 Jan 2013 18:28:35 +0000 (18:28 +0000)

msvc: Fix compilation errors caused by poll.h emulation

Commit 0f77dea9 ("mingw: move poll out of sys-folder", 24-10-2011), along
with other commits in the 'ef/mingw-upload-archive' branch (see commit
7406aa20), effectively reintroduced the same problem addressed by commit
56fb3ddc ("msvc: Fix compilation errors in compat/win32/sys/poll.c",
04-12-2010).

In order to fix the compilation errors, we use the same solution adopted
in that earlier commit. In particular, we set _WIN32_WINNT to 0x0502
(which would target Windows Server 2003) prior to including the winsock2.h
header file.

Also, we delete the compat/vcbuild/include/sys/poll.h header file, since
it is now redundant and it's presence may cause some confusion.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: make mandir, htmldir and infodir absoluteJohn Keeping Sun, 24 Feb 2013 19:55:01 +0000 (19:55 +0000)

Makefile: make mandir, htmldir and infodir absolute

This matches the use of the variables with the same names in autotools,
reducing the potential for user surprise.

Using relative paths in these variables also causes issues if they are
exported from the Makefile, as discussed in commit c09d62f (Makefile: do
not export mandir/htmldir/infodir, 2013-02-12).

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-compat-util.h: Provide missing netdb.h definitionsDavid Michael Mon, 25 Feb 2013 19:30:19 +0000 (14:30 -0500)

git-compat-util.h: Provide missing netdb.h definitions

Some platforms may lack the NI_MAXHOST and NI_MAXSERV values in their
system headers, so ensure they are available.

Signed-off-by: David Michael <fedora.dm0@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 1.8.2-rc1 v1.8.2-rc1Junio C Hamano Mon, 25 Feb 2013 16:39:23 +0000 (08:39 -0800)

Git 1.8.2-rc1

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

Merge git://github.com/git-l10n/git-poJunio C Hamano Mon, 25 Feb 2013 17:02:58 +0000 (09:02 -0800)

Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
l10n: vi.po: Updated 5 new messages (2009t0f0u)
l10n: Update Swedish translation (2009t0f0u)
l10n: Update Swedish translation (2004t0f0u)
l10n: zh_CN.po: translate 5 new messages
l10n: git.pot: v1.8.2 round 3 (5 new)

Sync with 'maint'Junio C Hamano Mon, 25 Feb 2013 16:27:50 +0000 (08:27 -0800)

Sync with 'maint'

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

Merge branch 'wk/user-manual'Junio C Hamano Mon, 25 Feb 2013 16:27:17 +0000 (08:27 -0800)

Merge branch 'wk/user-manual'

Further updates to the user manual.

* wk/user-manual:
user-manual: Flesh out uncommitted changes and submodule updates
user-manual: Use request-pull to generate "please pull" text
user-manual: Reorganize the reroll sections, adding 'git rebase -i'

Merge branch 'jn/less-reconfigure'Junio C Hamano Mon, 25 Feb 2013 16:27:13 +0000 (08:27 -0800)

Merge branch 'jn/less-reconfigure'

A change made on v1.8.1.x maintenance track had a nasty regression
to break the build when autoconf is used.

* jn/less-reconfigure:
Makefile: avoid infinite loop on configure.ac change

Merge branch 'as/check-ignore'Junio C Hamano Mon, 25 Feb 2013 16:27:09 +0000 (08:27 -0800)

Merge branch 'as/check-ignore'

"git check-ignore ." segfaulted, as a function it calls deep in its
callchain took a string in the <ptr, length> form but did not stop
when given an empty string.

* as/check-ignore:
name-hash: allow hashing an empty string
t0008: document test_expect_success_multi

Merge branch 'ct/autoconf-htmldir'Junio C Hamano Mon, 25 Feb 2013 16:27:04 +0000 (08:27 -0800)

Merge branch 'ct/autoconf-htmldir'

An earlier change to config.mak.autogen broke a build driven by the
./configure script when --htmldir is not specified on the command
line of ./configure.

* ct/autoconf-htmldir:
Bugfix: undefined htmldir in config.mak.autogen

Merge branch 'wk/man-deny-current-branch-is-default... Junio C Hamano Mon, 25 Feb 2013 16:26:59 +0000 (08:26 -0800)

Merge branch 'wk/man-deny-current-branch-is-default-these-days'

* wk/man-deny-current-branch-is-default-these-days:
user-manual: typofix (ofthe->of the)

Prepare for 1.8.1.5Junio C Hamano Mon, 25 Feb 2013 16:15:40 +0000 (08:15 -0800)

Prepare for 1.8.1.5

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

Merge branch 'jc/mention-tracking-for-pull-default... Junio C Hamano Mon, 25 Feb 2013 16:04:19 +0000 (08:04 -0800)

Merge branch 'jc/mention-tracking-for-pull-default' into maint

* jc/mention-tracking-for-pull-default:
doc: mention tracking for pull.default

Merge branch 'mm/config-intro-in-git-doc' into maintJunio C Hamano Mon, 25 Feb 2013 16:04:17 +0000 (08:04 -0800)

Merge branch 'mm/config-intro-in-git-doc' into maint

* mm/config-intro-in-git-doc:
git.txt: update description of the configuration mechanism

Merge branch 'da/p4merge-mktemp-fix' into maintJunio C Hamano Mon, 25 Feb 2013 16:04:05 +0000 (08:04 -0800)

Merge branch 'da/p4merge-mktemp-fix' into maint

* da/p4merge-mktemp-fix:
p4merge: fix printf usage

Merge branch 'bw/get-tz-offset-perl' into maintJunio C Hamano Mon, 25 Feb 2013 16:04:03 +0000 (08:04 -0800)

Merge branch 'bw/get-tz-offset-perl' into maint

* bw/get-tz-offset-perl:
cvsimport: format commit timestamp ourselves without using strftime
perl/Git.pm: fix get_tz_offset to properly handle DST boundary cases
Move Git::SVN::get_tz to Git::get_tz_offset

Merge branch 'al/mergetool-printf-fix' into maintJunio C Hamano Mon, 25 Feb 2013 16:04:01 +0000 (08:04 -0800)

Merge branch 'al/mergetool-printf-fix' into maint

* al/mergetool-printf-fix:
difftool--helper: fix printf usage
git-mergetool: print filename when it contains %

Merge branch 'jx/utf8-printf-width' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:59 +0000 (08:03 -0800)

Merge branch 'jx/utf8-printf-width' into maint

* jx/utf8-printf-width:
Add utf8_fprintf helper that returns correct number of columns

Merge branch 'mg/bisect-doc' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:57 +0000 (08:03 -0800)

Merge branch 'mg/bisect-doc' into maint

* mg/bisect-doc:
git-bisect.txt: clarify that reset quits bisect

Merge branch 'sp/smart-http-content-type-check' into... Junio C Hamano Mon, 25 Feb 2013 16:03:54 +0000 (08:03 -0800)

Merge branch 'sp/smart-http-content-type-check' into maint

* sp/smart-http-content-type-check:
http_request: reset "type" strbuf before adding
t5551: fix expected error output
Verify Content-Type from smart HTTP servers

Merge branch 'jc/combine-diff-many-parents' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:51 +0000 (08:03 -0800)

Merge branch 'jc/combine-diff-many-parents' into maint

* jc/combine-diff-many-parents:
t4038: add tests for "diff --cc --raw <trees>"
combine-diff: lift 32-way limit of combined diff

Merge branch 'jk/apply-similaritly-parsing' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:44 +0000 (08:03 -0800)

Merge branch 'jk/apply-similaritly-parsing' into maint

* jk/apply-similaritly-parsing:
builtin/apply: tighten (dis)similarity index parsing

Merge branch 'jk/remote-helpers-doc' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:37 +0000 (08:03 -0800)

Merge branch 'jk/remote-helpers-doc' into maint

* jk/remote-helpers-doc:
Rename {git- => git}remote-helpers.txt

Merge branch 'ab/gitweb-use-same-scheme' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:34 +0000 (08:03 -0800)

Merge branch 'ab/gitweb-use-same-scheme' into maint

* ab/gitweb-use-same-scheme:
gitweb: refer to picon/gravatar images over the same scheme

Merge branch 'zk/clean-report-failure' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:32 +0000 (08:03 -0800)

Merge branch 'zk/clean-report-failure' into maint

* zk/clean-report-failure:
git-clean: Display more accurate delete messages

Merge branch 'nd/clone-no-separate-git-dir-with-bare... Junio C Hamano Mon, 25 Feb 2013 16:03:27 +0000 (08:03 -0800)

Merge branch 'nd/clone-no-separate-git-dir-with-bare' into maint

* nd/clone-no-separate-git-dir-with-bare:
clone: forbid --bare --separate-git-dir <dir>

Merge branch 'da/p4merge-mktemp' into maintJunio C Hamano Mon, 25 Feb 2013 16:03:20 +0000 (08:03 -0800)

Merge branch 'da/p4merge-mktemp' into maint

* da/p4merge-mktemp:
mergetools/p4merge: Honor $TMPDIR for the /dev/null placeholder

fix clang -Wtautological-compare with unsigned enumAntoine Pelisse Sun, 3 Feb 2013 14:37:09 +0000 (14:37 +0000)

fix clang -Wtautological-compare with unsigned enum

Create a GREP_HEADER_FIELD_MIN so we can check that the field value is
sane and silence the clang warning.

Clang warning happens because the enum is unsigned (this is
implementation-defined, and there is no negative fields) and the check
is then tautological.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: John Keeping <john@keeping.me.uk>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: "advice" is uncountableGreg Price Mon, 25 Feb 2013 05:27:20 +0000 (00:27 -0500)

Documentation: "advice" is uncountable

"Advice" is a mass noun, not a count noun; it's not ordinarily
pluralized.

Signed-off-by: Greg Price <price@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

describe: Document --match pattern formatGreg Price Mon, 25 Feb 2013 05:29:01 +0000 (00:29 -0500)

describe: Document --match pattern format

It's not clear in git-describe(1) what kind of "pattern" should be
passed to --match. Fix that.

Signed-off-by: Greg Price <price@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix ".git/refs" stragglersGreg Price Mon, 25 Feb 2013 05:34:14 +0000 (00:34 -0500)

Fix ".git/refs" stragglers

A couple of references still survive to .git/refs as a tree
of all refs. Fix one in docs, one in a -h message, one in
a -h message quoted in docs.

Signed-off-by: Greg Price <price@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/mw-to-git/t/install-wiki.sh: use a lowercase... David Aguilar Sun, 24 Feb 2013 22:48:41 +0000 (14:48 -0800)

contrib/mw-to-git/t/install-wiki.sh: use a lowercase "usage:" string

Make the usage string consistent with Git.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/examples/git-remote.perl: use a lowercase ... David Aguilar Sun, 24 Feb 2013 22:48:40 +0000 (14:48 -0800)

contrib/examples/git-remote.perl: use a lowercase "usage:" string

Make the usage string consistent with Git.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 22:48:39 +0000 (14:48 -0800)

tests: use a lowercase "usage:" string

Adjust test commands and test suites so that their
usage strings are consistent with Git.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-svn: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 22:48:38 +0000 (14:48 -0800)

git-svn: use a lowercase "usage:" string

Make the usage string consistent with Git.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/user-manual.txt: use a lowercase "usage... David Aguilar Sun, 24 Feb 2013 00:50:24 +0000 (16:50 -0800)

Documentation/user-manual.txt: use a lowercase "usage:" string

Make the usage string in the example script consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

templates/hooks--update.sample: use a lowercase "usage... David Aguilar Sun, 24 Feb 2013 00:50:23 +0000 (16:50 -0800)

templates/hooks--update.sample: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/hooks/setgitperms.perl: use a lowercase "usage... David Aguilar Sun, 24 Feb 2013 00:50:22 +0000 (16:50 -0800)

contrib/hooks/setgitperms.perl: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/examples: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:21 +0000 (16:50 -0800)

contrib/examples: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/fast-import/import-zips.py: use spaces instead... David Aguilar Sun, 24 Feb 2013 00:50:20 +0000 (16:50 -0800)

contrib/fast-import/import-zips.py: use spaces instead of tabs

Follow the conventional Python style by using 4-space indents
instead of hard tabs.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/fast-import/import-zips.py: fix broken error... David Aguilar Sun, 24 Feb 2013 00:50:19 +0000 (16:50 -0800)

contrib/fast-import/import-zips.py: fix broken error message

The 'sys' module is not imported but all of the bits
we want from it are. Adjust the script to not fail
when run on old Python versions and fix the inconsistent
use of tabs.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/fast-import: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:18 +0000 (16:50 -0800)

contrib/fast-import: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib/credential: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:17 +0000 (16:50 -0800)

contrib/credential: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-cvsimport: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:16 +0000 (16:50 -0800)

git-cvsimport: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-cvsimport: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:15 +0000 (16:50 -0800)

git-cvsimport: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-cvsexportcommit: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:14 +0000 (16:50 -0800)

git-cvsexportcommit: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-archimport: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:13 +0000 (16:50 -0800)

git-archimport: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-merge-one-file: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:12 +0000 (16:50 -0800)

git-merge-one-file: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-relink: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:11 +0000 (16:50 -0800)

git-relink: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-svn: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:10 +0000 (16:50 -0800)

git-svn: use a lowercase "usage:" string

Make the usage string consistent with Git.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-sh-setup: use a lowercase "usage:" stringDavid Aguilar Sun, 24 Feb 2013 00:50:09 +0000 (16:50 -0800)

git-sh-setup: use a lowercase "usage:" string

mergetool, bisect, and other commands that use
git-sh-setup print a usage string that is inconsistent
with the rest of Git when they are invoked as "git $cmd -h".

The compiled builtins use the lowercase "usage:" string
but these commands say "Usage:". Adjust the shell library
to make these consistent.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-curl: always parse incoming refsJeff King Wed, 20 Feb 2013 20:07:19 +0000 (15:07 -0500)

remote-curl: always parse incoming refs

When remote-curl receives a list of refs from a server, it
keeps the whole buffer intact. When we get a "list" command,
we feed the result to get_remote_heads, and when we get a
"fetch" or "push" command, we feed it to fetch-pack or
send-pack, respectively.

If the HTTP response from the server is truncated for any
reason, we will get an incomplete ref advertisement. If we
then feed this incomplete list to fetch-pack, one of a few
things may happen:

1. If the truncation is in a packet header, fetch-pack
will notice the bogus line and complain.

2. If the truncation is inside a packet, fetch-pack will
keep waiting for us to send the rest of the packet,
which we never will.

3. If the truncation is at a packet boundary, fetch-pack
will keep waiting for us to send the next packet, which
we never will.

As a result, fetch-pack hangs, waiting for input. However,
remote-curl believes it has sent all of the advertisement,
and therefore waits for fetch-pack to speak. The two
processes end up in a deadlock.

We do notice the broken ref list if we feed it to
get_remote_heads. So if git asks the helper to do a "list"
followed by a "fetch", we are safe; we'll abort during the
list operation, which parses the refs.

This patch teaches remote-curl to always parse and save the
incoming ref list when we read the ref advertisement from a
server. That means that we will always verify and abort
before even running fetch-pack (or send-pack) when reading a
corrupted list, even if we do not run the "list" command
explicitly.

Since we save the result, in the common case of running
"list" then "fetch", we do not do any extra parsing at all.
In the case of just a "fetch", we do an extra round of
parsing, but only once.

Note also that the "fetch" case will now also initialize
server_capabilities from the remote (in remote-curl; we
already would do so inside fetch-pack). Doing "list+fetch"
already does this. It doesn't actually matter now, but the
new behavior is arguably more correct, should remote-curl
ever start caring about the server's capability list.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-curl: move ref-parsing code up in fileJeff King Wed, 20 Feb 2013 20:07:11 +0000 (15:07 -0500)

remote-curl: move ref-parsing code up in file

The ref-parsing functions are static. Let's move them up in
the file to be available to more functions, which will help
us with later refactoring.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-curl: pass buffer straight to get_remote_headsJeff King Wed, 20 Feb 2013 20:07:02 +0000 (15:07 -0500)

remote-curl: pass buffer straight to get_remote_heads

Until recently, get_remote_heads only knew how to read refs
from a file descriptor. To hack around this, we spawned a
thread (or forked a process) to write the buffer back to us.

Now that we can just pass it our buffer directly, we don't
have to use this hack anymore.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

teach get_remote_heads to read from a memory bufferJeff King Wed, 20 Feb 2013 20:06:45 +0000 (15:06 -0500)

teach get_remote_heads to read from a memory buffer

Now that we can read packet data from memory as easily as a
descriptor, get_remote_heads can take either one as a
source. This will allow further refactoring in remote-curl.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: share buffer/descriptor reading implementationJeff King Sat, 23 Feb 2013 22:31:34 +0000 (17:31 -0500)

pkt-line: share buffer/descriptor reading implementation

The packet_read function reads from a descriptor. The
packet_get_line function is similar, but reads from an
in-memory buffer, and uses a completely separate
implementation. This patch teaches the generic packet_read
function to accept either source, and we can do away with
packet_get_line's implementation.

There are two other differences to account for between the
old and new functions. The first is that we used to read
into a strbuf, but now read into a fixed size buffer. The
only two callers are fine with that, and in fact it
simplifies their code, since they can use the same
static-buffer interface as the rest of the packet_read_line
callers (and we provide a similar convenience wrapper for
reading from a buffer rather than a descriptor).

This is technically an externally-visible behavior change in
that we used to accept arbitrary sized packets up to 65532
bytes, and now cap out at LARGE_PACKET_MAX, 65520. In
practice this doesn't matter, as we use it only for parsing
smart-http headers (of which there is exactly one defined,
and it is small and fixed-size). And any extension headers
would be breaking the protocol to go over LARGE_PACKET_MAX
anyway.

The other difference is that packet_get_line would return
on error rather than dying. However, both callers of
packet_get_line are actually improved by dying.

The first caller does its own error checking, but we can
drop that; as a result, we'll actually get more specific
reporting about protocol breakage when packet_read dies
internally. The only downside is that packet_read will not
print the smart-http URL that failed, but that's not a big
deal; anybody not debugging can already see the remote's URL
already, and anybody debugging would want to run with
GIT_CURL_VERBOSE anyway to see way more information.

The second caller, which is just trying to skip past any
extra smart-http headers (of which there are none defined,
but which we allow to keep room for future expansion), did
not error check at all. As a result, it would treat an error
just like a flush packet. The resulting mess would generally
cause an error later in get_remote_heads, but now we get
error reporting much closer to the source of the problem.

Brown-paper-bag-fixes-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/githooks: Explain pre-rebase parametersW. Trevor King Sat, 23 Feb 2013 15:27:39 +0000 (10:27 -0500)

Documentation/githooks: Explain pre-rebase parameters

Descriptions borrowed from templates/hooks--pre-rebase.sample.

Signed-off-by: W. Trevor King <wking@tremily.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: Fix rename pretty-print when suffix and prefix... Antoine Pelisse Sat, 23 Feb 2013 16:48:45 +0000 (17:48 +0100)

diff: Fix rename pretty-print when suffix and prefix overlap

When considering a rename for two files that have a suffix and a prefix
that can overlap, a confusing line is shown. As an example, renaming
"a/b/b/c" to "a/b/c" shows "a/b/{ => }/b/c".

Currently, what we do is calculate the common prefix ("a/b/"), and the
common suffix ("/b/c"), but the same "/b/" is actually counted both in
prefix and suffix. Then when calculating the size of the non-common part,
we end-up with a negative value which is reset to 0, thus the "{ => }".

Do not allow the common suffix to overlap the common prefix and stop
when reaching a "/" that would be in both.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: allow "-h" to also display optionsAntoine Pelisse Sat, 23 Feb 2013 18:10:41 +0000 (19:10 +0100)

update-index: allow "-h" to also display options

Even though "git update-index" was updated to use parse-options
infrastracture some time ago to make it possible to show list of
options with usage_with_options(), "git update-index -h" only shows
the usage. Detect this case and call usage_with_options() to show
the list of options as well.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

update-index: list supported idx versions and their... Nguyễn Thái Ngọc Duy Sat, 23 Feb 2013 02:29:31 +0000 (09:29 +0700)

update-index: list supported idx versions and their features

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch: segfault fixes and validationNguyễn Thái Ngọc Duy Sat, 23 Feb 2013 12:22:27 +0000 (19:22 +0700)

branch: segfault fixes and validation

branch_get() can return NULL (so far on detached HEAD only) but some
code paths in builtin/branch.c cannot deal with that and cause
segfaults.

While at there, make sure to bail out when the user gives 2 or more
branches with --set-upstream-to or --unset-upstream, where only the
first branch is processed and the rest silently dropped.

Reported-by: Per Cederqvist <cederp@opera.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-commit: populate the edit buffer with 2 blank lines... Brandon Casey Fri, 22 Feb 2013 22:05:27 +0000 (14:05 -0800)

git-commit: populate the edit buffer with 2 blank lines before s-o-b

'commit -s' populates the edit buffer with a blank line before the
Signed-off-by line, to allow the user to immediately start typing
the log message. But commit 33f2f9ab removed this space, forcing
the user to first push the Signed-off-by line down to open a place
to type the log message.

Fix this regression and let's ensure that the Signed-off-by line is
preceded by two blank lines, instead of just one, to hint that
something should be filled in, and that a blank line should separate
it from the body and the Signed-off-by line.

Add a test for this behavior.

Reported-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7502: perform commits using alternate editor in a... Brandon Casey Fri, 22 Feb 2013 23:13:00 +0000 (15:13 -0800)

t7502: perform commits using alternate editor in a subshell

These tests call test_set_editor to set an alternate editor script, but
they appear to presume that the assignment is of a temporary nature and
will not have any effect outside of each individual test. That is not
the case. All of the test functions within a test script share a single
environment, so any variables modified in one, are visible in the ones
that follow.

So, let's protect the test functions that follow these, which set an
alternate editor, by performing the test_set_editor and 'git commit'
in a subshell.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-options: unconfuse description of --colorJunio C Hamano Sat, 23 Feb 2013 06:24:10 +0000 (22:24 -0800)

diff-options: unconfuse description of --color

It said "by default it is off" while it also said "the default is
always", which confused everybody who read it only once. It wanted
to say (1) if you do not say --color, it is not enabled, and (2) if
you say --color but do not say when to enable it, it will always be
enabled".

Rephrase to clarify by using "default" only once.

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

Git.pm: fix cat_blob crashes on large filesJoshua Clayton Fri, 22 Feb 2013 21:01:18 +0000 (13:01 -0800)

Git.pm: fix cat_blob crashes on large files

Read and write each 1024 byte buffer, rather than trying to buffer
the entire content of the file. We are only copying the contents to
a file descriptor and do not use it ourselves.

Previous code would crash on all files > 2 Gib, when the offset
variable became negative (perhaps below the level of perl),
resulting in a crash. On a 32 bit system, or a system with low
memory it might crash before reaching 2 GiB due to memory
exhaustion.

This code may leave a partial file behind in case of failure, where
the old code would leave a completely empty file. Neither version
verifies the correctness of the content. Calling code must take
care of verification and cleanup.

Signed-off-by: Joshua Clayton <stillcompiling@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read-cache.c: use INDEX_FORMAT_{LB,UB} in verify_hdr()Nguyễn Thái Ngọc Duy Fri, 22 Feb 2013 12:09:24 +0000 (19:09 +0700)

read-cache.c: use INDEX_FORMAT_{LB,UB} in verify_hdr()

9d22778 (read-cache.c: write prefix-compressed names in the index -
2012-04-04) defined these. Interestingly, they were not used by
read-cache.c, or anywhere in that patch. They were used in
builtin/update-index.c later for checking supported index
versions. Use them here too.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-format.txt: mention of v4 is missing in some... Nguyễn Thái Ngọc Duy Fri, 22 Feb 2013 12:09:23 +0000 (19:09 +0700)

index-format.txt: mention of v4 is missing in some places

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: fix the mergetool launcher for the Beyond... Pat Thoyts Fri, 22 Feb 2013 20:13:21 +0000 (20:13 +0000)

git-gui: fix the mergetool launcher for the Beyond Compare tool.

When using Beyond Compare as the mergetool it fails to save the merged
result correctly due to a quoting problem when executing the tool.
This patch solves the quoting problem.

Signed-off-by: Warren Falk <warren@warrenfalk.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

Provide a mechanism to turn off symlink resolution... Michael Haggerty Wed, 20 Feb 2013 09:09:24 +0000 (10:09 +0100)

Provide a mechanism to turn off symlink resolution in ceiling paths

Commit 1b77d83cab 'setup_git_directory_gently_1(): resolve symlinks
in ceiling paths' changed the setup code to resolve symlinks in the
entries in GIT_CEILING_DIRECTORIES. Because those entries are
compared textually to the symlink-resolved current directory, an
entry in GIT_CEILING_DIRECTORIES that contained a symlink would have
no effect. It was known that this could cause performance problems
if the symlink resolution *itself* touched slow filesystems, but it
was thought that such use cases would be unlikely. The intention of
the earlier change was to deal with a case when the user has this:

GIT_CEILING_DIRECTORIES=/home/gitster

but in reality, /home/gitster is a symbolic link to somewhere else,
e.g. /net/machine/home4/gitster. A textual comparison between the
specified value /home/gitster and the location getcwd(3) returns
would not help us, but readlink("/home/gitster") would still be
fast.

After this change was released, Anders Kaseorg <andersk@mit.edu>
reported:

> [...] my computer has been acting so slow when I’m not connected to
> the network. I put various network filesystem paths in
> $GIT_CEILING_DIRECTORIES, such as
> /afs/athena.mit.edu/user/a/n/andersk (to avoid hitting its parents
> /afs/athena.mit.edu, /afs/athena.mit.edu/user/a, and
> /afs/athena.mit.edu/user/a/n which all live in different AFS
> volumes). Now when I’m not connected to the network, every
> invocation of Git, including the __git_ps1 in my shell prompt, waits
> for AFS to timeout.

To allow users to work around this problem, give them a mechanism to
turn off symlink resolution in GIT_CEILING_DIRECTORIES entries. All
the entries that follow an empty entry will not be checked for symbolic
links and used literally in comparison. E.g. with these:

GIT_CEILING_DIRECTORIES=:/foo/bar:/xyzzy or
GIT_CEILING_DIRECTORIES=/foo/bar::/xyzzy

we will not readlink("/xyzzy") because it comes after an empty entry.

With the former (but not with the latter), "/foo/bar" comes after an
empty entry, and we will not readlink it, either.

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

t7800: "defaults" is no longer a builtin tool nameDavid Aguilar Thu, 21 Feb 2013 23:32:52 +0000 (15:32 -0800)

t7800: "defaults" is no longer a builtin tool name

073678b8e6324a155fa99f40eee0637941a70a34 reworked the
mergetools/ directory so that every file corresponds to a
difftool-supported tool. When this happened the "defaults"
file went away as it was no longer needed by mergetool--lib.

t7800 tests that configured commands can override builtins,
but this test was not adjusted when the "defaults" file was
removed because the test continued to pass.

Adjust the test to use the everlasting "vimdiff" tool name
instead of "defaults" so that it correctly tests against a tool
that is known by mergetool--lib.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: avoid infinite loop on configure.ac changeJeff King Thu, 21 Feb 2013 06:26:14 +0000 (01:26 -0500)

Makefile: avoid infinite loop on configure.ac change

If you are using autoconf and change the configure.ac, the
Makefile will notice that config.status is older than
configure.ac, and will attempt to rebuild and re-run the
configure script to pick up your changes. The first step in
doing so is to run "make configure". Unfortunately, this
tries to include config.mak.autogen, which depends on
config.status, which depends on configure.ac; so we must
rebuild config.status. Which leads to us running "make
configure", and so on.

It's easy to demonstrate with:

make configure
./configure
touch configure.ac
make

We can break this cycle by not re-invoking make to build
"configure", and instead just putting its rules inline into
our config.status rebuild procedure. We can avoid a copy by
factoring the rules into a make variable.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: support Server Name Indication (RFC4366)Junio C Hamano Thu, 21 Feb 2013 00:02:42 +0000 (16:02 -0800)

imap-send: support Server Name Indication (RFC4366)

To talk with some sites that serve multiple names on a single IP
address, the client needs to ask for the specific host that it wants
to talk to.

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

t7800: modernize testsDavid Aguilar Thu, 21 Feb 2013 04:03:47 +0000 (20:03 -0800)

t7800: modernize tests

Eliminate a lot of redundant work by using test_config().
Catch more return codes by more use of temporary files
and test_cmp.

The original tests relied upon restore_test_defaults()
from the previous test to provide the next test with a sane
environment. Make the tests do their own setup so that they
are not dependent on the success of the previous test.
The end result is shorter tests and better test isolation.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: provide a LARGE_PACKET_MAX static bufferJeff King Wed, 20 Feb 2013 20:02:57 +0000 (15:02 -0500)

pkt-line: provide a LARGE_PACKET_MAX static buffer

Most of the callers of packet_read_line just read into a
static 1000-byte buffer (callers which handle arbitrary
binary data already use LARGE_PACKET_MAX). This works fine
in practice, because:

1. The only variable-sized data in these lines is a ref
name, and refs tend to be a lot shorter than 1000
characters.

2. When sending ref lines, git-core always limits itself
to 1000 byte packets.

However, the only limit given in the protocol specification
in Documentation/technical/protocol-common.txt is
LARGE_PACKET_MAX; the 1000 byte limit is mentioned only in
pack-protocol.txt, and then only describing what we write,
not as a specific limit for readers.

This patch lets us bump the 1000-byte limit to
LARGE_PACKET_MAX. Even though git-core will never write a
packet where this makes a difference, there are two good
reasons to do this:

1. Other git implementations may have followed
protocol-common.txt and used a larger maximum size. We
don't bump into it in practice because it would involve
very long ref names.

2. We may want to increase the 1000-byte limit one day.
Since packets are transferred before any capabilities,
it's difficult to do this in a backwards-compatible
way. But if we bump the size of buffer the readers can
handle, eventually older versions of git will be
obsolete enough that we can justify bumping the
writers, as well. We don't have plans to do this
anytime soon, but there is no reason not to start the
clock ticking now.

Just bumping all of the reading bufs to LARGE_PACKET_MAX
would waste memory. Instead, since most readers just read
into a temporary buffer anyway, let's provide a single
static buffer that all callers can use. We can further wrap
this detail away by having the packet_read_line wrapper just
use the buffer transparently and return a pointer to the
static storage. That covers most of the cases, and the
remaining ones already read into their own LARGE_PACKET_MAX
buffers.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: move LARGE_PACKET_MAX definition from sidebandJeff King Wed, 20 Feb 2013 20:02:45 +0000 (15:02 -0500)

pkt-line: move LARGE_PACKET_MAX definition from sideband

Having the packet sizes defined near the packet read/write
functions makes more sense.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: teach packet_read_line to chomp newlinesJeff King Wed, 20 Feb 2013 20:02:28 +0000 (15:02 -0500)

pkt-line: teach packet_read_line to chomp newlines

The packets sent during ref negotiation are all terminated
by newline; even though the code to chomp these newlines is
short, we end up doing it in a lot of places.

This patch teaches packet_read_line to auto-chomp the
trailing newline; this lets us get rid of a lot of inline
chomping code.

As a result, some call-sites which are not reading
line-oriented data (e.g., when reading chunks of packfiles
alongside sideband) transition away from packet_read_line to
the generic packet_read interface. This patch converts all
of the existing callsites.

Since the function signature of packet_read_line does not
change (but its behavior does), there is a possibility of
new callsites being introduced in later commits, silently
introducing an incompatibility. However, since a later
patch in this series will change the signature, such a
commit would have to be merged directly into this commit,
not to the tip of the series; we can therefore ignore the
issue.

This is an internal cleanup and should produce no change of
behavior in the normal case. However, there is one corner
case to note. Callers of packet_read_line have never been
able to tell the difference between a flush packet ("0000")
and an empty packet ("0004"), as both cause packet_read_line
to return a length of 0. Readers treat them identically,
even though Documentation/technical/protocol-common.txt says
we must not; it also says that implementations should not
send an empty pkt-line.

By stripping out the newline before the result gets to the
caller, we will now treat the newline-only packet ("0005\n")
the same as an empty packet, which in turn gets treated like
a flush packet. In practice this doesn't matter, as neither
empty nor newline-only packets are part of git's protocols
(at least not for the line-oriented bits, and readers who
are not expecting line-oriented packets will be calling
packet_read directly, anyway). But even if we do decide to
care about the distinction later, it is orthogonal to this
patch. The right place to tighten would be to stop treating
empty packets as flush packets, and this change does not
make doing so any harder.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: provide a generic reading function with optionsJeff King Wed, 20 Feb 2013 20:02:10 +0000 (15:02 -0500)

pkt-line: provide a generic reading function with options

Originally we had a single function for reading packetized
data: packet_read_line. Commit 46284dd grew a more "gentle"
form, packet_read, that returns an error instead of dying
upon reading a truncated input stream. However, it is not
clear from the names which should be called, or what the
difference is.

Let's instead make packet_read be a generic public interface
that can take option flags, and update the single callsite
that uses it. This is less code, more clear, and paves the
way for introducing more options into the generic interface
later. The function signature is changed, so there should be
no hidden conflicts with topics in flight.

While we're at it, we'll document how error conditions are
handled based on the options, and rename the confusing
"return_line_fail" option to "gentle_on_eof". While we are
cleaning up the names, we can drop the "return_line_fail"
checks in packet_read_internal entirely. They look like
this:

ret = safe_read(..., return_line_fail);
if (return_line_fail && ret < 0)
...

The check for return_line_fail is a no-op; safe_read will
only ever return an error value if return_line_fail was true
in the first place.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: drop safe_write functionJeff King Wed, 20 Feb 2013 20:01:56 +0000 (15:01 -0500)

pkt-line: drop safe_write function

This is just write_or_die by another name. The one
distinction is that write_or_die will treat EPIPE specially
by suppressing error messages. That's fine, as we die by
SIGPIPE anyway (and in the off chance that it is disabled,
write_or_die will simulate it).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pkt-line: move a misplaced commentJeff King Wed, 20 Feb 2013 20:01:46 +0000 (15:01 -0500)

pkt-line: move a misplaced comment

The comment describing the packet writing interface was
originally written above packet_write, but migrated to be
above safe_write in f3a3214, probably because it is meant to
generally describe the packet writing interface and not a
single function. Let's move it into the header file, where
users of the interface are more likely to see it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

write_or_die: raise SIGPIPE when we get EPIPEJeff King Wed, 20 Feb 2013 20:01:36 +0000 (15:01 -0500)

write_or_die: raise SIGPIPE when we get EPIPE

The write_or_die function will always die on an error,
including EPIPE. However, it currently treats EPIPE
specially by suppressing any error message, and by exiting
with exit code 0.

Suppressing the error message makes some sense; a pipe death
may just be a sign that the other side is not interested in
what we have to say. However, exiting with a successful
error code is not a good idea, as write_or_die is frequently
used in cases where we want to be careful about having
written all of the output, and we may need to signal to our
caller that we have done so (e.g., you would not want a push
whose other end has hung up to report success).

This distinction doesn't typically matter in git, because we
do not ignore SIGPIPE in the first place. Which means that
we will not get EPIPE, but instead will just die when we get
a SIGPIPE. But it's possible for a default handler to be set
by a parent process, or for us to add a callsite inside one
of our few SIGPIPE-ignoring blocks of code.

This patch converts write_or_die to actually raise SIGPIPE
when we see EPIPE, rather than exiting with zero. This
brings the behavior in line with the "normal" case that we
die from SIGPIPE (and any callers who want to check why we
died will see the same thing). We also give the same
treatment to other related functions, including
write_or_whine_pipe and maybe_flush_or_die.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>