git.git
11 years agolog --use-mailmap: optimize for cases without --author/--committer search
Junio C Hamano [Tue, 8 Jan 2013 08:02:49 +0000 (00:02 -0800)]
log --use-mailmap: optimize for cases without --author/--committer search

When we taught the commit_match() mechanism to pay attention to the
new --use-mailmap option, we started to unconditionally copy the
commit object to a temporary buffer, just in case we need the author
and committer lines updated via the mailmap mechanism, and rewrite
author and committer using the mailmap.

It turns out that this has a rather unpleasant performance
implications.  In the linux kernel repository, running

  $ git log --author='Junio C Hamano' --pretty=short >/dev/null

under /usr/bin/time, with and without --use-mailmap (the .mailmap
file is 118 entries long, the particular author does not appear in
it), cost (with warm cache):

  [without --use-mailmap]
  5.42user 0.26system 0:05.70elapsed 99%CPU (0avgtext+0avgdata 2005936maxresident)k
  0inputs+0outputs (0major+137669minor)pagefaults 0swaps

  [with --use-mailmap]
  6.47user 0.30system 0:06.78elapsed 99%CPU (0avgtext+0avgdata 2006288maxresident)k
  0inputs+0outputs (0major+137692minor)pagefaults 0swaps

which incurs about 20% overhead.  The command is doing extra work,
so the extra cost may be justified.

But it is inexcusable to pay the cost when we do not need
author/committer match.  In the same repository,

  $ git log --grep='fix menuconfig on debian lenny' --pretty=short >/dev/null

shows very similar numbers as the above:

  [without --use-mailmap]
  5.32user 0.30system 0:05.63elapsed 99%CPU (0avgtext+0avgdata 2005984maxresident)k
  0inputs+0outputs (0major+137672minor)pagefaults 0swaps

  [with --use-mailmap]
  6.64user 0.24system 0:06.89elapsed 99%CPU (0avgtext+0avgdata 2006320maxresident)k
  0inputs+0outputs (0major+137694minor)pagefaults 0swaps

The latter case is an unnecessary performance regression.  We may
want to _show_ the result with mailmap applied, but we do not have
to copy and rewrite the author/committer of all commits we try to
match if we do not query for these fields.

Trivially optimize this performace regression by limiting the
rewrites for only when we are matching with author/committer fields.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agolog: add log.mailmap configuration option
Antoine Pelisse [Sat, 5 Jan 2013 21:26:46 +0000 (22:26 +0100)]
log: add log.mailmap configuration option

Teach "log.mailmap" configuration variable to turn "--use-mailmap"
option on to "git log", "git show" and "git whatchanged".

The "--no-use-mailmap" option from the command line can countermand
the setting.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agolog: grep author/committer using mailmap
Antoine Pelisse [Sat, 5 Jan 2013 21:26:45 +0000 (22:26 +0100)]
log: grep author/committer using mailmap

Currently you can use mailmap to display log authors and committers
but you can't use the mailmap to find commits with mapped values.

This commit allows you to run:

    git log --use-mailmap --author mapped_name_or_email
    git log --use-mailmap --committer mapped_name_or_email

Of course it only works if the --use-mailmap option is used.

The new name and email are copied only when necessary.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agotest: add test for --use-mailmap option
Antoine Pelisse [Sat, 5 Jan 2013 21:26:44 +0000 (22:26 +0100)]
test: add test for --use-mailmap option

The new option '--use-mailmap' can be used to make sure that mailmap
file is used to convert name when running log commands.

The test is simple and checks that the Author line
is correctly replaced when running log.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agolog: add --use-mailmap option
Antoine Pelisse [Sat, 5 Jan 2013 21:26:43 +0000 (22:26 +0100)]
log: add --use-mailmap option

Add the --use-mailmap option to log commands. It allows to display
names from mailmap file when displaying logs, whatever the format
used.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agopretty: use mailmap to display username and email
Antoine Pelisse [Sat, 5 Jan 2013 21:26:42 +0000 (22:26 +0100)]
pretty: use mailmap to display username and email

Use the mailmap information to display the rewritten
username and email address in all log commands.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agomailmap: add mailmap structure to rev_info and pp
Antoine Pelisse [Sat, 5 Jan 2013 21:26:41 +0000 (22:26 +0100)]
mailmap: add mailmap structure to rev_info and pp

Pass a mailmap from rev_info to pretty_print_context to so that the
pretty printer can use rewritten name and email address when showing
commits.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agomailmap: simplify map_user() interface
Antoine Pelisse [Sat, 5 Jan 2013 21:26:40 +0000 (22:26 +0100)]
mailmap: simplify map_user() interface

Simplify map_user(), mostly to avoid copies of string buffers. It
also simplifies caller functions.

map_user() directly receive pointers and length from the commit buffer
as mail and name. If mapping of the user and mail can be done, the
pointer is updated to a new location. Lengths are also updated if
necessary.

The caller of map_user() can then copy the new email and name if
necessary.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agomailmap: remove email copy and length limitation
Junio C Hamano [Sat, 5 Jan 2013 21:26:39 +0000 (22:26 +0100)]
mailmap: remove email copy and length limitation

In map_user(), we have email pointer that points at the beginning of
an e-mail address, but the buffer is not terminated with a NUL after
the e-mail address.  It typically has ">" after the address, and it
could have even more if it comes from author/committer line in a
commit object.  Or it may not have ">" after it.

We used to copy the e-mail address proper into a temporary buffer
before asking the string-list API to find the e-mail address in the
mailmap, because string_list_lookup() function only takes a NUL
terminated full string.

Introduce a helper function lookup_prefix that takes the email
pointer and the length, and finds a matching entry in the string
list used for the mailmap, by doing the following:

 - First ask string_list_find_insert_index() where in its sorted
   list the e-mail address we have (including the possible trailing
   junk ">...") would be inserted.

 - It could find an exact match (e.g. we had a clean e-mail address
   without any trailing junk).  We can return the item in that case.

 - Or it could return the index of an item that sorts after the
   e-mail address we have.

 - If we did not find an exact match against a clean e-mail address,
   then the record we are looking for in the mailmap has to exist
   before the index returned by the function (i.e. "email>junk"
   always sorts later than "email").  Iterate, starting from that
   index, down the map->items[] array until we find the exact record
   we are looking for, or we see a record with a key that definitely
   sorts earlier than the e-mail we are looking for (i.e. when we
   are looking for "email" in "email>junk", a record in the mailmap
   that begins with "emaik" strictly sorts before "email", if such a
   key existed in the mailmap).

This, together with the earlier enhancement to support
case-insensitive sorting, allow us to remove an extra copy of email
buffer to downcase it.

A part of this is based on Antoine Pelisse's previous work.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agocommit: make default of "cleanup" option configurable
Ralf Thielow [Thu, 10 Jan 2013 17:45:59 +0000 (18:45 +0100)]
commit: make default of "cleanup" option configurable

The default of the "cleanup" option in "git commit"
is not configurable. Users who don't want to use the
default have to pass this option on every commit since
there's no way to configure it. This commit introduces
a new config option "commit.cleanup" which can be used
to change the default of the "cleanup" option in
"git commit".

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit-commit-tree(1): correct description of defaults
Peter Eisentraut [Thu, 10 Jan 2013 12:29:58 +0000 (07:29 -0500)]
git-commit-tree(1): correct description of defaults

The old phrasing indicated that the EMAIL environment variable takes
precedence over the user.email configuration setting, but it is the
other way around.

Signed-off-by: Peter Eisentraut <peter@eisentraut.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit-fast-import(1): reorganise options
John Keeping [Wed, 9 Jan 2013 19:45:29 +0000 (19:45 +0000)]
git-fast-import(1): reorganise options

The options in git-fast-import(1) are not currently arranged in a
logical order, which has caused the '--done' options to be documented
twice (commit 3266de10).

Rearrange them into logical groups under subheadings.

Suggested-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit-fast-import(1): combine documentation of --[no-]relative-marks
John Keeping [Wed, 9 Jan 2013 19:44:38 +0000 (19:44 +0000)]
git-fast-import(1): combine documentation of --[no-]relative-marks

The descriptions of '--relative-marks' and '--no-relative-marks' make
more sense when read together instead of as two independent options.
Combine them into a single description block.

Signed-off-by: John Keeping <john@keeping.me.uk>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit-shortlog(1): document behaviour of zero-width wrap
John Keeping [Wed, 9 Jan 2013 20:16:45 +0000 (20:16 +0000)]
git-shortlog(1): document behaviour of zero-width wrap

Commit 00d3947 (Teach --wrap to only indent without wrapping) added
special behaviour for a width of zero in the '-w' argument to
'git-shortlog' but this was not documented.  Fix this.

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoUpdate draft release notes to 1.8.2
Junio C Hamano [Wed, 9 Jan 2013 18:19:49 +0000 (10:19 -0800)]
Update draft release notes to 1.8.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'master' of git://github.com/git-l10n/git-po
Junio C Hamano [Wed, 9 Jan 2013 16:30:45 +0000 (08:30 -0800)]
Merge branch 'master' of git://github.com/git-l10n/git-po

Update German translation.

* 'master' of git://github.com/git-l10n/git-po:
  l10n: de.po: address the user formally

11 years agoMerge branch 'nd/maint-branch-desc-doc'
Junio C Hamano [Wed, 9 Jan 2013 16:27:09 +0000 (08:27 -0800)]
Merge branch 'nd/maint-branch-desc-doc'

Teach various forms of "format-patch" command line to identify what
branch the patches are taken from, so that the branch description
is picked up in more cases.

* nd/maint-branch-desc-doc:
  format-patch: pick up branch description when no ref is specified
  format-patch: pick up correct branch name from symbolic ref
  t4014: a few more tests on cover letter using branch description
  branch: delete branch description if it's empty
  config.txt: a few lines about branch.<name>.description

11 years agoMerge branch 'jk/enable-test-lint-by-default'
Junio C Hamano [Wed, 9 Jan 2013 16:26:46 +0000 (08:26 -0800)]
Merge branch 'jk/enable-test-lint-by-default'

We have two simple and quick tests to catch common mistakes when
writing test scripts, but we did not run them by default when
running tests.

* jk/enable-test-lint-by-default:
  tests: turn on test-lint by default

11 years agoMerge branch 'ap/merge-stop-at-prepare-commit-msg-failure'
Junio C Hamano [Wed, 9 Jan 2013 16:26:33 +0000 (08:26 -0800)]
Merge branch 'ap/merge-stop-at-prepare-commit-msg-failure'

"git merge" started calling prepare-commit-msg hook like "git
commit" does some time ago, but forgot to pay attention to the exit
status of the hook.  t7505 may want a general clean-up but that is
a different topic.

* ap/merge-stop-at-prepare-commit-msg-failure:
  merge: Honor prepare-commit-msg return code

11 years agoMerge branch 'fc/remote-bzr'
Junio C Hamano [Wed, 9 Jan 2013 16:26:26 +0000 (08:26 -0800)]
Merge branch 'fc/remote-bzr'

New remote helper for bzr, with minimum fix squashed in.

* fc/remote-bzr:
  remote-bzr: detect local repositories
  remote-bzr: add support for older versions of bzr
  remote-bzr: add support to push special modes
  remote-bzr: add support for fecthing special modes
  remote-bzr: add simple tests
  remote-bzr: update working tree upon pushing
  remote-bzr: add support for remote repositories
  remote-bzr: add support for pushing
  Add new remote-bzr transport helper

11 years agoMerge branch 'jc/submittingpatches'
Junio C Hamano [Wed, 9 Jan 2013 16:26:20 +0000 (08:26 -0800)]
Merge branch 'jc/submittingpatches'

Streamline the document and update with a few e-mail addresses the
patches should be sent to.

* jc/submittingpatches:
  SubmittingPatches: give list and maintainer addresses
  SubmittingPatches: remove overlong checklist
  SubmittingPatches: mention subsystems with dedicated repositories
  SubmittingPatches: who am I and who cares?

11 years agoMerge branch 'os/gitweb-highlight-uncaptured'
Junio C Hamano [Wed, 9 Jan 2013 16:26:08 +0000 (08:26 -0800)]
Merge branch 'os/gitweb-highlight-uncaptured'

The code to sanitize control characters before passing it to
"highlight" filter lost known-to-be-safe control characters by
mistake.

* os/gitweb-highlight-uncaptured:
  gitweb: fix error in sanitize when highlight is enabled

11 years agoMerge branch 'jn/less-reconfigure'
Junio C Hamano [Wed, 9 Jan 2013 16:25:59 +0000 (08:25 -0800)]
Merge branch 'jn/less-reconfigure'

When autoconf is used, any build on a different commit always ran
"config.status --recheck" even when unnecessary.

* jn/less-reconfigure:
  build: do not automatically reconfigure unless configure.ac changed

11 years agoMerge branch 'er/python-version-requirements'
Junio C Hamano [Wed, 9 Jan 2013 16:25:47 +0000 (08:25 -0800)]
Merge branch 'er/python-version-requirements'

Some python scripts we ship cannot be run with older versions of the
interpreter.

* er/python-version-requirements:
  Add checks to Python scripts for version dependencies.

11 years agoMerge branch 'er/stop-recommending-parsecvs'
Junio C Hamano [Wed, 9 Jan 2013 16:25:36 +0000 (08:25 -0800)]
Merge branch 'er/stop-recommending-parsecvs'

Stop recommending a defunct third-party software.

* er/stop-recommending-parsecvs:
  Remove the suggestion to use parsecvs, which is currently broken.

11 years agoMerge branch 'maint'
Junio C Hamano [Tue, 8 Jan 2013 21:23:46 +0000 (13:23 -0800)]
Merge branch 'maint'

* maint:
  t1402: work around shell quoting issue on NetBSD
  remote-hg: Fix biridectionality -> bidirectionality typos

11 years agoMerge branch 'kb/maint-bundle-doc'
Junio C Hamano [Tue, 8 Jan 2013 21:23:26 +0000 (13:23 -0800)]
Merge branch 'kb/maint-bundle-doc'

* kb/maint-bundle-doc:
  Documentation: full-ness of a bundle is significant for cloning
  Documentation: correct example restore from bundle

11 years agoMerge branch 'as/test-name-alias-uniquely'
Junio C Hamano [Tue, 8 Jan 2013 21:23:21 +0000 (13:23 -0800)]
Merge branch 'as/test-name-alias-uniquely'

A few short-and-bland aliases used in the tests were interfering
with git-custom command in user's $PATH.

* as/test-name-alias-uniquely:
  Use longer alias names in subdirectory tests

11 years agoMerge branch 'ta/remove-stale-translated-tut'
Junio C Hamano [Tue, 8 Jan 2013 21:23:10 +0000 (13:23 -0800)]
Merge branch 'ta/remove-stale-translated-tut'

Remove a translation of a document that was left stale.

* ta/remove-stale-translated-tut:
  Remove Documentation/pt_BR/gittutorial.txt

11 years agoMerge branch 'tb/test-t9810-no-sed-i'
Junio C Hamano [Tue, 8 Jan 2013 21:23:05 +0000 (13:23 -0800)]
Merge branch 'tb/test-t9810-no-sed-i'

* tb/test-t9810-no-sed-i:
  t9810: Do not use sed -i

11 years agoMerge branch 'tb/test-t9020-no-which'
Junio C Hamano [Tue, 8 Jan 2013 21:23:00 +0000 (13:23 -0800)]
Merge branch 'tb/test-t9020-no-which'

* tb/test-t9020-no-which:
  t9020: which is not portable

11 years agoMerge branch 'jk/maint-fast-import-doc-dedup-done'
Junio C Hamano [Tue, 8 Jan 2013 21:22:52 +0000 (13:22 -0800)]
Merge branch 'jk/maint-fast-import-doc-dedup-done'

The "logical order" reorganization can come after that is done and
can cook longer in 'next'.

* jk/maint-fast-import-doc-dedup-done:
  git-fast-import(1): remove duplicate '--done' option

11 years agoMerge branch 'jk/pathspec-literal'
Junio C Hamano [Tue, 8 Jan 2013 21:22:32 +0000 (13:22 -0800)]
Merge branch 'jk/pathspec-literal'

Finishing touches to fix a test breakage on Windows

* jk/pathspec-literal:
  t6130-pathspec-noglob: Windows does not allow a file named "f*"

11 years agoMerge branch 'jk/maint-fast-import-doc-dedup-done'
Junio C Hamano [Tue, 8 Jan 2013 21:21:07 +0000 (13:21 -0800)]
Merge branch 'jk/maint-fast-import-doc-dedup-done'

* jk/maint-fast-import-doc-dedup-done:
  git-fast-import(1): remove duplicate '--done' option

11 years agogit-fast-import(1): remove duplicate '--done' option
John Keeping [Mon, 7 Jan 2013 11:57:09 +0000 (11:57 +0000)]
git-fast-import(1): remove duplicate '--done' option

The '--done' option to git-fast-import is documented twice in its manual
page.  Combine the best bits of each description, keeping the location
of the instance that was added first.

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot1402: work around shell quoting issue on NetBSD
René Scharfe [Tue, 8 Jan 2013 20:23:01 +0000 (21:23 +0100)]
t1402: work around shell quoting issue on NetBSD

The test fails for me on NetBSD 6.0.1 and reports:

ok 1 - ref name '' is invalid
ok 2 - ref name '/' is invalid
ok 3 - ref name '/' is invalid with options --allow-onelevel
ok 4 - ref name '/' is invalid with options --normalize
error: bug in the test script: not 2 or 3 parameters to test-expect-success

The alleged bug is in this line:

invalid_ref NOT_MINGW '/' '--allow-onelevel --normalize'

invalid_ref() constructs a test case description using its last argument,
but the shell seems to split it up into two pieces if it contains a
space.  Minimal test case:

# on NetBSD with /bin/sh
$ a() { echo $#-$1-$2; }
$ t="x"; a "${t:+$t}"
1-x-
$ t="x y"; a "${t:+$t}"
2-x-y
$ t="x y"; a "${t:+x y}"
1-x y-

# and with bash
$ t="x y"; a "${t:+$t}"
1-x y-
$ t="x y"; a "${t:+x y}"
1-x y-

This may be a bug in the shell, but here's a simple workaround: Construct
the description string first and store it in a variable, and then use
that to call test_expect_success().

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'ms/subtree-fixlets' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:17:10 +0000 (11:17 -0800)]
Merge branch 'ms/subtree-fixlets' into maint

* ms/subtree-fixlets:
  git-subtree: fix typo in manpage
  git-subtree: ignore git-subtree executable

11 years agoMerge branch 'ss/nedmalloc-compilation' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:17:07 +0000 (11:17 -0800)]
Merge branch 'ss/nedmalloc-compilation' into maint

* ss/nedmalloc-compilation:
  nedmalloc: Fix a compile warning (exposed as error) with GCC 4.7.2

11 years agoMerge branch 'jc/maint-fnmatch-old-style-definition' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:17:05 +0000 (11:17 -0800)]
Merge branch 'jc/maint-fnmatch-old-style-definition' into maint

* jc/maint-fnmatch-old-style-definition:
  compat/fnmatch: update old-style definition to ANSI

11 years agoMerge branch 'jc/test-portability' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:17:03 +0000 (11:17 -0800)]
Merge branch 'jc/test-portability' into maint

* jc/test-portability:
  t9020: use configured Python to run the test helper
  t3600: Avoid "cp -a", which is a GNUism

11 years agoMerge branch 'jc/maint-fbsd-sh-ifs-workaround' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:17:01 +0000 (11:17 -0800)]
Merge branch 'jc/maint-fbsd-sh-ifs-workaround' into maint

* jc/maint-fbsd-sh-ifs-workaround:
  sh-setup: work around "unset IFS" bug in some shells

11 years agoMerge branch 'jc/mkstemp-more-careful-error-reporting' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:16:58 +0000 (11:16 -0800)]
Merge branch 'jc/mkstemp-more-careful-error-reporting' into maint

* jc/mkstemp-more-careful-error-reporting:
  xmkstemp(): avoid showing truncated template more carefully

11 years agoMerge branch 'jc/test-cvs-no-init-in-existing-dir' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:16:56 +0000 (11:16 -0800)]
Merge branch 'jc/test-cvs-no-init-in-existing-dir' into maint

* jc/test-cvs-no-init-in-existing-dir:
  t9200: let "cvs init" create the test repository

11 years agoMerge branch 'jc/maint-test-portability' into maint
Junio C Hamano [Tue, 8 Jan 2013 19:16:52 +0000 (11:16 -0800)]
Merge branch 'jc/maint-test-portability' into maint

* jc/maint-test-portability:
  t4014: fix arguments to grep
  t9502: do not assume GNU tar
  t0200: "locale" may not exist

11 years agoremote-hg: Fix biridectionality -> bidirectionality typos
W. Trevor King [Tue, 8 Jan 2013 15:47:37 +0000 (10:47 -0500)]
remote-hg: Fix biridectionality -> bidirectionality typos

Signed-off-by: W. Trevor King <wking@tremily.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoupload-pack: only accept commits from "shallow" line
Nguyễn Thái Ngọc Duy [Tue, 8 Jan 2013 11:32:36 +0000 (18:32 +0700)]
upload-pack: only accept commits from "shallow" line

We only allow cuts at commits, not arbitrary objects. upload-pack will
fail eventually in register_shallow if a non-commit is given with a
generic error "Object %s is a %s, not a commit". Check it early and
give a more accurate error.

This should never show up in an ordinary session. It's for buggy
clients, or when the user manually edits .git/shallow.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoUse split_ident_line to parse author and committer
Antoine Pelisse [Sat, 5 Jan 2013 21:26:38 +0000 (22:26 +0100)]
Use split_ident_line to parse author and committer

Currently blame.c::get_acline(), pretty.c::pp_user_info() and
shortlog.c::insert_one_record() are parsing author name, email, time
and tz themselves.

Use ident.c::split_ident_line() for better code reuse.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agostring-list: allow case-insensitive string list
Junio C Hamano [Mon, 7 Jan 2013 20:24:55 +0000 (12:24 -0800)]
string-list: allow case-insensitive string list

Some string list needs to be searched case insensitively, and for
that to work correctly, the string needs to be sorted case
insensitively from the beginning.

Allow a custom comparison function to be defined on a string list
instance and use it throughout in place of strcmp().

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoPrevent space after directories in tcsh completion
Marc Khouzam [Mon, 7 Jan 2013 19:07:10 +0000 (19:07 +0000)]
Prevent space after directories in tcsh completion

If git-completion.bash returns a single directory as a completion,
tcsh will automatically add a space after it, which is not what the
user wants.

This commit prevents tcsh from doing this.

Also, a check is added to make sure the tcsh version used is recent
enough to allow completion to work as expected.

Signed-off-by: Marc Khouzam <marc.khouzam@ericsson.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agostatus: always report ignored tracked directories
Antoine Pelisse [Sun, 6 Jan 2013 22:09:39 +0000 (23:09 +0100)]
status: always report ignored tracked directories

When enumerating paths that are ignored, paths the index knows
about are not included in the result.  The "index knows about"
check is done by consulting the name hash, not the actual
contents of the index:

 - When core.ignorecase is false, directory names are not in the
   name hash, and ignored ones are shown as ignored (directories
   can never be tracked anyway).

 - When core.ignorecase is true, however, the name hash keeps
   track of the names of directories, in order to detect
   additions of the paths under different cases.  This causes
   ignored directories to be mistakenly excluded when
   enumerating ignored paths.

Stop excluding directories that are in the name hash when
looking for ignored files in dir_add_name(); the names that are
actually in the index are excluded much earlier in the callchain
in treat_file(), so this fix will not make them mistakenly
identified as ignored.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agol10n: de.po: address the user formally
Ralf Thielow [Wed, 26 Dec 2012 15:46:52 +0000 (16:46 +0100)]
l10n: de.po: address the user formally

In the current German translation, the user was
addressed informally ("Du", "Dein") which is unusual
in German software. This commit changes the addressing
to be formal ("Sie", "Ihr").

Suggested-by: Christian Stimming <stimming@tuhh.de>
Suggested-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
11 years agot5003: check if unzip supports symlinks
René Scharfe [Sun, 6 Jan 2013 17:59:39 +0000 (18:59 +0100)]
t5003: check if unzip supports symlinks

Only add a symlink to the repository if both the filesystem and
unzip support symlinks.  To check the latter, add a ZIP file
containing a symlink, created like this with InfoZIP zip 3.0:

$ echo sample text >textfile
$ ln -s textfile symlink
$ zip -y infozip-symlinks.zip textfile symlink

If we can extract it successfully, we add a symlink to the test
repository for git archive --format=zip, or otherwise skip that
step.  Users can see the skipped test and perhaps run it again
with a different unzip version.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot5000, t5003: move ZIP tests into their own script
René Scharfe [Sun, 6 Jan 2013 17:51:34 +0000 (18:51 +0100)]
t5000, t5003: move ZIP tests into their own script

This makes ZIP specific tweaks easier.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot0024, t5000: use test_lazy_prereq for UNZIP
René Scharfe [Sun, 6 Jan 2013 17:49:00 +0000 (18:49 +0100)]
t0024, t5000: use test_lazy_prereq for UNZIP

This change makes the code smaller and we can put it at the top of
the script, its rightful place as setup code.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agogit-send-email: treat field names as case-insensitively
Nickolai Zeldovich [Mon, 7 Jan 2013 01:34:58 +0000 (20:34 -0500)]
git-send-email: treat field names as case-insensitively

Field names like To:, Cc:, etc. are case-insensitive; use a
case-insensitive regexp to match them as such.

Previously, git-send-email would fail to pick-up the addresses when
in-body "fake" headers with different cases (e.g. lowercase "cc:")
are manually inserted to the messages it was asked to send, even
though the text will still show them.

Signed-off-by: Nickolai Zeldovich <nickolai@csail.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot0024, t5000: clear variable UNZIP, use GIT_UNZIP instead
René Scharfe [Sun, 6 Jan 2013 17:47:57 +0000 (18:47 +0100)]
t0024, t5000: clear variable UNZIP, use GIT_UNZIP instead

InfoZIP's unzip takes default parameters from the environment variable
UNZIP.  Unset it in the test library and use GIT_UNZIP for specifying
alternate versions of the unzip command instead.

t0024 wasn't even using variable for the actual extraction.  t5000
was, but when setting it to InfoZIP's unzip it would try to extract
from itself (because it treats the contents of $UNZIP as parameters),
which failed of course.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'mz/oneway-merge-wo-u-no-lstat'
Junio C Hamano [Mon, 7 Jan 2013 06:11:39 +0000 (22:11 -0800)]
Merge branch 'mz/oneway-merge-wo-u-no-lstat'

Optimize "read-tree -m <tree-ish>" without "-u".

* mz/oneway-merge-wo-u-no-lstat:
  oneway_merge(): only lstat() when told to update worktree

11 years agoMerge branch 'cc/no-gitk-build-dependency'
Junio C Hamano [Mon, 7 Jan 2013 06:11:30 +0000 (22:11 -0800)]
Merge branch 'cc/no-gitk-build-dependency'

Remove leftover bits from an earlier change to move gitk in its own
subdirectory.  Reimplementing the dependency tracking rules needs
to be done in gitk history separately.

* cc/no-gitk-build-dependency:
  Makefile: replace "echo 1>..." with "echo >..."
  Makefile: detect when PYTHON_PATH changes
  Makefile: remove tracking of TCLTK_PATH

11 years agoMerge branch 'jn/warn-on-inaccessible-loosen'
Junio C Hamano [Mon, 7 Jan 2013 06:11:16 +0000 (22:11 -0800)]
Merge branch 'jn/warn-on-inaccessible-loosen'

Deal with a situation where .config/git is a file and we notice
.config/git/config is not readable due to ENOTDIR, not ENOENT.

* jn/warn-on-inaccessible-loosen:
  config: exit on error accessing any config file
  doc: advertise GIT_CONFIG_NOSYSTEM
  config: treat user and xdg config permission problems as errors
  config, gitignore: failure to access with ENOTDIR is ok

11 years agoMerge branch 'jc/apply-trailing-blank-removal'
Junio C Hamano [Mon, 7 Jan 2013 06:10:23 +0000 (22:10 -0800)]
Merge branch 'jc/apply-trailing-blank-removal'

Fix to update_pre_post_images() that did not take into account the
possibility that whitespace fix could shrink the preimage and
change the number of lines in it.

* jc/apply-trailing-blank-removal:
  apply.c:update_pre_post_images(): the preimage can be truncated

11 years agoadd git-check-ignore sub-command
Adam Spiers [Sun, 6 Jan 2013 16:58:13 +0000 (16:58 +0000)]
add git-check-ignore sub-command

This works in a similar manner to git-check-attr.

Thanks to Jeff King and Junio C Hamano for the idea:
http://thread.gmane.org/gmane.comp.version-control.git/108671/focus=108815

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agosetup.c: document get_pathspec()
Adam Spiers [Sun, 6 Jan 2013 16:58:12 +0000 (16:58 +0000)]
setup.c: document get_pathspec()

Since we have just created a new pathspec-handling library, now is a
good time to add some comments explaining get_pathspec().

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoadd.c: extract new die_if_path_beyond_symlink() for reuse
Adam Spiers [Sun, 6 Jan 2013 16:58:11 +0000 (16:58 +0000)]
add.c: extract new die_if_path_beyond_symlink() for reuse

This will be reused by a new git check-ignore command.

Also document validate_pathspec().

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoadd.c: extract check_path_for_gitlink() from treat_gitlinks() for reuse
Adam Spiers [Sun, 6 Jan 2013 16:58:10 +0000 (16:58 +0000)]
add.c: extract check_path_for_gitlink() from treat_gitlinks() for reuse

Extract the body of the for loop in treat_gitlinks() into a separate
check_path_for_gitlink() function so that it can be reused elsewhere.
This paves the way for a new check-ignore sub-command.

Also document treat_gitlinks().

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agopathspec.c: rename newly public functions for clarity
Adam Spiers [Sun, 6 Jan 2013 16:58:09 +0000 (16:58 +0000)]
pathspec.c: rename newly public functions for clarity

Perform the following function renames to make it explicit that these
pathspec handling functions are for matching against the index, rather
than against a tree or the working directory.

- fill_pathspec_matches() -> add_pathspec_matches_against_index()
- find_used_pathspec() -> find_pathspecs_matching_against_index()

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoadd.c: move pathspec matchers into new pathspec.c for reuse
Adam Spiers [Sun, 6 Jan 2013 16:58:08 +0000 (16:58 +0000)]
add.c: move pathspec matchers into new pathspec.c for reuse

Extract the following functions from builtin/add.c to pathspec.c, in
preparation for reuse by a new git check-ignore command:

  - fill_pathspec_matches()
  - find_used_pathspec()

The functions being extracted are not changed in any way, except
removal of the 'static' qualifier.

Also add comments documenting these newly public functions,
including clarifications that they operate on the index.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoadd.c: remove unused argument from validate_pathspec()
Adam Spiers [Sun, 6 Jan 2013 16:58:07 +0000 (16:58 +0000)]
add.c: remove unused argument from validate_pathspec()

The 'argc' argument passed to validate_pathspec() was never used.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodir.c: improve docs for match_pathspec() and match_pathspec_depth()
Adam Spiers [Sun, 6 Jan 2013 16:58:06 +0000 (16:58 +0000)]
dir.c: improve docs for match_pathspec() and match_pathspec_depth()

Fix a grammatical issue in the description of these functions, and
make it more obvious how and why seen[] can be reused across multiple
invocations.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodir.c: provide clear_directory() for reclaiming dir_struct memory
Adam Spiers [Sun, 6 Jan 2013 16:58:05 +0000 (16:58 +0000)]
dir.c: provide clear_directory() for reclaiming dir_struct memory

By the end of a directory traversal, a dir_struct instance will
typically contains pointers to various data structures on the heap.
clear_directory() provides a convenient way to reclaim that memory.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodir.c: keep track of where patterns came from
Adam Spiers [Sun, 6 Jan 2013 16:58:04 +0000 (16:58 +0000)]
dir.c: keep track of where patterns came from

For exclude patterns read in from files, the filename is stored in the
exclude list, and the originating line number is stored in the
individual exclude (counting starting at 1).

For exclude patterns provided on the command line, a string describing
the source of the patterns is stored in the exclude list, and the
sequence number assigned to each exclude pattern is negative, with
counting starting at -1.  So for example the 2nd pattern provided via
--exclude would be numbered -2.  This allows any future consumers of
that data to easily distinguish between exclude patterns from files
vs. from the CLI.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodir.c: use a single struct exclude_list per source of excludes
Adam Spiers [Sun, 6 Jan 2013 16:58:03 +0000 (16:58 +0000)]
dir.c: use a single struct exclude_list per source of excludes

Previously each exclude_list could potentially contain patterns
from multiple sources.  For example dir->exclude_list[EXC_FILE]
would typically contain patterns from .git/info/exclude and
core.excludesfile, and dir->exclude_list[EXC_DIRS] could contain
patterns from multiple per-directory .gitignore files during
directory traversal (i.e. when dir->exclude_stack was more than
one item deep).

We split these composite exclude_lists up into three groups of
exclude_lists (EXC_CMDL / EXC_DIRS / EXC_FILE as before), so that each
exclude_list now contains patterns from a single source.  This will
allow us to cleanly track the origin of each pattern simply by adding
a src field to struct exclude_list, rather than to struct exclude,
which would make memory management of the source string tricky in the
EXC_DIRS case where its contents are dynamically generated.

Similarly, by moving the filebuf member from struct exclude_stack to
struct exclude_list, it allows us to track and subsequently free
memory buffers allocated during the parsing of all exclude files,
rather than only tracking buffers allocated for files in the EXC_DIRS
group.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMakefile: add comment on CYGWIN_V15_WIN32API
Mark Levedahl [Sun, 6 Jan 2013 19:56:33 +0000 (11:56 -0800)]
Makefile: add comment on CYGWIN_V15_WIN32API

There is no documented, reliable, and future-proof method to
determine the installed w32api version on Cygwin. There are many
things that can be done that will work frequently, except when they
won't.

The only sane thing is to follow the guidance of the Cygwin
developers: the only supported configuration is that which the
current setup.exe produces, and in the case of problems, if the
installation is not up to date then updating is the first required
action.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoapi-allocation-growing.txt: encourage better variable naming
Adam Spiers [Sun, 6 Jan 2013 15:35:05 +0000 (15:35 +0000)]
api-allocation-growing.txt: encourage better variable naming

The documentation for the ALLOC_GROW API implicitly encouraged
developers to use "ary" as the variable name for the array which is
dynamically grown.  However "ary" is an unusual abbreviation hardly
used anywhere else in the source tree, and it is also better to name
variables based on their contents not on their type.

Signed-off-by: Adam Spiers <git@adamspiers.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoarchive-zip: write uncompressed size into header even with streaming
René Scharfe [Sun, 6 Jan 2013 15:20:57 +0000 (16:20 +0100)]
archive-zip: write uncompressed size into header even with streaming

We record the uncompressed and compressed sizes and the CRC of streamed
files as zero in the local header of the file.  The actual values are
recorded in an extra data descriptor after the file content, and in the
usual ZIP directory entry at the end of the archive.

While we know the compressed size and the CRC only after we processed
the contents, we actually know the uncompressed size right from the
start.  And for files that we store uncompressed we also already know
their final size.

Do it like InfoZIP's zip and recored the known values, even though they
can be reconstructed using the ZIP directory and the data descriptors
alone.  InfoZIP's unzip worked fine before, but NetBSD's version
actually depends on these fields.

The uncompressed size is already set by sha1_object_info().  We just
need to initialize the compressed size to zero or the uncompressed size
depending on the compression method (0 means storing).  The CRC was
propertly initialized already.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agot6130-pathspec-noglob: Windows does not allow a file named "f*"
Johannes Sixt [Sun, 6 Jan 2013 14:07:43 +0000 (15:07 +0100)]
t6130-pathspec-noglob: Windows does not allow a file named "f*"

Windows disallows file names that contain a star. Arrange the test setup
to insert the file name "f*" in the repository without the corresponding
file in the worktree.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agodocs: manpage XML depends on asciidoc.conf
Jonathan Nieder [Sun, 6 Jan 2013 12:01:53 +0000 (04:01 -0800)]
docs: manpage XML depends on asciidoc.conf

When building manual pages, the source text is transformed to XML with
AsciiDoc before the man pages are generated from the XML with xmlto.

Fix the dependencies in the Makefile so that the XML files are rebuilt
when asciidoc.conf changes and not just the manual pages from
unchanged XML, and move the dependencies from a recipeless rule to the
rules with commands that use asciidoc.conf to make the dependencies
easier to understand and maintain.

Reported-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Tested-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agorun-command: encode signal death as a positive integer
Jeff King [Sat, 5 Jan 2013 14:49:49 +0000 (09:49 -0500)]
run-command: encode signal death as a positive integer

When a sub-command dies due to a signal, we encode the
signal number into the numeric exit status as "signal -
128". This is easy to identify (versus a regular positive
error code), and when cast to an unsigned integer (e.g., by
feeding it to exit), matches what a POSIX shell would return
when reporting a signal death in $? or through its own exit
code.

So we have a negative value inside the code, but once it
passes across an exit() barrier, it looks positive (and any
code we receive from a sub-shell will have the positive
form). E.g., death by SIGPIPE (signal 13) will look like
-115 to us in inside git, but will end up as 141 when we
call exit() with it. And a program killed by SIGPIPE but run
via the shell will come to us with an exit code of 141.

Unfortunately, this means that when the "use_shell" option
is set, we need to be on the lookout for _both_ forms. We
might or might not have actually invoked the shell (because
we optimize out some useless shell calls). If we didn't invoke
the shell, we will will see the sub-process's signal death
directly, and run-command converts it into a negative value.
But if we did invoke the shell, we will see the shell's
128+signal exit status. To be thorough, we would need to
check both, or cast the value to an unsigned char (after
checking that it is not -1, which is a magic error value).

Fortunately, most callsites do not care at all whether the
exit was from a code or from a signal; they merely check for
a non-zero status, and sometimes propagate the error via
exit(). But for the callers that do care, we can make life
slightly easier by just using the consistent positive form.

This actually fixes two minor bugs:

  1. In launch_editor, we check whether the editor died from
     SIGINT or SIGQUIT. But we checked only the negative
     form, meaning that we would fail to notice a signal
     death exit code which was propagated through the shell.

  2. In handle_alias, we assume that a negative return value
     from run_command means that errno tells us something
     interesting (like a fork failure, or ENOENT).
     Otherwise, we simply propagate the exit code. Negative
     signal death codes confuse us, and we print a useless
     "unable to run alias 'foo': Success" message. By
     encoding signal deaths using the positive form, the
     existing code just propagates it as it would a normal
     non-zero exit code.

The downside is that callers of run_command can no longer
differentiate between a signal received directly by the
sub-process, and one propagated. However, no caller
currently cares, and since we already optimize out some
calls to the shell under the hood, that distinction is not
something that should be relied upon by callers.

Fix the same logic in t/test-terminal.perl for consistency [jc:
raised by Jonathan in the discussion].

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoUpdate draft release notes to 1.8.2
Junio C Hamano [Sun, 6 Jan 2013 08:17:24 +0000 (00:17 -0800)]
Update draft release notes to 1.8.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'wk/submodule-update-remote'
Junio C Hamano [Sun, 6 Jan 2013 07:42:11 +0000 (23:42 -0800)]
Merge branch 'wk/submodule-update-remote'

The beginning of 'integrate with the tip of the remote branch, not
the commit recorded in the superproject gitlink' support.

* wk/submodule-update-remote:
  submodule add: If --branch is given, record it in .gitmodules
  submodule update: add --remote for submodule's upstream changes
  submodule: add get_submodule_config helper funtion

11 years agoMerge branch 'jk/pathspec-literal'
Junio C Hamano [Sun, 6 Jan 2013 07:42:07 +0000 (23:42 -0800)]
Merge branch 'jk/pathspec-literal'

Allow scripts to feed literal paths to commands that take
pathspecs, by disabling wildcard globbing.

* jk/pathspec-literal:
  add global --literal-pathspecs option

Conflicts:
dir.c

11 years agoMerge branch 'jk/error-const-return'
Junio C Hamano [Sun, 6 Jan 2013 07:42:00 +0000 (23:42 -0800)]
Merge branch 'jk/error-const-return'

Help compilers' flow analysis by making it more explicit that
error() always returns -1, to reduce false "variable used
uninitialized" warnings.  Looks somewhat ugly but not too much.

* jk/error-const-return:
  silence some -Wuninitialized false positives
  make error()'s constant return value more visible

11 years agoMerge branch 'jc/format-color-auto'
Junio C Hamano [Sun, 6 Jan 2013 07:41:57 +0000 (23:41 -0800)]
Merge branch 'jc/format-color-auto'

Introduce "log --format=%C(auto,blue)Foo%C(auto,reset)" that does
not color its output when writing to a non-terminal.

* jc/format-color-auto:
  log --format: teach %C(auto,black) to respect color config
  t6006: clean up whitespace

11 years agoMerge branch 'jk/complete-commit-c'
Junio C Hamano [Sun, 6 Jan 2013 07:41:53 +0000 (23:41 -0800)]
Merge branch 'jk/complete-commit-c'

Complete "git commmit -c foo<TAB>" into a refname that begins with
"foo".

* jk/complete-commit-c:
  completion: complete refs for "git commit -c"

11 years agoMerge branch 'ja/directory-attrs'
Junio C Hamano [Sun, 6 Jan 2013 07:41:46 +0000 (23:41 -0800)]
Merge branch 'ja/directory-attrs'

The attribute mechanism didn't allow limiting attributes to be
applied to only a single directory itself with "path/" like the
exclude mechanism does.

* ja/directory-attrs:
  Add directory pattern matching to attributes

11 years agoMerge branch 'jk/mailmap-from-blob'
Junio C Hamano [Sun, 6 Jan 2013 07:41:42 +0000 (23:41 -0800)]
Merge branch 'jk/mailmap-from-blob'

Allow us to read, and default to read, mailmap files from the tip
of the history in bare repositories.  This will help running tools
like shortlog in server settings.

* jk/mailmap-from-blob:
  mailmap: default mailmap.blob in bare repositories
  mailmap: fix some documentation loose-ends for mailmap.blob
  mailmap: clean up read_mailmap error handling
  mailmap: support reading mailmap from blobs
  mailmap: refactor mailmap parsing for non-file sources

11 years agoMerge branch 'jc/fetch-ignore-symref'
Junio C Hamano [Sun, 6 Jan 2013 07:41:37 +0000 (23:41 -0800)]
Merge branch 'jc/fetch-ignore-symref'

Avoid false error from an attempt to update local symbolic ref via
fetch.

* jc/fetch-ignore-symref:
  fetch: ignore wildcarded refspecs that update local symbolic refs

11 years agoMerge branch 'cr/push-force-tag-update'
Junio C Hamano [Sun, 6 Jan 2013 07:41:34 +0000 (23:41 -0800)]
Merge branch 'cr/push-force-tag-update'

Require "-f" for push to update a tag, even if it is a fast-forward.

* cr/push-force-tag-update:
  push: allow already-exists advice to be disabled
  push: rename config variable for more general use
  push: cleanup push rules comment
  push: clarify rejection of update to non-commit-ish
  push: require force for annotated tags
  push: require force for refs under refs/tags/
  push: flag updates that require force
  push: keep track of "update" state separately
  push: add advice for rejected tag reference
  push: return reject reasons as a bitset

11 years agoMerge branch 'fc/fast-export-fixes'
Junio C Hamano [Sun, 6 Jan 2013 07:41:09 +0000 (23:41 -0800)]
Merge branch 'fc/fast-export-fixes'

Various updates to fast-export used in the context of the remote
helper interface.

* fc/fast-export-fixes:
  fast-export: make sure updated refs get updated
  fast-export: don't handle uninteresting refs
  fast-export: fix comparison in tests
  fast-export: trivial cleanup
  remote-testgit: implement the "done" feature manually
  remote-testgit: report success after an import
  remote-testgit: exercise more features
  remote-testgit: cleanup tests
  remote-testgit: remove irrelevant test
  remote-testgit: remove non-local functionality
  Add new simplified git-remote-testgit
  Rename git-remote-testgit to git-remote-testpy
  remote-helpers: fix failure message
  remote-testgit: fix direction of marks
  fast-export: avoid importing blob marks

11 years agoMerge branch 'mh/unify-xml-in-imap-send-and-http-push'
Junio C Hamano [Sun, 6 Jan 2013 07:41:04 +0000 (23:41 -0800)]
Merge branch 'mh/unify-xml-in-imap-send-and-http-push'

Update imap-send to reuse xml quoting code from http-push codepath,
clean up some code, and fix a small bug.

* mh/unify-xml-in-imap-send-and-http-push:
  wrap_in_html(): process message in bulk rather than line-by-line
  wrap_in_html(): use strbuf_addstr_xml_quoted()
  imap-send: change msg_data from storing (ptr, len) to storing strbuf
  imap-send: correctly report errors reading from stdin
  imap-send: store all_msgs as a strbuf
  lf_to_crlf(): NUL-terminate msg_data::data
  xml_entities(): use function strbuf_addstr_xml_quoted()
  Add new function strbuf_add_xml_quoted()

11 years agoMerge branch 'nd/pathspec-wildcard'
Junio C Hamano [Sun, 6 Jan 2013 07:40:15 +0000 (23:40 -0800)]
Merge branch 'nd/pathspec-wildcard'

Optimize matching paths with common forms of pathspecs that contain
wildcard characters.

* nd/pathspec-wildcard:
  tree_entry_interesting: do basedir compare on wildcard patterns when possible
  pathspec: apply "*.c" optimization from exclude
  pathspec: do exact comparison on the leading non-wildcard part
  pathspec: save the non-wildcard length part

11 years agoMerge branch 'jk/fsck-dot-in-trees'
Junio C Hamano [Sun, 6 Jan 2013 07:40:04 +0000 (23:40 -0800)]
Merge branch 'jk/fsck-dot-in-trees'

* jk/fsck-dot-in-trees:
  fsck: warn about ".git" in trees
  fsck: warn about '.' and '..' in trees

11 years agoarchive-tar: split long paths more carefully
René Scharfe [Sat, 5 Jan 2013 22:49:54 +0000 (23:49 +0100)]
archive-tar: split long paths more carefully

The name field of a tar header has a size of 100 characters.  This limit
was extended long ago in a backward compatible way by providing the
additional prefix field, which can hold 155 additional characters.  The
actual path is constructed at extraction time by concatenating the prefix
field, a slash and the name field.

get_path_prefix() is used to determine which slash in the path is used as
the cutting point and thus which part of it is placed into the field
prefix and which into the field name.  It tries to cram as much into the
prefix field as possible.  (And only if we can't fit a path into the
provided 255 characters we use a pax extended header to store it.)

If a path is longer than 100 but shorter than 156 characters and ends
with a slash (i.e. is for a directory) then get_path_prefix() puts the
whole path in the prefix field and leaves the name field empty.  GNU tar
reconstructs the path without complaint, but the tar included with
NetBSD 6 does not: It reports the header to be invalid.

For compatibility with this version of tar, make sure to never leave the
name field empty.  In order to do that, trim the trailing slash from the
part considered as possible prefix, if it exists -- that way the last
path component (or more, but not less) will end up in the name field.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'pf/editor-ignore-sigint'
Junio C Hamano [Sun, 6 Jan 2013 06:48:09 +0000 (22:48 -0800)]
Merge branch 'pf/editor-ignore-sigint'

* pf/editor-ignore-sigint:
  fix compilation with NO_PTHREADS

11 years agofix compilation with NO_PTHREADS
Jeff King [Sat, 5 Jan 2013 14:52:29 +0000 (09:52 -0500)]
fix compilation with NO_PTHREADS

Commit 1327452 cleaned up an unused parameter from
wait_or_whine, but forgot to update a caller that is inside
"#ifdef NO_PTHREADS".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoclone: support atomic operation with --separate-git-dir
Jens Lehmann [Sat, 5 Jan 2013 20:17:04 +0000 (21:17 +0100)]
clone: support atomic operation with --separate-git-dir

Since b57fb80a7d (init, clone: support --separate-git-dir for .git file)
git clone supports the --separate-git-dir option to create the git dir
outside the work tree. But when that option is used, the git dir won't be
deleted in case the clone fails like it would be without this option. This
makes clone lose its atomicity as in case of a failure a partly set up git
dir is left behind. A real world example where this leads to problems is
when "git submodule update" fails to clone a submodule and later calls to
"git submodule update" stumble over the partially set up git dir and try
to revive the submodule from there, which then fails with a not very user
friendly error message.

Fix that by updating the junk_git_dir variable (used to remember if and
what git dir should be removed in case of failure) to the new value given
with the --seperate-git-dir option. Also add a test for this to t5600 (and
while at it fix the former last test to not cd into a directory to test
for its existence but use "test -d" instead).

Reported-by: Manlio Perillo <manlio.perillo@gmail.com>
Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agohowto/maintain: mark titles for asciidoc
Junio C Hamano [Fri, 4 Jan 2013 06:56:12 +0000 (22:56 -0800)]
howto/maintain: mark titles for asciidoc

11 years agoformat-patch: give --reroll-count a short synonym -v
Junio C Hamano [Wed, 2 Jan 2013 22:19:05 +0000 (14:19 -0800)]
format-patch: give --reroll-count a short synonym -v

Accept "-v" as a synonym to "--reroll-count", so that users can say
"git format-patch -v4 master", instead of having to fully spell it
out as "git format-patch --reroll-count=4 master".

As I do not think of a reason why users would want to tell the
command to be "verbose", I think this should be OK.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoDocumentation: update "howto maintain git"
Junio C Hamano [Tue, 27 Nov 2012 23:41:07 +0000 (15:41 -0800)]
Documentation: update "howto maintain git"

The flow described in the document is still correct, but over time I
have automated various parts of the workflow with tools and their
use was not explained at all.

Update it and outline the use of two key scripts from the 'todo'
branch, "Reintegrate" and "cook".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMakefile: hoist uname autodetection to config.mak.uname
Jeff King [Thu, 3 Jan 2013 21:05:41 +0000 (16:05 -0500)]
Makefile: hoist uname autodetection to config.mak.uname

Our Makefile first sets up some sane per-platform defaults
by looking at "uname", then modifies that according to the
results of autoconf (if any), then modifies that according
to the user's wishes in config.mak.

For sub-Makefiles like Documentation/Makefile, the latter
two are available, but the uname defaults are available only
to the main Makefile. This hasn't been a problem so far,
because the sub-Makefiles do not rely on any of those
automatic settings to do their work.

This patch puts the uname magic into its own file so it can
be reused in other Makefiles, opening up the possibility of
new knobs.

Note that we leave one reference to uname in the top-level
Makefile: if we are on Darwin, we must check the NO_FINK and
NO_DARWIN_PORTS settings. But because we are combining uname
settings with user-options, we must do so after all of the
config is loaded. This is acceptable, as the resulting
conditionals are about setting variables specific to the
top-level Makefile (and if that ever changes, we can hoist
them into a separate post-config include, too).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoUpdate draft release notes to 1.8.2
Junio C Hamano [Thu, 3 Jan 2013 18:33:22 +0000 (10:33 -0800)]
Update draft release notes to 1.8.2

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