Commit Graph

31664 Commits

Author SHA1 Message Date
Junio C Hamano
4f60840058 Merge branch 'jn/apply-filename-with-sp' into next
* jn/apply-filename-with-sp:
  apply: handle traditional patches with space in filename
  tests: exercise "git apply" with weird filenames
  apply: split quoted filename handling into new function
2010-08-26 16:43:34 -07:00
Junio C Hamano
b4491c3132 Merge branch 'nd/clone-depth-zero' into next
* nd/clone-depth-zero:
  clone: warn users --depth is ignored in local clones
2010-08-26 16:43:34 -07:00
Junio C Hamano
b14989a23c Merge branch 'cb/maint-mergetool-no-tty' into next
* cb/maint-mergetool-no-tty:
  mergetool: Remove explicit references to /dev/tty

Conflicts:
	git-mergetool.sh
2010-08-26 16:43:33 -07:00
Junio C Hamano
e9084afaae Merge branch 'jn/maint-doc-user-manual-html-doctype' into next
* jn/maint-doc-user-manual-html-doctype:
  docs: fix Makefile dependency for user manual
  Documentation: set a !DOCTYPE for user manual
2010-08-26 16:43:33 -07:00
Junio C Hamano
af1c8191e5 Merge branch 'jl/submodule-ignore-diff' into next
* jl/submodule-ignore-diff:
  checkout: respect diff.ignoreSubmodules setting

Conflicts:
	builtin/checkout.c
2010-08-26 16:43:32 -07:00
Junio C Hamano
4281562e36 Merge branch 'js/maint-reflog-beyond-horizon' into next
* js/maint-reflog-beyond-horizon:
  rev-parse: tests git rev-parse --verify master@{n}, for various n
  sha1_name.c: use warning in preference to fprintf(stderr
  rev-parse: exit with non-zero status if ref@{n} is not valid.
2010-08-26 16:43:32 -07:00
Junio C Hamano
c5cc9d2827 Merge branch 'ab/compat-regex' into next
* ab/compat-regex:
  Fix compat/regex ANSIfication on MinGW
2010-08-26 16:43:31 -07:00
Junio C Hamano
f44f24b8f0 Merge branch 'master' into next
* master:
  for-each-ref: fix objectname:short bug
  tree-walk: Correct bitrotted comment about tree_entry()
  Fix 'git log' early pager startup error case
2010-08-26 16:43:23 -07:00
Junio C Hamano
515cc01019 Merge branch 'maint'
* maint:
  for-each-ref: fix objectname:short bug
  tree-walk: Correct bitrotted comment about tree_entry()
  Fix 'git log' early pager startup error case
2010-08-26 16:42:59 -07:00
Jay Soffian
ea16a030aa for-each-ref: fix objectname:short bug
When objectname:short was introduced, it forgot to copy the result of
find_unique_abbrev. Because the result of find_unique_abbrev is a
pointer to static buffer, this resulted in the same value being
substituted in for each ref.

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 16:42:25 -07:00
Elijah Newren
7e1ec0d415 diff_tree(): Skip skip_uninteresting() when all remaining paths interesting
In 1d848f6 (tree_entry_interesting(): allow it to say "everything is
interesting" 2007-03-21), both show_tree() and skip_uninteresting() were
modified to determine if all remaining tree entries were interesting.
However, the latter returns as soon as it finds the first interesting path,
without any way to signal to its caller (namely, diff_tree()) that all
remaining paths are interesting, making these extra checks useless.

Pass whether all remaining entries are interesting back to diff_tree(), and
whenever they are, have diff_tree() skip subsequent calls to
skip_uninteresting().

With this change, I measure speedups of 3-4% for the commands

  $ git rev-list --quiet HEAD -- Documentation/
  $ git rev-list --quiet HEAD -- t/

in git.git.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:53:36 -07:00
Elijah Newren
4a5e74feb1 tree_entry_interesting(): Make return value more specific
tree_entry_interesting() can signal to its callers not only if the given
entry matches one of the specified paths, but whether all remaining paths
will (or will not) match.  When no paths are specified, all paths are
considered interesting, so intead of returning 1 (this path is interesting)
return 2 (all paths are interesting).

This will allow the caller to avoid calling tree_entry_interesting() again,
which theoretically should speed up tree walking.  I am not able to measure
any actual gains in practice, but it certainly can not hurt and seems to
make the code more readable to me.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:53:36 -07:00
Elijah Newren
dabb061fa3 tree-walk: Correct bitrotted comment about tree_entry()
There was a code comment that referred to the "above two functions" but
over time the functions immediately preceding the comment have changed.
Just mention the relevant functions by name.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:53:35 -07:00
Elijah Newren
b6b987a094 Document pre-condition for tree_entry_interesting
tree_entry_interesting will fail to find appropriate matches if the base
directory path is not terminated with a slash.  Knowing this earlier would
have saved me some debugging time.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:53:35 -07:00
Johannes Sixt
ce518bbd6c Fix compat/regex ANSIfication on MinGW
compat/regexec.c had a weird combination of function declaration in ANSI
style and function definition in K&R style, for example:

 static unsigned
 re_copy_regs (struct re_registers *regs, regmatch_t *pmatch,
      int nregs, int regs_allocated) internal_function;

 static unsigned
 re_copy_regs (regs, pmatch, nregs, regs_allocated)
     struct re_registers *regs;
     regmatch_t *pmatch;
     int nregs, regs_allocated;
 { ... }

with this #define:

 #ifndef _LIBC
 # ifdef __i386__
 #  define internal_function   __attribute ((regparm (3), stdcall))
 # else
 #  define internal_function
 # endif
 #endif

The original version as shown above was fine, but with the ANSIfied
function definition and in the case where internal_function is not empty,
gcc identifies the declaration and definition as different and bails out.

Adding internal_function to the definition doesn't help (it results in
a syntax error); hence, remove it from the subset of declarations that gcc
flags as erroneous.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:25:53 -07:00
Justin Frankel
58a1ece478 merge-recursive --patience
Teach the merge-recursive strategy a --patience option to use the
"patience diff" algorithm, which tends to improve results when
cherry-picking a patch that reorders functions at the same time as
refactoring them.

To support this, struct merge_options and ll_merge_options gain an
xdl_opts member, so programs can use arbitrary xdiff flags (think
"XDF_IGNORE_WHITESPACE") in a git-aware merge.

git merge and git rebase can be passed the -Xpatience option to
use this.

[jn: split from --ignore-space patch; with documentation]

Signed-off-by: Justin Frankel <justin@cockos.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:20:03 -07:00
Jonathan Nieder
712516bcac ll-merge: replace flag argument with options struct
Keeping track of the flag bits is proving more trouble than it's
worth.  Instead, use a pointer to an options struct like most similar
APIs do.

Callers with no special requests can pass NULL to request the default
options.

Cc: Bert Wesarg <bert.wesarg@googlemail.com>
Cc: Avery Pennarun <apenwarr@gmail.com>
Helped-by: Justin Frankel <justin@cockos.com>
Helped-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:18:51 -07:00
Jonathan Nieder
635a7bb1d8 merge-recursive: expose merge options for builtin merge
There are two very similar blocks of code that recognize options for
the "recursive" merge strategy.  Unify them.

No functional change intended.

Cc: Avery Pennarun <apenwarr@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-26 09:05:02 -07:00
Johannes Schindelin
4598af0960 Fix compile error on MinGW
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-26 14:34:07 +02:00
Elijah Newren
2244eab01b tree-walk: Correct bitrotted comment about tree_entry()
There was a code comment that referred to the "above two functions" but
over time the functions immediately preceding the comment have changed.
Just mention the relevant functions by name.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-25 16:31:21 -07:00
Brandon Casey
3ee1757bae builtin/fetch.c: ignore merge config when not fetching from branch's remote
When 'git fetch' is supplied a single argument, it tries to match it
against a configured remote and then fetch the refs specified by the
named remote's fetchspec.  Additionally, or alternatively, if the current
branch has a merge ref configured, and if the name of the remote supplied
to fetch matches the one in the branch's configuration, then git also adds
the merge ref to the list of refs to update.

If the argument to fetch does not specify a named remote, or if the name
supplied does not match the remote configured for the current branch, then
the current branch's merge configuration should not be considered.

git currently mishandles the case when the argument to fetch specifies a
GIT URL(i.e. not a named remote) and the current branch has a configured
merge ref.  In this case, fetch should ignore the branch's merge ref and
attempt to fetch from the remote repository's HEAD branch.  But, since
fetch only checks _whether_ the current branch has a merge ref configured,
and does _not_ check whether the branch's configured remote matches the
command line argument (until later), it will mistakenly enter the wrong
branch of an 'if' statement and will not fall back to fetch the HEAD branch.
The fetch ends up doing nothing and returns with a successful zero status.

Fix this by comparing the remote repository's name to the branch's remote
name, in addition to whether it has a configured merge ref, sooner, so that
fetch can correctly decide whether the branch's configuration is interesting
or not, and fall back to fetching from the remote's HEAD branch when
appropriate.

This fixes the test in t5510.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-25 14:39:09 -07:00
Brandon Casey
6106ce4669 t/t5510: demonstrate failure to fetch when current branch has merge ref
When 'git fetch' is supplied just a repository URL (not a remote name),
and without a fetch refspec, it should fetch from the remote HEAD branch
and update FETCH_HEAD with the fetched ref.  Currently, when 'git fetch'
is called like this, it fails to retrieve anything, and does not update
FETCH_HEAD, if the current checked-out branch has a configured merge ref.

i.e. this fetch fails to retrieve anything nor update FETCH_HEAD:

   git checkout master
   git config branch.master.merge refs/heads/master
   git fetch git://git.kernel.org/pub/scm/git/git.git

but this one does:

   git config --unset branch.master.merge
   git fetch git://git.kernel.org/pub/scm/git/git.git

Add a test to demonstrate this flaw.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-25 14:29:46 -07:00
Johannes Schindelin
175f6e59f6 checkout: respect diff.ignoreSubmodules setting
When 'git checkout' reports uncommitted changes, it also does so for
submodules.

The default mode is now to look really hard into submodules, not only
for different commits, but also for modified files. Since this can be
pretty expensive when there are a lot (and large) submodules, there is
the diff.ignoreSubmodules option.

Let's respect that setting when 'git checkout' reports the uncommitted
changes, since it does nothing else than a 'git diff --name-status'.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-25 13:12:04 -07:00
Linus Torvalds
1fda91b511 Fix 'git log' early pager startup error case
We start the pager too early for several git commands, which results in
the errors sometimes going to the pager rather than show up as errors.

This is often hidden by the fact that we pass in '-X' to less by default,
which causes 'less' to exit for small output, but if you do

  export LESS=-S

you can then clearly see the problem by doing

  git log --prretty

which shows the error message ("fatal: unrecognized argument: --prretty")
being sent to the pager.

This happens for pretty much all git commands that use USE_PAGER, and then
check arguments separately. But "git diff" does it too early too (even
though it does an explicit setup_pager() call)

This only fixes it for the trivial "git log" family case.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-25 12:11:59 -07:00
Thomas Rast
5b32708177 Exhibit merge bug that clobbers index&WT
Running git-merge on an unborn branch is supposed to do an index-level
merge with the other side, and then update the branch name there.  In
the common case where the index was empty at the start, this makes
'git pull otherrepo branch' a convenient way to populate the history
after 'git init'.

However, if the index was *not* empty, git-merge silently discards
*both index and worktree* copies of all files that were tracked,
leading to data loss.  Exhibit this bug.

Reported-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-25 11:30:21 -07:00
Johannes Schindelin
0573c6bbb7 Rebasing merge to junio/next (49ea7b8) 2010-08-25 12:35:23 +02:00
Johannes Schindelin
f440fbed3e checkout: respect diff.ignoreSubmodules setting
When 'git checkout' reports uncommitted changes, it also does so for
submodules.

The default mode is now to look really hard into submodules, not only
for different commits, but also for modified files. Since this can be
pretty expensive when there are a lot (and large) submodules, there is
the diff.ignoreSubmodules option.

Let's respect that setting when 'git checkout' reports the uncommitted
changes, since it does nothing else than a 'git diff --name-status'.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:34:05 +02:00
Johannes Schindelin
f3638bd500 Fix typo in pack-objects' usage
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:31:51 +02:00
Johannes Schindelin
eed7a67bbb Give commit message reencoding for output on MinGW a chance
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:31:25 +02:00
Karsten Blees
e9be28f0e4 Warn if the Windows console font doesn't support Unicode
Unicode console output won't display correctly with default settings
because the default console font ("Terminal") only supports the system's
OEM charset. Unfortunately, this is a user specific setting, so it cannot
be easily fixed by e.g. some registry tricks in the setup program.

This change prints a warning on exit if console output contained non-ascii
characters and the console font is supposedly not a TrueType font (which
usually have decent Unicode support).

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:31:25 +02:00
Karsten Blees
eb728ee718 Detect console streams more reliably on Windows
GetStdHandle(STD_OUTPUT_HANDLE) doesn't work for stderr if stdout is
redirected. Use _get_osfhandle of the FILE* instead.

_isatty() is true for all character devices (including parallel and serial
ports). Check return value of GetConsoleScreenBufferInfo instead to
reliably detect console handles (also don't initialize internal state from
an uninitialized CONSOLE_SCREEN_BUFFER_INFO structure if the function
fails).

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:31:25 +02:00
Karsten Blees
4ba1bb0b54 Support Unicode console output on Windows
WriteConsoleW seems to be the only way to reliably print unicode to the
console (without weird code page conversions).

Also redirects vfprintf to the winansi.c version.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:31:24 +02:00
Karsten Blees
69035b8f15 Enable color output in Windows cmd.exe
Git requires the TERM environment variable to be set for all color*
settings. Simulate the TERM variable if it is not set (default on Windows).

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:31:24 +02:00
Chris West (Faux)
57916d5259 Fix another invocation of git from gitk with an overly long command-line
Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
2010-08-25 12:28:52 +02:00
Johannes Schindelin
4956135fd0 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Johannes Schindelin
9439967d26 Make sure that git_getpass() never returns NULL
The result of git_getpass() is used without checking for NULL, so let's
just die() instead of returning NULL.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Eric Sunshine
13a2cf3c25 Make mingw_offset_1st_component() behave consistently for all paths.
mingw_offset_1st_component() returns "foo" for inputs "/foo" and
"c:/foo", but inconsistently returns "/foo" for UNC input
"/machine/share/foo".  Fix it to return "foo" for all cases.

Reference: http://groups.google.com/group/msysgit/browse_thread/thread/c0af578549b5dda0

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Erik Faye-Lund
e4d5143840 config.c: trivial fix for compile-time warning
The warning ("builtin/config.c:351: warning: initialization
discards qualifiers from pointer target type") was introduced
in commit 6754497c.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Cezary Zawadka
2c28d74dce Allow using UNC path for git repository
[efl: moved MinGW-specific part to compat/]

[jes: fixed compilation on non-Windows]

Signed-off-by: Cezary Zawadka <czawadka@gmail.com>
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Eric Sunshine
de2ba333c0 Fix 'clone' failure at DOS root directory.
Cloning via relative path fails for a project residing immediately under
the root directory of a DOS drive.  For instance, for project c:/foo,
issuing "cd c:/" followed by "git clone foo bar" fails with error
"Unable to find remote helper for 'c'".  The problem is caused by
make_nonrelative_path() incorrectly returning c://foo rather than
c:/foo for input "foo".  The bogus path c://foo is misinterpreted by
transport_get() as a URL with unrecognized protocol "c", hence the
missing remote helper error.  Fix make_nonrelative_path() to return
c:/foo rather than c://foo (and /foo rather than //foo on Unix).

Resolves msysgit issue #501:
http://code.google.com/p/msysgit/issues/detail?id=501

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Heiko Voigt
e72c5a6239 work around misdetection of stdin attached to a tty
Git on Windows was made aware of the fact that sometimes a file may be
used by another process and so an operation may fail but the user might
be able to fix it and is asking for confirmation whether it should
retry.

This is implemented in a way that git only asks in case stdin and stderr
are attached to a tty. Unfortunately this seems to be misdetected
sometimes causing the testsuite to hang when git is waiting for a user
answer.

This patch works around the situation.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
2010-08-25 12:28:51 +02:00
Johannes Schindelin
d2a5ef055a git am: ignore dirty submodules
This fixes a rebase in the presence of dirty submodules. This is
orthogonal to the application of patches changing submodules.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Johannes Schindelin
4601c42540 merge-octopus: Work around environment issue on Windows
For some reason, the environment variables get upper-cased when a
subprocess is launched on Windows. Cope with that.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:51 +02:00
Johannes Schindelin
de787e4ac8 t7602: cope with CR/LF
The output of git-merge-octopus has CR/LF line endings, so let's just
strip the CR out.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:50 +02:00
Johannes Schindelin
0ede5f5503 Tests: make sure that $DIFF is non-empty
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:50 +02:00
Johannes Schindelin
4bd6edbf6d Add a Windows-specific fallback to getenv("HOME");
This fixes msysGit issue 482 properly.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:31 +02:00
Johannes Schindelin
3060d16010 mingw_rmdir: set errno=ENOTEMPTY when appropriate
On Windows, EACCES overrules ENOTEMPTY when calling rmdir(). But if the
directory is busy, we only want to retry deleting the directory if it
is empty, so test specifically for that case and set ENOTEMPTY rather
than EACCES.

Noticed by Greg Hazel.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:30 +02:00
bert Dvornik
aae8856c96 send-email: handle Windows paths for display just like we do for processing
In git-send-email.perl, here are two checks to determine if
$smtp_server is an absolute path (so it'll be treated as a mailer) or
not (so it'll be treated as a hostname).  The one that handles actual
mail processing has been taught to recognize Windows pathnames by
commit 33b2e81f.

The other check is just to tell the user what happened, so it's far
less important, but the current state is that we will still claim to
the user that c:/foo/bar is a server. =)  This makes the second check
consistent with the first.

Signed-off-by: bert Dvornik <dvornik+git@gmail.com>
2010-08-25 12:28:30 +02:00
Erik Faye-Lund
0e7d8bbb35 send-email: accept absolute path even on Windows
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:30 +02:00
bert Dvornik
09fd27c37e mingw: Don't ask the user yes/no questions if they can't see the question.
If the stdout of the command is connected to a terminal but the stderr
has been redirected, the odds are good that the user can't see any
question we print out to stderr.  This will result in a "mysterious
hang" while the app is waiting for user input.

It seems better to be conservative, and avoid asking for input
whenever the stderr is not a terminal, just like we do for stdin.

Signed-off-by: bert Dvornik <dvornik+git@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2010-08-25 12:28:30 +02:00