gitweb.git
completion: simplify __gitcomp_1Felipe Contreras Sun, 15 Apr 2012 19:44:16 +0000 (22:44 +0300)

completion: simplify __gitcomp_1

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: add tests for the __gitcomp() completion helper... SZEDER Gábor Tue, 17 Apr 2012 10:27:15 +0000 (12:27 +0200)

tests: add tests for the __gitcomp() completion helper function

These tests check that trailing space, prefix, and suffix are added
correctly.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revert: add missing va_endChristian Couder Sat, 21 Apr 2012 21:15:19 +0000 (23:15 +0200)

revert: add missing va_end

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: the third batchJunio C Hamano Fri, 20 Apr 2012 22:58:40 +0000 (15:58 -0700)

RelNotes: the third batch

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

Merge branch 'js/spawn-via-shell-path-fix'Junio C Hamano Fri, 20 Apr 2012 22:51:18 +0000 (15:51 -0700)

Merge branch 'js/spawn-via-shell-path-fix'

Mops up an unfortunate fallout from bw/spawn-via-shell-path topic.

By Johannes Sixt
* js/spawn-via-shell-path-fix:
Do not use SHELL_PATH from build system in prepare_shell_cmd on Windows

Merge branch 'ct/advise-push-default'Junio C Hamano Fri, 20 Apr 2012 22:50:37 +0000 (15:50 -0700)

Merge branch 'ct/advise-push-default'

Break down the cases in which "git push" fails due to non-ff into
three categories, and give separate advise messages for each case.

By Christopher Tiwald (2) and Jeff King (1)
* ct/advise-push-default:
Fix httpd tests that broke when non-ff push advice changed
clean up struct ref's nonfastforward field
push: Provide situational hints for non-fast-forward errors

Merge branch 'bw/submodule-sed-solaris'Junio C Hamano Fri, 20 Apr 2012 22:50:13 +0000 (15:50 -0700)

Merge branch 'bw/submodule-sed-solaris'

By Ben Walton
* bw/submodule-sed-solaris:
Avoid bug in Solaris xpg4/sed as used in submodule

Merge branch 'jk/run-command-eacces'Junio C Hamano Fri, 20 Apr 2012 22:50:03 +0000 (15:50 -0700)

Merge branch 'jk/run-command-eacces'

When PATH contains an unreadable directory, alias expansion code did not
kick in, and failed with an error that said "git-subcmd" was not found.

By Jeff King (1) and Ramsay Jones (1)
* jk/run-command-eacces:
run-command: treat inaccessible directories as ENOENT
compat/mingw.[ch]: Change return type of exec functions to int

Merge branch 'jc/push-upstream-sanity'Junio C Hamano Fri, 20 Apr 2012 22:49:51 +0000 (15:49 -0700)

Merge branch 'jc/push-upstream-sanity'

Fix broken 'push to upstream' implementation. "git push $there" without
refspec, when the current branch is set to push to a remote different from
$there, used to push to $there using the upstream information to a remote
unreleated to $there.

* jc/push-upstream-sanity:
push: error out when the "upstream" semantics does not make sense

Merge branch 'jc/am-report-3way'Junio C Hamano Fri, 20 Apr 2012 22:49:37 +0000 (15:49 -0700)

Merge branch 'jc/am-report-3way'

When "git am -3" needs to fall back to an application to a synthesized
preimage followed by a 3-way merge, the paths that needed such treatment
are now reported to the end user, so that the result in them can be
eyeballed with extra care.

* jc/am-report-3way:
am -3: list the paths that needed 3-way fallback

Merge branch 'jb/am-include'Junio C Hamano Fri, 20 Apr 2012 22:49:15 +0000 (15:49 -0700)

Merge branch 'jb/am-include'

"git am" learned the "--include" option, which is an opposite of existing
the "--exclude" option.

By Johannes Berg
* jb/am-include:
am: support --include option

Merge branch 'jc/fmt-merge-msg-people'Junio C Hamano Fri, 20 Apr 2012 22:48:33 +0000 (15:48 -0700)

Merge branch 'jc/fmt-merge-msg-people'

The "fmt-merge-msg" command learns to list the primary contributors
involved in the side topic you are merging.

* jc/fmt-merge-msg-people:
fmt-merge-msg: show those involved in a merged series

t9300-fast-import: avoid 'exit' in test_expect_success... Johannes Sixt Fri, 20 Apr 2012 06:25:09 +0000 (08:25 +0200)

t9300-fast-import: avoid 'exit' in test_expect_success snippets

Exiting from a for-loop early using '|| break' does not propagate the
failure code, and for this reason, the tests used just 'exit'. But this
ends the test script with 'FATAL: Unexpected exit code 1' in the case of
a failed test.

Fix this by moving the loop into a shell function, from which we can
simply return early.

While at it, modernize the style of the affected test cases.

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

sequencer: remove additional blank lineRalf Thielow Wed, 18 Apr 2012 21:07:25 +0000 (23:07 +0200)

sequencer: remove additional blank line

Remove an additional blank line between the
headline and the list of conflicted files after
doing a recursive merge.

Signed-off-by: Ralf Thielow <ralf.thielow@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9400: fix gnuism in grepJunio C Hamano Thu, 19 Apr 2012 20:05:26 +0000 (13:05 -0700)

t9400: fix gnuism in grep

Using "\+" in "grep" and expecting that it means one or more
is a GNUism. Spell it in a dumb and portable way.

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

fmt-merge-msg: discard needless merge parentsJunio C Hamano Thu, 19 Apr 2012 02:49:08 +0000 (19:49 -0700)

fmt-merge-msg: discard needless merge parents

This is used by "git pull" to construct a merge message from list of
remote refs. When pulling redundant set of refs, however, it did not
filter them even though the merge itself discards them as unnecessary.

Teach the command to do the same for consistency.

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

gc: use argv-array for sub-commandsJeff King Wed, 18 Apr 2012 21:10:19 +0000 (14:10 -0700)

gc: use argv-array for sub-commands

git-gc executes many sub-commands. The argument list for
some of these is constant, but for others we add more
arguments at runtime. The latter is implemented by allocating
a constant extra number of NULLs, and either using a custom
append function, or just referencing unused slots by number.

As of commit 7e52f56, which added two new arguments, it is
possible to exceed the constant number of slots for "repack"
by running "git gc --aggressive", causing "git gc" to die.

This patch converts all of the static argv lists to use
argv-array. In addition to fixing the overflow caused by
7e52f56, it has a few advantages:

1. We can drop the custom append function (which,
incidentally, had an off-by-one error exacerbating the
static limit).

2. We can drop the ugly magic numbers used when adding
arguments to "prune".

3. Adding further arguments will be easier; you can just
add new "push" calls without worrying about increasing
any static limits.

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

argv-array: add a new "pushl" methodJeff King Wed, 18 Apr 2012 21:10:05 +0000 (14:10 -0700)

argv-array: add a new "pushl" method

It can be convenient to push many strings in a single line
(e.g., if you are initializing an array with defaults). This
patch provides a convenience wrapper to allow this.

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

argv-array: refactor empty_argv initializationJeff King Wed, 18 Apr 2012 21:08:49 +0000 (14:08 -0700)

argv-array: refactor empty_argv initialization

An empty argv-array is initialized to point to a static
empty NULL-terminated array. The original implementation
separates the actual storage of the NULL-terminator from the
pointer to the list. This makes the exposed type a "const
char **", which nicely matches the type stored by the
argv-array.

However, this indirection means that one cannot use
empty_argv to initialize a static variable, since it is
not a constant.

Instead, we can expose empty_argv directly, as an array of
pointers. The only place we use it is in the ARGV_ARRAY_INIT
initializer, and it decays to a pointer appropriately there.

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

git-sh-setup.sh: Add an pwd() function for MinGWRamsay Jones Tue, 17 Apr 2012 18:48:39 +0000 (19:48 +0100)

git-sh-setup.sh: Add an pwd() function for MinGW

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

git-submodule.sh: Don't use $path variable in eval_gett... Ramsay Jones Tue, 17 Apr 2012 18:00:58 +0000 (19:00 +0100)

git-submodule.sh: Don't use $path variable in eval_gettext string

The eval_gettext (and eval_gettextln) i18n shell functions call
git-sh-i18n--envsubst to process the variable references in the
string parameter. Unfortunately, environment variables are case
insensitive on windows, which leads to failure on cygwin when
eval_gettext exports $path.

Commit df599e9 (Windows: teach getenv to do a case-sensitive search,
06-06-2011) attempts to solve this problem on MinGW by overriding
the system getenv() function to allow git-sh-i18n--envsubst to read
$path rather than $PATH from the environment. However, this commit
does not address cygwin at all and, furthermore, does not fix all
problems on MinGW.

In particular, when executing test #38 in t7400-submodule-basic.sh,
an 'git-sh-i18n-envsubst.exe - Unable To Locate Component' dialog
pops up saying that the application "failed to start because
libiconv2.dll was not found." After studying the voluminous trace
output from the process monitor, it is clear that the system is
attempting to use $path, rather than $PATH, to search for the DLL
file. (Note that, after dismissing the dialog, the test passes
anyway!)

As an alternative, we finesse the problem by renaming the $path
variable to $sm_path (submodule path). This fixes the problem on
MinGW along with all test failures on cygwin (t7400.{7,32,34},
t7406.3 and t7407.{2,6}). We note that the foreach subcommand
provides $path to user scripts (ie it is part of the API), so we
can't simply rename it to $sm_path.

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

compat/mingw.h: Set S_ISUID to prevent a fast-import... Ramsay Jones Tue, 17 Apr 2012 18:00:04 +0000 (19:00 +0100)

compat/mingw.h: Set S_ISUID to prevent a fast-import test failure

The current t9300-fast-import.sh test number 62 ("L: nested tree
copy does not corrupt deltas") was introduced in commit 9a0edb79
("fast-import: add a test for tree delta base corruption",
15-08-2011). A fix for the demonstrated problem was introduced
by commit 8fb3ad76 ("fast-import: prevent producing bad delta",
15-08-2011). However, this fix didn't work on MinGW and so this
test has always failed on MinGW.

Part of the solution in commit 8fb3ad76 was to add an NO_DELTA
preprocessor constant which was defined as follows:

+/*
+ * We abuse the setuid bit on directories to mean "do not delta".
+ */
+#define NO_DELTA S_ISUID
+

Unfortunately, the S_ISUID constant on MinGW is defined as zero.

In order to fix the problem, we simply alter the definition of
S_ISUID in the mingw header file to a more appropriate value.
Also, we take the opportunity to similarly define S_ISGID and
S_ISVTX.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin/merge.c: reduce parents earlyJunio C Hamano Tue, 17 Apr 2012 19:22:26 +0000 (12:22 -0700)

builtin/merge.c: reduce parents early

Instead of waiting until we record the parents of resulting merge, reduce
redundant parents (including our HEAD) immediately after reading them.

The change to t7602 illustrates the essence of the effect of this change.
The octopus merge strategy used to be fed with redundant commits only to
discard them as "up-to-date", but we no longer feed such redundant commits
to it and the affected test degenerates to a regular two-head merge.

And obviously the known-to-be-broken test in t6028 is now fixed.

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

builtin/merge.c: collect other parents earlyJunio C Hamano Tue, 17 Apr 2012 18:31:10 +0000 (11:31 -0700)

builtin/merge.c: collect other parents early

Move the code around to populate remoteheads list early in the process
before any decision regarding twohead vs octopus and fast-forwardness is
made.

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

builtin/merge.c: remove "remoteheads" global variableJunio C Hamano Mon, 16 Apr 2012 23:15:13 +0000 (16:15 -0700)

builtin/merge.c: remove "remoteheads" global variable

Instead pass it around starting from the toplevel cmd_merge()
as an explicit parameter.

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

merge tests: octopus with redundant parentsMichał Kiedrowicz Mon, 13 Feb 2012 11:48:56 +0000 (12:48 +0100)

merge tests: octopus with redundant parents

This happens when git merge is run to merge multiple commits that are
descendants of current HEAD (or are HEAD). We've hit this while updating
master to origin/master but accidentaly we called (while being on master):

$ git merge master origin/master

Here is a minimal testcase:

$ git init a && cd a
$ echo a >a && git add a
$ git commit -minitial
$ echo b >a && git add a
$ git commit -msecond
$ git checkout master^

$ git merge master master
Fast-forwarding to: master
Already up-to-date with master
Merge made by the 'octopus' strategy.
a | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

$ git cat-file commit HEAD
tree eebfed94e75e7760540d1485c740902590a00332
parent bd679e85202280b263e20a57639a142fa14c2c64
author Michał Kiedrowicz <michal.kiedrowicz@gmail.com> 1329132996 +0100
committer Michał Kiedrowicz <michal.kiedrowicz@gmail.com> 1329132996 +0100

Merge branches 'master' and 'master' into HEAD

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mergesort: rename it to llist_mergesort()Junio C Hamano Tue, 17 Apr 2012 18:07:01 +0000 (11:07 -0700)

mergesort: rename it to llist_mergesort()

Even though the function is generic enough, <anything>sort() inherits
connotations from the standard function qsort() that sorts an array.
Rename it to llist_mergesort() and describe the external interface in
its header file.

This incidentally avoids name clashes with mergesort() some platforms
declare in, and contaminate user namespace with, their <stdlib.h>.

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

Do not use SHELL_PATH from build system in prepare_shel... Johannes Sixt Tue, 17 Apr 2012 07:03:21 +0000 (09:03 +0200)

Do not use SHELL_PATH from build system in prepare_shell_cmd on Windows

The recent change to use SHELL_PATH instead of "sh" to spawn shell commands
is not suited for Windows:

- The default setting, "/bin/sh", does not work when git has to run the
shell because it is a POSIX style path, but not a proper Windows style
path.

- If it worked, it would hard-code a position in the files system where
the shell is expected, making git (more precisely, the POSIX toolset that
is needed alongside git) non-relocatable. But we cannot sacrifice
relocatability on Windows.

- Apart from that, even though the Makefile leaves SHELL_PATH set to
"/bin/sh" for the Windows builds, the build system passes a mangled path
to the compiler, and something like "D:/Src/msysgit/bin/sh" is used,
which is doubly bad because it points to where /bin/sh resolves to on
the system where git was built.

- Finally, the system's CreateProcess() function that is used under
mingw.c's hood does not work with forward slashes and cannot find the
shell.

Undo the earlier change on Windows.

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

fetch: describe new refs based on where it came fromMarc Branchaud Mon, 16 Apr 2012 22:08:50 +0000 (18:08 -0400)

fetch: describe new refs based on where it came from

update_local_ref() used to say "[new branch]" when we stored a new ref
outside refs/tags/ hierarchy, but the message is more about what we
fetched, so use the refname at the origin to make that decision.

Also, only call a new ref a "branch" if it's under refs/heads/.

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fetch: Give remote_ref to update_local_ref() as wellMarc Branchaud Mon, 16 Apr 2012 22:08:49 +0000 (18:08 -0400)

fetch: Give remote_ref to update_local_ref() as well

This way, the function can look at the remote side to adjust the
informational message it gives.

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: the second batch of topics graduated to ... Junio C Hamano Mon, 16 Apr 2012 19:55:11 +0000 (12:55 -0700)

RelNotes: the second batch of topics graduated to 'master'

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

Merge branch 'jk/add-p-skip-conflicts'Junio C Hamano Mon, 16 Apr 2012 19:43:36 +0000 (12:43 -0700)

Merge branch 'jk/add-p-skip-conflicts'

Excludes conflicted paths from "add -p" processing, as it is not prepared
to handle them.

By Jeff King
* jk/add-p-skip-conflicts:
add--interactive: ignore unmerged entries in patch mode

Merge branch 'jc/commit-unedited-template'Junio C Hamano Mon, 16 Apr 2012 19:43:07 +0000 (12:43 -0700)

Merge branch 'jc/commit-unedited-template'

When "git commit --template F" errors out because the user did not touch
the message, it claimed that it aborts due to "empty message", which was
utterly wrong.

By Junio C Hamano (4) and Adam Monsen (1)
* jc/commit-unedited-template:
Documentation/git-commit: rephrase the "initial-ness" of templates
git-commit.txt: clarify -t requires editing message
commit: rephrase the error when user did not touch templated log message
commit: do not trigger bogus "has templated message edited" check
t7501: test the right kind of breakage

Merge branch 'bw/spawn-via-shell-path'Junio C Hamano Mon, 16 Apr 2012 19:42:54 +0000 (12:42 -0700)

Merge branch 'bw/spawn-via-shell-path'

"sh" on the user's PATH may be utterly broken on some systems;
consistently use SHELL_PATH even from inside run-command API.

By Ben Walton
* bw/spawn-via-shell-path:
Use SHELL_PATH from build system in run_command.c:prepare_shell_cmd

Merge branch 'wk/gitweb-snapshot-use-if-modified-since'Junio C Hamano Mon, 16 Apr 2012 19:42:48 +0000 (12:42 -0700)

Merge branch 'wk/gitweb-snapshot-use-if-modified-since'

Makes 'snapshot' request to "gitweb" honor If-Modified-Since: header,
based on the commit date.

By W. Trevor King
* wk/gitweb-snapshot-use-if-modified-since:
gitweb: add If-Modified-Since handling to git_snapshot().
gitweb: refactor If-Modified-Since handling
gitweb: add `status` headers to git_feed() responses.

Merge branch 'jk/http-backend-keep-committer-ident... Junio C Hamano Mon, 16 Apr 2012 19:42:40 +0000 (12:42 -0700)

Merge branch 'jk/http-backend-keep-committer-ident-env'

The smart-http backend used to always override GIT_COMMITTER_* variables
with REMOTE_USER and REMOTE_ADDR.

By Jeff King
* jk/http-backend-keep-committer-ident-env:
http-backend: respect existing GIT_COMMITTER_* variables

Merge branch 'sl/autoconf'Junio C Hamano Mon, 16 Apr 2012 19:42:29 +0000 (12:42 -0700)

Merge branch 'sl/autoconf'

Updates our configure.ac to follow a better "autoconf" style.

By Stefano Lattarini
* sl/autoconf:
configure: be more idiomatic
configure: avoid some code repetitions thanks to m4_{push,pop}def
configure: move definitions of private m4 macros before AC_INIT invocation

Merge branch 'jk/branch-quiet'Junio C Hamano Mon, 16 Apr 2012 19:42:22 +0000 (12:42 -0700)

Merge branch 'jk/branch-quiet'

Even with "-q"uiet option, "checkout" used to report setting up tracking.
Also "branch" learns "-q"uiet option to squelch informational message.

By Jeff King
* jk/branch-quiet:
teach "git branch" a --quiet option
checkout: suppress tracking message with "-q"

Merge branch 'rs/combine-diff-zero-context-at-the-begin... Junio C Hamano Mon, 16 Apr 2012 19:41:59 +0000 (12:41 -0700)

Merge branch 'rs/combine-diff-zero-context-at-the-beginning'

Fixes an age old corner case bug in combine diff (only triggered with -U0
and the hunk at the beginning of the file needs to be shown).

By René Scharfe
* rs/combine-diff-zero-context-at-the-beginning:
combine-diff: fix loop index underflow

Merge branch 'jk/diff-no-rename-empty'Junio C Hamano Mon, 16 Apr 2012 19:41:49 +0000 (12:41 -0700)

Merge branch 'jk/diff-no-rename-empty'

Forbids rename detection logic from matching two empty files as renames
during merge-recursive to prevent mismerges.

By Jeff King
* jk/diff-no-rename-empty:
merge-recursive: don't detect renames of empty files
teach diffcore-rename to optionally ignore empty content
make is_empty_blob_sha1 available everywhere
drop casts from users EMPTY_TREE_SHA1_BIN

Merge branch 'jc/maint-clean-nested-worktree-in-subdir'Junio C Hamano Mon, 16 Apr 2012 19:40:22 +0000 (12:40 -0700)

Merge branch 'jc/maint-clean-nested-worktree-in-subdir'

"git clean -d -f" (not "-d -f -f") is supposed to protect nested working
trees of independent git repositories that exist in the current project
working tree from getting removed, but the protection applied only to such
working trees that are at the top-level of the current project by mistake.

* jc/maint-clean-nested-worktree-in-subdir:
clean: preserve nested git worktree in subdirectories

Merge branch 'rs/unpack-trees-leakfix'Junio C Hamano Mon, 16 Apr 2012 19:39:58 +0000 (12:39 -0700)

Merge branch 'rs/unpack-trees-leakfix'

By René Scharfe
* rs/unpack-trees-leakfix:
unpack-trees: plug minor memory leak
unpack-trees: don't perform any index operation if we're not merging

Merge branch 'nl/rebase-i-cheat-sheet'Junio C Hamano Mon, 16 Apr 2012 19:39:41 +0000 (12:39 -0700)

Merge branch 'nl/rebase-i-cheat-sheet'

* nl/rebase-i-cheat-sheet:
rebase -i: remind that the lines are top-to-bottom

diff: avoid stack-buffer-read-overrun for very long... Jim Meyering Mon, 16 Apr 2012 15:20:02 +0000 (17:20 +0200)

diff: avoid stack-buffer-read-overrun for very long name

Due to the use of strncpy without explicit NUL termination,
we could end up passing names n1 or n2 that are not NUL-terminated
to queue_diff, which requires NUL-terminated strings.
Ensure that each is NUL terminated.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: the first batch of topics graduated to 'master'Junio C Hamano Mon, 16 Apr 2012 05:59:31 +0000 (22:59 -0700)

RelNotes: the first batch of topics graduated to 'master'

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

Merge branch 'da/difftool-test'Junio C Hamano Mon, 16 Apr 2012 05:52:04 +0000 (22:52 -0700)

Merge branch 'da/difftool-test'

Makes sure "difftool" options can be given in any order.

By David Aguilar
* da/difftool-test:
t7800: Test difftool passing arguments to diff

Merge branch 'zj/test-cred-helper-nicer-prove'Junio C Hamano Mon, 16 Apr 2012 05:51:56 +0000 (22:51 -0700)

Merge branch 'zj/test-cred-helper-nicer-prove'

Minor improvement to t0303.

By Zbigniew Jędrzejewski-Szmek
* zj/test-cred-helper-nicer-prove:
t0303: resurrect commit message as test documentation
t0303: immediately bail out w/o GIT_TEST_CREDENTIAL_HELPER

Merge branch 'jh/notes-merge-in-git-dir-worktree'Junio C Hamano Mon, 16 Apr 2012 05:51:44 +0000 (22:51 -0700)

Merge branch 'jh/notes-merge-in-git-dir-worktree'

Running "notes merge --commit" failed to perform correctly when run
from any directory inside $GIT_DIR/. When "notes merge" stops with
conflicts, $GIT_DIR/NOTES_MERGE_WORKTREE is the place a user edits
to resolve it.

By Johan Herland (3) and Junio C Hamano (1)
* jh/notes-merge-in-git-dir-worktree:
notes-merge: Don't remove .git/NOTES_MERGE_WORKTREE; it may be the user's cwd
notes-merge: use opendir/readdir instead of using read_directory()
t3310: illustrate failure to "notes merge --commit" inside $GIT_DIR/
remove_dir_recursively(): Add flag for skipping removal of toplevel dir

Merge branch 'tr/maint-word-diff-regex-sticky'Junio C Hamano Mon, 16 Apr 2012 05:51:34 +0000 (22:51 -0700)

Merge branch 'tr/maint-word-diff-regex-sticky'

The regexp configured with wordregex was incorrectly reused across files.

By Thomas Rast (2) and Johannes Sixt (1)
* tr/maint-word-diff-regex-sticky:
diff: tweak a _copy_ of diff_options with word-diff
diff: refactor the word-diff setup from builtin_diff_cmd
t4034: diff.*.wordregex should not be "sticky" in --word-diff

Merge branch 'jn/diffstat-tests'Junio C Hamano Mon, 16 Apr 2012 05:51:24 +0000 (22:51 -0700)

Merge branch 'jn/diffstat-tests'

Some tests checked the "diff --stat" output when they do not have to,
which unnecessarily made things harder to verify under GETTEXT_POISON.

By Jonathan Nieder
* jn/diffstat-tests:
diffstat summary line varies by locale: miscellany
test: use numstat instead of diffstat in binary-diff test
test: use --numstat instead of --stat in "git stash show" tests
test: test cherry-pick functionality and output separately
test: modernize funny-names test style
test: use numstat instead of diffstat in funny-names test
test: use test_i18ncmp when checking --stat output

Merge branch 'jc/diff-algo-cleanup'Junio C Hamano Mon, 16 Apr 2012 05:51:14 +0000 (22:51 -0700)

Merge branch 'jc/diff-algo-cleanup'

Resurrects the preparatory clean-up patches from another topic that was
discarded, as this would give a saner foundation to build on diff.algo
configuration option series.

* jc/diff-algo-cleanup:
xdiff: PATIENCE/HISTOGRAM are not independent option bits
xdiff: remove XDL_PATCH_* macros

Merge branch 'jc/commit-hook-authorship'Junio C Hamano Mon, 16 Apr 2012 05:51:01 +0000 (22:51 -0700)

Merge branch 'jc/commit-hook-authorship'

"git commit --author=$name" did not tell the name that was being recorded
in the resulting commit to hooks, even though it does do so when the end
user overrode the authorship via the "GIT_AUTHOR_NAME" environment
variable.

* jc/commit-hook-authorship:
commit: pass author/committer info to hooks
t7503: does pre-commit-hook learn authorship?
ident.c: add split_ident_line() to parse formatted ident line

Merge branch 'nd/stream-more'Junio C Hamano Mon, 16 Apr 2012 05:50:38 +0000 (22:50 -0700)

Merge branch 'nd/stream-more'

Use API to read blob data in smaller chunks in more places to reduce the
memory footprint.

By Nguyễn Thái Ngọc Duy (6) and Junio C Hamano (1)
* nd/stream-more:
update-server-info: respect core.bigfilethreshold
fsck: use streaming API for writing lost-found blobs
show: use streaming API for showing blobs
parse_object: avoid putting whole blob in core
cat-file: use streaming API to print blobs
Add more large blob test cases
streaming: make streaming-write-entry to be more reusable

merge overwrites unstaged changes in renamed fileClemens Buchacher Sat, 14 Apr 2012 23:15:17 +0000 (01:15 +0200)

merge overwrites unstaged changes in renamed file

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: mark @{upstream} error messages for translationZbigniew Jędrzejewski-Szmek Sat, 14 Apr 2012 07:54:35 +0000 (09:54 +0200)

i18n: mark @{upstream} error messages for translation

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Be more specific if upstream branch is not trackedZbigniew Jędrzejewski-Szmek Sat, 14 Apr 2012 07:54:34 +0000 (09:54 +0200)

Be more specific if upstream branch is not tracked

If the branch configured as upstream didn't have a local tracking
branch, git said "Upstream branch not found". We can be more helpful,
and separate the cases when upstream is not configured, and when it is
configured, but the upstream branch is not tracked in a local branch.

The following configuration leads to the second scenario:

[remote "origin"]
url = ...
fetch = refs/heads/master
[branch "master"]
remote = origin
merge = refs/heads/master

'git pull' will work on master, but master@{upstream} is not defined.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Provide better message for barnhc_wiht_tpyo@{u}Zbigniew Jędrzejewski-Szmek Sat, 14 Apr 2012 07:54:33 +0000 (09:54 +0200)

Provide better message for barnhc_wiht_tpyo@{u}

Instead of just saying that no upstream exists for such branch,
which is true but not very helpful, check that there's no
refs/heads/barnhc_wiht_tpyo and tell it to the user.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Provide branch name in error message when using @{u}Zbigniew Jędrzejewski-Szmek Sat, 14 Apr 2012 07:54:32 +0000 (09:54 +0200)

Provide branch name in error message when using @{u}

When using @{u} or @{upstream} it is common to omit the branch name,
implying current branch. If the upstream is not configured, the error
message was "No upstream branch found for ''".

When resolving '@{u}', branch_get() is called, which almost always
returns a description of a branch. This allows us to use a branch name
in the error message, even if the user said something like '@{u}'.

The only case when branch_get() returns NULL is when HEAD points to so
something which is not a branch. Of course this also means that no
upstream is configured, but it is better to directly say that HEAD
does not point to a branch.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1507: add tests to document @{upstream} behaviourZbigniew Jędrzejewski-Szmek Sat, 14 Apr 2012 07:54:31 +0000 (09:54 +0200)

t1507: add tests to document @{upstream} behaviour

In preparation for future changes, add tests which show error messages
with @{upstream} in various conditions:

- test branch@{u} with . as remote
- check error message for branch@{u} on a branch with
* no upstream,
* on a branch with a configured upstream which doesn't have a
remote-tracking branch
- check error message for branch@{u} when branch 'branch' does not
exist
- check error message for @{u} without the branch name

Right now the messages are very similar, but various cases can and
will be distinguished.

Note: test_i18ncmp is not used, because currently error output is not
internationalized. test_cmp will be switched to test_i18ncmp in a later
patch, when error messages are internationalized.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: add initial bash completion testsFelipe Contreras Wed, 11 Apr 2012 21:57:03 +0000 (00:57 +0300)

tests: add initial bash completion tests

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cherry-pick: do not expect file argumentsClemens Buchacher Sat, 14 Apr 2012 19:04:48 +0000 (21:04 +0200)

cherry-pick: do not expect file arguments

If a commit-ish passed to cherry-pick or revert happens to have a file
of the same name, git complains that the argument is ambiguous and
advises to use '--'. To make things worse, the '--' argument is removed
by parse_options, und so passing '--' has no effect.

Instead, always interpret cherry-pick/revert arguments as revisions.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

properly keep track of current working directoryClemens Buchacher Thu, 12 Apr 2012 23:11:36 +0000 (01:11 +0200)

properly keep track of current working directory

Various failure modes in the repository detection code path currently
quote the wrong directory in their error message. The working directory
is changed iteratively to the parent directory until a git repository is
found. If the working directory cannot be changed to the parent
directory for some reason, the detection gives up and prints an error
message. The error message should report the current working directory.

Instead of continually updating the 'cwd' variable, which is actually
used to remember the original working directory, the 'offset' variable
is used to keep track of the current working directory. At the point
where the affected error handling code is called, 'offset' already
points to the end of the parent of the working directory, rather than
the current working directory.

Fix this by explicitly using a variable 'offset_parent' and update
'offset' concurrently with the call to chdir.

In a similar fashion, the function get_device_or_die() would print the
original working directory in case of a failure, rather than the current
working directory. Fix this as well by making use of the 'offset'
variable.

Lastly, replace the phrase 'mount parent' with 'mount point'. The former
appears to be a typo.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fast-import doc: cat-blob and ls responses need to... Jonathan Nieder Wed, 11 Apr 2012 21:25:01 +0000 (16:25 -0500)

fast-import doc: cat-blob and ls responses need to be consumed quickly

If fast-import's command pipe and the frontend's cat-blob/ls response
pipe are both filled, there can be a deadlock. Luckily all existing
frontends consume any pending cat-blob/ls responses completely before
writing the next command.

Document the requirements so future frontend authors and users can be
spared from the problem, too. It is not always easy to catch that
kind of bug by testing.

To set the scene, add some words of explanation to help the novice
understand that "cat-blob" and "ls" output are meant for consumption
by the frontend.

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

stash: use eval_gettextln correctlyRoss Lagerwall Sat, 14 Apr 2012 12:37:29 +0000 (14:37 +0200)

stash: use eval_gettextln correctly

Otherwise, passing an invalid option, git stash -v, gave:

git-stash: line 204: $'error: unknown option for \'stash save\':
$option\n To provide a message, use git stash save -- \'$option\'':
command not found

Signed-off-by: Ross Lagerwall <rosslagerwall@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodules: recursive fetch also checks new tags for... Jens Lehmann Fri, 13 Apr 2012 16:25:16 +0000 (18:25 +0200)

submodules: recursive fetch also checks new tags for submodule commits

Since 88a21979c (fetch/pull: recurse into submodules when necessary) all
fetched commits are examined if they contain submodule changes (unless
configuration or command line options inhibit that). If a newly recorded
submodule commit is not present in the submodule, a fetch is run inside
it to download that commit.

Checking new refs was done in an else branch where it wasn't executed for
tags. This normally isn't a problem because tags are only fetched with
the branches they live on, then checking the new commits in the fetched
branches for submodule commits will also process all tags. But when a
specific tag is fetched (or the refspec contains refs/tags/) commits only
reachable by tags won't be searched for submodule commits, which is a bug.

Fix that by moving the code outside the if/else construct to handle new
tags just like any other ref. The performance impact of adding tags that
most of the time lie on a branch which is checked anyway for new submodule
commit should be minimal, as since 6859de4 (fetch: avoid quadratic loop
checking for updated submodules) all ref-tips are collected first and then
fed to a single rev-list.

Spotted-by: Jeff King <peff@peff.net>
Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test: am of empty patch should not succeedJonathan Nieder Sat, 14 Apr 2012 04:48:13 +0000 (23:48 -0500)

test: am of empty patch should not succeed

The "git am empty" test uses the construct

git am empty-file && false || :

which unconditionally returns true. Use test_must_fail instead, which
also has the benefit of noticing if "git am" has segfaulted.

While at it, tighten the test to check that the diagnostic appears on
stderr and not stdout.

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

test: use test_i18ncmp for "Patch format detection... Jonathan Nieder Sat, 14 Apr 2012 04:46:18 +0000 (23:46 -0500)

test: use test_i18ncmp for "Patch format detection failed" message

v1.7.8.5~2 (am: don't infloop for an empty input file, 2012-02-25)
added a check for the human-readable message "Patch format detection
failed." but we forgot to suppress that check when running tests with
git configured to write output in another language.

Noticed by running tests with GETTEXT_POISON=YesPlease.

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

test: do not rely on US English tracking-info messagesJonathan Nieder Sat, 14 Apr 2012 04:45:31 +0000 (23:45 -0500)

test: do not rely on US English tracking-info messages

When v1.7.9.2~28^2 (2012-02-02) marked "Your branch is behind" and
friends for translation, it forgot to adjust tests not to check those
messages when tests are being run with git configured to write its
output in another language.

With this patch applied, t2020 and t6040 pass again with
GETTEXT_POISON=YesPlease.

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

http: use newer curl options for setting credentialsJeff King Fri, 13 Apr 2012 06:19:25 +0000 (02:19 -0400)

http: use newer curl options for setting credentials

We give the username and password to curl by sticking them
in a buffer of the form "user:pass" and handing the result
to CURLOPT_USERPWD. Since curl 7.19.1, there is a split
mechanism, where you can specify each element individually.

This has the advantage that a username can contain a ":"
character. It also is less code for us, since we can hand
our strings over to curl directly. And since curl 7.17.0 and
higher promise to copy the strings for us, we we don't even
have to worry about memory ownership issues.

Unfortunately, we have to keep the ugly code for old curl
around, but as it is now nicely #if'd out, we can easily get
rid of it when we decide that 7.19.1 is "old enough".

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

http: clean up leak in init_curl_http_authJeff King Fri, 13 Apr 2012 06:18:35 +0000 (02:18 -0400)

http: clean up leak in init_curl_http_auth

When we have a credential to give to curl, we must copy it
into a "user:pass" buffer and then hand the buffer to curl.
Old versions of curl did not copy the buffer, and we were
expected to keep it valid. Newer versions of curl will copy
the buffer.

Our solution was to use a strbuf and detach it, giving
ownership of the resulting buffer to curl. However, this
meant that we were leaking the buffer on newer versions of
curl, since curl was just copying it and throwing away the
string we passed. Furthermore, when we replaced a
credential (e.g., because our original one was rejected), we
were also leaking on both old and new versions of curl.

This got even worse in the last patch, which started
replacing the credential (and thus leaking) on every http
request.

Instead, let's use a static buffer to make the ownership
more clear and less leaky. We already keep a static "struct
credential", so we are only handling a single credential at
a time, anyway.

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

Fix httpd tests that broke when non-ff push advice... Christopher Tiwald Thu, 12 Apr 2012 17:56:28 +0000 (13:56 -0400)

Fix httpd tests that broke when non-ff push advice changed

Signed-off-by: Christopher Tiwald <christiwald@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: document buffer ownership rules across functionsJunio C Hamano Wed, 11 Apr 2012 21:43:48 +0000 (14:43 -0700)

apply: document buffer ownership rules across functions

In general, the private functions in this file were not very
much documented; even though what each of them do is reasonably
self explanatory, the ownership rules for various buffers and
data structures were not very obvious.

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

apply: tighten constness of line bufferJunio C Hamano Wed, 11 Apr 2012 21:41:42 +0000 (14:41 -0700)

apply: tighten constness of line buffer

These point into a single line in the patch text we read from
the input, and they are not used to modify it.

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

apply: drop unused macroJunio C Hamano Wed, 11 Apr 2012 21:38:31 +0000 (14:38 -0700)

apply: drop unused macro

CHUNKSIZE is no longer used.

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

gitweb: Refinement highlightning in combined diffsMichał Kiedrowicz Wed, 11 Apr 2012 21:18:44 +0000 (23:18 +0200)

gitweb: Refinement highlightning in combined diffs

The highlightning of combined diffs is currently disabled. This is
because output from a combined diff is much harder to highlight because
it is not obvious which removed and added lines should be compared.

Current code requires that the number of added lines is equal to the
number of removed lines and only skips first +/- character, treating
second +/- as a line content, Thus, it is not possible to simply use
existing algorithm unchanged for combined diffs.

Let's start with a simple case: only highlight changes that come from
one parent, i.e. when every removed line has a corresponding added line
for the same parent. This way the highlightning cannot get wrong. For
example, following diffs would be highlighted:

- removed line for first parent
+ added line for first parent
context line
-removed line for second parent
+added line for second parent

or

- removed line for first parent
-removed line for second parent
+ added line for first parent
+added line for second parent

but following output will not:

- removed line for first parent
-removed line for second parent
+added line for second parent
++added line for both parents

In other words, we require that pattern of '-'-es in pre-image matches
pattern of '+'-es in post-image.

Further changes may introduce more intelligent approach that better
handles combined diffs.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Highlight interesting parts of diffMichał Kiedrowicz Wed, 11 Apr 2012 21:18:43 +0000 (23:18 +0200)

gitweb: Highlight interesting parts of diff

Reading diff output is sometimes very hard, even if it's colored,
especially if lines differ only in few characters. This is often true
when a commit fixes a typo or renames some variables or functions.

This commit teaches gitweb to highlight characters that are different
between old and new line with a light green/red background. This should
work in the similar manner as in Trac or GitHub.

The algorithm that compares lines is based on contrib/diff-highlight.
Basically, it works by determining common prefix/suffix of corresponding
lines and highlightning only the middle part of lines. For more
information, see contrib/diff-highlight/README.

Combined diffs are not supported but a following commit will change it.

Since we need to pass esc_html()'ed or esc_html_hl_regions()'ed lines to
format_diff_lines(), so it was taught to accept preformatted lines
passed as a reference.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Push formatting diff lines to print_diff_chunk()Michał Kiedrowicz Wed, 11 Apr 2012 21:18:42 +0000 (23:18 +0200)

gitweb: Push formatting diff lines to print_diff_chunk()

Now lines are formatted closer to place where we actually use HTML
formatted output.

This means that we put raw lines in the @chunk accumulator, rather than
formatted lines. Because we still need to know class (type) of line
when accumulating data to post-process and print, process_diff_line()
subroutine was retired and replaced by diff_line_class() used in
git_patchset_body() and new restructured format_diff_line() used in
print_diff_chunk().

As a side effect, we have to pass \%from and \%to down to callstack.

This is a preparation patch for diff refinement highlightning. It's not
meant to change gitweb output.

[jn: wrote commit message]

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Use print_diff_chunk() for both side-by-side... Michał Kiedrowicz Wed, 11 Apr 2012 21:18:41 +0000 (23:18 +0200)

gitweb: Use print_diff_chunk() for both side-by-side and inline diffs

This renames print_sidebyside_diff_chunk() to print_diff_chunk() and
makes use of it for both side-by-side and inline diffs. Now diff lines
are always accumulated before they are printed. This opens the
possibility to preprocess diff output before it's printed, which is
needed for diff refinement highlightning (implemented in incoming
patches).

If print_diff_chunk() was left as is, the new function
print_inline_diff_lines() could reorder diff lines. It first prints all
context lines, then all removed lines and finally all added lines. If
the diff output consisted of mixed added and removed lines, gitweb would
reorder these lines. This is true for combined diff output, for
example:

- removed line for first parent
+ added line for first parent
-removed line for second parent
++added line for both parents

would be rendered as:

- removed line for first parent
-removed line for second parent
+ added line for first parent
++added line for both parents

To prevent gitweb from reordering lines, print_diff_chunk() calls
print_diff_lines() as soon as it detects that both added and removed
lines are present and there was a class change, and at the end of chunk.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Extract print_sidebyside_diff_lines()Michał Kiedrowicz Wed, 11 Apr 2012 21:18:40 +0000 (23:18 +0200)

gitweb: Extract print_sidebyside_diff_lines()

Currently, print_sidebyside_diff_chunk() does two things: it
accumulates diff lines and prints them. Accumulation may be used to
perform additional operations on diff lines, so it makes sense to split
these two things. Thus, whole code that formats and prints diff lines
in the 'side-by-side' manner is moved out of print_sidebyside_diff_chunk()
to a separate subroutine and two conditions that control printing
diff liens are merged.

Thanks to that, we can easily (in later patches) replace call to that
subroutine with a call to more generic print_diff_lines() that will
control whether 'inline' or 'side-by-side' diff should be printed.

As a side effect, context lines are printed just before printing added
and removed lines, and at the end of chunk (previously, they were
printed immediately on the class change). However, this doesn't change
gitweb output.

The outcome of this patch is that print_sidebyside_diff_chunk() is now
much shorter and easier to read.

While at it, drop the '# assume that it is change' comment. According
to Jakub Narębski:

What I meant here when I was writing it that they are lines that
changed between two versions, like '!' in original (not unified)
context format.

We can omit this comment.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Pass esc_html_hl_regions() options to esc_html()Jakub Narębski Wed, 11 Apr 2012 21:18:39 +0000 (23:18 +0200)

gitweb: Pass esc_html_hl_regions() options to esc_html()

With this change, esc_html_hl_regions() accepts options and passes them
down to esc_html(). This may be needed if a caller wants to pass
-nbsp=>1 to esc_html().

The idea and implementation example of this change was described in
337da8d2 (gitweb: Introduce esc_html_match_hl and esc_html_hl_regions,
2012-02-27). While other suggestions may be more useful in some cases,
there is no need to implement them at the moment. The
esc_html_hl_regions() interface may be changed later if it's needed.

[mk: extracted from larger patch and wrote commit message]

Signed-off-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: esc_html_hl_regions(): Don't create empty ... Michał Kiedrowicz Wed, 11 Apr 2012 21:18:38 +0000 (23:18 +0200)

gitweb: esc_html_hl_regions(): Don't create empty <span> elements

If $end is equal to or less than $begin, esc_html_hl_regions()
generates an empty <span> element. It normally shouldn't be visible in
the web browser, but it doesn't look good when looking at page source.
It also minimally increases generated page size for no special reason.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Use descriptive names in esc_html_hl_regions()Michał Kiedrowicz Wed, 11 Apr 2012 21:18:37 +0000 (23:18 +0200)

gitweb: Use descriptive names in esc_html_hl_regions()

The $s->[0] and $s->[1] variables look a bit cryptic. Let's rename them
to $begin and $end so that it's clear what they do.

Suggested-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-cherry-pick: add allow-empty optionNeil Horman Wed, 11 Apr 2012 20:21:53 +0000 (16:21 -0400)

git-cherry-pick: add allow-empty option

git cherry-pick fails when picking a non-ff commit that is empty. The advice
given with the failure is that a git-commit --allow-empty should be issued to
explicitly add the empty commit during the cherry pick. This option allows a
user to specify before hand that they want to keep the empty commit. This
eliminates the need to issue both a cherry pick and a commit operation.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

blame: accept --need-minimalJunio C Hamano Wed, 11 Apr 2012 20:08:08 +0000 (13:08 -0700)

blame: accept --need-minimal

Between v1.7.1 and v1.7.2, 582aa00bdffb switched the default "diff"
invocation not to use XDF_NEED_MINIMAL, but this breaks "git blame"
rather badly.

Allow the command line option to ask for an extra careful matching.

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

Kick off post 1.7.10 cycleJunio C Hamano Wed, 11 Apr 2012 19:17:17 +0000 (12:17 -0700)

Kick off post 1.7.10 cycle

I tentatively named the release notes "1.7.11" but this may have to
be renamed to "1.8" or some other name later. Let's see how well
we would do during this cycle.

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

gc: do not explode objects which will be immediately... Jeff King Sat, 7 Apr 2012 10:30:09 +0000 (06:30 -0400)

gc: do not explode objects which will be immediately pruned

When we pack everything into one big pack with "git repack
-Ad", any unreferenced objects in to-be-deleted packs are
exploded into loose objects, with the intent that they will
be examined and possibly cleaned up by the next run of "git
prune".

Since the exploded objects will receive the mtime of the
pack from which they come, if the source pack is old, those
loose objects will end up pruned immediately. In that case,
it is much more efficient to skip the exploding step
entirely for these objects.

This patch teaches pack-objects to receive the expiration
information and avoid writing these objects out. It also
teaches "git gc" to pass the value of gc.pruneexpire to
repack (which in turn learns to pass it along to
pack-objects) so that this optimization happens
automatically during "git gc" and "git gc --auto".

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

git p4: import/export of labels to/from p4Luke Diamand Wed, 11 Apr 2012 15:21:24 +0000 (17:21 +0200)

git p4: import/export of labels to/from p4

The existing label import code looks at each commit being
imported, and then checks for labels at that commit. This
doesn't work in the real world though because it will drop
labels applied on changelists that have already been imported,
a common pattern.

This change adds a new --import-labels option. With this option,
at the end of the sync, git p4 gets sets of labels in p4 and git,
and then creates a git tag for each missing p4 label.

This means that tags created on older changelists are
still imported.

Tags that could not be imported are added to an ignore
list.

The same sets of git and p4 tags and labels can also be used to
derive a list of git tags to export to p4. This is enabled with
--export-labels in 'git p4 submit'.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git p4: Fixing script editor checksLuke Diamand Wed, 11 Apr 2012 15:21:23 +0000 (17:21 +0200)

git p4: Fixing script editor checks

If P4EDITOR is defined, the tests will fail when "git p4" starts an
editor.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: Fix unintended "--no-merges" for regular Atom... Sebastian Pipping Wed, 4 Apr 2012 12:25:44 +0000 (14:25 +0200)

gitweb: Fix unintended "--no-merges" for regular Atom feed

The print_feed_meta() subroutine generates links for feeds with and
without merges, in RSS and Atom formats. However because %href_params
was not properly reset, it generated links with "--no-merges" for all
except the very first link.

Before:
<link rel="alternate" title="[..] - Atom feed" href="/?p=.git;a=atom;opt=--no-merges" type="application/atom+xml" />
<link rel="alternate" title="[..] - Atom feed (no merges)" href="/?p=.git;a=atom;opt=--no-merges" type="application/atom+xml" />

After:
<link rel="alternate" title="[..] - Atom feed" href="/?p=.git;a=atom" type="application/atom+xml" />
<link rel="alternate" title="[..] - Atom feed (no merges)" href="/?p=.git;a=atom;opt=--no-merges" type="application/atom+xml" />

Signed-off-by: Sebastian Pipping <sebastian@pipping.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: modernise style: more uses of test_line_countStefano Lattarini Wed, 11 Apr 2012 11:24:01 +0000 (13:24 +0200)

tests: modernise style: more uses of test_line_count

Prefer:

test_line_count <OP> COUNT FILE

over:

test $(wc -l <FILE) <OP> COUNT

(or similar usages) in several tests.

Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision: insert unsorted, then sort in prepare_revisio... René Scharfe Sat, 31 Mar 2012 22:11:01 +0000 (00:11 +0200)

revision: insert unsorted, then sort in prepare_revision_walk()

Speed up prepare_revision_walk() by adding commits without sorting
to the commit_list and at the end sort the list in one go. Thanks
to mergesort() working behind the scenes, this is a lot faster for
large numbers of commits than the current insert sort.

Also introduce and use commit_list_reverse(), to keep the ordering
of commits sharing the same commit date unchanged. That's because
commit_list_insert_by_date() sorts commits with descending date,
but adds later entries with the same date entries last, while
commit_list_insert() always inserts entries at the top. The
following commit_list_sort_by_date() keeps the order of entries
sharing the same date.

Jeff's test case, in a repo with lots of refs, was to run:

# make a new commit on top of HEAD, but not yet referenced
sha1=`git commit-tree HEAD^{tree} -p HEAD </dev/null`

# now do the same "connected" test that receive-pack would do
git rev-list --objects $sha1 --not --all

With a git.git with a ref for each revision, master needs (best of
five):

real 0m2.210s
user 0m2.188s
sys 0m0.016s

And with this patch:

real 0m0.480s
user 0m0.456s
sys 0m0.020s

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

commit: use mergesort() in commit_list_sort_by_date()René Scharfe Sat, 31 Mar 2012 22:10:39 +0000 (00:10 +0200)

commit: use mergesort() in commit_list_sort_by_date()

Replace the insertion sort in commit_list_sort_by_date() with a
call to the generic mergesort function. This sets the stage for
using commit_list_sort_by_date() for larger lists, as shown in
the next patch.

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

add mergesort() for linked listsRené Scharfe Sat, 31 Mar 2012 22:10:11 +0000 (00:10 +0200)

add mergesort() for linked lists

This adds a generic bottom-up mergesort implementation for singly linked
lists. It was inspired by Simon Tatham's webpage on the topic[1], but
not so much by his implementation -- for no good reason, really, just a
case of NIH.

[1] http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html

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

unpack-trees: plug minor memory leakRené Scharfe Tue, 6 Mar 2012 19:37:23 +0000 (20:37 +0100)

unpack-trees: plug minor memory leak

The allocations made by unpack_nondirectories() using create_ce_entry()
are never freed.

In the non-merge case, we duplicate them using add_entry() and later
only look at the first allocated element (src[0]), perhaps even only
by mistake. Split out the actual addition from add_entry() into the
new helper do_add_entry() and call this non-duplicating function
instead of add_entry() to avoid the leak.

Valgrind reports this for the command "git archive v1.7.9" without
the patch:

==13372== LEAK SUMMARY:
==13372== definitely lost: 230,986 bytes in 2,325 blocks
==13372== indirectly lost: 0 bytes in 0 blocks
==13372== possibly lost: 98 bytes in 1 blocks
==13372== still reachable: 2,259,198 bytes in 3,243 blocks
==13372== suppressed: 0 bytes in 0 blocks

And with the patch applied:

==13375== LEAK SUMMARY:
==13375== definitely lost: 65 bytes in 1 blocks
==13375== indirectly lost: 0 bytes in 0 blocks
==13375== possibly lost: 0 bytes in 0 blocks
==13375== still reachable: 2,364,417 bytes in 3,245 blocks
==13375== suppressed: 0 bytes in 0 blocks

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

unpack-trees: don't perform any index operation if... René Scharfe Tue, 10 Apr 2012 18:55:58 +0000 (20:55 +0200)

unpack-trees: don't perform any index operation if we're not merging

src[0] points to the index entry in the merge case and to the first
tree to unpack in the non-merge case. We only want to mark the index
entry, so check first if we're merging.

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

do_for_each_ref(): only iterate over the subtree that... Michael Haggerty Tue, 10 Apr 2012 05:30:27 +0000 (07:30 +0200)

do_for_each_ref(): only iterate over the subtree that was requested

If the base argument has a "/" chararacter, then only iterate over the
reference subdir whose name is the part up to the last "/".

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

refs: store references hierarchicallyMichael Haggerty Tue, 10 Apr 2012 05:30:26 +0000 (07:30 +0200)

refs: store references hierarchically

Store references hierarchically in a tree that matches the
pseudo-directory structure of the reference names. Add a new kind of
ref_entry (with flag REF_DIR) to represent a whole subdirectory of
references. Sort ref_dirs one subdirectory at a time.

NOTE: the dirs can now be sorted as a side-effect of other function
calls. Therefore, it would be problematic to do something from a
each_ref_fn callback that could provoke the sorting of a directory
that is currently being iterated over (i.e., the directory containing
the entry that is being processed or any of its parents).

This is a bit far-fetched, because a directory is always sorted just
before being iterated over. Therefore, read-only accesses cannot
trigger the sorting of a directory whose iteration has already
started. But if a callback function would add a reference to a parent
directory of the reference in the iteration, then try to resolve a
reference under that directory, a re-sort could be triggered and cause
the iteration to work incorrectly.

Nevertheless...add a comment in refs.h warning against modifications
during iteration.

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

sort_ref_dir(): simplify logicMichael Haggerty Tue, 10 Apr 2012 05:30:25 +0000 (07:30 +0200)

sort_ref_dir(): simplify logic

Use the more usual indexing idiom for clarity.

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

refs.c: rename ref_array -> ref_dirMichael Haggerty Tue, 10 Apr 2012 05:30:24 +0000 (07:30 +0200)

refs.c: rename ref_array -> ref_dir

This purely textual change is in preparation for storing references
hierarchically, when the old ref_array structure will represent one
"directory" of references. Rename functions that deal with this
structure analogously, and also rename the structure's "refs" member
to "entries".

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

struct ref_entry: nest the value part in a unionMichael Haggerty Tue, 10 Apr 2012 05:30:23 +0000 (07:30 +0200)

struct ref_entry: nest the value part in a union

This change is obviously silly by itself, but it is a step towards
adding a second member to the union.

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