gitweb.git
Merge branch 'mh/war-on-extra-refs'Junio C Hamano Tue, 14 Feb 2012 20:57:18 +0000 (12:57 -0800)

Merge branch 'mh/war-on-extra-refs'

* mh/war-on-extra-refs:
refs: remove the extra_refs API
clone: do not add alternate references to extra_refs
everything_local(): mark alternate refs as complete
fetch-pack.c: inline insert_alternate_refs()
fetch-pack.c: rename some parameters from "path" to "refname"
clone.c: move more code into the "if (refs)" conditional
t5700: document a failure of alternates to affect fetch

Merge branch 'lt/pull-no-edit'Junio C Hamano Tue, 14 Feb 2012 20:57:17 +0000 (12:57 -0800)

Merge branch 'lt/pull-no-edit'

* lt/pull-no-edit:
"git pull" doesn't know "--edit"

Merge branch 'bl/gitweb-project-filter'Junio C Hamano Tue, 14 Feb 2012 20:57:17 +0000 (12:57 -0800)

Merge branch 'bl/gitweb-project-filter'

* bl/gitweb-project-filter:
gitweb: Harden and improve $project_filter page title

Merge branch 'jn/ancient-meld-support'Junio C Hamano Tue, 14 Feb 2012 20:57:17 +0000 (12:57 -0800)

Merge branch 'jn/ancient-meld-support'

* jn/ancient-meld-support:
mergetools/meld: Use --help output to detect --output support

Merge branch 'jk/userdiff-config-simplify'Junio C Hamano Tue, 14 Feb 2012 20:57:17 +0000 (12:57 -0800)

Merge branch 'jk/userdiff-config-simplify'

* jk/userdiff-config-simplify:
drop odd return value semantics from userdiff_config

Sync with 1.7.9.1Junio C Hamano Tue, 14 Feb 2012 17:56:23 +0000 (09:56 -0800)

Sync with 1.7.9.1

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

Git 1.7.9.1 v1.7.9.1Junio C Hamano Tue, 14 Feb 2012 17:53:38 +0000 (09:53 -0800)

Git 1.7.9.1

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

Merge branch 'jk/maint-tag-show-fixes' into maintJunio C Hamano Tue, 14 Feb 2012 07:31:27 +0000 (23:31 -0800)

Merge branch 'jk/maint-tag-show-fixes' into maint

* jk/maint-tag-show-fixes:
tag: do not show non-tag contents with "-n"
tag: die when listing missing or corrupt objects
tag: fix output of "tag -n" when errors occur

Conflicts:
t/t7004-tag.sh

Merge branch 'bw/inet-pton-ntop-compat' into maintJunio C Hamano Tue, 14 Feb 2012 07:26:31 +0000 (23:26 -0800)

Merge branch 'bw/inet-pton-ntop-compat' into maint

* bw/inet-pton-ntop-compat:
Drop system includes from inet_pton/inet_ntop compatibility wrappers

Merge branch 'mp/make-cleanse-x-for-exe' into maintJunio C Hamano Tue, 14 Feb 2012 07:26:25 +0000 (23:26 -0800)

Merge branch 'mp/make-cleanse-x-for-exe' into maint

* mp/make-cleanse-x-for-exe:
Explicitly set X to avoid potential build breakage

Merge branch 'jn/merge-no-edit-fix' into maintJunio C Hamano Tue, 14 Feb 2012 07:24:02 +0000 (23:24 -0800)

Merge branch 'jn/merge-no-edit-fix' into maint

* jn/merge-no-edit-fix:
merge: do not launch an editor on "--no-edit $tag"

diff-highlight: document some non-optimal casesJeff King Mon, 13 Feb 2012 22:37:33 +0000 (17:37 -0500)

diff-highlight: document some non-optimal cases

The diff-highlight script works on heuristics, so it can be
wrong. Let's document some of the wrong-ness in case
somebody feels like working on it.

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

diff-highlight: match multi-line hunksJeff King Mon, 13 Feb 2012 22:36:36 +0000 (17:36 -0500)

diff-highlight: match multi-line hunks

Currently we only bother highlighting single-line hunks. The
rationale was that the purpose of highlighting is to point
out small changes between two similar lines that are
otherwise hard to see. However, that meant we missed similar
cases where two lines were changed together, like:

-foo(buf);
-bar(buf);
+foo(obj->buf);
+bar(obj->buf);

Each of those changes is simple, and would benefit from
highlighting (the "obj->" parts in this case).

This patch considers whole hunks at a time. For now, we
consider only the case where the hunk has the same number of
removed and added lines, and assume that the lines from each
segment correspond one-to-one. While this is just a
heuristic, in practice it seems to generate sensible
results (especially because we now omit highlighting on
completely-changed lines, so when our heuristic is wrong, we
tend to avoid highlighting at all).

Based on an original idea and implementation by Michał
Kiedrowicz.

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

diff-highlight: refactor to prepare for multi-line... Jeff King Mon, 13 Feb 2012 22:33:10 +0000 (17:33 -0500)

diff-highlight: refactor to prepare for multi-line hunks

The current code structure assumes that we will only look at
a pair of lines at any given time, and that the end result
should always be to output that pair. However, we want to
eventually handle multi-line hunks, which will involve
collating pairs of removed/added lines. Let's refactor the
code to return highlighted pairs instead of printing them.

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

diff-highlight: don't highlight whole linesJeff King Mon, 13 Feb 2012 22:32:47 +0000 (17:32 -0500)

diff-highlight: don't highlight whole lines

If you have a change like:

-foo
+bar

we end up highlighting the entirety of both lines (since the
whole thing is changed). But the point of diff highlighting
is to pinpoint the specific change in a pair of lines that
are mostly identical. In this case, the highlighting is just
noise, since there is nothing to pinpoint, and we are better
off doing nothing.

The implementation looks for "interesting" pairs by checking
to see whether they actually have a matching prefix or
suffix that does not simply consist of colorization and
whitespace. However, the implementation makes it easy to
plug in other heuristics, too, like:

1. Depending on the source material, the set of "boring"
characters could be tweaked to include language-specific
stuff (like braces or semicolons for C).

2. Instead of saying "an interesting line has at least one
character of prefix or suffix", we could require that
less than N percent of the line be highlighted.

The simple "ignore whitespace, and highlight if there are
any matched characters" implemented by this patch seems to
give good results on git.git. I'll leave experimentation
with other heuristics to somebody who has a dataset that
does not look good with the current code.

Based on an original idea and implementation by Michał
Kiedrowicz.

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

diff-highlight: make perl strict and warnings fatalJeff King Mon, 13 Feb 2012 22:28:10 +0000 (17:28 -0500)

diff-highlight: make perl strict and warnings fatal

These perl features can catch bugs, and we shouldn't be
violating any of the strict rules or creating any warnings,
so let's turn them on.

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

pager: find out the terminal width before spawning... Zbigniew Jędrzejewski-Szmek Sun, 12 Feb 2012 14:12:32 +0000 (15:12 +0100)

pager: find out the terminal width before spawning the pager

term_columns() checks for terminal width via ioctl(2) on the standard
output, but we spawn the pager too early for this check to be useful.

The effect of this buglet can be observed by opening a wide terminal and
running "git -p help --all", which still shows 80-column output, while
"git help --all" uses the full terminal width. Run the check before we
spawn the pager to fix this.

While at it, move term_columns() to pager.c and export it from cache.h so
that callers other than the help subsystem can use it.

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

do not override receive-pack errorsClemens Buchacher Mon, 13 Feb 2012 20:17:12 +0000 (21:17 +0100)

do not override receive-pack errors

Receive runs rev-list --verify-objects in order to detect missing
objects. However, such errors are ignored and overridden later.
Instead, consequently ignore all update commands for which an error has
already been detected.

Some tests in t5504 are obsoleted by this change, because invalid
objects are detected even if fsck is not enabled. Instead, they now test
for different error messages depending on whether or not fsck is turned
on. A better fix would be to force a corruption that will be detected by
fsck but not by rev-list.

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

t5541: check error message against the real port number... Clemens Buchacher Mon, 13 Feb 2012 20:17:14 +0000 (21:17 +0100)

t5541: check error message against the real port number used

Otherwise the test cannot be run with custom port set to LIB_HTTPD_PORT.

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

push/fetch/clone --no-progress suppresses progress... Clemens Buchacher Mon, 13 Feb 2012 20:17:15 +0000 (21:17 +0100)

push/fetch/clone --no-progress suppresses progress output

By default, progress output is disabled if stderr is not a terminal.
The --progress option can be used to force progress output anyways.
Conversely, --no-progress does not force progress output. In particular,
if stderr is a terminal, progress output is enabled.

This is unintuitive. Change --no-progress to force output off.

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

git rev-list: fix invalid typecastClemens Buchacher Mon, 13 Feb 2012 20:17:11 +0000 (21:17 +0100)

git rev-list: fix invalid typecast

git rev-list passes rev_list_info, not rev_list objects. Without this
fix, rev-list enables or disables the --verify-objects option depending
on a read from an undefined memory location.

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

Sync with maintJunio C Hamano Mon, 13 Feb 2012 19:47:01 +0000 (11:47 -0800)

Sync with maint

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

Update draft release notes to 1.7.9.1Junio C Hamano Mon, 13 Feb 2012 19:46:47 +0000 (11:46 -0800)

Update draft release notes to 1.7.9.1

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

Merge branch 'js/add-e-submodule-fix' into maintJunio C Hamano Mon, 13 Feb 2012 19:42:18 +0000 (11:42 -0800)

Merge branch 'js/add-e-submodule-fix' into maint

* js/add-e-submodule-fix:
add -e: do not show difference in a submodule that is merely dirty

Merge branch 'jc/parse-date-raw' into maintJunio C Hamano Mon, 13 Feb 2012 19:42:15 +0000 (11:42 -0800)

Merge branch 'jc/parse-date-raw' into maint

* jc/parse-date-raw:
parse_date(): '@' prefix forces git-timestamp
parse_date(): allow ancient git-timestamp

Merge branch 'jc/merge-ff-only-stronger-than-signed... Junio C Hamano Mon, 13 Feb 2012 19:42:11 +0000 (11:42 -0800)

Merge branch 'jc/merge-ff-only-stronger-than-signed-merge' into maint

* jc/merge-ff-only-stronger-than-signed-merge:
merge: do not create a signed tag merge under --ff-only option

Merge branch 'jc/branch-desc-typoavoidance' into maintJunio C Hamano Mon, 13 Feb 2012 19:42:07 +0000 (11:42 -0800)

Merge branch 'jc/branch-desc-typoavoidance' into maint

* jc/branch-desc-typoavoidance:
branch --edit-description: protect against mistyped branch name
tests: add write_script helper function

Merge branch 'jn/rpm-spec' into maintJunio C Hamano Mon, 13 Feb 2012 19:42:04 +0000 (11:42 -0800)

Merge branch 'jn/rpm-spec' into maint

* jn/rpm-spec:
git.spec: Workaround localized messages not put in any RPM

builtin/tag.c: Fix a sparse warningRamsay Jones Mon, 13 Feb 2012 18:24:41 +0000 (18:24 +0000)

builtin/tag.c: Fix a sparse warning

In particular, sparse complains as follows:

SP builtin/tag.c
builtin/tag.c:411:5: warning: symbol 'parse_opt_points_at' was \
not declared. Should it be static?

In order to suppress the warning, since the parse_opt_points_at()
function does not need to be an external symbol, we simply add the
static modifier to the function definition.

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

t: use sane_unset instead of unsetÆvar Arnfjörð Bjarmason Sun, 12 Feb 2012 01:05:12 +0000 (01:05 +0000)

t: use sane_unset instead of unset

Change several tests to use the sane_unset function introduced in
v1.7.3.1-35-g00648ba instead of the built-in unset function.

This fixes a failure I was having on t9130-git-svn-authors-file.sh on
Solaris, and prevents several other issues from occurring.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Remove Git's support for smoke testingÆvar Arnfjörð Bjarmason Fri, 23 Dec 2011 17:08:18 +0000 (17:08 +0000)

Remove Git's support for smoke testing

I'm no longer running the Git smoke testing service at
smoke.git.nix.is due to Smolder being a fragile piece of software not
having time to follow through on making it easy for third parties to
run and submit their own smoke tests.

So remove the support in Git for sending smoke tests to
smoke.git.nix.is, it's still easy to modify the test suite to submit
smokes somewhere else.

This reverts the following commits:

Revert "t/README: Add SMOKE_{COMMENT,TAGS}= to smoke_report target" -- e38efac87d
Revert "t/README: Document the Smoke testing" -- d15e9ebc5c
Revert "t/Makefile: Create test-results dir for smoke target" -- 617344d77b
Revert "tests: Infrastructure for Git smoke testing" -- b6b84d1b74

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: Change the default compiler from "gcc" to... Ævar Arnfjörð Bjarmason Tue, 20 Dec 2011 23:40:47 +0000 (23:40 +0000)

Makefile: Change the default compiler from "gcc" to "cc"

Ever since the very first commit to git.git we've been setting CC to
"gcc". Presumably this is behavior that Linus copied from the Linux
Makefile.

However unlike Linux Git is written in ANSI C and supports a multitude
of compilers, including Clang, Sun Studio, xlc etc. On my Linux box
"cc" is a symlink to clang, and on a Solaris box I have access to "cc"
is Sun Studio's CC.

Both of these are perfectly capable of compiling Git, and it's
annoying to have to specify CC=cc on the command-line when compiling
Git when that's the default behavior of most other portable programs.

So change the default to "cc". Users who want to compile with GCC can
still add "CC=gcc" to the make(1) command-line, but those users who
don't have GCC as their "cc" will see expected behavior, and as a
bonus we'll be more likely to smoke out new compilation warnings from
our distributors since they'll me using a more varied set of compilers
by default.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: introduce CHARSET_LIB to link with -lcharsetДилян Палаузов Sun, 12 Feb 2012 16:23:36 +0000 (17:23 +0100)

Makefile: introduce CHARSET_LIB to link with -lcharset

On some systems, the function locale_charset() may not be exported from
libiconv but is available from libcharset, and we need -lcharset when
linking.

Introduce a make variable CHARSET_LIB that can be set to -lcharsetlib
on such systems. Also autodetect this in the configure script by first
looking for the symbol in libiconv, and then libcharset.

Signed-off-by: Дилян Палаузов <dilyan.palauzov@aegee.org>

Update draft release notes to 1.7.10Junio C Hamano Mon, 13 Feb 2012 06:58:36 +0000 (22:58 -0800)

Update draft release notes to 1.7.10

Again this round mostly consists of fixes for 1.7.9 in preparation for
merging these topics down to maint for 1.7.9.1

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

Merge branch 'jc/checkout-out-of-unborn'Junio C Hamano Mon, 13 Feb 2012 06:43:44 +0000 (22:43 -0800)

Merge branch 'jc/checkout-out-of-unborn'

* jc/checkout-out-of-unborn:
git checkout -b: allow switching out of an unborn branch

Merge branch 'jc/maint-mailmap-output'Junio C Hamano Mon, 13 Feb 2012 06:43:39 +0000 (22:43 -0800)

Merge branch 'jc/maint-mailmap-output'

* jc/maint-mailmap-output:
mailmap: always return a plain mail address from map_user()

Merge branch 'jk/prompt-fallback-to-tty'Junio C Hamano Mon, 13 Feb 2012 06:43:34 +0000 (22:43 -0800)

Merge branch 'jk/prompt-fallback-to-tty'

* jk/prompt-fallback-to-tty:
prompt: fall back to terminal if askpass fails
prompt: clean up strbuf usage

Merge branch 'jn/gitweb-search-utf-8'Junio C Hamano Mon, 13 Feb 2012 06:43:24 +0000 (22:43 -0800)

Merge branch 'jn/gitweb-search-utf-8'

* jn/gitweb-search-utf-8:
gitweb: Allow UTF-8 encoded CGI query parameters and path_info

Conflicts:
gitweb/gitweb.perl

Merge branch 'nd/diffstat-gramnum'Junio C Hamano Mon, 13 Feb 2012 06:43:19 +0000 (22:43 -0800)

Merge branch 'nd/diffstat-gramnum'

* nd/diffstat-gramnum:
Use correct grammar in diffstat summary line

Merge branch 'nd/find-pack-entry-recent-cache-invalidation'Junio C Hamano Mon, 13 Feb 2012 06:43:03 +0000 (22:43 -0800)

Merge branch 'nd/find-pack-entry-recent-cache-invalidation'

* nd/find-pack-entry-recent-cache-invalidation:
find_pack_entry(): do not keep packed_git pointer locally
sha1_file.c: move the core logic of find_pack_entry() into fill_pack_entry()

Merge branch 'tt/profile-build-fix'Junio C Hamano Mon, 13 Feb 2012 06:42:46 +0000 (22:42 -0800)

Merge branch 'tt/profile-build-fix'

* tt/profile-build-fix:
Makefile: fix syntax for older make
Fix build problems related to profile-directed optimization

Merge branch 'nd/cache-tree-api-refactor'Junio C Hamano Mon, 13 Feb 2012 06:42:42 +0000 (22:42 -0800)

Merge branch 'nd/cache-tree-api-refactor'

* nd/cache-tree-api-refactor:
cache-tree: update API to take abitrary flags

Merge branch 'fc/zsh-completion'Junio C Hamano Mon, 13 Feb 2012 06:42:35 +0000 (22:42 -0800)

Merge branch 'fc/zsh-completion'

* fc/zsh-completion:
completion: simplify __gitcomp and __gitcomp_nl implementations
completion: use ls -1 instead of rolling a loop to do that ourselves
completion: work around zsh option propagation bug

Merge branch 'mp/make-cleanse-x-for-exe'Junio C Hamano Mon, 13 Feb 2012 06:42:17 +0000 (22:42 -0800)

Merge branch 'mp/make-cleanse-x-for-exe'

* mp/make-cleanse-x-for-exe:
Explicitly set X to avoid potential build breakage

Merge branch 'bw/inet-pton-ntop-compat'Junio C Hamano Mon, 13 Feb 2012 06:42:14 +0000 (22:42 -0800)

Merge branch 'bw/inet-pton-ntop-compat'

* bw/inet-pton-ntop-compat:
Drop system includes from inet_pton/inet_ntop compatibility wrappers

Merge branch 'jc/maint-commit-ignore-i-t-a'Junio C Hamano Mon, 13 Feb 2012 06:42:10 +0000 (22:42 -0800)

Merge branch 'jc/maint-commit-ignore-i-t-a'

* jc/maint-commit-ignore-i-t-a:
commit: ignore intent-to-add entries instead of refusing

Conflicts:
cache-tree.c

Merge branch 'jk/maint-tag-show-fixes'Junio C Hamano Mon, 13 Feb 2012 06:42:06 +0000 (22:42 -0800)

Merge branch 'jk/maint-tag-show-fixes'

* jk/maint-tag-show-fixes:
tag: do not show non-tag contents with "-n"
tag: die when listing missing or corrupt objects
tag: fix output of "tag -n" when errors occur

Conflicts:
t/t7004-tag.sh

Merge branch 'mm/empty-loose-error-message'Junio C Hamano Mon, 13 Feb 2012 06:42:02 +0000 (22:42 -0800)

Merge branch 'mm/empty-loose-error-message'

* mm/empty-loose-error-message:
fsck: give accurate error message on empty loose object files

Merge branch 'nk/ctype-for-perf'Junio C Hamano Mon, 13 Feb 2012 06:41:56 +0000 (22:41 -0800)

Merge branch 'nk/ctype-for-perf'

* nk/ctype-for-perf:
ctype: implement islower/isupper macro
ctype.c only wants git-compat-util.h

Merge branch 'jn/merge-no-edit-fix'Junio C Hamano Mon, 13 Feb 2012 06:41:51 +0000 (22:41 -0800)

Merge branch 'jn/merge-no-edit-fix'

* jn/merge-no-edit-fix:
merge: do not launch an editor on "--no-edit $tag"

Conflicts:
builtin/merge.c

gitweb: Harden and improve $project_filter page titleJakub Narebski Sun, 12 Feb 2012 15:21:30 +0000 (16:21 +0100)

gitweb: Harden and improve $project_filter page title

Commit 19d2d23 (gitweb: add project_filter to limit project list
to a subdirectory, 2012-01-30) added also support for displaying
$project_filter, if present, in page title.

Unfortunately it forgot to treat $project_filter as path, and escape
it using esc_path(), like it is done for $filename.

Also, it was not obvious that "$site_name - $project_filter" is about
project filtering: use "$site_name - projects in '$project_filter'".

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

refs: remove the extra_refs APIMichael Haggerty Sat, 11 Feb 2012 06:21:01 +0000 (07:21 +0100)

refs: remove the extra_refs API

The extra_refs provided a kludgy way to create fake references at a
global level in the hope that they would only affect some particular
code path. The last user of this API been rewritten, so strip this
stuff out before somebody else gets the bad idea of using it.

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

clone: do not add alternate references to extra_refsMichael Haggerty Sat, 11 Feb 2012 06:21:00 +0000 (07:21 +0100)

clone: do not add alternate references to extra_refs

Alternate references are directly (and now, correctly) handled by
fetch-pack, so there is no need to inform fetch-pack about them via
the extra_refs back channel.

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

everything_local(): mark alternate refs as completeMichael Haggerty Sat, 11 Feb 2012 06:20:59 +0000 (07:20 +0100)

everything_local(): mark alternate refs as complete

Objects in an alternate object database are already available to the
local repository and therefore don't need to be fetched. So mark them
as complete in everything_local().

This fixes a test in t5700.

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

fetch-pack.c: inline insert_alternate_refs()Michael Haggerty Sat, 11 Feb 2012 06:20:58 +0000 (07:20 +0100)

fetch-pack.c: inline insert_alternate_refs()

The logic of the (single) caller is clearer without encapsulating this
one line in a function.

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

fetch-pack.c: rename some parameters from "path" to... Michael Haggerty Sat, 11 Feb 2012 06:20:57 +0000 (07:20 +0100)

fetch-pack.c: rename some parameters from "path" to "refname"

The parameters denote reference names, which are no longer 1:1 with
filesystem paths.

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

clone.c: move more code into the "if (refs)" conditionalMichael Haggerty Sat, 11 Feb 2012 06:20:56 +0000 (07:20 +0100)

clone.c: move more code into the "if (refs)" conditional

The bahavior of a bunch of code before the "if (refs)" statement also
depends on whether refs is set, so make the logic clearer by shifting
this code into the if statement.

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

t5700: document a failure of alternates to affect fetchMichael Haggerty Sat, 11 Feb 2012 06:20:55 +0000 (07:20 +0100)

t5700: document a failure of alternates to affect fetch

If an alternate supplies some, but not all, of the objects needed for
a fetch, fetch-pack nevertheless generates "want" lines for the
alternate objects that are present. Demonstrate this problem via a
failing test.

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

"git pull" doesn't know "--edit"Linus Torvalds Sat, 11 Feb 2012 18:21:03 +0000 (10:21 -0800)

"git pull" doesn't know "--edit"

Ok, so now "git merge" defaults to editing when interactive - lovely. But
when testing that, I noticed that while you can say

git merge --[no-]edit ..branch..

that does not work with "git pull". You get a message like

error: unknown option `no-edit'
usage: git fetch [<options>] [<repository> [<refspec>...]]
or: git fetch [<options>] <group>
or: git fetch --multiple [<options>] [(<repository> | <group>)...]
or: git fetch --all [<options>]

-v, --verbose be more verbose
-q, --quiet be more quiet
--all fetch from all remotes
...

which is because that stupid shell script doesn't know about the new
flags, and just passes it to "git fetch" instead.

Now, I really wanted to just make "git pull" a built-in instead of that
nasty shell script, but I'm lazy. So here's the trivial updates to
git-pull.sh to at least teach it about -e/--edit/--no-edit.

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

mergetools/meld: Use --help output to detect --output... Jonathan Nieder Fri, 10 Feb 2012 21:57:55 +0000 (15:57 -0600)

mergetools/meld: Use --help output to detect --output support

In v1.7.7-rc0~3^2 (2011-08-19), git mergetool's "meld" support learned
to use the --output option when calling versions of meld that are
detected to support it (1.5.0 and newer, hopefully).

Alas, it misdetects old versions (before 1.1.5, 2006-06-11) of meld as
supporting the option, so on systems with such meld, instead of
getting a nice merge helper, the operator gets a dialog box with the
text "Wrong number of arguments (Got 5)". (Version 1.1.5 is when meld
switched to using optparse. One consequence of that change was that
errors in usage are detected and signalled through the exit status
even when --help was passed.)

Luckily there is a simpler check that is more reliable: the usage
string printed by "meld --help" reliably reflects whether --output is
supported in a given version. Use it.

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

Update draft release notes to 1.7.10Junio C Hamano Fri, 10 Feb 2012 22:15:38 +0000 (14:15 -0800)

Update draft release notes to 1.7.10

Document bunch of bugfix topics to be merged down to 'maint' soonish
for 1.7.9.1 maintenance release.

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

Merge branch 'js/add-e-submodule-fix'Junio C Hamano Fri, 10 Feb 2012 22:08:27 +0000 (14:08 -0800)

Merge branch 'js/add-e-submodule-fix'

* js/add-e-submodule-fix:
add -e: do not show difference in a submodule that is merely dirty

Merge branch 'jc/parse-date-raw'Junio C Hamano Fri, 10 Feb 2012 22:08:12 +0000 (14:08 -0800)

Merge branch 'jc/parse-date-raw'

* jc/parse-date-raw:
parse_date(): '@' prefix forces git-timestamp
parse_date(): allow ancient git-timestamp

Merge branch 'jc/merge-ff-only-stronger-than-signed... Junio C Hamano Fri, 10 Feb 2012 22:08:02 +0000 (14:08 -0800)

Merge branch 'jc/merge-ff-only-stronger-than-signed-merge'

* jc/merge-ff-only-stronger-than-signed-merge:
merge: do not create a signed tag merge under --ff-only option

Merge branch 'jc/branch-desc-typoavoidance'Junio C Hamano Fri, 10 Feb 2012 22:07:58 +0000 (14:07 -0800)

Merge branch 'jc/branch-desc-typoavoidance'

* jc/branch-desc-typoavoidance:
branch --edit-description: protect against mistyped branch name

Merge branch 'jn/rpm-spec'Junio C Hamano Fri, 10 Feb 2012 22:07:49 +0000 (14:07 -0800)

Merge branch 'jn/rpm-spec'

* jn/rpm-spec:
git.spec: Workaround localized messages not put in any RPM

Merge branch 'jk/tests-write-script'Junio C Hamano Fri, 10 Feb 2012 22:07:42 +0000 (14:07 -0800)

Merge branch 'jk/tests-write-script'

* jk/tests-write-script:
t0300: use write_script helper
tests: add write_script helper function

Sync with maintJunio C Hamano Fri, 10 Feb 2012 22:04:32 +0000 (14:04 -0800)

Sync with maint

Update draft release notes to 1.7.9.1Junio C Hamano Fri, 10 Feb 2012 22:04:20 +0000 (14:04 -0800)

Update draft release notes to 1.7.9.1

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

Merge branch 'jc/maint-request-pull-for-tag' into maintJunio C Hamano Fri, 10 Feb 2012 21:59:02 +0000 (13:59 -0800)

Merge branch 'jc/maint-request-pull-for-tag' into maint

* jc/maint-request-pull-for-tag:
request-pull: explicitly ask tags/$name to be pulled

Merge branch 'tr/grep-l-with-decoration' into maintJunio C Hamano Fri, 10 Feb 2012 21:59:02 +0000 (13:59 -0800)

Merge branch 'tr/grep-l-with-decoration' into maint

* tr/grep-l-with-decoration:
grep: fix -l/-L interaction with decoration lines

Merge branch 'jl/submodule-re-add' into maintJunio C Hamano Fri, 10 Feb 2012 21:59:01 +0000 (13:59 -0800)

Merge branch 'jl/submodule-re-add' into maint

* jl/submodule-re-add:
submodule add: fix breakage when re-adding a deep submodule

Merge branch 'da/maint-mergetool-twoway' into maintJunio C Hamano Fri, 10 Feb 2012 21:59:01 +0000 (13:59 -0800)

Merge branch 'da/maint-mergetool-twoway' into maint

* da/maint-mergetool-twoway:
mergetool: Provide an empty file when needed

ctype: implement islower/isupper macroNamhyung Kim Fri, 10 Feb 2012 02:13:31 +0000 (11:13 +0900)

ctype: implement islower/isupper macro

"perf" uses a the forked copy of this file, and wants to use these two
macros.

Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ctype.c only wants git-compat-util.hNamhyung Kim Fri, 10 Feb 2012 02:13:30 +0000 (11:13 +0900)

ctype.c only wants git-compat-util.h

The implementation of sane ctype macros only depends on symbols in
git-compat-util.h not cache.h

Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Explicitly set X to avoid potential build breakageMichael Palimaka Wed, 8 Feb 2012 10:59:04 +0000 (21:59 +1100)

Explicitly set X to avoid potential build breakage

$X is appended to binary names for Windows builds (ie. git.exe).
Pollution from the environment can inadvertently trigger this behaviour,
resulting in 'git' turning into 'gitwhatever' without warning.

Signed-off-by: Michael Palimaka <kensington@astralcloak.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge: do not launch an editor on "--no-edit $tag"Junio C Hamano Thu, 9 Feb 2012 21:30:52 +0000 (13:30 -0800)

merge: do not launch an editor on "--no-edit $tag"

When the user explicitly asked us not to, don't launch an editor.

But do everything else the same way as the "edit" case, i.e. leave the
comment with verification result in the log template and record the
mergesig in the resulting merge commit for later inspection.

Based on initiail analysis by Jonathan Nieder.

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

Makefile: fix syntax for older makeJohannes Sixt Thu, 9 Feb 2012 08:22:26 +0000 (09:22 +0100)

Makefile: fix syntax for older make

It is necessary to write the else branch as a nested conditional. Also,
write the conditions with parentheses because we use them throughout the
Makefile.

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

tag: do not show non-tag contents with "-n"Junio C Hamano Mon, 6 Feb 2012 18:13:27 +0000 (10:13 -0800)

tag: do not show non-tag contents with "-n"

"git tag -n" did not check the type of the object it is reading the top n
lines from. At least, avoid showing the beginning of trees and blobs when
dealing with lightweight tags that point at them.

As the payload of a tag and a commit look similar in that they both start
with a header block, which is skipped for the purpose of "-n" output,
followed by human readable text, allow the message of commit objects to be
shown just like the contents of tag objects. This avoids regression for
people who have been using "tag -n" to show the log messages of commits
that are pointed at by lightweight tags.

Test script is from Jeff King.

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

tag: add --points-at list optionTom Grennan Wed, 8 Feb 2012 23:03:43 +0000 (15:03 -0800)

tag: add --points-at list option

This filters the list for tags of the given object.
Example,

john$ git tag v1.0-john v1.0
john$ git tag -l --points-at v1.0
v1.0-john
v1.0

Signed-off-by: Tom Grennan <tmgrennan@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cache-tree: update API to take abitrary flagsNguyễn Thái Ngọc Duy Mon, 16 Jan 2012 02:36:46 +0000 (09:36 +0700)

cache-tree: update API to take abitrary flags

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

Update draft release notes to 1.7.10Junio C Hamano Tue, 7 Feb 2012 21:01:56 +0000 (13:01 -0800)

Update draft release notes to 1.7.10

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

Merge branch 'jc/maint-request-pull-for-tag'Junio C Hamano Tue, 7 Feb 2012 20:57:10 +0000 (12:57 -0800)

Merge branch 'jc/maint-request-pull-for-tag'

* jc/maint-request-pull-for-tag:
request-pull: explicitly ask tags/$name to be pulled

Merge branch 'bl/gitweb-project-filter'Junio C Hamano Tue, 7 Feb 2012 20:57:05 +0000 (12:57 -0800)

Merge branch 'bl/gitweb-project-filter'

* bl/gitweb-project-filter:
gitweb: Make project search respect project_filter
gitweb: improve usability of projects search form
gitweb: place links to parent directories in page header
gitweb: show active project_filter in project_list page header
gitweb: limit links to alternate forms of project_list to active project_filter
gitweb: add project_filter to limit project list to a subdirectory
gitweb: prepare git_get_projects_list for use outside 'forks'.
gitweb: move hard coded .git suffix out of git_get_projects_list

Merge branch 'jx/i18n-more-marking'Junio C Hamano Tue, 7 Feb 2012 20:56:54 +0000 (12:56 -0800)

Merge branch 'jx/i18n-more-marking'

* jx/i18n-more-marking:
i18n: format_tracking_info "Your branch is behind" message
i18n: git-commit whence_s "merge/cherry-pick" message

Merge branch 'jn/svn-fe'Junio C Hamano Tue, 7 Feb 2012 20:56:38 +0000 (12:56 -0800)

Merge branch 'jn/svn-fe'

* jn/svn-fe: (36 commits)
vcs-svn: suppress a -Wtype-limits warning
vcs-svn: allow import of > 4GiB files
vcs-svn: rename check_overflow arguments for clarity
vcs-svn/svndiff.c: squelch false "unused" warning from gcc
vcs-svn: reset first_commit_done in fast_export_init
vcs-svn: do not initialize report_buffer twice
vcs-svn: avoid hangs from corrupt deltas
vcs-svn: guard against overflow when computing preimage length
vcs-svn: cap number of bytes read from sliding view
test-svn-fe: split off "test-svn-fe -d" into a separate function
vcs-svn: implement text-delta handling
vcs-svn: let deltas use data from preimage
vcs-svn: let deltas use data from postimage
vcs-svn: verify that deltas consume all inline data
vcs-svn: implement copyfrom_data delta instruction
vcs-svn: read instructions from deltas
vcs-svn: read inline data from deltas
vcs-svn: read the preimage when applying deltas
vcs-svn: parse svndiff0 window header
vcs-svn: skeleton of an svn delta parser
...

Merge branch 'rt/completion-branch-edit-desc'Junio C Hamano Tue, 7 Feb 2012 20:56:33 +0000 (12:56 -0800)

Merge branch 'rt/completion-branch-edit-desc'

* rt/completion-branch-edit-desc:
completion: --edit-description option for git-branch

commit: ignore intent-to-add entries instead of refusingJunio C Hamano Tue, 7 Feb 2012 19:55:48 +0000 (11:55 -0800)

commit: ignore intent-to-add entries instead of refusing

Originally, "git add -N" was introduced to help users from forgetting to
add new files to the index before they ran "git commit -a". As an attempt
to help them further so that they do not forget to say "-a", "git commit"
to commit the index as-is was taught to error out, reminding the user that
they may have forgotten to add the final contents of the paths before
running the command.

This turned out to be a false "safety" that is useless. If the user made
changes to already tracked paths and paths added with "git add -N", and
then ran "git add" to register the final contents of the paths added with
"git add -N", "git commit" will happily create a commit out of the index,
without including the local changes made to the already tracked paths. It
was not a useful "safety" measure to prevent "forgetful" mistakes from
happening.

It turns out that this behaviour is not just a useless false "safety", but
actively hurts use cases of "git add -N" that were discovered later and
have become popular, namely, to tell Git to be aware of these paths added
by "git add -N", so that commands like "git status" and "git diff" would
include them in their output, even though the user is not interested in
including them in the next commit they are going to make.

Fix this ancient UI mistake, and instead make a commit from the index
ignoring the paths added by "git add -N" without adding real contents.

Based on the work by Nguyễn Thái Ngọc Duy, and helped by injection of
sanity from Jonathan Nieder and others on the Git mailing list.

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

drop odd return value semantics from userdiff_configJeff King Tue, 7 Feb 2012 18:23:02 +0000 (13:23 -0500)

drop odd return value semantics from userdiff_config

When the userdiff_config function was introduced in be58e70
(diff: unify external diff and funcname parsing code,
2008-10-05), it used a return value convention unlike any
other config callback. Like other callbacks, it used "-1" to
signal error. But it returned "1" to indicate that it found
something, and "0" otherwise; other callbacks simply
returned "0" to indicate that no error occurred.

This distinction was necessary at the time, because the
userdiff namespace overlapped slightly with the color
configuration namespace. So "diff.color.foo" could mean "the
'foo' slot of diff coloring" or "the 'foo' component of the
"color" userdiff driver". Because the color-parsing code
would die on an unknown color slot, we needed the userdiff
code to indicate that it had matched the variable, letting
us bypass the color-parsing code entirely.

Later, in 8b8e862 (ignore unknown color configuration,
2009-12-12), the color-parsing code learned to silently
ignore unknown slots. This means we no longer need to
protect userdiff-matched variables from reaching the
color-parsing code.

We can therefore change the userdiff_config calling
convention to a more normal one. This drops some code from
each caller, which is nice. But more importantly, it reduces
the cognitive load for readers who may wonder why
userdiff_config is unlike every other config callback.

There's no need to add a new test confirming that this
works; t4020 already contains a test that sets
diff.color.external.

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

add -e: do not show difference in a submodule that... Johannes Schindelin Tue, 7 Feb 2012 04:05:48 +0000 (05:05 +0100)

add -e: do not show difference in a submodule that is merely dirty

When the HEAD of the submodule matches what is recorded in the index of
the superproject, and it has local changes or untracked files, the patch
offered by "git add -e" for editing shows a diff like this:

diff --git a/submodule b/submodule
<header>
-deadbeef...
+deadbeef...-dirty

Because applying such a patch has no effect to the index, this is a
useless noise. Generate the patch with IGNORE_DIRTY_SUBMODULES flag to
prevent such a change from getting reported.

This patch also loses the "-dirty" suffix from the output when the HEAD of
the submodule is different from what is in the index of the superproject.
As such dirtiness expressed by the suffix does not affect the result of
the patch application at all, there is no information lost if we remove
it. The user could still run "git status" before "git add -e" if s/he
cares about the dirtiness.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git checkout -b: allow switching out of an unborn branchJunio C Hamano Mon, 30 Jan 2012 20:10:08 +0000 (12:10 -0800)

git checkout -b: allow switching out of an unborn branch

Running "git checkout -b another" immediately after "git init" when you do
not even have a commit on 'master' fails with:

$ git checkout -b another
fatal: You are on a branch yet to be born

This is unnecessary, if we redefine "git checkout -b $name" that does not
take any $start_point (which has to be a commit) as "I want to check out a
new branch $name from the state I am in".

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

completion: simplify __gitcomp and __gitcomp_nl impleme... Felipe Contreras Thu, 2 Feb 2012 19:48:08 +0000 (11:48 -0800)

completion: simplify __gitcomp and __gitcomp_nl implementations

These shell functions are written in an unnecessarily verbose way;
simplify their "conditionally use $<number> after checking $# against
<number>" logic by using shell's built-in conditional substitution
facilities.

Also remove the first of the two assignments to IFS in __gitcomp_nl
that does not have any effect.

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

completion: use ls -1 instead of rolling a loop to... Felipe Contreras Thu, 2 Feb 2012 09:05:29 +0000 (03:05 -0600)

completion: use ls -1 instead of rolling a loop to do that ourselves

This simplifies the code a great deal. In particular, it allows us to
get rid of __git_shopt, which is used only in this fuction to enable
'nullglob' in zsh.

[jn: squashed with a patch that actually gets rid of __git_shopt]

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

completion: work around zsh option propagation bugFelipe Contreras Thu, 2 Feb 2012 19:26:15 +0000 (11:26 -0800)

completion: work around zsh option propagation bug

When listing commands in zsh (git <TAB><TAB>), all of them will show up,
instead of only porcelain ones.

The root cause of this is because zsh versions from 4.3.0 to present
(4.3.15) do not correctly propagate the SH_WORD_SPLIT option into the
subshell in ${foo:=$(bar)} expressions. Because of this bug, the list of
all commands was treated as a single word in __git_list_porcelain_commands
and did not match any of the patterns that would usually cause plumbing to
be excluded.

With problematic versions of zsh, after running

emulate sh
fn () {
var='one two'
for v in $var; do echo $v; done
}
x=$(fn)
: ${y=$(fn)}

printing "$x" results in two lines as expected, but printing "$y" results
in a single line because $var is expanded as a single word when evaluating
fn to compute y.

So avoid the construct, and use an explicit 'test -n "$foo" || foo=$(bar)'
instead.

[jn: clarified commit message, indentation style fix]

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

docs: add a basic description of the config APIJeff King Mon, 6 Feb 2012 09:53:46 +0000 (04:53 -0500)

docs: add a basic description of the config API

This wasn't documented at all; this is pretty bare-bones,
but it should at least give new git hackers a basic idea of
how the reading side works.

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

mailmap: always return a plain mail address from map_user()Junio C Hamano Mon, 6 Feb 2012 01:31:51 +0000 (17:31 -0800)

mailmap: always return a plain mail address from map_user()

The callers of map_user() give email and name to it, and expect to get the
up-to-date email and/or name to be used in their output. The function
rewrites the given buffers in place. To optimize the majority of cases,
the function returns 0 when it did not do anything, and it returns 1 when
the caller should use the updated contents.

The 'email' input to the function is terminated by '>' or a NUL (whichever
comes first) for historical reasons, but when a rewrite happens, the value
is replaced with the mailbox inside the <> pair. However, it failed to
meet this expectation when it only rewrote the name part without rewriting
the email part, and the email in the input was terminated by '>'.

This causes an extra '>' to appear in the output of "blame -e", because the
caller does send in '>'-terminated email, and when the function returned 1
to tell it that rewriting happened, it appends '>' that is necessary when
the email part was rewritten.

The patch looks bigger than it actually is, because this change makes a
variable that points at the end of the email part in the input 'p' live
much longer than it used to, deserving a more descriptive name.

Noticed and diagnosed by Felipe Contreras and Jeff King.

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

fsck: give accurate error message on empty loose object... Matthieu Moy Mon, 6 Feb 2012 16:24:52 +0000 (17:24 +0100)

fsck: give accurate error message on empty loose object files

Since 3ba7a065527a (A loose object is not corrupt if it
cannot be read due to EMFILE), "git fsck" on a repository with an empty
loose object file complains with the error message

fatal: failed to read object <sha1>: Invalid argument

This comes from a failure of mmap on this empty file, which sets errno to
EINVAL. Instead of calling xmmap on empty file, we display a clean error
message ourselves, and return a NULL pointer. The new message is

error: object file .git/objects/09/<rest-of-sha1> is empty
fatal: loose object <sha1> (stored in .git/objects/09/<rest-of-sha1>) is corrupt

The second line was already there before the regression in 3ba7a065527a,
and the first is an additional message, that should help diagnosing the
problem for the user.

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

tag: die when listing missing or corrupt objectsJeff King Mon, 6 Feb 2012 08:13:42 +0000 (03:13 -0500)

tag: die when listing missing or corrupt objects

We don't usually bother looking at tagged objects at all
when listing. However, if "-n" is specified, we open the
objects to read the annotations of the tags. If we fail to
read an object, or if the object has zero length, we simply
silently return.

The first case is an indication of a broken or corrupt repo,
and we should notify the user of the error.

The second case is OK to silently ignore; however, the
existing code leaked the buffer returned by read_sha1_file.

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

tag: fix output of "tag -n" when errors occurJeff King Mon, 6 Feb 2012 08:13:12 +0000 (03:13 -0500)

tag: fix output of "tag -n" when errors occur

When "git tag" is instructed to print lines from annotated
tags via "-n", it first prints the tag name, then attempts
to parse and print the lines of the tag object, and then
finally adds a trailing newline.

If an error occurs, we return early from the function and
never print the newline, screwing up the output for the next
tag. Let's factor the line-printing into its own function so
we can manage the early returns better, and make sure that
we always terminate the line.

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

Fix build problems related to profile-directed optimizationTheodore Ts'o Mon, 6 Feb 2012 06:00:17 +0000 (01:00 -0500)

Fix build problems related to profile-directed optimization

There was a number of problems I ran into when trying the
profile-directed optimizations added by Andi Kleen in git commit
7ddc2710b9. (This was using gcc 4.4 found on many enterprise
distros.)

1) The -fprofile-generate and -fprofile-use commands are incompatible
with ccache; the code ends up looking in the wrong place for the gcda
files based on the ccache object names.

2) If the makefile notices that CFLAGS are different, it will rebuild
all of the binaries. Hence the recipe originally specified by the
INSTALL file ("make profile-all" followed by "make install") doesn't
work. It will appear to work, but the binaries will end up getting
built with no optimization.

This patch fixes this by using an explicit set of options passed via
the PROFILE variable then using this to directly manipulate CFLAGS and
EXTLIBS.

The developer can run "make PROFILE=BUILD all ; sudo make
PROFILE=BUILD install" automatically run a two-pass build with the
test suite run in between as the sample workload for the purpose of
recording profiling information to do the profile-directed
optimization.

Alternatively, the profiling version of binaries can be built using:

make PROFILE=GEN PROFILE_DIR=/var/cache/profile all
make PROFILE=GEN install

and then after git has been used for a while, the optimized version of
the binary can be built as follows:

make PROFILE=USE PROFILE_DIR=/var/cache/profile all
make PROFILE=USE install

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>