gitweb.git
Merge branch 'jn/gitweb-install-doc'Junio C Hamano Tue, 23 Apr 2013 18:17:07 +0000 (11:17 -0700)

Merge branch 'jn/gitweb-install-doc'

Reword gitweb configuration instrutions.

* jn/gitweb-install-doc:
gitweb/INSTALL: GITWEB_CONFIG_SYSTEM is for backward compatibility
gitweb/INSTALL: Simplify description of GITWEB_CONFIG_SYSTEM

Merge branch 'fc/untracked-zsh-prompt'Junio C Hamano Tue, 23 Apr 2013 18:16:58 +0000 (11:16 -0700)

Merge branch 'fc/untracked-zsh-prompt'

* fc/untracked-zsh-prompt:
prompt: fix untracked files for zsh

Merge branch 'jk/receive-pack-deadlocks-with-early... Junio C Hamano Tue, 23 Apr 2013 18:16:50 +0000 (11:16 -0700)

Merge branch 'jk/receive-pack-deadlocks-with-early-failure'

When receive-pack detects error in the pack header it received in
order to decide which of unpack-objects or index-pack to run, it
returned without closing the error stream, which led to a hang
sideband thread.

* jk/receive-pack-deadlocks-with-early-failure:
receive-pack: close sideband fd on early pack errors

Sync with maintJunio C Hamano Mon, 22 Apr 2013 18:33:31 +0000 (11:33 -0700)

Sync with maint

Start preparing for 1.8.2.2Junio C Hamano Mon, 22 Apr 2013 18:32:58 +0000 (11:32 -0700)

Start preparing for 1.8.2.2

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

Merge branch 'ta/glossary' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:58 +0000 (11:26 -0700)

Merge branch 'ta/glossary' into maint

* ta/glossary:
glossary: improve definitions of refspec and pathspec
The name of the hash function is "SHA-1", not "SHA1"
glossary: improve description of SHA-1 related topics
glossary: remove outdated/misleading/irrelevant entries

Merge branch 'jk/doc-http-backend' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:58 +0000 (11:26 -0700)

Merge branch 'jk/doc-http-backend' into maint

Improve documentation to illustrate "push authenticated, fetch
anonymous" configuration for smart HTTP servers.

* jk/doc-http-backend:
doc/http-backend: match query-string in apache half-auth example
doc/http-backend: give some lighttpd config examples
doc/http-backend: clarify "half-auth" repo configuration

Merge branch 'jk/test-trash' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:58 +0000 (11:26 -0700)

Merge branch 'jk/test-trash' into maint

* jk/test-trash:
t/test-lib.sh: drop "$test" variable
t/test-lib.sh: fix TRASH_DIRECTORY handling

Merge branch 'jk/daemon-user-doc' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:58 +0000 (11:26 -0700)

Merge branch 'jk/daemon-user-doc' into maint

* jk/daemon-user-doc:
doc: clarify that "git daemon --user=<user>" option does not export HOME=~user

Merge branch 'jc/detached-head-doc' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:57 +0000 (11:26 -0700)

Merge branch 'jc/detached-head-doc' into maint

* jc/detached-head-doc:
glossary: extend "detached HEAD" description

Conflicts:
Documentation/glossary-content.txt

Merge branch 'jk/show-branch-strbuf' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:57 +0000 (11:26 -0700)

Merge branch 'jk/show-branch-strbuf' into maint

* jk/show-branch-strbuf:
show-branch: use strbuf instead of static buffer

Merge branch 'js/rerere-forget-protect-against-NUL... Junio C Hamano Mon, 22 Apr 2013 18:26:56 +0000 (11:26 -0700)

Merge branch 'js/rerere-forget-protect-against-NUL' into maint

* js/rerere-forget-protect-against-NUL:
rerere forget: do not segfault if not all stages are present
rerere forget: grok files containing NUL

Merge branch 'jc/apply-ws-fix-tab-in-indent' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:56 +0000 (11:26 -0700)

Merge branch 'jc/apply-ws-fix-tab-in-indent' into maint

* jc/apply-ws-fix-tab-in-indent:
test: resurrect q_to_tab
apply --whitespace=fix: avoid running over the postimage buffer

Merge branch 'ap/combine-diff-ignore-whitespace' into... Junio C Hamano Mon, 22 Apr 2013 18:26:56 +0000 (11:26 -0700)

Merge branch 'ap/combine-diff-ignore-whitespace' into maint

* ap/combine-diff-ignore-whitespace:
Allow combined diff to ignore white-spaces

Merge branch 'jk/suppress-clang-warning' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:55 +0000 (11:26 -0700)

Merge branch 'jk/suppress-clang-warning' into maint

* jk/suppress-clang-warning:
fix clang -Wtautological-compare with unsigned enum

Merge branch 'tr/perl-keep-stderr-open' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:55 +0000 (11:26 -0700)

Merge branch 'tr/perl-keep-stderr-open' into maint

* tr/perl-keep-stderr-open:
t9700: do not close STDERR
perl: redirect stderr to /dev/null instead of closing

Merge branch 'lf/bundle-with-tip-wo-message' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:55 +0000 (11:26 -0700)

Merge branch 'lf/bundle-with-tip-wo-message' into maint

* lf/bundle-with-tip-wo-message:
bundle: Accept prerequisites without commit messages

Merge branch 'jk/filter-branch-come-back-to-original... Junio C Hamano Mon, 22 Apr 2013 18:26:55 +0000 (11:26 -0700)

Merge branch 'jk/filter-branch-come-back-to-original' into maint

* jk/filter-branch-come-back-to-original:
filter-branch: return to original dir after filtering

Merge branch 'rr/prompt-revert-head' into maintJunio C Hamano Mon, 22 Apr 2013 18:26:54 +0000 (11:26 -0700)

Merge branch 'rr/prompt-revert-head' into maint

* rr/prompt-revert-head:
bash: teach __git_ps1 about REVERT_HEAD

Update draft release notes to 1.8.3Junio C Hamano Mon, 22 Apr 2013 18:18:43 +0000 (11:18 -0700)

Update draft release notes to 1.8.3

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

Merge branch 'as/clone-reference-with-gitfile'Junio C Hamano Mon, 22 Apr 2013 18:12:40 +0000 (11:12 -0700)

Merge branch 'as/clone-reference-with-gitfile'

"git clone" did not work if a repository pointed at by the
"--reference" option is a gitfile that points at another place.

* as/clone-reference-with-gitfile:
clone: Allow repo using gitfile as a reference
clone: Fix error message for reference repository

Merge branch 'jc/add-2.0-delete-default' (early part)Junio C Hamano Mon, 22 Apr 2013 18:11:45 +0000 (11:11 -0700)

Merge branch 'jc/add-2.0-delete-default' (early part)

Preparatory steps to make "git add <pathspec>" take notice of
removed paths that match <pathspec> by default in Git 2.0.

* 'jc/add-2.0-delete-default' (early part):
git add: rephrase the "removal will cease to be ignored" warning
git add: rework the logic to warn "git add <pathspec>..." default change
git add: start preparing for "git add <pathspec>..." to default to "-A"
builtin/add.c: simplify boolean variables

Merge branch 'nd/checkout-keep-sparse'Junio C Hamano Mon, 22 Apr 2013 18:11:40 +0000 (11:11 -0700)

Merge branch 'nd/checkout-keep-sparse'

Make the initial "sparse" selection of the paths more sticky across
"git checkout".

* nd/checkout-keep-sparse:
checkout: add --ignore-skip-worktree-bits in sparse checkout mode

Merge branch 'jk/chopped-ident'Junio C Hamano Mon, 22 Apr 2013 18:11:36 +0000 (11:11 -0700)

Merge branch 'jk/chopped-ident'

A commit object whose author or committer ident are malformed
crashed some code that trusted that a name, an email and an
timestamp can always be found in it.

* jk/chopped-ident:
blame: handle broken commit headers gracefully
pretty: handle broken commit headers gracefully
cat-file: print tags raw for "cat-file -p"

Merge branch 'th/bisect-final-log'Junio C Hamano Mon, 22 Apr 2013 18:11:08 +0000 (11:11 -0700)

Merge branch 'th/bisect-final-log'

Leave a commit to note what the final outcome was in the bisect log
file.

* th/bisect-final-log:
bisect: Store first bad commit as comment in log file

Merge branch 'rs/archive-zip-raw-compression'Junio C Hamano Mon, 22 Apr 2013 16:49:21 +0000 (09:49 -0700)

Merge branch 'rs/archive-zip-raw-compression'

* rs/archive-zip-raw-compression:
zlib: fix compilation failures with Sun C Compilaer

zlib: fix compilation failures with Sun C CompilaerStefano Lattarini Mon, 22 Apr 2013 16:18:40 +0000 (18:18 +0200)

zlib: fix compilation failures with Sun C Compilaer

Do this by removing a couple of useless return statements. Without this
change, compilation with Sun C Compiler 5.9 (SunOS_i386 Patch 124868-15
2010/08/11) fails with the following message:

"zlib.c", line 192: void function cannot return value
"zlib.c", line 201: void function cannot return value
cc: acomp failed for zlib.c

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

git add: rephrase the "removal will cease to be ignored... Junio C Hamano Mon, 22 Apr 2013 04:04:35 +0000 (21:04 -0700)

git add: rephrase the "removal will cease to be ignored" warning

Now the logic to decide when to warn has been tightened, we know the
user is in a situation where the current and future behaviours will
be different. Spell out what happens with these two versions and
how to explicitly ask for the behaviour, and suggest "git status" as
a way to inspect the current status.

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

Merge branch 'ta/glossary'Junio C Hamano Mon, 22 Apr 2013 01:40:15 +0000 (18:40 -0700)

Merge branch 'ta/glossary'

* ta/glossary:
glossary: improve definitions of refspec and pathspec
The name of the hash function is "SHA-1", not "SHA1"
glossary: improve description of SHA-1 related topics
glossary: remove outdated/misleading/irrelevant entries

Merge branch 'jk/doc-http-backend'Junio C Hamano Mon, 22 Apr 2013 01:40:09 +0000 (18:40 -0700)

Merge branch 'jk/doc-http-backend'

Improve documentation to illustrate "push authenticated, fetch
anonymous" configuration for smart HTTP servers.

* jk/doc-http-backend:
doc/http-backend: match query-string in apache half-auth example
doc/http-backend: give some lighttpd config examples
doc/http-backend: clarify "half-auth" repo configuration

Merge branch 'jx/i18n-branch-error-messages'Junio C Hamano Mon, 22 Apr 2013 01:40:02 +0000 (18:40 -0700)

Merge branch 'jx/i18n-branch-error-messages'

* jx/i18n-branch-error-messages:
i18n: branch: mark strings for translation

Merge branch 'fc/remote-hg'Junio C Hamano Mon, 22 Apr 2013 01:39:58 +0000 (18:39 -0700)

Merge branch 'fc/remote-hg'

Updates remote-hg helper (in contrib/).

* fc/remote-hg: (21 commits)
remote-hg: activate graphlog extension for hg_log()
remote-hg: fix bad file paths
remote-hg: document location of stored hg repository
remote-hg: fix bad state issue
remote-hg: add 'insecure' option
remote-hg: add simple mail test
remote-hg: add basic author tests
remote-hg: show more proper errors
remote-hg: force remote push
remote-hg: push to the appropriate branch
remote-hg: update tags globally
remote-hg: update remote bookmarks
remote-hg: refactor export
remote-hg: split bookmark handling
remote-hg: redirect buggy mercurial output
remote-hg: trivial test cleanups
remote-hg: make sure fake bookmarks are updated
remote-hg: fix for files with spaces
remote-hg: properly report errors on bookmark pushes
remote-hg: add missing config variable in doc
...

Merge branch 'lf/read-blob-data-from-index'Junio C Hamano Mon, 22 Apr 2013 01:39:45 +0000 (18:39 -0700)

Merge branch 'lf/read-blob-data-from-index'

Reduce duplicated code between convert.c and attr.c.

* lf/read-blob-data-from-index:
convert.c: remove duplicate code
read_blob_data_from_index(): optionally return the size of blob data
attr.c: extract read_index_data() as read_blob_data_from_index()

prompt: fix untracked files for zshFelipe Contreras Sun, 21 Apr 2013 22:00:16 +0000 (15:00 -0700)

prompt: fix untracked files for zsh

We signal presense of untracked files by adding a per-cent sign '%'
to the prompt. But because '%' is used as an escape character to
introduce prompt customization in zsh (just like bash prompt uses
'\' to escape '\u', '\h', etc.), we need to say '%%' to get a
literal per-cent.

Helped-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

receive-pack: close sideband fd on early pack errorsJeff King Fri, 19 Apr 2013 21:24:29 +0000 (17:24 -0400)

receive-pack: close sideband fd on early pack errors

Since commit a22e6f8 (receive-pack: send pack-processing
stderr over sideband, 2012-09-21), receive-pack will start
an async sideband thread to copy the stderr from our
index-pack or unpack-objects child to the client. We hand
the thread's input descriptor to unpack(), which puts it in
the "err" member of the "struct child_process".

After unpack() returns, we use finish_async() to reap the
sideband thread. The thread is only ready to die when it
gets EOF on its pipe, which is connected to the err
descriptor. So we expect all of the write ends of that pipe
to be closed as part of unpack().

Normally, this works fine. After start_command forks, it
closes the parent copy of the descriptor. Then once the
child exits (whether it was successful or not), that closes
the only remaining writer.

However, there is one code-path in unpack() that does not
handle this. Before we decide which of unpack-objects or
index-pack to use, we read the pack header ourselves to see
how many objects it contains. If there is an error here, we
exit without running either sub-command, the pipe descriptor
remains open, and we are in a deadlock, waiting for the
sideband thread to die (which is in turn waiting for us to
close the pipe).

We can fix this by making sure that unpack() always closes
the pipe before returning.

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

Update draft release notes to 1.8.3Junio C Hamano Fri, 19 Apr 2013 20:53:44 +0000 (13:53 -0700)

Update draft release notes to 1.8.3

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

Merge branch 'jk/a-thread-only-dies-once'Junio C Hamano Fri, 19 Apr 2013 20:45:04 +0000 (13:45 -0700)

Merge branch 'jk/a-thread-only-dies-once'

A regression fix for the logic to detect die() handler triggering
itself recursively.

* jk/a-thread-only-dies-once:
run-command: use thread-aware die_is_recursing routine
usage: allow pluggable die-recursion checks

Merge branch 'rt/commentchar-fmt-merge-msg'Junio C Hamano Fri, 19 Apr 2013 20:45:01 +0000 (13:45 -0700)

Merge branch 'rt/commentchar-fmt-merge-msg'

A test fix for recent update.

* rt/commentchar-fmt-merge-msg:
t6200: avoid path mangling issue on Windows

Merge branch 'mv/sequencer-pick-error-diag'Junio C Hamano Fri, 19 Apr 2013 20:40:22 +0000 (13:40 -0700)

Merge branch 'mv/sequencer-pick-error-diag'

"git cherry-pick $blob $tree" is diagnosed as a nonsense.

* mv/sequencer-pick-error-diag:
cherry-pick: make sure all input objects are commits

Merge branch 'tr/copy-revisions-from-stdin'Junio C Hamano Fri, 19 Apr 2013 20:40:13 +0000 (13:40 -0700)

Merge branch 'tr/copy-revisions-from-stdin'

A fix to a long-standing issue in the command line parser for
revisions, which was triggered by mv/sequence-pick-error-diag topic.

* tr/copy-revisions-from-stdin:
read_revisions_from_stdin: make copies for handle_revision_arg

Merge branch 'jn/add-2.0-u-A-sans-pathspec' (early... Junio C Hamano Fri, 19 Apr 2013 20:37:36 +0000 (13:37 -0700)

Merge branch 'jn/add-2.0-u-A-sans-pathspec' (early part)

In Git 2.0, "git add -u" and "git add -A" without any pathspec will
update the index for all paths, including those outside the current
directory, making it more consistent with "commit -a". To help the
migration pain, a warning is issued when the differences between the
current behaviour and the upcoming behaviour matters, i.e. when the
user has local changes outside the current directory.

* 'jn/add-2.0-u-A-sans-pathspec' (early part):
add -A: only show pathless 'add -A' warning when changes exist outside cwd
add -u: only show pathless 'add -u' warning when changes exist outside cwd
add: make warn_pathless_add() a no-op after first call
add: add a blank line at the end of pathless 'add [-u|-A]' warning
add: make pathless 'add [-u|-A]' warning a file-global function

Merge branch 'ap/strbuf-humanize'Junio C Hamano Fri, 19 Apr 2013 20:31:26 +0000 (13:31 -0700)

Merge branch 'ap/strbuf-humanize'

Teach "--human-readable" aka "-H" option to "git count-objects" to
show various large numbers in Ki/Mi/GiB scaled as necessary.

* ap/strbuf-humanize:
count-objects: add -H option to humanize sizes
strbuf: create strbuf_humanise_bytes() to show byte sizes

Merge branch 'fc/branch-upstream-color'Junio C Hamano Fri, 19 Apr 2013 20:31:24 +0000 (13:31 -0700)

Merge branch 'fc/branch-upstream-color'

Add more colors to "git branch -vv" output.

* fc/branch-upstream-color:
branch: colour upstream branches

Merge branch 'mv/ssl-ftp-curl'Junio C Hamano Fri, 19 Apr 2013 20:31:08 +0000 (13:31 -0700)

Merge branch 'mv/ssl-ftp-curl'

Does anybody really use commit walkers over (s)ftp?

* mv/ssl-ftp-curl:
Support FTP-over-SSL/TLS for regular FTP

Update draft release notes to 1.8.3Junio C Hamano Thu, 18 Apr 2013 19:02:42 +0000 (12:02 -0700)

Update draft release notes to 1.8.3

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

Merge branch 'maint'Junio C Hamano Thu, 18 Apr 2013 19:03:01 +0000 (12:03 -0700)

Merge branch 'maint'

* maint:
remote-hg: fix commit messages

Merge branch 'jk/test-trash'Junio C Hamano Thu, 18 Apr 2013 18:49:45 +0000 (11:49 -0700)

Merge branch 'jk/test-trash'

Fix longstanding issues with the test harness when used with --root=<there>
option.

* jk/test-trash:
t/test-lib.sh: drop "$test" variable
t/test-lib.sh: fix TRASH_DIRECTORY handling

Merge branch 'th/t9903-symlinked-workdir'Junio C Hamano Thu, 18 Apr 2013 18:49:41 +0000 (11:49 -0700)

Merge branch 'th/t9903-symlinked-workdir'

* th/t9903-symlinked-workdir:
t9903: Don't fail when run from path accessed through symlink

Merge branch 'jk/merge-tree-added-identically'Junio C Hamano Thu, 18 Apr 2013 18:49:31 +0000 (11:49 -0700)

Merge branch 'jk/merge-tree-added-identically'

The resolution of some corner cases by "git merge-tree" were
inconsistent between top-of-the-tree and in a subdirectory.

* jk/merge-tree-added-identically:
merge-tree: don't print entries that match "local"

Merge branch 'jk/http-dumb-namespaces'Junio C Hamano Thu, 18 Apr 2013 18:49:21 +0000 (11:49 -0700)

Merge branch 'jk/http-dumb-namespaces'

Allow smart-capable HTTP servers to be restricted via the
GIT_NAMESPACE mechanism when talking with commit-walker clients
(they already do so when talking with smart HTTP clients).

* jk/http-dumb-namespaces:
http-backend: respect GIT_NAMESPACE with dumb clients

Merge branch 'rs/empty-archive'Junio C Hamano Thu, 18 Apr 2013 18:49:17 +0000 (11:49 -0700)

Merge branch 'rs/empty-archive'

Implementations of "tar" of BSD descend have found to have trouble
with reading an otherwise empty tar archive with pax headers and
causes an unnecessary test failure.

* rs/empty-archive:
t5004: fix issue with empty archive test and bsdtar

Merge branch 'fc/send-email-annotate'Junio C Hamano Thu, 18 Apr 2013 18:49:11 +0000 (11:49 -0700)

Merge branch 'fc/send-email-annotate'

Allows format-patch --cover-letter to be configurable; the most
notable is the "auto" mode to create cover-letter only for multi
patch series.

* fc/send-email-annotate:
rebase-am: explicitly disable cover-letter
format-patch: trivial cleanups
format-patch: add format.coverLetter configuration variable
log: update to OPT_BOOL
format-patch: refactor branch name calculation
format-patch: improve head calculation for cover-letter
send-email: make annotate configurable

Merge branch 'jc/push-2.0-default-to-simple' (early... Junio C Hamano Thu, 18 Apr 2013 18:47:59 +0000 (11:47 -0700)

Merge branch 'jc/push-2.0-default-to-simple' (early part)

Adjust our tests for upcoming migration of the default value for the
"push.default" configuration variable to "simple" from "mixed".

* 'jc/push-2.0-default-to-simple' (early part):
t5570: do not assume the "matching" push is the default
t5551: do not assume the "matching" push is the default
t5550: do not assume the "matching" push is the default
t9401: do not assume the "matching" push is the default
t9400: do not assume the "matching" push is the default
t7406: do not assume the "matching" push is the default
t5531: do not assume the "matching" push is the default
t5519: do not assume the "matching" push is the default
t5517: do not assume the "matching" push is the default
t5516: do not assume the "matching" push is the default
t5505: do not assume the "matching" push is the default
t5404: do not assume the "matching" push is the default

Merge branch 'jk/daemon-user-doc'Junio C Hamano Thu, 18 Apr 2013 18:47:23 +0000 (11:47 -0700)

Merge branch 'jk/daemon-user-doc'

Document where the configuration is read by the git-daemon when its --user
option is used.

* jk/daemon-user-doc:
doc: clarify that "git daemon --user=<user>" option does not export HOME=~user

Merge branch 'fc/completion'Junio C Hamano Thu, 18 Apr 2013 18:46:41 +0000 (11:46 -0700)

Merge branch 'fc/completion'

In addition to a user visible change to offer more options to cherry-pick,
generally cleans up and simplifies the code.

* fc/completion:
completion: small optimization
completion: inline __gitcomp_1 to its sole callsite
completion: get rid of compgen
completion: add __gitcomp_nl tests
completion: add new __gitcompadd helper
completion: get rid of empty COMPREPLY assignments
completion: trivial test improvement
completion: add more cherry-pick options

Merge branch 'kb/co-orphan-suggestion-short-sha1'Junio C Hamano Thu, 18 Apr 2013 18:46:33 +0000 (11:46 -0700)

Merge branch 'kb/co-orphan-suggestion-short-sha1'

Update the informational message when "git checkout" leaves the
detached head state.

* kb/co-orphan-suggestion-short-sha1:
checkout: abbreviate hash in suggest_reattach

Merge branch 'jc/detached-head-doc'Junio C Hamano Thu, 18 Apr 2013 18:46:29 +0000 (11:46 -0700)

Merge branch 'jc/detached-head-doc'

* jc/detached-head-doc:
glossary: extend "detached HEAD" description

Merge branch 'tr/packed-object-info-wo-recursion'Junio C Hamano Thu, 18 Apr 2013 18:46:23 +0000 (11:46 -0700)

Merge branch 'tr/packed-object-info-wo-recursion'

Attempts to reduce the stack footprint of sha1_object_info()
and unpack_entry() codepaths.

* tr/packed-object-info-wo-recursion:
sha1_file: remove recursion in unpack_entry
Refactor parts of in_delta_base_cache/cache_or_unpack_entry
sha1_file: remove recursion in packed_object_info

Merge branch 'jk/http-error-messages'Junio C Hamano Thu, 18 Apr 2013 18:42:08 +0000 (11:42 -0700)

Merge branch 'jk/http-error-messages'

A regression fix for the recently graduated topic.

* jk/http-error-messages:
http: set curl FAILONERROR each time we select a handle

t6200: avoid path mangling issue on WindowsJohannes Sixt Thu, 18 Apr 2013 06:42:25 +0000 (08:42 +0200)

t6200: avoid path mangling issue on Windows

MSYS bash interprets the slash in the argument core.commentchar="/"
as root directory and mangles it into a Windows style path. Use a
different core.commentchar to dodge the issue.

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

remote-hg: fix commit messagesFelipe Contreras Thu, 18 Apr 2013 06:06:31 +0000 (01:06 -0500)

remote-hg: fix commit messages

git fast-import expects an extra newline after the commit message data,
but we are adding it only on hg-git compat mode, which is why the
bidirectionality tests pass.

We should add it unconditionally.

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

git add: rework the logic to warn "git add <pathspec... Junio C Hamano Wed, 17 Apr 2013 19:32:21 +0000 (12:32 -0700)

git add: rework the logic to warn "git add <pathspec>..." default change

The earlier logic to warn against "git add subdir" that is run
without "-A" or "--no-all" was only to check any <pathspec> given
exactly spells a directory name that (still) exists on the
filesystem. This had number of problems:

* "git add '*dir'" (note that the wildcard is hidden from the
shell) would not trigger the warning.

* "git add '*.py'" would behave differently between the current
version of Git and Git 2.0 for the same reason as "subdir", but
would not trigger the warning.

* "git add dir" for a submodule "dir" would just update the index
entry for the submodule "dir" without ever recursing into it, and
use of "-A" or "--no-all" would matter. But the logic only
checks the directory-ness of "dir" and gives an unnecessary
warning.

Rework the logic to detect the case where the behaviour will be
different in Git 2.0, and issue a warning only when it matters.
Even with the code before this warning, "git add subdir" will have
to traverse the directory in order to find _new_ files the index
does not know about _anyway_, so we can do this check without adding
an extra pass to find if <pathspec> matches any removed file.

This essentially updates the "add_files_to_cache()" public API to
"update_files_in_cache()" API that is internal to "git add", because
with the "--all" option, the function is no longer about "adding"
paths to the cache, but is also used to remove them.

There are other callers of the former from "checkout" (used when
"checkout -m" prepares the temporary tree that represents the local
modifications to be merged) and "commit" ("commit --include" that
picks up local changes in addition to what is in the index). Since
ADD_CACHE_IGNORE_ERRORS (aka "--no-all") is not used by either of
them, once dust settles after Git 2.0 and the warning becomes
unnecessary, we may want to unify these two functions again.

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

gitweb/INSTALL: GITWEB_CONFIG_SYSTEM is for backward... Jonathan Nieder Tue, 16 Apr 2013 22:26:00 +0000 (15:26 -0700)

gitweb/INSTALL: GITWEB_CONFIG_SYSTEM is for backward compatibility

Highlight that CONFIG_SYSTEM and /etc/gitweb.conf are meant to be
the fallback configuration file in BUGS section of gitweb.conf
documentation. This will hopefully help people who expect them to
be a common default, which unfortunately came later in the history.

blame: handle broken commit headers gracefullyRené Scharfe Wed, 17 Apr 2013 18:33:54 +0000 (20:33 +0200)

blame: handle broken commit headers gracefully

split_ident_line() can leave us with the pointers date_begin, date_end,
tz_begin and tz_end all set to NULL. Check them before use and supply
the same fallback values as in the case of a negative return code from
split_ident_line().

The "(unknown)" is not actually shown in the output, though, because it
will be converted to a number (zero) eventually.

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

pretty: handle broken commit headers gracefullyRené Scharfe Wed, 17 Apr 2013 18:33:35 +0000 (20:33 +0200)

pretty: handle broken commit headers gracefully

Centralize the parsing of the date and time zone strings in the new
helper function show_ident_date() and make sure it checks the pointers
provided by split_ident_line() for NULL before use.

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

cat-file: print tags raw for "cat-file -p"Jeff King Wed, 17 Apr 2013 21:00:48 +0000 (17:00 -0400)

cat-file: print tags raw for "cat-file -p"

When "cat-file -p" prints commits, it shows them in their
raw format, since git's format is already human-readable.
For tags, however, we print the whole thing raw except for
one thing: we convert the timestamp on the tagger line into a
human-readable date.

This dates all the way back to a0f15fa (Pretty-print tagger
dates, 2006-03-01). At that time there was no other way to
pretty-print a tag. These days, however, neither of those
matters much. The normal way to pretty-print a tag is with
"git show", which is much more flexible than "cat-file -p".

Commit a0f15fa also built "verify-tag --verbose" (and
subsequently "tag -v") around the "cat-file -p" output.
However, that behavior was lost in commit 62e09ce (Make git
tag a builtin, 2007-07-20), and we went back to printing
the raw tag contents. Nobody seems to have noticed the bug
since then (and it is arguably a saner behavior anyway, as
it shows the actual bytes for which we verified the
signature).

Let's drop the tagger-date formatting for "cat-file -p". It
makes us more consistent with cat-file's commit
pretty-printer, and as a bonus, we can drop the hand-rolled
tag parsing code in cat-file (which happened to behave
inconsistently with the tag pretty-printing code elsewhere).

This is a change of output format, so it's possible that
some callers could considered this a regression. However,
the original behavior was arguably a bug (due to the
inconsistency with commits), likely nobody was relying on it
(even we do not use it ourselves these days), and anyone
relying on the "-p" pretty-printer should be able to expect
a change in the output format (i.e., while "cat-file" is
plumbing, the output format of "-p" was never guaranteed to
be stable).

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

convert.c: remove duplicate codeLukas Fleischer Sat, 13 Apr 2013 13:28:32 +0000 (15:28 +0200)

convert.c: remove duplicate code

The has_cr_in_index() function is an almost 1:1 copy of
read_blob_data_from_index() with some additions. Use the
latter instead of using copy-pasted code.

Signed-off-by: Lukas Fleischer <git@cryptocrack.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read_blob_data_from_index(): optionally return the... Lukas Fleischer Sat, 13 Apr 2013 13:28:31 +0000 (15:28 +0200)

read_blob_data_from_index(): optionally return the size of blob data

This allows for optionally getting the size of the returned data and
will be used in a follow-up patch.

Signed-off-by: Lukas Fleischer <git@cryptocrack.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

attr.c: extract read_index_data() as read_blob_data_fro... Lukas Fleischer Sat, 13 Apr 2013 13:28:30 +0000 (15:28 +0200)

attr.c: extract read_index_data() as read_blob_data_from_index()

Extract the read_index_data() function from attr.c and move it to
read-cache.c; rename it to read_blob_data_from_index() and update
the function signature of it to align better with index/cache API
functions.

This allows for reusing the function in convert.c later.

Signed-off-by: Lukas Fleischer <git@cryptocrack.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Tue, 16 Apr 2013 22:14:44 +0000 (15:14 -0700)

Merge branch 'maint'

* maint:
help.c: add a compatibility comment to cmd_version()

run-command: use thread-aware die_is_recursing routineJeff King Tue, 16 Apr 2013 19:50:07 +0000 (15:50 -0400)

run-command: use thread-aware die_is_recursing routine

If we die from an async thread, we do not actually exit the
program, but just kill the thread. This confuses the static
counter in usage.c's default die_is_recursing function; it
updates the counter once for the thread death, and then when
the main program calls die() itself, it erroneously thinks
we are recursing. The end result is that we print "recursion
detected in die handler" instead of the real error in such a
case (the easiest way to trigger this is having a remote
connection hang up while running a sideband demultiplexer).

This patch solves it by using a per-thread counter when the
async_die function is installed; we detect recursion in each
thread (including the main one), but they do not step on
each other's toes.

Other threaded code does not need to worry about this, as
they do not install specialized die handlers; they just let
a die() from a sub-thread take down the whole program.

Since we are overriding the default recursion-check
function, there is an interesting corner case that is not a
problem, but bears some explanation. Imagine the main thread
calls die(), and then in the die_routine starts an async
call. We will switch to using thread-local storage, which
starts at 0, for the main thread's counter, even though
the original counter was actually at 1. That's OK, though,
for two reasons:

1. It would miss only the first level of recursion, and
would still find recursive failures inside the async
helper.

2. We do not currently and are not likely to start doing
anything as heavyweight as starting an async routine
from within a die routine or helper function.

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

usage: allow pluggable die-recursion checksJeff King Tue, 16 Apr 2013 19:46:22 +0000 (15:46 -0400)

usage: allow pluggable die-recursion checks

When any git code calls die or die_errno, we use a counter
to detect recursion into the die functions from any of the
helper functions. However, such a simple counter is not good
enough for threaded programs, which may call die from a
sub-thread, killing only the sub-thread (but incrementing
the counter for everyone).

Rather than try to deal with threads ourselves here, let's
just allow callers to plug in their own recursion-detection
function. This is similar to how we handle the die routine
(the caller plugs in a die routine which may kill only the
sub-thread).

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

help.c: add a compatibility comment to cmd_version()David Aguilar Tue, 16 Apr 2013 20:33:25 +0000 (13:33 -0700)

help.c: add a compatibility comment to cmd_version()

External projects have been known to parse the output of
"git version". Help prevent future authors from changing
its format by adding a comment to its implementation.

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

convert: The native line-ending is \r\n on MinGWJonathan Nieder Sat, 4 Sep 2010 08:25:09 +0000 (03:25 -0500)

convert: The native line-ending is \r\n on MinGW

If you try this:

1. Install Git for Windows (from the msysgit project)

2. Put

[core]
autocrlf = false
eol = native

in your .gitconfig.

3. Clone a project with

*.txt text

in its .gitattributes.

Then with current git, any text files checked out have LF line
endings, instead of the expected CRLF.

Cc: Johannes Schindelin <johannes.schindelin@gmx.de>
Cc: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read_revisions_from_stdin: make copies for handle_revis... Thomas Rast Tue, 16 Apr 2013 09:57:45 +0000 (11:57 +0200)

read_revisions_from_stdin: make copies for handle_revision_arg

read_revisions_from_stdin() has passed pointers to its read buffer
down to handle_revision_arg() since its inception way back in 42cabc3
(Teach rev-list an option to read revs from the standard input.,
2006-09-05). Even back then, this was a bug: through
add_pending_object, the argument was recorded in the object_array's
'name' field.

Fix it by making a copy whenever read_revisions_from_stdin() passes an
argument down the callchain. The other caller runs handle_revision_arg()
on argv[], where it would be redundant to make a copy.

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

http: set curl FAILONERROR each time we select a handleJeff King Tue, 16 Apr 2013 00:30:38 +0000 (20:30 -0400)

http: set curl FAILONERROR each time we select a handle

Because we reuse curl handles for multiple requests, the
setup of a handle happens in two stages: stable, global
setup and per-request setup. The lifecycle of a handle is
something like:

1. get_curl_handle; do basic global setup that will last
through the whole program (e.g., setting the user
agent, ssl options, etc)

2. get_active_slot; set up a per-request baseline (e.g.,
clearing the read/write functions, making it a GET
request, etc)

3. perform the request with curl_*_perform functions

4. goto step 2 to perform another request

Breaking it down this way means we can avoid doing global
setup from step (1) repeatedly, but we still finish step (2)
with a predictable baseline setup that callers can rely on.

Until commit 6d052d7 (http: add HTTP_KEEP_ERROR option,
2013-04-05), setting curl's FAILONERROR option was a global
setup; we never changed it. However, 6d052d7 introduced an
option where some requests might turn off FAILONERROR. Later
requests using the same handle would have the option
unexpectedly turned off, which meant they would not notice
http failures at all.

This could easily be seen in the test-suite for the
"half-auth" cases of t5541 and t5551. The initial requests
turned off FAILONERROR, which meant it was erroneously off
for the rpc POST. That worked fine for a successful request,
but meant that we failed to react properly to the HTTP 401
(instead, we treated whatever the server handed us as a
successful message body).

The solution is simple: now that FAILONERROR is a
per-request setting, we move it to get_active_slot to make
sure it is reset for each request.

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

i18n: branch: mark strings for translationJiang Xin Tue, 16 Apr 2013 03:37:50 +0000 (11:37 +0800)

i18n: branch: mark strings for translation

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

remote-bzr: fix prefix of tagsFelipe Contreras Mon, 15 Apr 2013 21:47:28 +0000 (16:47 -0500)

remote-bzr: fix prefix of tags

In the current transport-helper code, refs without namespaced refspecs don't
work correctly, so let's always use them.

Some people reported issues with 'git clone --mirror', and this fixes them, as
well as possibly others.

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

Update draft release notes to 1.8.3Junio C Hamano Mon, 15 Apr 2013 19:45:15 +0000 (12:45 -0700)

Update draft release notes to 1.8.3

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

Merge branch 'jk/diff-graph-submodule-summary'Junio C Hamano Mon, 15 Apr 2013 19:41:01 +0000 (12:41 -0700)

Merge branch 'jk/diff-graph-submodule-summary'

Make "git diff --graph" work better with submodule log output.

* jk/diff-graph-submodule-summary:
submodule: print graph output next to submodule log

Merge branch 'jk/diff-algo-finishing-touches'Junio C Hamano Mon, 15 Apr 2013 19:40:58 +0000 (12:40 -0700)

Merge branch 'jk/diff-algo-finishing-touches'

"git diff --diff-algorithm algo" is also understood as "git diff
--diff-algorithm=algo".

* jk/diff-algo-finishing-touches:
diff: allow unstuck arguments with --diff-algorithm
git-merge(1): document diff-algorithm option to merge-recursive

Merge branch 'rt/commentchar-fmt-merge-msg'Junio C Hamano Mon, 15 Apr 2013 19:40:56 +0000 (12:40 -0700)

Merge branch 'rt/commentchar-fmt-merge-msg'

The new core.commentchar configuration was not applied to a few
places.

* rt/commentchar-fmt-merge-msg:
fmt-merge-msg: use core.commentchar in tag signatures completely
fmt-merge-msg: respect core.commentchar in people credits

Merge branch 'lf/bundle-with-tip-wo-message'Junio C Hamano Mon, 15 Apr 2013 19:40:51 +0000 (12:40 -0700)

Merge branch 'lf/bundle-with-tip-wo-message'

"git bundle" did not like a bundle created using a commit without
any message as its one of the prerequistes.

* lf/bundle-with-tip-wo-message:
bundle: Accept prerequisites without commit messages

Merge branch 'jk/show-branch-strbuf'Junio C Hamano Mon, 15 Apr 2013 19:40:49 +0000 (12:40 -0700)

Merge branch 'jk/show-branch-strbuf'

"git show-branch" was not prepared to show a very long run of
ancestor operators e.g. foobar^2~2^2^2^2...^2~4 correctly.

* jk/show-branch-strbuf:
show-branch: use strbuf instead of static buffer

Merge branch 'jk/http-error-messages'Junio C Hamano Mon, 15 Apr 2013 19:40:46 +0000 (12:40 -0700)

Merge branch 'jk/http-error-messages'

Improve error reporting from the http transfer clients.

* jk/http-error-messages:
http: drop http_error function
remote-curl: die directly with http error messages
http: re-word http error message
http: simplify http_error helper function
remote-curl: consistently report repo url for http errors
remote-curl: always show friendlier 404 message
remote-curl: let servers override http 404 advice
remote-curl: show server content on http errors
http: add HTTP_KEEP_ERROR option

Merge branch 'tr/perl-keep-stderr-open'Junio C Hamano Mon, 15 Apr 2013 19:40:41 +0000 (12:40 -0700)

Merge branch 'tr/perl-keep-stderr-open'

Closing (not redirecting to /dev/null) the standard error stream is
not a very smart thing to do. Later open may return file
descriptor #2 for unrelated purpose, and error reporting code may
write into them.

* tr/perl-keep-stderr-open:
t9700: do not close STDERR
perl: redirect stderr to /dev/null instead of closing

glossary: improve definitions of refspec and pathspecThomas Ackermann Mon, 15 Apr 2013 17:50:07 +0000 (19:50 +0200)

glossary: improve definitions of refspec and pathspec

The exact definition of "refspec" can be found in git-fetch and
git-push manpages. So don't duplicate this here in the glossary.

Actually the definition of "pathspec" should be moved to a separate
file akin to the way it's done with "refspec". But this will only be
wortwhile when there's more to say about it. So for the time being
just improve the first sentence a little bit; fix the indentation of
the first paragraph after the bullet list and remove the one-item
list of magic signatures with its - for the user - unnecessary
introduction of "magic word 'top'".

Signed-off-by: Thomas Ackermann <th.acker@arcor.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

The name of the hash function is "SHA-1", not "SHA1"Thomas Ackermann Mon, 15 Apr 2013 17:49:04 +0000 (19:49 +0200)

The name of the hash function is "SHA-1", not "SHA1"

Use "SHA-1" instead of "SHA1" whenever we talk about the hash function.
When used as a programming symbol, we keep "SHA1".

Signed-off-by: Thomas Ackermann <th.acker@arcor.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

glossary: improve description of SHA-1 related topicsThomas Ackermann Mon, 15 Apr 2013 17:47:50 +0000 (19:47 +0200)

glossary: improve description of SHA-1 related topics

The name of the hash function is "SHA-1", not "SHA1".

Also to people who look up "object name" in the glossary,
the details of which hash function is applied on what to
compute "object name" is not important but the fact that the
name is meant to be an unique identifier for the contents
stored in the object is.

Signed-off-by: Thomas Ackermann <th.acker@arcor.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

glossary: remove outdated/misleading/irrelevant entriesThomas Ackermann Mon, 15 Apr 2013 17:46:56 +0000 (19:46 +0200)

glossary: remove outdated/misleading/irrelevant entries

Signed-off-by: Thomas Ackermann <th.acker@arcor.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

branch: colour upstream branchesFelipe Contreras Mon, 15 Apr 2013 02:37:49 +0000 (21:37 -0500)

branch: colour upstream branches

Otherwise when using 'git branch -vv' it's hard to see them among so
much output.

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

bisect: Store first bad commit as comment in log fileTorstein Hegge Sat, 13 Apr 2013 15:22:57 +0000 (17:22 +0200)

bisect: Store first bad commit as comment in log file

When bisect successfully finds a single revision, the first bad commit
should be shown to human readers of 'git bisect log'.

This resolves the apparent disconnect between the bisection result and
the log when a bug reporter says "I know that the first bad commit is
$rev, as you can see from $(git bisect log)".

Signed-off-by: Torstein Hegge <hegge@resisty.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

checkout: add --ignore-skip-worktree-bits in sparse... Nguyễn Thái Ngọc Duy Fri, 12 Apr 2013 23:12:08 +0000 (09:12 +1000)

checkout: add --ignore-skip-worktree-bits in sparse checkout mode

"git checkout -- <paths>" is usually used to restore all modified
files in <paths>. In sparse checkout mode, this command is overloaded
with another meaning: to add back all files in <paths> that are
excluded by sparse patterns.

As the former makes more sense for day-to-day use. Switch it to the
default and the latter enabled with --ignore-skip-worktree-bits.

While at there, add info/sparse-checkout to gitrepository-layout.txt

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

gitweb/INSTALL: Simplify description of GITWEB_CONFIG_S... Jakub Narębski Fri, 12 Apr 2013 22:20:48 +0000 (00:20 +0200)

gitweb/INSTALL: Simplify description of GITWEB_CONFIG_SYSTEM

The flow of the text describing GITWEB_CONFIG_SYSTEM and
GITWEB_CONFIG_COMMON in gitweb/INSTALL is awkward. "This is bad. Oh
the other hand, better is broken. Therefore we do this." forces
readers to make multiple guesses while reading: "ok, bad, so you
plan to change it and warn us about upcoming change? oh, not that,
changing it is bad, so we have to live with it? oh, not that, there
is another one that is common and that is what we can use".

Better rewrite said paragraph to avoid such a mental roller-coaster in
the first place.

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

Merge branch 'po/help-guides'Junio C Hamano Mon, 15 Apr 2013 06:33:17 +0000 (23:33 -0700)

Merge branch 'po/help-guides'

Finishing touches.

* po/help-guides:
help: mark common_guides[] as translatable

t/test-lib.sh: drop "$test" variableJeff King Sun, 14 Apr 2013 19:38:21 +0000 (15:38 -0400)

t/test-lib.sh: drop "$test" variable

The $test variable is used as an interim buffer for
constructing $TRASH_DIRECTORY, and is almost compatible with
it (the exception being that $test has not been converted to
an absolute path). Let's get rid of it entirely so that
later code does not accidentally use it, thinking the two
are interchangeable.

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

t/test-lib.sh: fix TRASH_DIRECTORY handlingJohn Keeping Sun, 14 Apr 2013 16:34:56 +0000 (17:34 +0100)

t/test-lib.sh: fix TRASH_DIRECTORY handling

After the location of $TRASH_DIRECTORY is adjusted by
$TEST_OUTPUT_DIRECTORY, we go on to use the $test variable to make the
trash directory and cd into it. This means that when
$TEST_OUTPUT_DIRECTORY is not "." and an absolute --root has not been
specified, we do not remove the trash directory once the tests are
complete (remove_trash is set to $TRASH_DIRECTORY).

Fix this by always referring to the trash directory as $TRASH_DIRECTORY.

Signed-off-by: John Keeping <john@keeping.me.uk>
Acked-by: Jeff King <peff@peff.net>
Acked-by: Thomas Rast <trast@inf.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: small optimizationFelipe Contreras Wed, 10 Apr 2013 06:57:57 +0000 (01:57 -0500)

completion: small optimization

No need to calculate a new $c with a space if we are not going to do
anything it with it.

There should be no functional changes, except that a word "foo " with no
suffixes can't be matched. But $cur cannot have a space at the end
anyway. So it's safe.

Based on the code from SZEDER Gábor.

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

completion: inline __gitcomp_1 to its sole callsiteFelipe Contreras Wed, 10 Apr 2013 06:57:56 +0000 (01:57 -0500)

completion: inline __gitcomp_1 to its sole callsite

There is no point in calling a separate function that is only used
in one place. Especially considering that there's no need to call
compgen, and we traverse the words ourselves both in __gitcompadd,
and __gitcomp_1.

Let's squash the functions together, and traverse only once.

This improves performance. For N number of words:

== 1 ==
original: 0.002s
new: 0.000s
== 10 ==
original: 0.005s
new: 0.001s
== 100 ==
original: 0.009s
new: 0.006s
== 1000 ==
original: 0.027s
new: 0.019s
== 10000 ==
original: 0.163s
new: 0.151s
== 100000 ==
original: 1.555s
new: 1.497s

No functional changes.

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

completion: get rid of compgenFelipe Contreras Wed, 10 Apr 2013 06:57:55 +0000 (01:57 -0500)

completion: get rid of compgen

The functionality we use from compgen is not much, we can do the same
manually, with drastic improvements in speed, especially when dealing
with only a few words.

This patch also has the sideffect that brekage reported by Jeroen Meijer
and SZEDER Gábor gets fixed because we no longer expand the resulting
words.

Here are some numbers filtering N amount of words:

== 1 ==
original: 0.002s
new: 0.000s
== 10 ==
original: 0.002s
new: 0.000s
== 100 ==
original: 0.003s
new: 0.002s
== 1000 ==
original: 0.012s
new: 0.011s
== 10000 ==
original: 0.056s
new: 0.066s
== 100000 ==
original: 2.669s
new: 0.622s

If the results are not narrowed:

== 1 ==
original: 0.002s
new: 0.000s
== 10 ==
original: 0.002s
new: 0.001s
== 100 ==
original: 0.004s
new: 0.004s
== 1000 ==
original: 0.020s
new: 0.015s
== 10000 ==
original: 0.101s
new: 0.355s
== 100000 ==
original: 2.850s
new: 31.941s

So, unless 'git checkout <tab>' usually gives you more than 10000
results, you'll get an improvement :)

Other possible solutions perform better after 1000 words, but worst if
less than that:

COMPREPLY=($(awk -v cur="$3" -v pre="$2" -v suf="$4"
'$0 ~ cur { print pre$0suf }' <<< "$1" ))

COMPREPLY=($(printf -- "$2%s$4\n" $1 | grep "^$2$3"))

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