gitweb.git
submodules: ensure clean environment when operating... Giuseppe Bilotta Wed, 24 Feb 2010 23:34:17 +0000 (00:34 +0100)

submodules: ensure clean environment when operating in a submodule

git-submodule used to take care of clearing GIT_DIR whenever it operated
on a submodule index or configuration, but forgot to unset GIT_WORK_TREE
or other repo-local variables. This would lead to failures e.g. when
GIT_WORK_TREE was set.

This only happened in very unusual contexts such as operating on the
main worktree from outside of it, but since "git-gui: set GIT_DIR and
GIT_WORK_TREE after setup" (a9fa11fe5bd5978bb) such failures could also
be provoked by invoking an external tool such as "git submodule update"
from the Git Gui in a standard setup.

Solve by using the newly introduced clear_local_git_env() shell function
to ensure that all repo-local environment variables are unset.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

shell setup: clear_local_git_env() functionGiuseppe Bilotta Wed, 24 Feb 2010 23:34:16 +0000 (00:34 +0100)

shell setup: clear_local_git_env() function

Introduce an auxiliary function to clear all repo-local environment
variables. This should be invoked by any shell script that switches
repository during execution, to ensure that the environment is clean
and that things such as the git dir and worktree are set up correctly.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-parse: --local-env-vars optionGiuseppe Bilotta Wed, 24 Feb 2010 23:34:15 +0000 (00:34 +0100)

rev-parse: --local-env-vars option

This prints the list of repo-local environment variables.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Refactor list of of repo-local env varsGiuseppe Bilotta Wed, 24 Feb 2010 23:34:14 +0000 (00:34 +0100)

Refactor list of of repo-local env vars

Move the list of GIT_* environment variables that are local to a
repository into a static list in environment.c, as it is also
useful elsewhere. Also add the missing GIT_CONFIG variable to the
list.

Make it easy to use the list both by NULL-termination and by size;
the latter (excluding the terminating NULL) is stored in the
local_repo_env_size define.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack-objects documentation: reword "objects that appear... Junio C Hamano Wed, 24 Feb 2010 23:41:27 +0000 (15:41 -0800)

pack-objects documentation: reword "objects that appear in the standard input"

These were written back when we always read objects from the standard
input. These days --revs and its friends can feed only the start and
end points and have the command internally enumerate the objects.

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

Merge branch 'maint'Junio C Hamano Wed, 24 Feb 2010 23:34:07 +0000 (15:34 -0800)

Merge branch 'maint'

* maint:
commit: quote the user name in the example

commit: quote the user name in the exampleMatt Kraai Wed, 24 Feb 2010 14:18:25 +0000 (06:18 -0800)

commit: quote the user name in the example

If the user runs

git config --global user.name Your Name

as suggested, user.name will be set to "Your". With this patch, the
suggested command will be

git config --global user.name "Your Name"

which will set user.name to "Your Name" and hopefully help users avoid
the former mistake.

Signed-off-by: Matt Kraai <kraai@ftbfs.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ml/maint-grep-doc' into maintJunio C Hamano Wed, 24 Feb 2010 23:33:23 +0000 (15:33 -0800)

Merge branch 'ml/maint-grep-doc' into maint

* ml/maint-grep-doc:
grep documentation: clarify what files match

shortlog: warn the user when there is no inputMichele Ballabio Wed, 24 Feb 2010 20:49:03 +0000 (21:49 +0100)

shortlog: warn the user when there is no input

A simple "git shortlog" outside of a git repository stalls
waiting for an input. Check if that's the case by testing with
isatty() before read_from_stdin(), and warn the user like
"git commit" does in a similar case.

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch --all/--multiple: keep all the fetched branch... Junio C Hamano Wed, 24 Feb 2010 19:02:05 +0000 (11:02 -0800)

fetch --all/--multiple: keep all the fetched branch information

Since "git fetch" learned "--all" and "--multiple" options, it has become
tempting for users to say "git pull --all". Even though it may fetch from
remotes that do not need to be fetched from for merging with the current
branch, it is handy.

"git fetch" however clears the list of fetched branches every time it
contacts a different remote. Unless the current branch is configured to
merge with a branch from a remote that happens to be the last in the list
of remotes that are contacted, "git pull" that fetches from multiple
remotes will not be able to find the branch it should be merging with.

Make "fetch" clear FETCH_HEAD (unless --append is given) and then append
the list of branches fetched to it (even when --append is not given). That
way, "pull" will be able to find the data for the branch being merged in
FETCH_HEAD no matter where the remote appears in the list of remotes to be
contacted by "git fetch".

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

push: fix segfault for odd configJeff King Wed, 24 Feb 2010 17:08:53 +0000 (12:08 -0500)

push: fix segfault for odd config

If you have a branch.$X.merge config option, but no branch.$X.remote, and
your configuration tries to push tracking branches, git will segfault.

The problem is that even though branch->merge_nr is 1, you don't actually
have an upstream since there is no remote. Other callsites generally
check explicitly that branch->merge is not NULL, so let's do that here,
too.

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

builtin-fetch --all/--multi: propagate options correctlyJunio C Hamano Wed, 24 Feb 2010 18:22:06 +0000 (10:22 -0800)

builtin-fetch --all/--multi: propagate options correctly

When running a subfetch, the code propagated some options but not others.
Propagate --force, --update-head-ok and --keep options as well.

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

t5521: fix and modernizeJunio C Hamano Wed, 24 Feb 2010 18:22:05 +0000 (10:22 -0800)

t5521: fix and modernize

All of these tests were bogus, as they created new directory and tried to
run "git pull" without even running "git init" in there. They were mucking
with the repository in $TEST_DIRECTORY.

While fixing it, modernize the style not to chdir around outside of
subshell. Otherwise a failed test will take us to an unexpected directory
and we need to chdir back to the test directory in each test, which is
ugly and error prone.

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

transport: update flags to be in running orderTay Ray Chuan Wed, 24 Feb 2010 12:50:29 +0000 (20:50 +0800)

transport: update flags to be in running order

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch and pull: learn --progressTay Ray Chuan Wed, 24 Feb 2010 12:50:28 +0000 (20:50 +0800)

fetch and pull: learn --progress

Note that in the documentation for git-pull, documentation for the
--progress option is displayed under the "Options related to fetching"
subtitle via fetch-options.txt.

Also, update the documentation of the -q/--quiet option for git-pull to
mention its effect on progress reporting during fetching.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

push: learn --progressTay Ray Chuan Wed, 24 Feb 2010 12:50:27 +0000 (20:50 +0800)

push: learn --progress

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport->progress: use flag authoritativelyTay Ray Chuan Wed, 24 Feb 2010 12:50:26 +0000 (20:50 +0800)

transport->progress: use flag authoritatively

Set transport->progress in transport.c::transport_set_verbosity() after
checking for the appropriate conditions (eg. --progress, isatty(2)),
and thereafter use it without having to check again.

The rules used are as follows (processing aborts when a rule is
satisfied):

1. Report progress, if force_progress is 1 (ie. --progress).
2. Don't report progress, if verbosity < 0 (ie. -q/--quiet).
3. Report progress if isatty(2) is 1.

This changes progress reporting behaviour such that if both --progress
and --quiet are specified, progress is reported.

In two areas, the logic to determine whether to *not* show progress is
changed to simply use the negation of transport->progress. This changes
behaviour in some ways (see previous paragraph for details).

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clone: support multiple levels of verbosityTay Ray Chuan Wed, 24 Feb 2010 12:50:25 +0000 (20:50 +0800)

clone: support multiple levels of verbosity

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

push: support multiple levels of verbosityTay Ray Chuan Wed, 24 Feb 2010 12:50:24 +0000 (20:50 +0800)

push: support multiple levels of verbosity

Remove the flags TRANSPORT_PUSH_QUIET and TRANSPORT_PUSH_VERBOSE; use
transport->verbose instead to determine verbosity for pushing.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch: refactor verbosity option handling into transpor... Tay Ray Chuan Wed, 24 Feb 2010 12:50:23 +0000 (20:50 +0800)

fetch: refactor verbosity option handling into transport.[ch]

transport_set_verbosity() is now provided to transport users.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/git-push: put --quiet before --verboseTay Ray Chuan Wed, 24 Feb 2010 12:50:22 +0000 (20:50 +0800)

Documentation/git-push: put --quiet before --verbose

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/git-pull: put verbosity options before... Tay Ray Chuan Wed, 24 Feb 2010 12:50:21 +0000 (20:50 +0800)

Documentation/git-pull: put verbosity options before merge/fetch ones

After 3f7a9b5 (Documentation/git-pull.txt: Add subtitles above included
option files, Thu Oct 22 2009), the -q/-v options were mentioned only
for the merge options section, giving the impression that git-fetch did
not take those arguments.

Follow 90e4311 (git-pull: do not mention --quiet and --verbose twice,
Mon Sep 7 2009) and hide -q/-v for merge options, while mentioning -q/-v
before the merge- and fetch-specific options.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/git-clone: mention progress in -vTay Ray Chuan Wed, 24 Feb 2010 12:50:20 +0000 (20:50 +0800)

Documentation/git-clone: mention progress in -v

After 5a518ad (clone: use --progress to force progress reporting),
-v/--verbose did not affect whether progress status was reported to
stderr, and users accustomed to using -v to do so since 21188b1
(Implement git clone -v) may be confused.

Mitigate such risks by stating -v does not affect progress in the
documentation.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Tue, 23 Feb 2010 22:27:55 +0000 (14:27 -0800)

Merge branch 'maint'

* maint:
am: remove rebase-apply directory before gc
rerere: fix memory leak if rerere images can't be read
Documentation: mention conflict marker size argument (%L) for merge driver

am: remove rebase-apply directory before gcJonathan Nieder Mon, 22 Feb 2010 14:35:46 +0000 (08:35 -0600)

am: remove rebase-apply directory before gc

When git am does an automatic gc it doesn't clean up the rebase-apply
directory until after this has finished. This means that if the user
aborts the gc then future am or rebase operations will report that an
existing operation is in progress, which is undesirable and confusing.

Reported by Mark Brown <broonie@debian.org> through
http://bugs.debian.org/570966

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

rerere: fix memory leak if rerere images can't be readBert Wesarg Tue, 23 Feb 2010 20:11:53 +0000 (21:11 +0100)

rerere: fix memory leak if rerere images can't be read

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Print RUNTIME_PREFIX warning only when GIT_TRACE is setJohannes Sixt Tue, 23 Feb 2010 11:42:56 +0000 (12:42 +0100)

Print RUNTIME_PREFIX warning only when GIT_TRACE is set

When RUNTIME_PREFIX is enabled, the installation prefix is derived by
trying a limited set of known locations where the git executable can
reside. If none of these is found, a warning is emitted.

When git is built in a directory that matches neither of these known names,
the warning would always be emitted when the uninstalled executable is run.
This is a problem on Windows, where gitk picks the uninstalled git when
invoked from the build directory and gets confused by the warning.

Print the warning only when GIT_TRACE is set.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Allow '+', '-' and '.' in remote helper namesIlari Liusvaara Tue, 23 Feb 2010 12:33:48 +0000 (14:33 +0200)

Allow '+', '-' and '.' in remote helper names

According to relevant RFCs, in addition to alphanumerics, the following
characters are valid in URL scheme parts: '+', '-' and '.', but
currently only alphanumerics are allowed in remote helper names.

Allow those three characters in remote helper names (both 'foo://' and
'foo::' syntax).

Signed-off-by: Ilari Liusvaara <ilari.liusvaara@elisanet.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: mention conflict marker size argument... Bert Wesarg Tue, 23 Feb 2010 20:11:12 +0000 (21:11 +0100)

Documentation: mention conflict marker size argument (%L) for merge driver

23a64c9e (conflict-marker-size: new attribute, 2010-01-16) introduced the
new attribute and also pass the conflict marker size as %L to merge driver
commands. This documents the substitution.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

move encode_in_pack_object_header() to a better placeNicolas Pitre Tue, 23 Feb 2010 20:02:37 +0000 (15:02 -0500)

move encode_in_pack_object_header() to a better place

Commit 1b22b6c897 made duplicated versions of encode_header() into a
common version called encode_in_pack_object_header(). There is however
a better location that sha1_file.c for such a function though, as
sha1_file.c contains nothing related to the creation of packs, and
it is quite populated already.

Also the comment that was moved to the header file should really remain
near the function as it covers implementation details and provides no
information about the actual function interface.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add-interactive: fix bogus diff header line orderingJeff King Tue, 23 Feb 2010 01:05:44 +0000 (20:05 -0500)

add-interactive: fix bogus diff header line ordering

When we look at a patch for adding hunks interactively, we
first split it into a header and a list of hunks. Some of
the header lines, such as mode changes and deletion, however,
become their own selectable hunks. Later when we reassemble
the patch, we simply concatenate the header and the selected
hunks. This leads to patches like this:

diff --git a/file b/file
index d95f3ad..0000000
--- a/file
+++ /dev/null
deleted file mode 100644
@@ -1 +0,0 @@
-content

Notice how the deletion comes _after_ the ---/+++ lines,
when it should come before.

In many cases, we can get away with this as git-apply
accepts the slightly bogus input. However, in the specific
case of a deletion line that is being applied via "apply
-R", this malformed patch triggers an assert in git-apply.
This comes up when discarding a deletion via "git checkout
-p".

Rather than try to make git-apply accept our odd input,
let's just reassemble the patch in the correct order.

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

Use git_mkstemp_mode instead of plain mkstemp to create... Matthieu Moy Mon, 22 Feb 2010 22:32:16 +0000 (23:32 +0100)

Use git_mkstemp_mode instead of plain mkstemp to create object files

We used to unnecessarily give the read permission to group and others,
regardless of the umask, which isn't serious because the objects are
still protected by their containing directory, but isn't necessary
either.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git_mkstemps_mode: don't set errno to EINVAL on exit.Matthieu Moy Mon, 22 Feb 2010 22:32:15 +0000 (23:32 +0100)

git_mkstemps_mode: don't set errno to EINVAL on exit.

When reaching the end of git_mkstemps_mode, at least one call to open()
has been done, and errno has been set accordingly. Setting errno is
therefore not necessary, and actually harmfull since callers can't
distinguish e.g. permanent failure from ENOENT, which can just mean that
we need to create the containing directory.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp... Matthieu Moy Mon, 22 Feb 2010 22:32:14 +0000 (23:32 +0100)

Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later.

We used to create 0600 files, and then use chmod to set the group and
other permission bits to the umask. This usually has the same effect
as a normal file creation with a umask.

But in the presence of ACLs, the group permission plays the role of
the ACL mask: the "g" bits of newly created files are chosen according
to default ACL mask of the directory, not according to the umask, and
doing a chmod() on these "g" bits affect the ACL's mask instead of
actual group permission.

In other words, creating files with 0600 and then doing a chmod to the
umask creates files which are unreadable by users allowed in the
default ACL. To create the files without breaking ACLs, we let the
umask do it's job at the file's creation time, and get rid of the
later chmod.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemp... Matthieu Moy Mon, 22 Feb 2010 22:32:13 +0000 (23:32 +0100)

git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.

gitmkstemps emulates the behavior of mkstemps, which is usually used
to create files in a shared directory like /tmp/, hence, it creates
files with permission 0600.

Add git_mkstemps_mode() that allows us to specify the desired mode, and
make git_mkstemps() a wrapper that always uses 0600 to call it. Later we
will use git_mkstemps_mode() when creating pack files.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Move gitmkstemps to path.cMatthieu Moy Mon, 22 Feb 2010 22:32:12 +0000 (23:32 +0100)

Move gitmkstemps to path.c

This function used to be only a compatibility function, but we're
going to extend it and actually use it, so make it part of Git.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add a testcase for ACL with restrictive umask.Matthieu Moy Mon, 22 Feb 2010 22:32:11 +0000 (23:32 +0100)

Add a testcase for ACL with restrictive umask.

Right now, Git creates unreadable pack files on non-shared
repositories when the user has a umask of 077, even when the default
ACLs for the directory would give read/write access to a specific
user.

Loose object files are created world-readable, which doesn't break ACLs,
but isn't necessarily desirable.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Move 'builtin-*' into a 'builtin/' subdirectoryLinus Torvalds Mon, 22 Feb 2010 16:42:18 +0000 (08:42 -0800)

Move 'builtin-*' into a 'builtin/' subdirectory

This shrinks the top-level directory a bit, and makes it much more
pleasant to use auto-completion on the thing. Instead of

[torvalds@nehalem git]$ em buil<tab>
Display all 180 possibilities? (y or n)
[torvalds@nehalem git]$ em builtin-sh
builtin-shortlog.c builtin-show-branch.c builtin-show-ref.c
builtin-shortlog.o builtin-show-branch.o builtin-show-ref.o
[torvalds@nehalem git]$ em builtin-shor<tab>
builtin-shortlog.c builtin-shortlog.o
[torvalds@nehalem git]$ em builtin-shortlog.c

you get

[torvalds@nehalem git]$ em buil<tab> [type]
builtin/ builtin.h
[torvalds@nehalem git]$ em builtin [auto-completes to]
[torvalds@nehalem git]$ em builtin/sh<tab> [type]
shortlog.c shortlog.o show-branch.c show-branch.o show-ref.c show-ref.o
[torvalds@nehalem git]$ em builtin/sho [auto-completes to]
[torvalds@nehalem git]$ em builtin/shor<tab> [type]
shortlog.c shortlog.o
[torvalds@nehalem git]$ em builtin/shortlog.c

which doesn't seem all that different, but not having that annoying
break in "Display all 180 possibilities?" is quite a relief.

NOTE! If you do this in a clean tree (no object files etc), or using an
editor that has auto-completion rules that ignores '*.o' files, you
won't see that annoying 'Display all 180 possibilities?' message - it
will just show the choices instead. I think bash has some cut-off
around 100 choices or something.

So the reason I see this is that I'm using an odd editory, and thus
don't have the rules to cut down on auto-completion. But you can
simulate that by using 'ls' instead, or something similar.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: Fix race condition in t7006-pagerJonathan Nieder Mon, 22 Feb 2010 08:46:33 +0000 (02:46 -0600)

tests: Fix race condition in t7006-pager

Pagers that do not consume their input are dangerous: for example,

$ GIT_PAGER=: git log
$ echo $?
141
$

The only reason these tests were able to work before was that
'git log' would write to the pipe (and not fill it) before the
pager had time to terminate and close the pipe.

Fix it by using a program that consumes its input, namely wc (as
suggested by Johannes).

Reported-by: Johannes Sixt <j.sixt@viscovery.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: be paranoid when creating loose objectsNicolas Pitre Sun, 21 Feb 2010 20:48:06 +0000 (15:48 -0500)

sha1_file: be paranoid when creating loose objects

We don't want the data being deflated and stored into loose objects
to be different from what we expect. While the deflated data is
protected by a CRC which is good enough for safe data retrieval
operations, we still want to be doubly sure that the source data used
at object creation time is still what we expected once that data has
been deflated and its CRC32 computed.

The most plausible data corruption may occur if the source file is
modified while Git is deflating and writing it out in a loose object.
Or Git itself could have a bug causing memory corruption. Or even bad
RAM could cause trouble. So it is best to make sure everything is
coherent and checksum protected from beginning to end.

To do so we compute the SHA1 of the data being deflated _after_ the
deflate operation has consumed that data, and make sure it matches
with the expected SHA1. This way we can rely on the CRC32 checked by
the inflate operation to provide a good indication that the data is still
coherent with its SHA1 hash. One pathological case we ignore is when
the data is modified before (or during) deflate call, but changed back
before it is hashed.

There is some overhead of course. Using 'git add' on a set of large files:

Before:

real 0m25.210s
user 0m23.783s
sys 0m1.408s

After:

real 0m26.537s
user 0m25.175s
sys 0m1.358s

The overhead is around 5% for full data coherency guarantee.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-diff: add a test for git diff --quiet -wLarry D'Anna Mon, 22 Feb 2010 02:58:44 +0000 (21:58 -0500)

git-diff: add a test for git diff --quiet -w

This patch adds two test cases for:

6977c25 git diff --quiet -w: check and report the status

Signed-off-by: Larry D'Anna <larry@elder-gods.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ml/maint-grep-doc'Junio C Hamano Sun, 21 Feb 2010 20:01:06 +0000 (12:01 -0800)

Merge branch 'ml/maint-grep-doc'

* ml/maint-grep-doc:
grep documentation: clarify what files match

Merge branch 'tc/maint-transport-ls-remote-with-void'Junio C Hamano Sun, 21 Feb 2010 20:01:03 +0000 (12:01 -0800)

Merge branch 'tc/maint-transport-ls-remote-with-void'

* tc/maint-transport-ls-remote-with-void:
transport: add got_remote_refs flag

Merge branch 'hm/maint-imap-send-crlf'Junio C Hamano Sun, 21 Feb 2010 20:00:21 +0000 (12:00 -0800)

Merge branch 'hm/maint-imap-send-crlf'

* hm/maint-imap-send-crlf:
git-imap-send: Convert LF to CRLF before storing patch to draft box

Merge branch 'sp/push-sideband'Junio C Hamano Sun, 21 Feb 2010 20:00:07 +0000 (12:00 -0800)

Merge branch 'sp/push-sideband'

* sp/push-sideband:
receive-pack: Send internal errors over side-band #2
t5401: Use a bare repository for the remote peer
receive-pack: Send hook output over side band #2
receive-pack: Wrap status reports inside side-band-64k
receive-pack: Refactor how capabilities are shown to the client
send-pack: demultiplex a sideband stream with status data
run-command: support custom fd-set in async
run-command: Allow stderr to be a caller supplied pipe

Merge branch 'jc/checkout-detached'Junio C Hamano Sun, 21 Feb 2010 19:59:42 +0000 (11:59 -0800)

Merge branch 'jc/checkout-detached'

* jc/checkout-detached:
Reword "detached HEAD" notification

Merge branch 'jc/maint-fix-test-perm'Junio C Hamano Sun, 21 Feb 2010 19:59:35 +0000 (11:59 -0800)

Merge branch 'jc/maint-fix-test-perm'

* jc/maint-fix-test-perm:
lib-patch-mode.sh: Fix permission
t6000lib: Fix permission

Merge branch 'jn/makefile-script-lib'Junio C Hamano Sun, 21 Feb 2010 19:59:22 +0000 (11:59 -0800)

Merge branch 'jn/makefile-script-lib'

* jn/makefile-script-lib:
Do not install shell libraries executable

Merge branch 'mv/request-pull-modernize'Junio C Hamano Sun, 21 Feb 2010 19:59:17 +0000 (11:59 -0800)

Merge branch 'mv/request-pull-modernize'

* mv/request-pull-modernize:
request-pull: avoid mentioning that the start point is a single commit

hash-object: don't use mmap() for small filesDmitry Potapov Sun, 21 Feb 2010 06:32:19 +0000 (09:32 +0300)

hash-object: don't use mmap() for small files

Using read() instead of mmap() can be 39% speed up for 1Kb files and is
1% speed up 1Mb files. For larger files, it is better to use mmap(),
because the difference between is not significant, and when there is not
enough memory, mmap() performs much better, because it avoids swapping.

Signed-off-by: Dmitry Potapov <dpotapov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: don't malloc the whole compressed result... Nicolas Pitre Sun, 21 Feb 2010 04:27:31 +0000 (23:27 -0500)

sha1_file: don't malloc the whole compressed result when writing out objects

There is no real advantage to malloc the whole output buffer and
deflate the data in a single pass when writing loose objects. That is
like only 1% faster while using more memory, especially with large
files where memory usage is far more. It is best to deflate and write
the data out in small chunks reusing the same memory instead.

For example, using 'git add' on a few large files averaging 40 MB ...

Before:
21.45user 1.10system 0:22.57elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+142640minor)pagefaults 0swaps

After:
21.50user 1.25system 0:22.76elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+104408minor)pagefaults 0swaps

While the runtime stayed relatively the same, the number of minor page
faults went down significantly.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7006-pager: if stdout is not a terminal, make a new oneJonathan Nieder Sat, 20 Feb 2010 08:50:25 +0000 (02:50 -0600)

t7006-pager: if stdout is not a terminal, make a new one

Testing pagination requires (fake or real) access to a terminal so we
can see whether the pagination automatically kicks in, which makes it
hard to get good coverage when running tests without --verbose. There
are a number of ways to work around that:

- Replace all isatty calls with calls to a custom xisatty wrapper
that usually checks for a terminal but can be overridden for tests.
This would be workable, but it would require implementing xisatty
separately in three languages (C, shell, and perl) and making sure
that any code that is to be tested always uses the wrapper.

- Redirect stdout to /dev/tty. This would be problematic because
there might be no terminal available, and even if a terminal is
available, it might not be appropriate to spew output to it.

- Create a new pseudo-terminal on the fly and capture its output.

This patch implements the third approach.

The new test-terminal.perl helper uses IO::Pty from Expect.pm to create
a terminal and executes the program specified by its arguments with
that terminal as stdout. If the IO::Pty module is missing or not
working on a system, the test script will maintain its old behavior
(skipping most of its tests unless GIT_TEST_OPTS includes --verbose).

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

Merge branch 'maint'Junio C Hamano Sat, 20 Feb 2010 18:38:42 +0000 (10:38 -0800)

Merge branch 'maint'

* maint:
git-p4: fix bug in symlink handling
t1450: fix testcases that were wrongly expecting failure
Documentation: Fix indentation problem in git-commit(1)

cherry_pick_list: quit early if one side is emptyThomas Rast Sat, 20 Feb 2010 11:42:04 +0000 (12:42 +0100)

cherry_pick_list: quit early if one side is empty

The --cherry-pick logic starts by counting the commits on each side,
so that it can filter away commits on the bigger one. However, so
far it missed an opportunity for optimization: it doesn't need to do
any work if either side is empty.

This in particular helps the common use-case 'git rebase -i HEAD~$n':
it internally uses --cherry-pick, but since HEAD~$n is a direct
ancestor the left side is always empty.

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

tests: Add tests for automatic use of pagerJonathan Nieder Fri, 19 Feb 2010 07:18:58 +0000 (01:18 -0600)

tests: Add tests for automatic use of pager

Git’s automatic pagination support has some subtleties. Add some
tests to make sure we don’t break:

- when git will use a pager by default;
- the effect of the --paginate and --no-pager options;
- the effect of pagination on use of color;
- how the choice of pager is configured.

This does not yet test:

- use of pager by scripted commands (git svn and git am);
- effect of the pager.* configuration variables;
- setting of the LESS variable.

Some features involve checking whether stdout is a terminal, so many
of these tests are skipped unless output is passed through to the
terminal (i.e., unless $GIT_TEST_OPTS includes --verbose).

The immediate purpose for these tests was to avoid making things worse
after the breakage from my jn/editor-pager series (see commit 376f39,
2009-11-20). Thanks to Sebastian Celis <sebastian@sebastiancelis.com>
for the report.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: pack-objects: Clarify --local's semantics.Nelson Elhage Fri, 19 Feb 2010 03:29:30 +0000 (22:29 -0500)

Documentation: pack-objects: Clarify --local's semantics.

The current documentation suggests that --local also ignores any
objects in local packs, which is incorrect. Change the language to be
clearer and more parallel to the other options that ignore objects.

While we're at it, fix a trivial error in --incremental's
documentation.

Signed-off-by: Nelson Elhage <nelhage@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8.c: speculatively assume utf-8 in strbuf_add_wrappe... René Scharfe Fri, 19 Feb 2010 22:20:44 +0000 (23:20 +0100)

utf8.c: speculatively assume utf-8 in strbuf_add_wrapped_text()

is_utf8() works by calling utf8_width() for each character at the
supplied location. In strbuf_add_wrapped_text(), we do that anyway
while wrapping the lines. So instead of checking the encoding
beforehand, optimistically assume that it's utf-8 and wrap along
until an invalid character is hit, and when that happens start over.

This pays off if the text consists only of valid utf-8 characters.
The following command was run against the Linux kernel repo with
git 1.7.0:

$ time git log --format='%b' v2.6.32 >/dev/null

real 0m2.679s
user 0m2.580s
sys 0m0.100s

$ time git log --format='%w(60,4,8)%b' >/dev/null

real 0m4.342s
user 0m4.230s
sys 0m0.110s

And with this patch series:

$ time git log --format='%w(60,4,8)%b' >/dev/null

real 0m3.741s
user 0m3.630s
sys 0m0.110s

So the cost of wrapping is reduced to 70% in this case.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8.c: remove strbuf_write()René Scharfe Fri, 19 Feb 2010 22:16:45 +0000 (23:16 +0100)

utf8.c: remove strbuf_write()

The patch before the previous one made sure that all callers of
strbuf_add_wrapped_text() supply a strbuf. Replace all calls of
strbuf_write() with regular strbuf functions and remove it.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8.c: remove print_spaces()René Scharfe Fri, 19 Feb 2010 22:15:55 +0000 (23:15 +0100)

utf8.c: remove print_spaces()

The previous patch made sure that strbuf_add_wrapped_text() (and thus
strbuf_add_indented_text(), too) always get a strbuf. Make use of
this fact by adding strbuf_addchars(), a small helper that adds a
char the specified number of times to a strbuf, and use it to replace
print_spaces().

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8.c: remove print_wrapped_text()René Scharfe Fri, 19 Feb 2010 22:15:01 +0000 (23:15 +0100)

utf8.c: remove print_wrapped_text()

strbuf_add_wrapped_text() is called only from print_wrapped_text()
without a strbuf (in which case it writes its results to stdout).

At its only callsite, supply a strbuf, call strbuf_add_wrapped_text()
directly and remove the wrapper function.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: fix bug in symlink handlingEvan Powers Tue, 16 Feb 2010 08:44:08 +0000 (00:44 -0800)

git-p4: fix bug in symlink handling

Fix inadvertent breakage from b932705 (git-p4: stream from perforce to
speed up clones, 2009-07-30) in the code that strips the trailing '\n'
from p4 print on a symlink. (In practice, contents is of the form
['target\n', ''].)

Signed-off-by: Evan Powers <evan.powers@gmail.com>
Acked-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1450: fix testcases that were wrongly expecting failureThomas Rast Sat, 20 Feb 2010 00:18:44 +0000 (01:18 +0100)

t1450: fix testcases that were wrongly expecting failure

Almost exactly a year ago in 02a6552 (Test fsck a bit harder), I
introduced two testcases that were expecting failure.

However, the only bug was that the testcases wrote *blobs* because I
forgot to pass -t tag to hash-object. Fix this, and then adjust the
rest of the test to properly check the result.

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

mailinfo: do not strip leading spaces even for a header... Junio C Hamano Sat, 20 Feb 2010 05:55:33 +0000 (21:55 -0800)

mailinfo: do not strip leading spaces even for a header line

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

Documentation: Fix indentation problem in git-commit(1)Jacob Helwig Mon, 15 Feb 2010 12:33:06 +0000 (04:33 -0800)

Documentation: Fix indentation problem in git-commit(1)

Ever since the "See linkgit:git-config[1]..." paragraph was added to the
description for --untracked-files (d6293d1), the paragraphs for the
following options were indented at the same level as the "See
linkgit:git-config[1]" paragraph. This problem showed up in the
manpages, but not in the HTML documentation.

While this does fix the alignment of the options following
--untracked-files in the manpage, the "See linkgit..." portion of the
description does not retain its previous indentation level in the
manpages, or HTML documentation.

Signed-off-by: Jacob Helwig <jacob.helwig@gmail.com>
Acked-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Fri, 19 Feb 2010 09:31:42 +0000 (01:31 -0800)

Merge branch 'maint'

* maint:
rm: fix bug in recursive subdirectory removal
Documentation: describe --thin more accurately

Merge branch 'jk/maint-rmdir-fix' into maintJunio C Hamano Fri, 19 Feb 2010 09:31:37 +0000 (01:31 -0800)

Merge branch 'jk/maint-rmdir-fix' into maint

* jk/maint-rmdir-fix:
rm: fix bug in recursive subdirectory removal

rm: fix bug in recursive subdirectory removalJeff King Fri, 19 Feb 2010 05:57:21 +0000 (00:57 -0500)

rm: fix bug in recursive subdirectory removal

If we remove a path in a/deep/subdirectory, we should try to
remove as many trailing components as possible (i.e.,
subdirectory, then deep, then a). However, the test for the
return value of rmdir was reversed, so we only ever deleted
at most one level.

The fix is in remove_path, so "apply" and "merge-recursive"
also are fixed.

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

Add an optional argument for --color optionsMark Lodato Wed, 17 Feb 2010 04:55:58 +0000 (23:55 -0500)

Add an optional argument for --color options

Make git-branch, git-show-branch, git-grep, and all the diff-based
programs accept an optional argument <when> for --color. The argument
is a colorbool: "always", "never", or "auto". If no argument is given,
"always" is used; --no-color is an alias for --color=never. This makes
the command-line interface consistent with other GNU tools, such as `ls'
and `grep', and with the git-config color options. Note that, without
an argument, --color and --no-color work exactly as before.

To implement this, two internal changes were made:

1. Allow the first argument of git_config_colorbool() to be NULL,
in which case it returns -1 if the argument isn't "always", "never",
or "auto".

2. Add OPT_COLOR_FLAG(), OPT__COLOR(), and parse_opt_color_flag_cb()
to the option parsing library. The callback uses
git_config_colorbool(), so color.h is now a dependency
of parse-options.c.

Signed-off-by: Mark Lodato <lodatom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: describe --thin more accuratelyStephen Boyd Thu, 18 Feb 2010 09:10:28 +0000 (01:10 -0800)

Documentation: describe --thin more accurately

The description for --thin was misleading and downright wrong. Correct
it with some inspiration from the description of index-pack's --fix-thin
and some background information from Nicolas Pitre <nico@fluxnic.net>.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Thu, 18 Feb 2010 07:03:46 +0000 (23:03 -0800)

Merge branch 'maint'

* maint:
docs: don't talk about $GIT_DIR/refs/ everywhere

docs: don't talk about $GIT_DIR/refs/ everywhereJeff King Thu, 18 Feb 2010 01:16:20 +0000 (20:16 -0500)

docs: don't talk about $GIT_DIR/refs/ everywhere

It is misleading to say that we pull refs from $GIT_DIR/refs/*, because we
may also consult the packed refs mechanism. These days we tend to treat
the "refs hierarchy" as more of an abstract namespace that happens to be
represented as $GIT_DIR/refs. At best, this is a minor inaccuracy, but at
worst it can confuse users who then look in $GIT_DIR/refs and find that it
is missing some of the refs they expected to see.

This patch drops most uses of "$GIT_DIR/refs/*", changing them into just
"refs/*", under the assumption that users can handle the concept of an
abstract refs namespace. There are a few things to note:

- most cases just dropped the $GIT_DIR/ portion. But for cases where
that left _just_ the word "refs", I changed it to "refs/" to help
indicate that it was a hierarchy. I didn't do the same for longer
paths (e.g., "refs/heads" remained, instead of becoming
"refs/heads/").

- in some cases, no change was made, as the text was explicitly about
unpacked refs (e.g., the discussion in git-pack-refs).

- In some cases it made sense instead to note the existence of packed
refs (e.g., in check-ref-format and rev-parse).

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

refactor duplicated encode_header in pack-objects and... Michael Lukashov Tue, 16 Feb 2010 23:42:54 +0000 (23:42 +0000)

refactor duplicated encode_header in pack-objects and fast-import

The following function is duplicated:

encode_header

Move this function to sha1_file.c and rename it 'encode_in_pack_object_header',
as suggested by Junio C Hamano

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'np/fast-import-idx-v2'Junio C Hamano Wed, 17 Feb 2010 23:28:25 +0000 (15:28 -0800)

Merge branch 'np/fast-import-idx-v2'

* np/fast-import-idx-v2:
fast-import: use the diff_delta() max_delta_size argument
fast-import: honor pack.indexversion and pack.packsizelimit config vars
fast-import: make default pack size unlimited
fast-import: use write_idx_file() instead of custom code
fast-import: use sha1write() for pack data
fast-import: start using struct pack_idx_entry

Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refactor duplicated fill_mm() in checkout and merge... Michael Lukashov Tue, 16 Feb 2010 23:42:55 +0000 (23:42 +0000)

refactor duplicated fill_mm() in checkout and merge-recursive

The following function is duplicated:

fill_mm

Move it to xdiff-interface.c and rename it 'read_mmblob', as suggested
by Junio C Hamano.

Also, change parameters order for consistency with read_mmfile().

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refactor duplicated code in builtin-send-pack.c and... Michael Lukashov Tue, 16 Feb 2010 23:42:52 +0000 (23:42 +0000)

refactor duplicated code in builtin-send-pack.c and transport.c

The following functions are (almost) identical:

verify_remote_names
update_tracking_ref
refs_pushed
print_push_status

Move common versions of these functions to transport.c and rename
them, as suggested by Jeff King and Junio C Hamano.

These functions have been removed entirely from builtin-send-pack.c,
since they are only used internally by print_push_status():

print_ref_status
status_abbrev
print_ok_ref_status
print_one_push_status

Also, move #define SUMMARY_WIDTH to transport.h and rename it
TRANSPORT_SUMMARY_WIDTH as it is used in builtin-fetch.c and
transport.c

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Acked-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect.c: move duplicated code to a new function ... Michael Lukashov Wed, 17 Feb 2010 20:56:02 +0000 (20:56 +0000)

connect.c: move duplicated code to a new function 'get_host_and_port'

The following functions:

git_tcp_connect_sock (IPV6 version)
git_tcp_connect_sock (no IPV6 version),
git_proxy_connect

have common block of code. Move it to a new function 'get_host_and_port'

Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.7.1Junio C Hamano Wed, 17 Feb 2010 23:01:11 +0000 (15:01 -0800)

Update draft release notes to 1.7.1

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

Merge branch 'maint'Junio C Hamano Wed, 17 Feb 2010 23:00:10 +0000 (15:00 -0800)

Merge branch 'maint'

* maint:
Update 1.7.0.1 release notes

Update 1.7.0.1 release notesJunio C Hamano Wed, 17 Feb 2010 23:00:00 +0000 (15:00 -0800)

Update 1.7.0.1 release notes

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

Merge branch 'jk/cherry-pick-reword' into maintJunio C Hamano Wed, 17 Feb 2010 22:55:24 +0000 (14:55 -0800)

Merge branch 'jk/cherry-pick-reword' into maint

* jk/cherry-pick-reword:
cherry-pick: prettify the advice message
cherry-pick: show commit name instead of sha1
cherry-pick: format help message as strbuf
cherry-pick: refactor commit parsing code
cherry-pick: rewrap advice message

Merge branch 'jk/grep-double-dash' into maintJunio C Hamano Wed, 17 Feb 2010 22:55:15 +0000 (14:55 -0800)

Merge branch 'jk/grep-double-dash' into maint

* jk/grep-double-dash:
accept "git grep -- pattern"

Merge branch 'jc/typo' into maintJunio C Hamano Wed, 17 Feb 2010 22:55:09 +0000 (14:55 -0800)

Merge branch 'jc/typo' into maint

* jc/typo:
Typofixes outside documentation area

status: preload index to optimize lstat(2) callsJunio C Hamano Wed, 17 Feb 2010 20:30:41 +0000 (12:30 -0800)

status: preload index to optimize lstat(2) calls

Noticed by James Pickens

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

Add a "TEMPLATE DIRECTORY" section to git-init[1].Steven Drake Tue, 16 Feb 2010 23:44:46 +0000 (12:44 +1300)

Add a "TEMPLATE DIRECTORY" section to git-init[1].

Create a more inoformative section to describe template directory and
refer to it in config.txt and with the '--template' option of git-init
and git-clone commands.

Signed-off-by: Steven Drake <sdrake@xnet.co.nz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add `init.templatedir` configuration variable.Steven Drake Tue, 16 Feb 2010 23:42:31 +0000 (12:42 +1300)

Add `init.templatedir` configuration variable.

Rather than having to pass --template to git init and clone for a custom
setup, `init.templatedir` may be set in '~/.gitconfig'. The environment
variable GIT_TEMPLATE_DIR can already be used for this but this is nicer.

System administrators may prefer using this variable in the system-wide
config file to point at a locally modified copy (e.g. /etc/gittemplate)
rather than editing vanilla template files in '/usr/share'.

Signed-off-by: Steven Drake <sdrake@xnet.co.nz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Protect escaping functions against calling... Jakub Narebski Sun, 7 Feb 2010 20:52:25 +0000 (21:52 +0100)

gitweb: Protect escaping functions against calling on undef

This is a bit of future-proofing esc_html and friends: when called
with undefined value they would now would return undef... which would
probably mean that error would still occur, but closer to the source
of problem.

This means that we can safely use
esc_html(shift) || "Internal Server Error"
in die_error() instead of
esc_html(shift || "Internal Server Error")

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: esc_html (short) error message in die_errorJakub Narebski Sun, 7 Feb 2010 20:51:18 +0000 (21:51 +0100)

gitweb: esc_html (short) error message in die_error

The error message (second argument to die_error) is meant to be short,
one-line text description of given error. A few callers call
die_error with error message containing unescaped user supplied data
($hash, $file_name). Instead of forcing callers to escape data,
simply call esc_html on the parameter.

Note that optional third parameter, which contains detailed error
description, is meant to be HTML formatted, and therefore should be
not escaped.

While at it update esc_html synopsis/usage, and bring default error
description to read 'Internal Server Error' (titlecased).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodule summary: Don't barf when invoked in an empty... Johan Herland Tue, 16 Feb 2010 10:21:14 +0000 (11:21 +0100)

submodule summary: Don't barf when invoked in an empty repo

When invoking "git submodule summary" in an empty repo (which can be
indirectly done by setting status.submodulesummary = true), it currently
emits an error message (via "git diff-index") since HEAD points to an
unborn branch.

This patch adds handling of the HEAD-points-to-unborn-branch special case,
so that "git submodule summary" no longer emits this error message.

The patch also adds a test case that verifies the fix.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use the diff_delta() max_delta_size argumentNicolas Pitre Wed, 17 Feb 2010 19:05:56 +0000 (14:05 -0500)

fast-import: use the diff_delta() max_delta_size argument

This let diff_delta() abort early if it is going to bust the given
size limit. Also, only objects larger than 20 bytes are considered
as objects smaller than that are most certainly going to produce
larger deltas than the original object due to the additional headers.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: honor pack.indexversion and pack.packsizel... Nicolas Pitre Wed, 17 Feb 2010 19:05:55 +0000 (14:05 -0500)

fast-import: honor pack.indexversion and pack.packsizelimit config vars

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: make default pack size unlimitedNicolas Pitre Wed, 17 Feb 2010 19:05:54 +0000 (14:05 -0500)

fast-import: make default pack size unlimited

Now that fast-import is creating packs with index version 2, there is
no point limiting the pack size by default. A pack split will still
happen if off_t is not sufficiently large to hold large offsets.

While updating the doc, let's remove the "packfiles fit on CDs"
suggestion. Pack files created by fast-import are still suboptimal and
a 'git repack -a -f -d' or even 'git gc --aggressive' would be a pretty
good idea before considering storage on CDs.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use write_idx_file() instead of custom... Nicolas Pitre Wed, 17 Feb 2010 19:05:53 +0000 (14:05 -0500)

fast-import: use write_idx_file() instead of custom code

This allows for the creation of pack index version 2 with its object
CRC and the possibility for a pack to be larger than 4 GB.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: use sha1write() for pack dataNicolas Pitre Wed, 17 Feb 2010 19:05:52 +0000 (14:05 -0500)

fast-import: use sha1write() for pack data

This is in preparation for using write_idx_file(). Also, by using
sha1write() we get some buffering to reduces the number of write
syscalls, and the written data is SHA1 summed which allows for the extra
data integrity validation check performed in fixup_pack_header_footer()
(details on this in commit abeb40e5aa).

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import: start using struct pack_idx_entryNicolas Pitre Wed, 17 Feb 2010 19:05:51 +0000 (14:05 -0500)

fast-import: start using struct pack_idx_entry

This is in preparation for using write_idx_file().

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

require_work_tree broken with NONGIT_OKGabriel Filion Wed, 17 Feb 2010 04:18:50 +0000 (23:18 -0500)

require_work_tree broken with NONGIT_OK

With NONGIT_OK set, require_work_tree function outside a git repository
gives a syntax error. This is caused by an incorrect use of "test" that
didn't anticipate $(git rev-parse --is-inside-work-tree) may return an
empty string.

Properly quote the argument to "test", and send the standard error stream
to /dev/null to avoid giving duplicate error messages.

Signed-off-by: Gabriel Filion <lelutin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: support CRAM-MD5 authenticationHitoshi Mitake Tue, 16 Feb 2010 06:34:07 +0000 (22:34 -0800)

imap-send: support CRAM-MD5 authentication

CRAM-MD5 authentication ought to be independent from SSL, but NO_OPENSSL
build will not support this because the base64 and md5 code are used from
the OpenSSL library in this implementation.

Signed-off-by: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

grep documentation: clarify what files matchMark Lodato Tue, 16 Feb 2010 00:25:40 +0000 (19:25 -0500)

grep documentation: clarify what files match

Clarify that git-grep(1) searches only tracked files, and that each
<pathspec> is a pathspec, as in any other ordinary git commands.

Add an example to show a simple use case for searching all .c and .h
files in the current directory and below.

Signed-off-by: Mark Lodato <lodatom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test for add with non-existent pathspecChris Packham Tue, 9 Feb 2010 22:30:48 +0000 (17:30 -0500)

test for add with non-existent pathspec

Add a test for 'git add -u pathspec' and 'git add pathspec' where
pathspec does not exist. The expected result is that git add exits with
an error message and an appropriate exit code.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git add -u: die on unmatched pathspecJunio C Hamano Tue, 9 Feb 2010 22:30:49 +0000 (17:30 -0500)

git add -u: die on unmatched pathspec

If a pathspec is supplied to 'git add -u' and no path matches
the pattern, fail with an approriate error message and exit code.

Tested-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jc/typo'Junio C Hamano Wed, 17 Feb 2010 06:45:14 +0000 (22:45 -0800)

Merge branch 'jc/typo'

* jc/typo:
Typofixes outside documentation area