Code

git.git
12 years agoparse-options: allow positivation of options starting, with no-
René Scharfe [Sat, 25 Feb 2012 19:14:54 +0000 (20:14 +0100)]
parse-options: allow positivation of options starting, with no-

Long options can be negated by adding no- right after the leading
two dashes. This is useful e.g. to override options set by aliases.

For options that are defined to start with no- already, this looks
a bit funny. Allow such options to also be negated by removing the
prefix.

The following thirteen options are affected:

apply          --no-add
bisect--helper --no-checkout
checkout-index --no-create
clone          --no-checkout --no-hardlinks
commit         --no-verify   --no-post-rewrite
format-patch   --no-binary
hash-object    --no-filters
read-tree      --no-sparse-checkout
revert         --no-commit
show-branch    --no-name
update-ref     --no-deref

The following five are NOT affected because they are defined with
PARSE_OPT_NONEG or the non-negated version is defined as well:

branch       --no-merged
format-patch --no-stat             --no-numbered
update-index --no-assume-unchanged --no-skip-worktree

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest-parse-options: convert to OPT_BOOL()
René Scharfe [Sat, 25 Feb 2012 19:11:16 +0000 (20:11 +0100)]
test-parse-options: convert to OPT_BOOL()

Introduce OPT_BOOL() to test-parse-options and add some tests for
these "true" boolean options. Rename OPT_BOOLEAN to OPT_COUNTUP and
OPTION_BOOLEAN to OPTION_COUNTUP as well.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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()

13 years agoMerge 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

13 years agot5403: convert leading spaces to tabs
Nguyễ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>
13 years agoUpdate draft release notes to 1.7.8
Junio 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>
13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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
  ...

13 years agoMerge 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()

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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'

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agoMerge 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

13 years agorefs.c: free duplicate entries in the ref array instead of leaking them
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>
13 years agorefs.c: abort ref search if ref array is empty
Brandon 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>
13 years agorefs.c: ensure struct whose member may be passed to realloc is initialized
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>
13 years agoFix some "variable might be used uninitialized" warnings
Ramsay 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>
13 years agoMakefile: fix permissions of mergetools/ checked out with permissive umask
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>
13 years agoMakefile: fix permissions of mergetools/ checked out with permissive umask
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>
13 years agoadd_ref(): verify that the refname is formatted correctly
Michael 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>
13 years agoresolve_ref(): expand documentation
Michael Haggerty [Thu, 15 Sep 2011 21:10:42 +0000 (23:10 +0200)]
resolve_ref(): expand documentation

Record information about resolve_ref(), hard-won via reverse
engineering, in a comment for future spelunkers.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): also treat a too-long SHA1 as invalid
Michael Haggerty [Thu, 15 Sep 2011 21:10:41 +0000 (23:10 +0200)]
resolve_ref(): also treat a too-long SHA1 as invalid

If the SHA1 in a reference file is not terminated by a space or
end-of-file, consider it malformed and emit a warning.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): emit warnings for improperly-formatted references
Michael Haggerty [Thu, 15 Sep 2011 21:10:40 +0000 (23:10 +0200)]
resolve_ref(): emit warnings for improperly-formatted references

While resolving references, if a reference is found that is in an
unrecognized format, emit a warning (and then fail, as before).
Wouldn't *you* want to know?

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): verify that the input refname has the right format
Michael Haggerty [Thu, 15 Sep 2011 21:10:39 +0000 (23:10 +0200)]
resolve_ref(): verify that the input refname has the right format

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoremote: avoid passing NULL to read_ref()
Michael Haggerty [Thu, 15 Sep 2011 21:10:38 +0000 (23:10 +0200)]
remote: avoid passing NULL to read_ref()

read_ref() can (and in test t5800, actually *does*) return NULL.
Don't pass the NULL along to read_ref().  Coincidentally, this mistake
didn't make resolve_ref() blow up, but upcoming changes to
resolve_ref() will make it less forgiving.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoremote: use xstrdup() instead of strdup()
Michael Haggerty [Thu, 15 Sep 2011 21:10:37 +0000 (23:10 +0200)]
remote: use xstrdup() instead of strdup()

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): do not follow incorrectly-formatted symbolic refs
Michael Haggerty [Thu, 15 Sep 2011 21:10:36 +0000 (23:10 +0200)]
resolve_ref(): do not follow incorrectly-formatted symbolic refs

Emit a warning and fail if a symbolic reference refers to an
incorrectly-formatted refname.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): extract a function get_packed_ref()
Michael Haggerty [Thu, 15 Sep 2011 21:10:35 +0000 (23:10 +0200)]
resolve_ref(): extract a function get_packed_ref()

Making it a function and giving it a name makes the code clearer.  I
also have a strong suspicion that the function will find other uses in
the future.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): turn buffer into a proper string as soon as possible
Michael Haggerty [Thu, 15 Sep 2011 21:10:34 +0000 (23:10 +0200)]
resolve_ref(): turn buffer into a proper string as soon as possible

Immediately strip off trailing spaces and null-terminate the string
holding the contents of the reference file; this allows the use of
string functions and avoids the need to keep separate track of the
string's length.  (get_sha1_hex() fails automatically if the string is
too short.)

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): only follow a symlink that contains a valid, normalized refname
Michael Haggerty [Thu, 15 Sep 2011 21:10:33 +0000 (23:10 +0200)]
resolve_ref(): only follow a symlink that contains a valid, normalized refname

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): use prefixcmp()
Michael Haggerty [Thu, 15 Sep 2011 21:10:32 +0000 (23:10 +0200)]
resolve_ref(): use prefixcmp()

Terminate the link content string one step earlier, allowing
prefixcmp() to be used instead of the less clear memcmp().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoresolve_ref(): explicitly fail if a symlink is not readable
Michael Haggerty [Thu, 15 Sep 2011 21:10:31 +0000 (23:10 +0200)]
resolve_ref(): explicitly fail if a symlink is not readable

Previously the failure came later, after a few steps in which the
length was treated like the actual length of a string.  Even though
the old code gave the same answers, it was somewhat misleading.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoChange check_refname_format() to reject unnormalized refnames
Michael Haggerty [Thu, 15 Sep 2011 21:10:30 +0000 (23:10 +0200)]
Change check_refname_format() to reject unnormalized refnames

Since much of the infrastructure does not work correctly with
unnormalized refnames, change check_refname_format() to reject them.

Similarly, change "git check-ref-format" to reject unnormalized
refnames by default.  But add an option --normalize, which causes "git
check-ref-format" to normalize the refname before checking its format,
and print the normalized refname.  This is exactly the behavior of the
old --print option, which is retained but deprecated.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoInline function refname_format_print()
Michael Haggerty [Thu, 15 Sep 2011 21:10:29 +0000 (23:10 +0200)]
Inline function refname_format_print()

Soon we will make printing independent of collapsing.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMake collapse_slashes() allocate memory for its result
Michael Haggerty [Thu, 15 Sep 2011 21:10:28 +0000 (23:10 +0200)]
Make collapse_slashes() allocate memory for its result

This will make upcoming changes a tiny bit easier.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDo not allow ".lock" at the end of any refname component
Michael Haggerty [Thu, 15 Sep 2011 21:10:27 +0000 (23:10 +0200)]
Do not allow ".lock" at the end of any refname component

Allowing any refname component to end with ".lock" is looking for
trouble; for example,

    $ git br foo.lock/bar
    $ git br foo
    fatal: Unable to create '[...]/.git/refs/heads/foo.lock': File exists.

Therefore, do not allow any refname component to end with ".lock".

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoRefactor check_refname_format()
Michael Haggerty [Thu, 15 Sep 2011 21:10:26 +0000 (23:10 +0200)]
Refactor check_refname_format()

Among other things, extract a function check_refname_component().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoChange check_ref_format() to take a flags argument
Michael Haggerty [Thu, 15 Sep 2011 21:10:25 +0000 (23:10 +0200)]
Change check_ref_format() to take a flags argument

Change check_ref_format() to take a flags argument that indicates what
is acceptable in the reference name (analogous to "git
check-ref-format"'s "--allow-onelevel" and "--refspec-pattern").  This
is more convenient for callers and also fixes a failure in the test
suite (and likely elsewhere in the code) by enabling "onelevel" and
"refspec-pattern" to be allowed independently of each other.

Also rename check_ref_format() to check_refname_format() to make it
obvious that it deals with refnames rather than references themselves.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoChange bad_ref_char() to return a boolean value
Michael Haggerty [Thu, 15 Sep 2011 21:10:24 +0000 (23:10 +0200)]
Change bad_ref_char() to return a boolean value

Previously most bad characters were indicated by returning 1, but "*"
was special-cased to return 2 instead of 1.  One caller examined the
return value to see whether the special case occurred.

But it is easier (to document and understand) for bad_ref_char()
simply to return a boolean value, treating "*" like any other bad
character.  Special-case the handling of "*" (which only occurs in
very specific circumstances) at the caller.  The resulting calling
code thereby also becomes more transparent.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit check-ref-format: add options --allow-onelevel and --refspec-pattern
Michael Haggerty [Thu, 15 Sep 2011 21:10:23 +0000 (23:10 +0200)]
git check-ref-format: add options --allow-onelevel and --refspec-pattern

Also add tests of the new options.  (Actually, one big reason to add
the new options is to make it easy to test check_ref_format(), though
the options should also be useful to other scripts.)

Interpret the result of check_ref_format() based on which types of
refnames are allowed.  However, because check_ref_format() can only
return a single value, one test case is still broken.  Specifically,
the case "git check-ref-format --onelevel '*'" incorrectly succeeds
because check_ref_format() returns CHECK_REF_FORMAT_ONELEVEL for this
refname even though the refname is also CHECK_REF_FORMAT_WILDCARD.
The type of check that leads to this failure is used elsewhere in
"real" code and could lead to bugs; it will be fixed over the next few
commits.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot1402: add some more tests
Michael Haggerty [Thu, 15 Sep 2011 21:10:22 +0000 (23:10 +0200)]
t1402: add some more tests

The new tests reflect the status quo.  Soon the rule for "*.lock" in
refname components will be tightened up.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoget_sha1_hex(): do not read past a NUL character
Michael Haggerty [Fri, 23 Sep 2011 13:38:36 +0000 (15:38 +0200)]
get_sha1_hex(): do not read past a NUL character

Previously, get_sha1_hex() would read one character past the end of a
null-terminated string whose strlen was an even number less than 40.
Although the function correctly returned -1 in these cases, the extra
memory access might have been to uninitialized (or even, conceivably,
unallocated) memory.

Add a check to avoid reading past the end of a string.

This problem was discovered by Thomas Rast <trast@student.ethz.ch>
using valgrind.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoPost 1.7.7 first wave
Junio C Hamano [Wed, 5 Oct 2011 19:54:35 +0000 (12:54 -0700)]
Post 1.7.7 first wave

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'mm/mediawiki-as-a-remote'
Junio C Hamano [Wed, 5 Oct 2011 19:36:27 +0000 (12:36 -0700)]
Merge branch 'mm/mediawiki-as-a-remote'

* mm/mediawiki-as-a-remote:
  git-remote-mediawiki: allow a domain to be set for authentication
  git-remote-mediawiki: obey advice.pushNonFastForward
  git-remote-mediawiki: set 'basetimestamp' to let the wiki handle conflicts
  git-remote-mediawiki: trivial fixes
  git-remote-mediawiki: allow push to set MediaWiki metadata
  Add a remote helper to interact with mediawiki (fetch & push)

13 years agoMerge branch 'js/check-attr-cached'
Junio C Hamano [Wed, 5 Oct 2011 19:36:27 +0000 (12:36 -0700)]
Merge branch 'js/check-attr-cached'

* js/check-attr-cached:
  t0003: remove extra whitespaces
  Teach '--cached' option to check-attr

13 years agoMerge branch 'rj/maint-t9159-svn-rev-notation'
Junio C Hamano [Wed, 5 Oct 2011 19:36:26 +0000 (12:36 -0700)]
Merge branch 'rj/maint-t9159-svn-rev-notation'

* rj/maint-t9159-svn-rev-notation:
  t9159-*.sh: skip for mergeinfo test for svn <= 1.4

13 years agoMerge branch 'cn/eradicate-working-copy'
Junio C Hamano [Wed, 5 Oct 2011 19:36:26 +0000 (12:36 -0700)]
Merge branch 'cn/eradicate-working-copy'

* cn/eradicate-working-copy:
  Remove 'working copy' from the documentation and C code

13 years agoMerge branch 'jn/gitweb-highlite-sanitise'
Junio C Hamano [Wed, 5 Oct 2011 19:36:26 +0000 (12:36 -0700)]
Merge branch 'jn/gitweb-highlite-sanitise'

* jn/gitweb-highlite-sanitise:
  gitweb: Strip non-printable characters from syntax highlighter output

13 years agoMerge branch 'jc/ls-remote-short-help'
Junio C Hamano [Wed, 5 Oct 2011 19:36:26 +0000 (12:36 -0700)]
Merge branch 'jc/ls-remote-short-help'

* jc/ls-remote-short-help:
  ls-remote: a lone "-h" is asking for help

13 years agoMerge branch 'sn/doc-update-index-assume-unchanged'
Junio C Hamano [Wed, 5 Oct 2011 19:36:25 +0000 (12:36 -0700)]
Merge branch 'sn/doc-update-index-assume-unchanged'

* sn/doc-update-index-assume-unchanged:
  Documentation/git-update-index: refer to 'ls-files'

13 years agoMerge branch 'mg/maint-doc-sparse-checkout'
Junio C Hamano [Wed, 5 Oct 2011 19:36:25 +0000 (12:36 -0700)]
Merge branch 'mg/maint-doc-sparse-checkout'

* mg/maint-doc-sparse-checkout:
  git-read-tree.txt: correct sparse-checkout and skip-worktree description
  git-read-tree.txt: language and typography fixes
  unpack-trees: print "Aborting" to stderr

13 years agoMerge branch 'jk/argv-array'
Junio C Hamano [Wed, 5 Oct 2011 19:36:24 +0000 (12:36 -0700)]
Merge branch 'jk/argv-array'

* jk/argv-array:
  run_hook: use argv_array API
  checkout: use argv_array API
  bisect: use argv_array API
  quote: provide sq_dequote_to_argv_array
  refactor argv_array into generic code
  quote.h: fix bogus comment
  add sha1_array API docs

13 years agoMerge branch 'tr/doc-note-rewrite'
Junio C Hamano [Wed, 5 Oct 2011 19:36:24 +0000 (12:36 -0700)]
Merge branch 'tr/doc-note-rewrite'

* tr/doc-note-rewrite:
  Documentation: basic configuration of notes.rewriteRef

13 years agoMerge branch 'mg/branch-list'
Junio C Hamano [Wed, 5 Oct 2011 19:36:23 +0000 (12:36 -0700)]
Merge branch 'mg/branch-list'

* mg/branch-list:
  t3200: clean up checks for file existence
  branch: -v does not automatically imply --list
  branch: allow pattern arguments
  branch: introduce --list option
  git-branch: introduce missing long forms for the options
  git-tag: introduce long forms for the options
  t6040: test branch -vv

Conflicts:
Documentation/git-tag.txt
t/t3200-branch.sh

13 years agoMerge branch 'cb/send-email-help'
Junio C Hamano [Wed, 5 Oct 2011 19:36:23 +0000 (12:36 -0700)]
Merge branch 'cb/send-email-help'

* cb/send-email-help:
  send-email: add option -h

13 years agoMerge branch 'fk/use-kwset-pickaxe-grep-f'
Junio C Hamano [Wed, 5 Oct 2011 19:36:22 +0000 (12:36 -0700)]
Merge branch 'fk/use-kwset-pickaxe-grep-f'

* fk/use-kwset-pickaxe-grep-f:
  obstack.c: Fix some sparse warnings
  sparse: Fix an "Using plain integer as NULL pointer" warning

13 years agoMerge branch 'jk/for-each-ref'
Junio C Hamano [Wed, 5 Oct 2011 19:36:22 +0000 (12:36 -0700)]
Merge branch 'jk/for-each-ref'

* jk/for-each-ref:
  for-each-ref: add split message parts to %(contents:*).
  for-each-ref: handle multiline subjects like --pretty
  for-each-ref: refactor subject and body placeholder parsing
  t6300: add more body-parsing tests
  t7004: factor out gpg setup

13 years agoMerge branch 'wh/normalize-alt-odb-path'
Junio C Hamano [Wed, 5 Oct 2011 19:36:22 +0000 (12:36 -0700)]
Merge branch 'wh/normalize-alt-odb-path'

* wh/normalize-alt-odb-path:
  sha1_file: normalize alt_odb path before comparing and storing

13 years agoMerge branch 'jc/run-receive-hook-cleanup'
Junio C Hamano [Wed, 5 Oct 2011 19:36:22 +0000 (12:36 -0700)]
Merge branch 'jc/run-receive-hook-cleanup'

* jc/run-receive-hook-cleanup:
  refactor run_receive_hook()

13 years agoMerge branch 'hl/iso8601-more-zone-formats'
Junio C Hamano [Wed, 5 Oct 2011 19:36:22 +0000 (12:36 -0700)]
Merge branch 'hl/iso8601-more-zone-formats'

* hl/iso8601-more-zone-formats:
  date.c: Support iso8601 timezone formats

13 years agoMerge branch 'rj/quietly-create-dep-dir'
Junio C Hamano [Wed, 5 Oct 2011 19:36:21 +0000 (12:36 -0700)]
Merge branch 'rj/quietly-create-dep-dir'

* rj/quietly-create-dep-dir:
  Makefile: Make dependency directory creation less noisy

13 years agoMerge branch 'jc/receive-verify'
Junio C Hamano [Wed, 5 Oct 2011 19:36:21 +0000 (12:36 -0700)]
Merge branch 'jc/receive-verify'

* jc/receive-verify:
  receive-pack: check connectivity before concluding "git push"
  check_everything_connected(): libify
  check_everything_connected(): refactor to use an iterator
  fetch: verify we have everything we need before updating our ref

Conflicts:
builtin/fetch.c

13 years agoMerge branch 'jc/fetch-verify'
Junio C Hamano [Wed, 5 Oct 2011 19:36:20 +0000 (12:36 -0700)]
Merge branch 'jc/fetch-verify'

* jc/fetch-verify:
  fetch: verify we have everything we need before updating our ref
  rev-list --verify-object
  list-objects: pass callback data to show_objects()

13 years agoMerge branch 'jc/fetch-pack-fsck-objects'
Junio C Hamano [Wed, 5 Oct 2011 19:36:20 +0000 (12:36 -0700)]
Merge branch 'jc/fetch-pack-fsck-objects'

* jc/fetch-pack-fsck-objects:
  test: fetch/receive with fsckobjects
  transfer.fsckobjects: unify fetch/receive.fsckobjects
  fetch.fsckobjects: verify downloaded objects

Conflicts:
Documentation/config.txt
builtin/fetch-pack.c

13 years agoMerge branch 'jc/traverse-commit-list'
Junio C Hamano [Wed, 5 Oct 2011 19:36:19 +0000 (12:36 -0700)]
Merge branch 'jc/traverse-commit-list'

* jc/traverse-commit-list:
  revision.c: update show_object_with_name() without using malloc()
  revision.c: add show_object_with_name() helper function
  rev-list: fix finish_object() call

13 years agoMerge branch 'rr/revert-cherry-pick-continue'
Junio C Hamano [Wed, 5 Oct 2011 19:36:19 +0000 (12:36 -0700)]
Merge branch 'rr/revert-cherry-pick-continue'

* rr/revert-cherry-pick-continue:
  builtin/revert.c: make commit_list_append() static
  revert: Propagate errors upwards from do_pick_commit
  revert: Introduce --continue to continue the operation
  revert: Don't implicitly stomp pending sequencer operation
  revert: Remove sequencer state when no commits are pending
  reset: Make reset remove the sequencer state
  revert: Introduce --reset to remove sequencer state
  revert: Make pick_commits functionally act on a commit list
  revert: Save command-line options for continuing operation
  revert: Save data for continuing after conflict resolution
  revert: Don't create invalid replay_opts in parse_args
  revert: Separate cmdline parsing from functional code
  revert: Introduce struct to keep command-line options
  revert: Eliminate global "commit" variable
  revert: Rename no_replay to record_origin
  revert: Don't check lone argument in get_encoding
  revert: Simplify and inline add_message_to_msg
  config: Introduce functions to write non-standard file
  advice: Introduce error_resolve_conflict

13 years agoMerge branch 'da/make-auto-header-dependencies'
Junio C Hamano [Wed, 5 Oct 2011 19:36:18 +0000 (12:36 -0700)]
Merge branch 'da/make-auto-header-dependencies'

* da/make-auto-header-dependencies:
  Makefile: Improve compiler header dependency check

13 years agoMerge branch 'gb/am-hg-patch'
Junio C Hamano [Wed, 5 Oct 2011 19:36:17 +0000 (12:36 -0700)]
Merge branch 'gb/am-hg-patch'

* gb/am-hg-patch:
  am: preliminary support for hg patches

13 years agoMerge branch 'bc/unstash-clean-crufts'
Junio C Hamano [Wed, 5 Oct 2011 19:36:17 +0000 (12:36 -0700)]
Merge branch 'bc/unstash-clean-crufts'

* bc/unstash-clean-crufts:
  git-stash: remove untracked/ignored directories when stashed
  t/t3905: add missing '&&' linkage
  git-stash.sh: fix typo in error message
  t/t3905: use the name 'actual' for test output, swap arguments to test_cmp

13 years agoMerge branch 'fk/make-auto-header-dependencies'
Junio C Hamano [Wed, 5 Oct 2011 19:36:16 +0000 (12:36 -0700)]
Merge branch 'fk/make-auto-header-dependencies'

* fk/make-auto-header-dependencies:
  Makefile: Use computed header dependencies if the compiler supports it

13 years agoMerge branch 'ms/patch-id-with-overlong-line'
Junio C Hamano [Wed, 5 Oct 2011 19:35:55 +0000 (12:35 -0700)]
Merge branch 'ms/patch-id-with-overlong-line'

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

13 years agoMerge branch 'jc/maint-bundle-too-quiet'
Junio C Hamano [Wed, 5 Oct 2011 19:35:55 +0000 (12:35 -0700)]
Merge branch 'jc/maint-bundle-too-quiet'

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

13 years agoMerge branch 'jk/filter-branch-require-clean-work-tree'
Junio C Hamano [Wed, 5 Oct 2011 19:35:55 +0000 (12:35 -0700)]
Merge branch 'jk/filter-branch-require-clean-work-tree'

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

13 years agoMerge branch 'jc/want-commit'
Junio C Hamano [Wed, 5 Oct 2011 19:35:55 +0000 (12:35 -0700)]
Merge branch 'jc/want-commit'

* jc/want-commit:
  Allow git merge ":/<pattern>"

13 years agoMerge branch 'jc/maint-fsck-fwrite-size-check'
Junio C Hamano [Wed, 5 Oct 2011 19:35:54 +0000 (12:35 -0700)]
Merge branch 'jc/maint-fsck-fwrite-size-check'

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

13 years agoMerge branch 'bk/ancestry-path'
Junio C Hamano [Wed, 5 Oct 2011 19:35:54 +0000 (12:35 -0700)]
Merge branch 'bk/ancestry-path'

* 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

13 years agoMerge branch 'jk/maint-fetch-submodule-check-fix'
Junio C Hamano [Wed, 5 Oct 2011 19:35:54 +0000 (12:35 -0700)]
Merge branch 'jk/maint-fetch-submodule-check-fix'

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

13 years agoMerge branch 'tr/mergetool-valgrind'
Junio C Hamano [Wed, 5 Oct 2011 19:35:53 +0000 (12:35 -0700)]
Merge branch 'tr/mergetool-valgrind'

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

13 years agoMerge branch 'nm/grep-object-sha1-lock'
Junio C Hamano [Wed, 5 Oct 2011 19:35:53 +0000 (12:35 -0700)]
Merge branch 'nm/grep-object-sha1-lock'

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

Conflicts:
builtin/grep.c

13 years agoMerge branch 'jc/diff-index-unpack'
Junio C Hamano [Wed, 5 Oct 2011 19:35:53 +0000 (12:35 -0700)]
Merge branch 'jc/diff-index-unpack'

* 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

13 years agoMerge branch 'mm/rebase-i-exec-edit'
Junio C Hamano [Wed, 5 Oct 2011 19:35:52 +0000 (12:35 -0700)]
Merge branch 'mm/rebase-i-exec-edit'

* 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

13 years agoname-rev: split usage string
René Scharfe [Sat, 1 Oct 2011 17:04:44 +0000 (19:04 +0200)]
name-rev: split usage string

Give each mode of operation (all, from stdin, given commits) its own usage
line to make it easier to see that they are mutually exclusive.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agotest-ctype: add test for is_pathspec_magic
René Scharfe [Sat, 1 Oct 2011 16:39:58 +0000 (18:39 +0200)]
test-ctype: add test for is_pathspec_magic

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agotest-ctype: macrofy
René Scharfe [Sat, 1 Oct 2011 16:36:14 +0000 (18:36 +0200)]
test-ctype: macrofy

Rewrite test-ctype to use a global variable and a macro instead of
wrapper functions for each character class and complicated structs
with loops going through them.  The resulting code may be uglier,
but that's OK for a test program, and it's actually easier to read
and extend.  And much shorter.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoGit 1.7.7 v1.7.7
Junio C Hamano [Fri, 30 Sep 2011 21:20:57 +0000 (14:20 -0700)]
Git 1.7.7

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agouse new Git::config_path() for aliasesfile
Cord Seele [Fri, 30 Sep 2011 10:52:25 +0000 (12:52 +0200)]
use new Git::config_path() for aliasesfile

Signed-off-by: Cord Seele <cowose@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoAdd Git::config_path()
Cord Seele [Fri, 30 Sep 2011 10:52:24 +0000 (12:52 +0200)]
Add Git::config_path()

Use --path option when calling 'git config' thus allow for pathname
expansion, e.g. a tilde.

Signed-off-by: Cord Seele <cowose@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorefs: Use binary search to lookup refs faster
Julian Phillips [Thu, 29 Sep 2011 22:11:42 +0000 (23:11 +0100)]
refs: Use binary search to lookup refs faster

Currently we linearly search through lists of refs when we need to
find a specific ref.  This can be very slow if we need to lookup a
large number of refs.  By changing to a binary search we can make this
faster.

In order to be able to use a binary search we need to change from
using linked lists to arrays, which we can manage using ALLOC_GROW.

We can now also use the standard library qsort function to sort the
refs arrays.

Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agosend-email: auth plain/login fix
Zbigniew Jędrzejewski-Szmek [Thu, 29 Sep 2011 17:02:45 +0000 (19:02 +0200)]
send-email: auth plain/login fix

git send-email was not authenticating properly when communicating over
TLS with a server supporting only AUTH PLAIN and AUTH LOGIN. This is
e.g. the standard server setup under debian with exim4 and probably
everywhere where system accounts are used.

The problem (only?) exists when libauthen-sasl-cyrus-perl
(Authen::SASL::Cyrus) is installed. Importing Authen::SASL::Perl
makes Authen::SASL use the perl implementation which works
better.

The solution is based on this forum thread:
http://www.perlmonks.org/?node_id=904354.

This patch is tested by sending it. Without this fix, the interaction with
the server failed like this:

$ git send-email --smtp-encryption=tls --smtp-server=... --smtp-debug=1 change1.patch
...
Net::SMTP::SSL=GLOB(0x238f668)<<< 250-AUTH LOGIN PLAIN
Password:
Net::SMTP::SSL=GLOB(0x238f668)>>> AUTH
Net::SMTP::SSL=GLOB(0x238f668)<<< 501 5.5.2 AUTH mechanism must be specified
5.5.2 AUTH mechanism must be specified

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agotree-walk: micro-optimization in tree_entry_interesting
Dan McGee [Fri, 9 Sep 2011 02:02:46 +0000 (21:02 -0500)]
tree-walk: micro-optimization in tree_entry_interesting

In the case of a wide breadth top-level tree (~2400 entries, all trees
in this case), we can see a noticeable cost in the profiler calling
strncmp() here. Most of the time we are at the base level of the
repository, so base is "" and baselen == 0, which means we will always
test true. Break out this one tiny case so we can short circuit the
strncmp() call.

Test cases are as follows. packages.git is the Arch Linux git-svn clone
of the packages repository which has the characteristics above.

Commands:
[1] packages.git, /usr/bin/time git log >/dev/null
[2] packages.git, /usr/bin/time git log -- autogen/trunk pacman/trunk wget/trunk >/dev/null
[3] linux.git, /usr/bin/time git log >/dev/null
[4] linux.git, /usr/bin/time git log -- drivers/ata drivers/uio tools >/dev/null

Results:
     before  after  %faster
[1]   2.56    2.55   0.4%
[2]  51.82   48.66   6.5%
[3]   5.58    5.61  -0.5%
[4]   1.55    1.51   0.2%

The takeaway here is this doesn't matter in many operations, but it does
for a certain style of repository and operation where it nets a 6.5%
measured improvement. The other changes are likely not significant by
reasonable statistics methods.

Note: the measured improvement when originally submitted was ~11% (43 to
38 secs) for operation [2]. At the time, the repository had 117220
commits; it now has 137537 commits.

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>