gitweb.git
completion: optimize refs completionSZEDER Gábor Sat, 15 Oct 2011 12:57:23 +0000 (14:57 +0200)

completion: optimize refs completion

After a unique command or option is completed, in most cases it is a
good thing to add a trailing a space, but sometimes it doesn't make
sense, e.g. when the completed word is an option taking an argument
('--option=') or a configuration section ('core.'). Therefore the
completion script uses the '-o nospace' option to prevent bash from
automatically appending a space to unique completions, and it has the
__gitcomp() function to add that trailing space only when necessary.
See 72e5e989 (bash: Add space after unique command name is completed.,
2007-02-04), 78d4d6a2 (bash: Support unique completion on git-config.,
2007-02-04), and b3391775 (bash: Support unique completion when
possible., 2007-02-04).

__gitcomp() therefore iterates over all possible completion words it
got as argument, and checks each word whether a trailing space is
necessary or not. This is ok for commands, options, etc., i.e. when
the number of words is relatively small, but can be noticeably slow
for large number of refs. However, while options might or might not
need that trailing space, refs are always handled uniformly and always
get that trailing space (or a trailing '.' for 'git config
branch.<head>.'). Since refs listed by __git_refs() & co. are
separated by newline, this allows us some optimizations with
'compgen'.

So, add a specialized variant of __gitcomp() that only deals with
possible completion words separated by a newline and uniformly appends
the trailing space to all words using 'compgen -S " "' (or any other
suffix, if specified), so no iteration over all words is needed. But
we need to fiddle with IFS, because the default IFS containing a space
would cause the added space suffix to be stripped off when compgen's
output is stored in the COMPREPLY array. Therefore we use only
newline as IFS, hence the requirement for the newline-separated
possible completion words.

Convert all callsites of __gitcomp() where it's called with refs, i.e.
when it gets the output of either __git_refs(), __git_heads(),
__git_tags(), __git_refs2(), __git_refs_remotes(), or the odd 'git
for-each-ref' somewhere in _git_config(). Also convert callsites
where it gets other uniformly handled newline separated word lists,
i.e. either remotes from __git_remotes(), names of set configuration
variables from __git_config_get_set_variables(), stashes, or commands.

Here are some timing results for dealing with 10000 refs.
Before:

$ refs="$(__git_refs ~/tmp/git/repo-with-10k-refs/)"
$ time __gitcomp "$refs"

real 0m1.134s
user 0m1.060s
sys 0m0.130s

After:

$ time __gitcomp_nl "$refs"

real 0m0.373s
user 0m0.360s
sys 0m0.020s

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

completion: document __gitcomp()SZEDER Gábor Sat, 8 Oct 2011 14:54:35 +0000 (16:54 +0200)

completion: document __gitcomp()

I always forget which argument is which, and got tired of figuring it
out over and over again.

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

Merge branch 'sg/completion'Junio C Hamano Tue, 18 Oct 2011 04:37:13 +0000 (21:37 -0700)

Merge branch 'sg/completion'

* sg/completion:
completion: unite --format and --pretty for 'log' and 'show'
completion: unite --reuse-message and --reedit-message for 'notes'

Merge branch 'mm/maint-config-explicit-bool-display'Junio C Hamano Tue, 18 Oct 2011 04:37:12 +0000 (21:37 -0700)

Merge branch 'mm/maint-config-explicit-bool-display'

* mm/maint-config-explicit-bool-display:
config: display key_delim for config --bool --get-regexp

Merge branch 'tc/fetch-leak'Junio C Hamano Tue, 18 Oct 2011 04:37:12 +0000 (21:37 -0700)

Merge branch 'tc/fetch-leak'

* tc/fetch-leak:
fetch: plug two leaks on error exit in store_updated_refs

Conflicts:
builtin/fetch.c

Merge branch 'jk/name-hash-dirent'Junio C Hamano Tue, 18 Oct 2011 04:37:11 +0000 (21:37 -0700)

Merge branch 'jk/name-hash-dirent'

* jk/name-hash-dirent:
fix phantom untracked files when core.ignorecase is set

Merge branch 'ef/mingw-syslog'Junio C Hamano Tue, 18 Oct 2011 04:37:11 +0000 (21:37 -0700)

Merge branch 'ef/mingw-syslog'

* ef/mingw-syslog:
mingw: avoid using strbuf in syslog

Merge branch 'tm/completion-push-set-upstream'Junio C Hamano Tue, 18 Oct 2011 04:37:11 +0000 (21:37 -0700)

Merge branch 'tm/completion-push-set-upstream'

* tm/completion-push-set-upstream:
completion: push --set-upstream

Merge branch 'tm/completion-commit-fixup-squash'Junio C Hamano Tue, 18 Oct 2011 04:37:10 +0000 (21:37 -0700)

Merge branch 'tm/completion-commit-fixup-squash'

* tm/completion-commit-fixup-squash:
completion: commit --fixup and --squash
completion: unite --reuse-message and --reedit-message handling

Merge branch 'ph/push-to-delete-nothing'Junio C Hamano Tue, 18 Oct 2011 04:37:10 +0000 (21:37 -0700)

Merge branch 'ph/push-to-delete-nothing'

* ph/push-to-delete-nothing:
receive-pack: don't pass non-existent refs to post-{receive,update} hooks

Conflicts:
builtin/receive-pack.c

Merge branch 'jc/checkout-from-tree-keep-local-changes'Junio C Hamano Tue, 18 Oct 2011 04:37:09 +0000 (21:37 -0700)

Merge branch 'jc/checkout-from-tree-keep-local-changes'

* jc/checkout-from-tree-keep-local-changes:
checkout $tree $path: do not clobber local changes in $path not in $tree

Merge branch 'js/bisect-no-checkout'Junio C Hamano Tue, 18 Oct 2011 04:37:09 +0000 (21:37 -0700)

Merge branch 'js/bisect-no-checkout'

* js/bisect-no-checkout:
bisect: fix exiting when checkout failed in bisect_start()

resolve_gitlink_packed_ref(): fix mismergeJunio C Hamano Mon, 17 Oct 2011 18:43:30 +0000 (11:43 -0700)

resolve_gitlink_packed_ref(): fix mismerge

2c5c66b (Merge branch 'jp/get-ref-dir-unsorted', 2011-10-10) merged a
topic that forked from the mainline before a new helper function
get_packed_refs() refactored code to read packed-refs file. The merge made
the call to the helper function with an incorrect argument. The parameter
to the function has to be a path to the submodule.

Fix the mismerge.

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

Update draft release notes to 1.7.8Junio C Hamano Sun, 16 Oct 2011 17:58:35 +0000 (10:58 -0700)

Update draft release notes to 1.7.8

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

Merge git://repo.or.cz/git-guiJunio C Hamano Sun, 16 Oct 2011 10:01:44 +0000 (03:01 -0700)

Merge git://repo.or.cz/git-gui

* git://repo.or.cz/git-gui:
git-gui: incremental goto line in blame view
git-gui: clear the goto line input when hiding
git-gui: only accept numbers in the goto-line input
git-gui: search and linenumber input are mutual exclusive in the blame view
git-gui: deal with unknown files when pressing the "Stage Changed" button
git-gui: drop the 'n' and 'Shift-n' bindings from the last patch.
git-gui: Add keyboard shortcuts for search and goto commands in blame view.
git-gui: Enable jumping to a specific line number in blame view.
Fix tooltip display with multiple monitors on windows.
Fix typo: existant->existent
git-gui: updated translator README for current procedures.
git-gui: warn when trying to commit on a detached head
git-gui: Corrected a typo in the Swedish translation of 'Continue'

git-svn: Allow certain refs to be ignoredMichael Olson Mon, 10 Oct 2011 23:27:37 +0000 (16:27 -0700)

git-svn: Allow certain refs to be ignored

Implement a new --ignore-refs option which specifies a regex of refs
to ignore while importing svn history.

This is a useful supplement to the --ignore-paths option, as that
option only operates on the contents of branches and tags, not the
branches and tags themselves.

Signed-off-by: Michael Olson <mwolson@gnu.org>
Acked-by: Eric Wong <normalperson@yhbt.net>

git svn dcommit: new option --interactive.Frédéric Heitzmann Fri, 16 Sep 2011 21:02:01 +0000 (23:02 +0200)

git svn dcommit: new option --interactive.

Allow the user to check the patch set before it is commited to SVN. It is
then possible to accept/discard one patch, accept all, or quit.

This interactive mode is similar with 'git send email' behaviour. However,
'git svn dcommit' returns as soon as one patch is discarded.
Part of the code was taken from git-send-email.perl (see 'ask' function)

Tests several combinations of potential answers to
'git svn dcommit --interactive'. For each of them, test whether patches
were commited to SVN or not.

Thanks-to Eric Wong <normalperson@yhbt.net> for the initial idea.

Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Frédéric Heitzmann <frederic.heitzmann@gmail.com>

Sync with maintJunio C Hamano Sun, 16 Oct 2011 03:56:50 +0000 (20:56 -0700)

Sync with maint

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

Prepare for 1.7.7.1Junio C Hamano Sun, 16 Oct 2011 03:55:12 +0000 (20:55 -0700)

Prepare for 1.7.7.1

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

Merge branch 'ms/patch-id-with-overlong-line' into... Junio C Hamano Sun, 16 Oct 2011 03:46:39 +0000 (20:46 -0700)

Merge branch 'ms/patch-id-with-overlong-line' into maint

* ms/patch-id-with-overlong-line:
patch-id.c: use strbuf instead of a fixed buffer

Merge branch 'jc/maint-bundle-too-quiet' into maintJunio C Hamano Sun, 16 Oct 2011 03:46:39 +0000 (20:46 -0700)

Merge branch 'jc/maint-bundle-too-quiet' into maint

* jc/maint-bundle-too-quiet:
Teach progress eye-candy to fetch_refs_from_bundle()

Merge branch 'jk/filter-branch-require-clean-work-tree... Junio C Hamano Sun, 16 Oct 2011 03:46:38 +0000 (20:46 -0700)

Merge branch 'jk/filter-branch-require-clean-work-tree' into maint

* jk/filter-branch-require-clean-work-tree:
filter-branch: use require_clean_work_tree

Merge branch 'jc/maint-fsck-fwrite-size-check' into... Junio C Hamano Sun, 16 Oct 2011 03:46:38 +0000 (20:46 -0700)

Merge branch 'jc/maint-fsck-fwrite-size-check' into maint

* jc/maint-fsck-fwrite-size-check:
fsck: do not abort upon finding an empty blob

Merge branch 'bk/ancestry-path' into maintJunio C Hamano Sun, 16 Oct 2011 03:46:38 +0000 (20:46 -0700)

Merge branch 'bk/ancestry-path' into maint

* bk/ancestry-path:
t6019: avoid refname collision on case-insensitive systems
revision: do not include sibling history in --ancestry-path output
revision: keep track of the end-user input from the command line
rev-list: Demonstrate breakage with --ancestry-path --all

Merge branch 'jk/maint-fetch-submodule-check-fix' into... Junio C Hamano Sun, 16 Oct 2011 03:46:38 +0000 (20:46 -0700)

Merge branch 'jk/maint-fetch-submodule-check-fix' into maint

* jk/maint-fetch-submodule-check-fix:
fetch: avoid quadratic loop checking for updated submodules

Merge branch 'tr/mergetool-valgrind' into maintJunio C Hamano Sun, 16 Oct 2011 03:46:37 +0000 (20:46 -0700)

Merge branch 'tr/mergetool-valgrind' into maint

* tr/mergetool-valgrind:
Symlink mergetools scriptlets into valgrind wrappers

Merge branch 'nm/grep-object-sha1-lock' into maintJunio C Hamano Sun, 16 Oct 2011 03:46:37 +0000 (20:46 -0700)

Merge branch 'nm/grep-object-sha1-lock' into maint

* nm/grep-object-sha1-lock:
grep: Fix race condition in delta_base_cache

Conflicts:
builtin/grep.c

Merge branch 'jc/diff-index-unpack' into maintJunio C Hamano Sun, 16 Oct 2011 03:46:36 +0000 (20:46 -0700)

Merge branch 'jc/diff-index-unpack' into maint

* jc/diff-index-unpack:
diff-index: pass pathspec down to unpack-trees machinery
unpack-trees: allow pruning with pathspec
traverse_trees(): allow pruning with pathspec

Merge branch 'mm/rebase-i-exec-edit' into maintJunio C Hamano Sun, 16 Oct 2011 03:46:36 +0000 (20:46 -0700)

Merge branch 'mm/rebase-i-exec-edit' into maint

* mm/rebase-i-exec-edit:
rebase -i: notice and warn if "exec $cmd" modifies the index or the working tree
rebase -i: clean error message for --continue after failed exec

Merge branch 'jc/grep-untracked-exclude'Junio C Hamano Sun, 16 Oct 2011 03:27:19 +0000 (20:27 -0700)

Merge branch 'jc/grep-untracked-exclude'

* jc/grep-untracked-exclude:
grep: fix the error message that mentions --exclude

Merge branch 'jc/maint-grep-untracked-exclude' into... Junio C Hamano Sun, 16 Oct 2011 03:26:52 +0000 (20:26 -0700)

Merge branch 'jc/maint-grep-untracked-exclude' into jc/grep-untracked-exclude

* jc/maint-grep-untracked-exclude:
grep: fix the error message that mentions --exclude

Conflicts:
builtin/grep.c

grep: fix the error message that mentions --excludeBert Wesarg Sat, 15 Oct 2011 18:36:22 +0000 (20:36 +0200)

grep: fix the error message that mentions --exclude

Missing rename from --exclude to --standard-exclude.

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

git-gui: incremental goto line in blame viewBert Wesarg Thu, 13 Oct 2011 13:48:15 +0000 (15:48 +0200)

git-gui: incremental goto line in blame view

The view jumps now to the given line number after each key press.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

git-gui: clear the goto line input when hidingBert Wesarg Thu, 13 Oct 2011 13:48:13 +0000 (15:48 +0200)

git-gui: clear the goto line input when hiding

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

git-gui: only accept numbers in the goto-line inputBert Wesarg Thu, 13 Oct 2011 13:48:14 +0000 (15:48 +0200)

git-gui: only accept numbers in the goto-line input

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

git-gui: search and linenumber input are mutual exclusi... Bert Wesarg Thu, 13 Oct 2011 13:48:12 +0000 (15:48 +0200)

git-gui: search and linenumber input are mutual exclusive in the blame view

It was possible to open the search input (Ctrl+S) and the goto-line input
(Ctrl+G) at the same time. Prevent this.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

send-email: Fix %config_path_settings handlingCord Seele Fri, 14 Oct 2011 20:53:31 +0000 (22:53 +0200)

send-email: Fix %config_path_settings handling

cec5dae (use new Git::config_path() for aliasesfile, 2011-09-30) broke
the expansion of aliases.

This was caused by treating %config_path_settings, newly introduced in
said patch, like %config_bool_settings instead of like %config_settings.
Copy from %config_settings, making it more readable.

While at it add basic test for expansion of aliases, and for path
expansion, which would catch this error.

Nb. there were a few issues that were responsible for this error:

1. %config_bool_settings and %config_settings despite similar name have
different semantic.

%config_bool_settings values are arrays where the first element is
(reference to) the variable to set, and second element is default
value... which admittedly is a bit cryptic. More readable if more
verbose option would be to use hash reference, e.g.:

my %config_bool_settings = (
"thread" => { variable => \$thread, default => 1},
[...]

%config_settings values are either either reference to scalar variable
or reference to array. In second case it means that option (or config
option) is multi-valued. BTW. this is similar to what Getopt::Long does.

2. In cec5dae (use new Git::config_path() for aliasesfile, 2011-09-30)
the setting "aliasesfile" was moved from %config_settings to newly
introduced %config_path_settings. But the loop that parses settings
from %config_path_settings was copy'n'pasted *wrongly* from
%config_bool_settings instead of from %config_settings.

It looks like cec5dae author cargo-culted this change...

3. 994d6c6 (send-email: address expansion for common mailers, 2006-05-14)
didn't add test for alias expansion to t9001-send-email.sh

Signed-off-by: Cord Seele <cowose@gmail.com>
Tested-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Fri, 14 Oct 2011 19:51:24 +0000 (12:51 -0700)

Merge branch 'maint'

* maint:
t1304: fall back to $USER if $LOGNAME is not defined

t1304: fall back to $USER if $LOGNAME is not definedRené Scharfe Fri, 14 Oct 2011 17:44:45 +0000 (19:44 +0200)

t1304: fall back to $USER if $LOGNAME is not defined

For some reason $LOGNAME is not set anymore for me after an upgrade from
Ubuntu 11.04 to 11.10. Use $USER in such a case.

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

Update draft release notes to 1.7.8Junio C Hamano Fri, 14 Oct 2011 05:15:39 +0000 (22:15 -0700)

Update draft release notes to 1.7.8

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

Merge branch 'js/maint-merge-one-file-osx-expr'Junio C Hamano Fri, 14 Oct 2011 02:03:24 +0000 (19:03 -0700)

Merge branch 'js/maint-merge-one-file-osx-expr'

* js/maint-merge-one-file-osx-expr:
merge-one-file: fix "expr: non-numeric argument"

Merge branch 'jn/ident-from-etc-mailname'Junio C Hamano Fri, 14 Oct 2011 02:03:24 +0000 (19:03 -0700)

Merge branch 'jn/ident-from-etc-mailname'

* jn/ident-from-etc-mailname:
ident: do not retrieve default ident when unnecessary
ident: check /etc/mailname if email is unknown

Merge branch 'il/archive-err-signal'Junio C Hamano Fri, 14 Oct 2011 02:03:23 +0000 (19:03 -0700)

Merge branch 'il/archive-err-signal'

* il/archive-err-signal:
Support ERR in remote archive like in fetch/push

Merge branch 'jc/grep-untracked-exclude'Junio C Hamano Fri, 14 Oct 2011 02:03:23 +0000 (19:03 -0700)

Merge branch 'jc/grep-untracked-exclude'

* jc/grep-untracked-exclude:
grep: teach --untracked and --exclude-standard options

Merge branch 'rs/diff-cleanup-records-fix'Junio C Hamano Fri, 14 Oct 2011 02:03:22 +0000 (19:03 -0700)

Merge branch 'rs/diff-cleanup-records-fix'

* rs/diff-cleanup-records-fix:
diff: resurrect XDF_NEED_MINIMAL with --minimal
Revert removal of multi-match discard heuristic in 27af01

Merge branch 'rs/pending'Junio C Hamano Fri, 14 Oct 2011 02:03:22 +0000 (19:03 -0700)

Merge branch 'rs/pending'

* rs/pending:
commit: factor out clear_commit_marks_for_object_array
checkout: use leak_pending flag
bundle: use leak_pending flag
bisect: use leak_pending flag
revision: add leak_pending flag
checkout: use add_pending_{object,sha1} in orphan check
revision: factor out add_pending_sha1
checkout: check for "Previous HEAD" notice in t2020

Conflicts:
builtin/checkout.c
revision.c

Merge branch 'jn/no-g-plus-s-on-bsd'Junio C Hamano Fri, 14 Oct 2011 02:03:21 +0000 (19:03 -0700)

Merge branch 'jn/no-g-plus-s-on-bsd'

* jn/no-g-plus-s-on-bsd:
Makefile: do not set setgid bit on directories on GNU/kFreeBSD

Merge branch 'jc/is-url-simplify'Junio C Hamano Fri, 14 Oct 2011 02:03:21 +0000 (19:03 -0700)

Merge branch 'jc/is-url-simplify'

* jc/is-url-simplify:
url.c: simplify is_url()

Merge branch 'nd/git-daemon-error-msgs'Junio C Hamano Fri, 14 Oct 2011 02:03:21 +0000 (19:03 -0700)

Merge branch 'nd/git-daemon-error-msgs'

* nd/git-daemon-error-msgs:
daemon: return "access denied" if a service is not allowed

Merge branch 'nd/daemon-log-sock-errors'Junio C Hamano Fri, 14 Oct 2011 02:03:21 +0000 (19:03 -0700)

Merge branch 'nd/daemon-log-sock-errors'

* nd/daemon-log-sock-errors:
daemon: log errors if we could not use some sockets

Merge branch 'cp/git-web-browse-browsers'Junio C Hamano Fri, 14 Oct 2011 02:03:20 +0000 (19:03 -0700)

Merge branch 'cp/git-web-browse-browsers'

* cp/git-web-browse-browsers:
git-web--browse: avoid the use of eval

Merge branch 'jc/apply-blank-at-eof-fix'Junio C Hamano Fri, 14 Oct 2011 02:03:20 +0000 (19:03 -0700)

Merge branch 'jc/apply-blank-at-eof-fix'

* jc/apply-blank-at-eof-fix:
apply --whitespace=error: correctly report new blank lines at end

Merge branch 'di/fast-import-empty-tag-note-fix'Junio C Hamano Fri, 14 Oct 2011 02:03:19 +0000 (19:03 -0700)

Merge branch 'di/fast-import-empty-tag-note-fix'

* di/fast-import-empty-tag-note-fix:
fast-import: don't allow to note on empty branch
fast-import: don't allow to tag empty branch

Merge branch 'nd/maint-autofix-tag-in-head'Junio C Hamano Fri, 14 Oct 2011 02:03:19 +0000 (19:03 -0700)

Merge branch 'nd/maint-autofix-tag-in-head'

* nd/maint-autofix-tag-in-head:
Accept tags in HEAD or MERGE_HEAD
merge: remove global variable head[]
merge: use return value of resolve_ref() to determine if HEAD is invalid
merge: keep stash[] a local variable

Conflicts:
builtin/merge.c

Merge branch 'bw/grep-no-index-no-exclude'Junio C Hamano Fri, 14 Oct 2011 02:03:18 +0000 (19:03 -0700)

Merge branch 'bw/grep-no-index-no-exclude'

* bw/grep-no-index-no-exclude:
grep --no-index: don't use git standard exclusions
grep: do not use --index in the short usage output

Merge branch 'nd/maint-sparse-errors'Junio C Hamano Fri, 14 Oct 2011 02:03:18 +0000 (19:03 -0700)

Merge branch 'nd/maint-sparse-errors'

* nd/maint-sparse-errors:
Add explanation why we do not allow to sparse checkout to empty working tree
sparse checkout: show error messages when worktree shaping fails

Update draft release notes to 1.7.8Junio C Hamano Wed, 12 Oct 2011 19:42:44 +0000 (12:42 -0700)

Update draft release notes to 1.7.8

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

Merge branch 'cb/do-not-pretend-to-hijack-long-help'Junio C Hamano Wed, 12 Oct 2011 19:34:30 +0000 (12:34 -0700)

Merge branch 'cb/do-not-pretend-to-hijack-long-help'

* cb/do-not-pretend-to-hijack-long-help:
use -h for synopsis and --help for manpage consistently

Merge branch 'sp/smart-http-failure'Junio C Hamano Wed, 12 Oct 2011 19:34:27 +0000 (12:34 -0700)

Merge branch 'sp/smart-http-failure'

* sp/smart-http-failure:
remote-curl: Fix warning after HTTP failure

Merge branch 'nd/document-err-packet'Junio C Hamano Wed, 12 Oct 2011 19:34:18 +0000 (12:34 -0700)

Merge branch 'nd/document-err-packet'

* nd/document-err-packet:
pack-protocol: document "ERR" line

Merge branch 'jc/parse-options-boolean'Junio C Hamano Wed, 12 Oct 2011 19:34:15 +0000 (12:34 -0700)

Merge branch 'jc/parse-options-boolean'

* jc/parse-options-boolean:
apply: use OPT_NOOP_NOARG
revert: use OPT_NOOP_NOARG
parseopt: add OPT_NOOP_NOARG
archive.c: use OPT_BOOL()
parse-options: deprecate OPT_BOOLEAN

Conflicts:
builtin/revert.c

Merge branch 'rs/test-ctype'Junio C Hamano Wed, 12 Oct 2011 19:34:11 +0000 (12:34 -0700)

Merge branch 'rs/test-ctype'

* rs/test-ctype:
test-ctype: add test for is_pathspec_magic
test-ctype: macrofy

Merge branch 'rs/name-rev-usage'Junio C Hamano Wed, 12 Oct 2011 19:34:08 +0000 (12:34 -0700)

Merge branch 'rs/name-rev-usage'

* rs/name-rev-usage:
name-rev: split usage string

Merge branch 'cs/perl-config-path-send-email'Junio C Hamano Wed, 12 Oct 2011 19:34:05 +0000 (12:34 -0700)

Merge branch 'cs/perl-config-path-send-email'

* cs/perl-config-path-send-email:
use new Git::config_path() for aliasesfile
Add Git::config_path()

Merge branch 'zj/send-email-authen-sasl'Junio C Hamano Wed, 12 Oct 2011 19:34:03 +0000 (12:34 -0700)

Merge branch 'zj/send-email-authen-sasl'

* zj/send-email-authen-sasl:
send-email: auth plain/login fix

t5403: convert leading spaces to tabsNguyễn Thái Ngọc Duy Wed, 12 Oct 2011 09:35:04 +0000 (20:35 +1100)

t5403: convert leading spaces to tabs

The first and last tests use tabs. The rest uses spaces. Convert all
to tabs.

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

Update draft release notes to 1.7.8Junio C Hamano Mon, 10 Oct 2011 23:14:59 +0000 (16:14 -0700)

Update draft release notes to 1.7.8

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

Merge branch 'dm/tree-walk'Junio C Hamano Mon, 10 Oct 2011 22:56:20 +0000 (15:56 -0700)

Merge branch 'dm/tree-walk'

* dm/tree-walk:
tree-walk: micro-optimization in tree_entry_interesting
tree-walk: drop unused parameter from match_dir_prefix

Merge branch 'ps/gitweb-js-with-lineno'Junio C Hamano Mon, 10 Oct 2011 22:56:20 +0000 (15:56 -0700)

Merge branch 'ps/gitweb-js-with-lineno'

* ps/gitweb-js-with-lineno:
gitweb: Fix links to lines in blobs when javascript-actions are enabled

Merge branch 'mh/maint-notes-merge-pathbuf-fix'Junio C Hamano Mon, 10 Oct 2011 22:56:20 +0000 (15:56 -0700)

Merge branch 'mh/maint-notes-merge-pathbuf-fix'

* mh/maint-notes-merge-pathbuf-fix:
notes_merge_commit(): do not pass temporary buffer to other function

Merge branch 'nd/sparse-doc'Junio C Hamano Mon, 10 Oct 2011 22:56:20 +0000 (15:56 -0700)

Merge branch 'nd/sparse-doc'

* nd/sparse-doc:
git-read-tree.txt: update sparse checkout examples

Merge branch 'jp/get-ref-dir-unsorted'Junio C Hamano Mon, 10 Oct 2011 22:56:19 +0000 (15:56 -0700)

Merge branch 'jp/get-ref-dir-unsorted'

* jp/get-ref-dir-unsorted:
refs.c: free duplicate entries in the ref array instead of leaking them
refs.c: abort ref search if ref array is empty
refs.c: ensure struct whose member may be passed to realloc is initialized
refs: Use binary search to lookup refs faster
Don't sort ref_list too early

Conflicts:
refs.c

Merge branch 'mh/check-ref-format-3'Junio C Hamano Mon, 10 Oct 2011 22:56:18 +0000 (15:56 -0700)

Merge branch 'mh/check-ref-format-3'

* mh/check-ref-format-3: (23 commits)
add_ref(): verify that the refname is formatted correctly
resolve_ref(): expand documentation
resolve_ref(): also treat a too-long SHA1 as invalid
resolve_ref(): emit warnings for improperly-formatted references
resolve_ref(): verify that the input refname has the right format
remote: avoid passing NULL to read_ref()
remote: use xstrdup() instead of strdup()
resolve_ref(): do not follow incorrectly-formatted symbolic refs
resolve_ref(): extract a function get_packed_ref()
resolve_ref(): turn buffer into a proper string as soon as possible
resolve_ref(): only follow a symlink that contains a valid, normalized refname
resolve_ref(): use prefixcmp()
resolve_ref(): explicitly fail if a symlink is not readable
Change check_refname_format() to reject unnormalized refnames
Inline function refname_format_print()
Make collapse_slashes() allocate memory for its result
Do not allow ".lock" at the end of any refname component
Refactor check_refname_format()
Change check_ref_format() to take a flags argument
Change bad_ref_char() to return a boolean value
...

Merge branch 'mh/iterate-refs'Junio C Hamano Mon, 10 Oct 2011 22:56:18 +0000 (15:56 -0700)

Merge branch 'mh/iterate-refs'

* mh/iterate-refs:
refs.c: make create_cached_refs() static
Retain caches of submodule refs
Store the submodule name in struct cached_refs
Allocate cached_refs objects dynamically
Change the signature of read_packed_refs()
Access reference caches only through new function get_cached_refs()
Extract a function clear_cached_refs()

Merge branch 'jm/mergetool-pathspec'Junio C Hamano Mon, 10 Oct 2011 22:56:18 +0000 (15:56 -0700)

Merge branch 'jm/mergetool-pathspec'

* jm/mergetool-pathspec:
mergetool: no longer need to save standard input
mergetool: Use args as pathspec to unmerged files

Merge branch 'jc/maint-diffstat-numstat-context'Junio C Hamano Mon, 10 Oct 2011 22:56:18 +0000 (15:56 -0700)

Merge branch 'jc/maint-diffstat-numstat-context'

* jc/maint-diffstat-numstat-context:
diff: teach --stat/--numstat to honor -U$num

Merge branch 'mz/remote-rename'Junio C Hamano Mon, 10 Oct 2011 22:56:17 +0000 (15:56 -0700)

Merge branch 'mz/remote-rename'

* mz/remote-rename:
remote: only update remote-tracking branch if updating refspec
remote rename: warn when refspec was not updated
remote: "rename o foo" should not rename ref "origin/bar"
remote: write correct fetch spec when renaming remote 'remote'

Merge branch 'cb/common-prefix-unification'Junio C Hamano Mon, 10 Oct 2011 22:56:17 +0000 (15:56 -0700)

Merge branch 'cb/common-prefix-unification'

* cb/common-prefix-unification:
rename pathspec_prefix() to common_prefix() and move to dir.[ch]
consolidate pathspec_prefix and common_prefix
remove prefix argument from pathspec_prefix

Merge branch 'jn/maint-http-error-message'Junio C Hamano Mon, 10 Oct 2011 22:56:17 +0000 (15:56 -0700)

Merge branch 'jn/maint-http-error-message'

* jn/maint-http-error-message:
http: avoid empty error messages for some curl errors
http: remove extra newline in error message

Merge branch 'hv/submodule-update-none'Junio C Hamano Mon, 10 Oct 2011 22:56:17 +0000 (15:56 -0700)

Merge branch 'hv/submodule-update-none'

* hv/submodule-update-none:
add update 'none' flag to disable update of submodule by default
submodule: move update configuration variable further up

Merge branch 'fg/submodule-git-file-git-dir'Junio C Hamano Mon, 10 Oct 2011 22:56:16 +0000 (15:56 -0700)

Merge branch 'fg/submodule-git-file-git-dir'

* fg/submodule-git-file-git-dir:
Move git-dir for submodules
rev-parse: add option --resolve-git-dir <path>

Conflicts:
cache.h
git-submodule.sh

config: display key_delim for config --bool --get-regexpMatthieu Moy Mon, 10 Oct 2011 12:54:51 +0000 (14:54 +0200)

config: display key_delim for config --bool --get-regexp

The previous logic in show_config was to print the delimiter when the
value was set, but Boolean variables have an implicit value "true" when
they appear with no value in the config file. As a result, we got:

git_Config --get-regexp '.*\.Boolean' #1. Ok: example.boolean
git_Config --bool --get-regexp '.*\.Boolean' #2. NO: example.booleantrue

Fix this by defering the display of the separator until after the value
to display has been computed.

Reported-by: Brian Foster <brian.foster@maxim-ic.com>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refs.c: free duplicate entries in the ref array instead... Brandon Casey Sat, 8 Oct 2011 03:20:22 +0000 (22:20 -0500)

refs.c: free duplicate entries in the ref array instead of leaking them

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refs.c: abort ref search if ref array is emptyBrandon Casey Sat, 8 Oct 2011 03:20:21 +0000 (22:20 -0500)

refs.c: abort ref search if ref array is empty

The bsearch() implementation on IRIX 6.5 segfaults if it is passed NULL
for the base array argument even if number-of-elements is zero. So, let's
work around it by detecting an empty array and aborting early.

This is a useful optimization in its own right anyway, since we avoid a
useless allocation and initialization of the ref_entry when the ref array
is empty.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refs.c: ensure struct whose member may be passed to... Brandon Casey Sat, 8 Oct 2011 03:20:20 +0000 (22:20 -0500)

refs.c: ensure struct whose member may be passed to realloc is initialized

The variable "refs" is allocated on the stack but is not initialized. It
is passed to read_packed_refs(), and its struct members may eventually be
passed to add_ref() and ALLOC_GROW(). Since the structure has not been
initialized, its members may contain random non-zero values. So let's
initialize it.

The call sequence looks something like this:

resolve_gitlink_packed_ref(...) {

struct cached_refs refs;
...
read_packed_refs(f, &refs);
...
}

read_packed_refs(FILE*, struct cached_refs *cached_refs) {
...
add_ref(name, sha1, flag, &cached_refs->packed, &last);
...
}

add_ref(..., struct ref_array *refs, struct ref_entry **) {
...
ALLOC_GROW(refs->refs, refs->nr + 1, refs->alloc);
}

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: unite --format and --pretty for 'log' and... SZEDER Gábor Sat, 8 Oct 2011 01:09:34 +0000 (03:09 +0200)

completion: unite --format and --pretty for 'log' and 'show'

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

completion: unite --reuse-message and --reedit-message... SZEDER Gábor Sat, 8 Oct 2011 01:06:34 +0000 (03:06 +0200)

completion: unite --reuse-message and --reedit-message for 'notes'

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

Fix some "variable might be used uninitialized" warningsRamsay Jones Sun, 11 Sep 2011 19:39:32 +0000 (20:39 +0100)

Fix some "variable might be used uninitialized" warnings

In particular, gcc complains as follows:

CC tree-walk.o
tree-walk.c: In function `traverse_trees':
tree-walk.c:347: warning: 'e' might be used uninitialized in this \
function

CC builtin/revert.o
builtin/revert.c: In function `verify_opt_mutually_compatible':
builtin/revert.c:113: warning: 'opt2' might be used uninitialized in \
this function

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

Makefile: fix permissions of mergetools/ checked out... Junio C Hamano Sun, 9 Oct 2011 19:59:44 +0000 (12:59 -0700)

Makefile: fix permissions of mergetools/ checked out with permissive umask

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

Makefile: fix permissions of mergetools/ checked out... Jonathan Nieder Sun, 9 Oct 2011 09:17:07 +0000 (04:17 -0500)

Makefile: fix permissions of mergetools/ checked out with permissive umask

Ever since mergetool--lib was split into multiple files in
v1.7.7-rc0~3^2~1 (2011-08-18), the Makefile takes care to reset umask
and use tar --no-owner when installing merge tool definitions to
$(gitexecdir)/mergetools/. Unfortunately it does not take into
account the possibility that the permission bits of the files being
copied might already be wrong.

Rather than fixing the "tar" incantation and making it even more
complicated, let's just use the "install" utility. This only means
losing the ability to install executables and subdirectories of
mergetools/, which wasn't used.

Noticed by installing from a copy of git checked out with umask 002.
Compare v1.6.0.3~81^2 (Fix permission bits on sources checked out with
an overtight umask, 2008-08-21).

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

fix phantom untracked files when core.ignorecase is setJeff King Thu, 6 Oct 2011 16:06:09 +0000 (12:06 -0400)

fix phantom untracked files when core.ignorecase is set

When core.ignorecase is turned on and there are stale index
entries, "git commit" can sometimes report directories as
untracked, even though they contain tracked files.

You can see an example of this with:

# make a case-insensitive repo
git init repo && cd repo &&
git config core.ignorecase true &&

# with some tracked files in a subdir
mkdir subdir &&
> subdir/one &&
> subdir/two &&
git add . &&
git commit -m base &&

# now make the index entries stale
touch subdir/* &&

# and then ask commit to update those entries and show
# us the status template
git commit -a

which will report "subdir/" as untracked, even though it
clearly contains two tracked files. What is happening in the
commit program is this:

1. We load the index, and for each entry, insert it into the index's
name_hash. In addition, if ignorecase is turned on, we make an
entry in the name_hash for the directory (e.g., "contrib/"), which
uses the following code from 5102c61's hash_index_entry_directories:

hash = hash_name(ce->name, ptr - ce->name);
if (!lookup_hash(hash, &istate->name_hash)) {
pos = insert_hash(hash, &istate->name_hash);
if (pos) {
ce->next = *pos;
*pos = ce;
}
}

Note that we only add the directory entry if there is not already an
entry.

2. We run add_files_to_cache, which gets updated information for each
cache entry. It helpfully inserts this information into the cache,
which calls replace_index_entry. This in turn calls
remove_name_hash() on the old entry, and add_name_hash() on the new
one. But remove_name_hash doesn't actually remove from the hash, it
only marks it as "no longer interesting" (from cache.h):

/*
* We don't actually *remove* it, we can just mark it invalid so that
* we won't find it in lookups.
*
* Not only would we have to search the lists (simple enough), but
* we'd also have to rehash other hash buckets in case this makes the
* hash bucket empty (common). So it's much better to just mark
* it.
*/
static inline void remove_name_hash(struct cache_entry *ce)
{
ce->ce_flags |= CE_UNHASHED;
}

This is OK in the specific-file case, since the entries in the hash
form a linked list, and we can just skip the "not here anymore"
entries during lookup.

But for the directory hash entry, we will _not_ write a new entry,
because there is already one there: the old one that is actually no
longer interesting!

3. While traversing the directories, we end up in the
directory_exists_in_index_icase function to see if a directory is
interesting. This in turn checks index_name_exists, which will
look up the directory in the index's name_hash. We see the old,
deleted record, and assume there is nothing interesting. The
directory gets marked as untracked, even though there are index
entries in it.

The problem is in the code I showed above:

hash = hash_name(ce->name, ptr - ce->name);
if (!lookup_hash(hash, &istate->name_hash)) {
pos = insert_hash(hash, &istate->name_hash);
if (pos) {
ce->next = *pos;
*pos = ce;
}
}

Having a single cache entry that represents the directory is
not enough; that entry may go away if the index is changed.
It may be tempting to say that the problem is in our removal
method; if we removed the entry entirely instead of simply
marking it as "not here anymore", then we would know we need
to insert a new entry. But that only covers this particular
case of remove-replace. In the more general case, consider
something like this:

1. We add "foo/bar" and "foo/baz" to the index. Each gets
their own entry in name_hash, plus we make a "foo/"
entry that points to "foo/bar".

2. We remove the "foo/bar" entry from the index, and from
the name_hash.

3. We ask if "foo/" exists, and see no entry, even though
"foo/baz" exists.

So we need that directory entry to have the list of _all_
cache entries that indicate that the directory is tracked.
So that implies making a linked list as we do for other
entries, like:

hash = hash_name(ce->name, ptr - ce->name);
pos = insert_hash(hash, &istate->name_hash);
if (pos) {
ce->next = *pos;
*pos = ce;
}

But that's not right either. In fact, it shows a second bug
in the current code, which is that the "ce->next" pointer is
supposed to be linking entries for a specific filename
entry, but here we are overwriting it for the directory
entry. So the same cache entry ends up in two linked lists,
but they share the same "next" pointer.

As it turns out, this second bug can't be triggered in the
current code. The "if (pos)" conditional is totally dead
code; pos will only be non-NULL if there was an existing
hash entry, and we already checked that there wasn't one
through our call to lookup_hash.

But fixing the first bug means taking out that call to
lookup_hash, which is going to activate the buggy dead code,
and we'll end up splicing the two linked lists together.

So we need to have a separate next pointer for the list in
the directory bucket, and we need to traverse that list in
index_name_exists when we are looking up a directory.

This bloats "struct cache_entry" by a few bytes. Which is
annoying, because it's only necessary when core.ignorecase
is enabled. There's not an easy way around it, short of
separating out the "next" pointers from cache_entry entirely
(i.e., having a separate "cache_entry_list" struct that gets
stored in the name_hash). In practice, it probably doesn't
matter; we have thousands of cache entries, compared to the
millions of objects (where adding 4 bytes to the struct
actually does impact performance).

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

fetch: plug two leaks on error exit in store_updated_refsTay Ray Chuan Fri, 7 Oct 2011 07:40:22 +0000 (15:40 +0800)

fetch: plug two leaks on error exit in store_updated_refs

Close FETCH_HEAD and release the string url even if we have to leave the
function store_updated_refs() early.

Reported-by: Chris Wilson <cwilson@vigilantsw.com>
Helped-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: avoid using strbuf in syslogErik Faye-Lund Thu, 6 Oct 2011 17:52:48 +0000 (19:52 +0200)

mingw: avoid using strbuf in syslog

strbuf can call die, which again can call syslog from git-daemon.

Endless recursion is no fun; fix it by hand-rolling the logic. As
a side-effect malloc/realloc errors are changed into non-fatal
warnings; this is probably an improvement anyway.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Noticed-by: Johannes Sixt <j.sixt@viscovery.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: deal with unknown files when pressing the... Heiko Voigt Fri, 27 May 2011 15:40:24 +0000 (17:40 +0200)

git-gui: deal with unknown files when pressing the "Stage Changed" button

As a shortcut the "Stage Changed" button can be used to stage all current
changes in the worktree which are not set to ignore. Previously unknown
files would be ignored. The user might want to say: "Just save everything
in my worktree". To support this workflow we now ask whether the user also
wants to stage the unknown files if there are some present.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

completion: push --set-upstreamTeemu Matilainen Thu, 6 Oct 2011 18:40:31 +0000 (21:40 +0300)

completion: push --set-upstream

Signed-off-by: Teemu Matilainen <teemu.matilainen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: commit --fixup and --squashTeemu Matilainen Thu, 6 Oct 2011 18:40:30 +0000 (21:40 +0300)

completion: commit --fixup and --squash

Signed-off-by: Teemu Matilainen <teemu.matilainen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: unite --reuse-message and --reedit-message... Teemu Matilainen Thu, 6 Oct 2011 18:40:29 +0000 (21:40 +0300)

completion: unite --reuse-message and --reedit-message handling

Signed-off-by: Teemu Matilainen <teemu.matilainen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge-one-file: fix "expr: non-numeric argument"Jay Soffian Thu, 6 Oct 2011 18:25:55 +0000 (14:25 -0400)

merge-one-file: fix "expr: non-numeric argument"

When invoking expr to compare two numbers, don't quote the
variables which are the output of 'wc -c'. On OS X, this output
includes spaces, which expr balks at:

$ sz0=`wc -c </etc/passwd`
$ sz1=`wc -c </etc/passwd`
$ echo "'$sz0'"
' 3667'

$ expr "$sz0" \< "$sz1" \* 2
expr: non-numeric argument

$ expr $sz0 \< $sz1 \* 2
1

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ident: do not retrieve default ident when unnecessaryJonathan Nieder Thu, 6 Oct 2011 17:17:19 +0000 (12:17 -0500)

ident: do not retrieve default ident when unnecessary

Avoid a getpwuid() call (which contacts the network if the password
database is not local), read of /etc/mailname, gethostname() call, and
reverse DNS lookup if the user has already chosen a name and email
through configuration, the environment, or the command line.

This should slightly speed up commands like "git commit". More
importantly, it improves error reporting when computation of the
default ident string does not go smoothly. For example, after
detecting a problem (e.g., "warning: cannot open /etc/mailname:
Permission denied") in retrieving the default committer identity:

touch /etc/mailname; # as root
chmod -r /etc/mailname; # as root
git commit -m 'test commit'

you can squelch the warning while waiting for your sysadmin to fix the
permissions problem.

echo '[user] email = me@example.com' >>~/.gitconfig

Inspired-by: Johannes Sixt <j6t@kdgb.org>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add_ref(): verify that the refname is formatted correctlyMichael Haggerty Thu, 15 Sep 2011 21:10:43 +0000 (23:10 +0200)

add_ref(): verify that the refname is formatted correctly

In add_ref(), verify that the refname is formatted correctly before
adding it to the ref_list. Here we have to allow refname components
that start with ".", since (for example) the remote protocol uses
synthetic reference name ".have". So add a new REFNAME_DOT_COMPONENT
flag that can be passed to check_refname_format() to allow leading
dots.

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