Giuseppe Bilotta [Mon, 22 Feb 2010 21:18:53 +0000 (22:18 +0100)]
submodules: ensure clean environment when operating in a submodule
git-submodule used to take care of clearing GIT_DIR whenever it operated
on a submodule index or configuration, but forgot to unset GIT_WORK_TREE
or other repo-local variables. This which would lead to failures e.g.
when GIT_WORK_TREE was set.
This only happened in very unusual contexts such as operating on the
main worktree from outside of it, but since "git-gui: set GIT_DIR and
GIT_WORK_TREE after setup" (
a9fa11fe5bd5978bb) such failures could also
be provoked by invoking an external tool such as "git submodule update"
from the Git Gui in a standard setup.
Solve by using the newly introduced clear_local_git_env() shell function
to ensure that all repo-local environment variables are unset.
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Giuseppe Bilotta [Mon, 22 Feb 2010 23:22:29 +0000 (00:22 +0100)]
shell setup: clear_local_git_env() function
Introduce an auxiliary function to clear all repo-local environment
variables. This should be invoked by any shell script that switches
repository during execution, to ensure that the environment is clean
and that things such as the git dir and worktree are set up correctly.
The list matches the one in git_connect(), so bring them in sync by adding
the missing CONFIG_ENVIRONMENT. Also add a note about the fact that they
should be kept that way.
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Giuseppe Bilotta [Mon, 22 Feb 2010 15:10:23 +0000 (16:10 +0100)]
git-gui: fix worktree initialization with empty prefix
This is sort of a chicken-and-egg problem, because we should only
bother setting the worktree if we are not in a bare repository, but
an unset worktree is one of the conditions we check to see if we have
a bare repository.
Maintain the same sequence of checks, but swap the check for bareness
support and bareness of repository, and check again for an unset
worktree if we are not in the bare case.
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Junio C Hamano [Mon, 22 Feb 2010 07:38:08 +0000 (23:38 -0800)]
Merge branch 'np/compress-loose-object-memsave' into next
* np/compress-loose-object-memsave:
sha1_file: be paranoid when creating loose objects
sha1_file: don't malloc the whole compressed result when writing out objects
Junio C Hamano [Mon, 22 Feb 2010 07:38:08 +0000 (23:38 -0800)]
Merge branch 'dp/read-not-mmap-small-loose-object' into next
* dp/read-not-mmap-small-loose-object:
hash-object: don't use mmap() for small files
Junio C Hamano [Mon, 22 Feb 2010 07:38:08 +0000 (23:38 -0800)]
Merge branch 'jc/maint-status-preload' into next
* jc/maint-status-preload:
status: preload index to optimize lstat(2) calls
Junio C Hamano [Mon, 22 Feb 2010 07:38:07 +0000 (23:38 -0800)]
Merge branch 'hm/imap-send-cram-md5' into next
* hm/imap-send-cram-md5:
imap-send: support CRAM-MD5 authentication
Junio C Hamano [Mon, 22 Feb 2010 07:38:07 +0000 (23:38 -0800)]
Merge branch 'ml/fill-mm-refactor' into next
* ml/fill-mm-refactor:
refactor duplicated fill_mm() in checkout and merge-recursive
Junio C Hamano [Mon, 22 Feb 2010 07:38:07 +0000 (23:38 -0800)]
Merge branch 'ml/encode-header-refactor' into next
* ml/encode-header-refactor:
refactor duplicated encode_header in pack-objects and fast-import
Junio C Hamano [Mon, 22 Feb 2010 07:38:06 +0000 (23:38 -0800)]
Merge branch 'ml/connect-refactor' into next
* ml/connect-refactor:
connect.c: move duplicated code to a new function 'get_host_and_port'
Junio C Hamano [Mon, 22 Feb 2010 07:38:06 +0000 (23:38 -0800)]
Merge branch 'ld/maint-diff-quiet-w' into next
* ld/maint-diff-quiet-w:
git-diff: add a test for git diff --quiet -w
git diff --quiet -w: check and report the status
Nicolas Pitre [Sun, 21 Feb 2010 20:48:06 +0000 (15:48 -0500)]
sha1_file: be paranoid when creating loose objects
We don't want the data being deflated and stored into loose objects
to be different from what we expect. While the deflated data is
protected by a CRC which is good enough for safe data retrieval
operations, we still want to be doubly sure that the source data used
at object creation time is still what we expected once that data has
been deflated and its CRC32 computed.
The most plausible data corruption may occur if the source file is
modified while Git is deflating and writing it out in a loose object.
Or Git itself could have a bug causing memory corruption. Or even bad
RAM could cause trouble. So it is best to make sure everything is
coherent and checksum protected from beginning to end.
To do so we compute the SHA1 of the data being deflated _after_ the
deflate operation has consumed that data, and make sure it matches
with the expected SHA1. This way we can rely on the CRC32 checked by
the inflate operation to provide a good indication that the data is still
coherent with its SHA1 hash. One pathological case we ignore is when
the data is modified before (or during) deflate call, but changed back
before it is hashed.
There is some overhead of course. Using 'git add' on a set of large files:
Before:
real 0m25.210s
user 0m23.783s
sys 0m1.408s
After:
real 0m26.537s
user 0m25.175s
sys 0m1.358s
The overhead is around 5% for full data coherency guarantee.
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Larry D'Anna [Mon, 22 Feb 2010 02:58:44 +0000 (21:58 -0500)]
git-diff: add a test for git diff --quiet -w
This patch adds two test cases for:
6977c25 git diff --quiet -w: check and report the status
Signed-off-by: Larry D'Anna <larry@elder-gods.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Sun, 21 Feb 2010 21:46:43 +0000 (13:46 -0800)]
Merge branch 'ml/color-when' into next
* ml/color-when:
Add an optional argument for --color options
Junio C Hamano [Sun, 21 Feb 2010 21:44:03 +0000 (13:44 -0800)]
Merge branch 'tr/maint-cherry-pick-list' into next
* tr/maint-cherry-pick-list:
cherry_pick_list: quit early if one side is empty
Junio C Hamano [Sun, 21 Feb 2010 21:43:59 +0000 (13:43 -0800)]
Merge branch 'rs/optim-text-wrap' into next
* rs/optim-text-wrap:
utf8.c: speculatively assume utf-8 in strbuf_add_wrapped_text()
utf8.c: remove strbuf_write()
utf8.c: remove print_spaces()
utf8.c: remove print_wrapped_text()
Junio C Hamano [Sun, 21 Feb 2010 21:25:06 +0000 (13:25 -0800)]
Merge branch 'master' into next
* master:
Junio C Hamano [Sun, 21 Feb 2010 21:20:49 +0000 (13:20 -0800)]
Merge branch 'jc/for-each-ref' into next
* jc/for-each-ref:
for-each-ref --format='%(flag)'
for-each-ref --format='%(symref) %(symref:short)'
builtin-for-each-ref.c: check if we need to peel onion while parsing the format
builtin-for-each-ref.c: comment fixes
Junio C Hamano [Sun, 21 Feb 2010 21:20:49 +0000 (13:20 -0800)]
Merge branch 'jn/gitweb-config-error-die' into next
* jn/gitweb-config-error-die:
gitweb: Die if there are parsing errors in config file
Junio C Hamano [Sun, 21 Feb 2010 21:20:49 +0000 (13:20 -0800)]
Merge branch 'jn/maint-fix-pager' into next
* jn/maint-fix-pager:
t7006-pager: if stdout is not a terminal, make a new one
tests: Add tests for automatic use of pager
am: Fix launching of pager
git svn: Fix launching of pager
git.1: Clarify the behavior of the --paginate option
Make 'git var GIT_PAGER' always print the configured pager
Fix 'git var' usage synopsis
Junio C Hamano [Sun, 21 Feb 2010 21:20:48 +0000 (13:20 -0800)]
Merge branch 'jh/maint-submodule-status-in-void' into next
* jh/maint-submodule-status-in-void:
submodule summary: Don't barf when invoked in an empty repo
Junio C Hamano [Sun, 21 Feb 2010 21:20:48 +0000 (13:20 -0800)]
Merge branch 'gf/maint-sh-setup-nongit-ok' into next
* gf/maint-sh-setup-nongit-ok:
require_work_tree broken with NONGIT_OK
Junio C Hamano [Sun, 21 Feb 2010 21:20:48 +0000 (13:20 -0800)]
Merge branch 'ml/send-pack-transport-refactor' into next
* ml/send-pack-transport-refactor:
refactor duplicated code in builtin-send-pack.c and transport.c
Junio C Hamano [Sun, 21 Feb 2010 21:20:47 +0000 (13:20 -0800)]
Merge branch 'jn/makedepend' into next
* jn/makedepend:
Makefile: always remove .depend directories on 'make clean'
Makefile: tuck away generated makefile fragments in .depend
Teach Makefile to check header dependencies
Makefile: list standalone program object files in PROGRAM_OBJS
Makefile: lazily compute header dependencies
Makefile: list generated object files in OBJECTS
Makefile: disable default implicit rules
Makefile: rearrange dependency rules
Makefile: transport.o depends on branch.h now
Makefile: drop dependency on $(wildcard */*.h)
Makefile: clean up http-walker.o dependency rules
Makefile: remove wt-status.h from LIB_H
Makefile: make sure test helpers are rebuilt when headers change
Makefile: add missing header file dependencies
Conflicts:
Makefile
Junio C Hamano [Sun, 21 Feb 2010 21:20:47 +0000 (13:20 -0800)]
Merge branch 'jh/notes' into next
* jh/notes: (30 commits)
builtin-notes: Add "copy" subcommand for copying notes between objects
builtin-notes: Misc. refactoring of argc and exit value handling
builtin-notes: Add -c/-C options for reusing notes
builtin-notes: Refactor handling of -F option to allow combining -m and -F
builtin-notes: Deprecate the -m/-F options for "git notes edit"
builtin-notes: Add "append" subcommand for appending to note objects
builtin-notes: Add "add" subcommand for adding notes to objects
builtin-notes: Add --message/--file aliases for -m/-F options
builtin-notes: Add "list" subcommand for listing note objects
Documentation: Generalize git-notes docs to 'objects' instead of 'commits'
builtin-notes: Add "prune" subcommand for removing notes for missing objects
Notes API: prune_notes(): Prune notes that belong to non-existing objects
t3305: Verify that removing notes triggers automatic fanout consolidation
builtin-notes: Add "remove" subcommand for removing existing notes
Teach builtin-notes to remove empty notes
Teach notes code to properly preserve non-notes in the notes tree
t3305: Verify that adding many notes with git-notes triggers increased fanout
t3301: Verify successful annotation of non-commits
Builtin-ify git-notes
Refactor notes concatenation into a flexible interface for combining notes
...
Conflicts:
Makefile
Junio C Hamano [Sun, 21 Feb 2010 20:01:06 +0000 (12:01 -0800)]
Merge branch 'ml/maint-grep-doc'
* ml/maint-grep-doc:
grep documentation: clarify what files match
Junio C Hamano [Sun, 21 Feb 2010 20:01:03 +0000 (12:01 -0800)]
Merge branch 'tc/maint-transport-ls-remote-with-void'
* tc/maint-transport-ls-remote-with-void:
transport: add got_remote_refs flag
Junio C Hamano [Sun, 21 Feb 2010 20:00:21 +0000 (12:00 -0800)]
Merge branch 'hm/maint-imap-send-crlf'
* hm/maint-imap-send-crlf:
git-imap-send: Convert LF to CRLF before storing patch to draft box
Junio C Hamano [Sun, 21 Feb 2010 20:00:07 +0000 (12:00 -0800)]
Merge branch 'sp/push-sideband'
* sp/push-sideband:
receive-pack: Send internal errors over side-band #2
t5401: Use a bare repository for the remote peer
receive-pack: Send hook output over side band #2
receive-pack: Wrap status reports inside side-band-64k
receive-pack: Refactor how capabilities are shown to the client
send-pack: demultiplex a sideband stream with status data
run-command: support custom fd-set in async
run-command: Allow stderr to be a caller supplied pipe
Junio C Hamano [Sun, 21 Feb 2010 19:59:42 +0000 (11:59 -0800)]
Merge branch 'jc/checkout-detached'
* jc/checkout-detached:
Reword "detached HEAD" notification
Junio C Hamano [Sun, 21 Feb 2010 19:59:35 +0000 (11:59 -0800)]
Merge branch 'jc/maint-fix-test-perm'
* jc/maint-fix-test-perm:
lib-patch-mode.sh: Fix permission
t6000lib: Fix permission
Junio C Hamano [Sun, 21 Feb 2010 19:59:22 +0000 (11:59 -0800)]
Merge branch 'jn/makefile-script-lib'
* jn/makefile-script-lib:
Do not install shell libraries executable
Junio C Hamano [Sun, 21 Feb 2010 19:59:17 +0000 (11:59 -0800)]
Merge branch 'mv/request-pull-modernize'
* mv/request-pull-modernize:
request-pull: avoid mentioning that the start point is a single commit
Dmitry Potapov [Sun, 21 Feb 2010 06:32:19 +0000 (09:32 +0300)]
hash-object: don't use mmap() for small files
Using read() instead of mmap() can be 39% speed up for 1Kb files and is
1% speed up 1Mb files. For larger files, it is better to use mmap(),
because the difference between is not significant, and when there is not
enough memory, mmap() performs much better, because it avoids swapping.
Signed-off-by: Dmitry Potapov <dpotapov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Sun, 21 Feb 2010 04:27:31 +0000 (23:27 -0500)]
sha1_file: don't malloc the whole compressed result when writing out objects
There is no real advantage to malloc the whole output buffer and
deflate the data in a single pass when writing loose objects. That is
like only 1% faster while using more memory, especially with large
files where memory usage is far more. It is best to deflate and write
the data out in small chunks reusing the same memory instead.
For example, using 'git add' on a few large files averaging 40 MB ...
Before:
21.45user 1.10system 0:22.57elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+142640minor)pagefaults 0swaps
After:
21.50user 1.25system 0:22.76elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+104408minor)pagefaults 0swaps
While the runtime stayed relatively the same, the number of minor page
faults went down significantly.
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jonathan Nieder [Sat, 20 Feb 2010 08:50:25 +0000 (02:50 -0600)]
t7006-pager: if stdout is not a terminal, make a new one
Testing pagination requires (fake or real) access to a terminal so we
can see whether the pagination automatically kicks in, which makes it
hard to get good coverage when running tests without --verbose. There
are a number of ways to work around that:
- Replace all isatty calls with calls to a custom xisatty wrapper
that usually checks for a terminal but can be overridden for tests.
This would be workable, but it would require implementing xisatty
separately in three languages (C, shell, and perl) and making sure
that any code that is to be tested always uses the wrapper.
- Redirect stdout to /dev/tty. This would be problematic because
there might be no terminal available, and even if a terminal is
available, it might not be appropriate to spew output to it.
- Create a new pseudo-terminal on the fly and capture its output.
This patch implements the third approach.
The new test-terminal.perl helper uses IO::Pty from Expect.pm to create
a terminal and executes the program specified by its arguments with
that terminal as stdout. If the IO::Pty module is missing or not
working on a system, the test script will maintain its old behavior
(skipping most of its tests unless GIT_TEST_OPTS includes --verbose).
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Sat, 20 Feb 2010 18:39:55 +0000 (10:39 -0800)]
Merge branch 'master' into next
* master:
git-p4: fix bug in symlink handling
t1450: fix testcases that were wrongly expecting failure
Documentation: Fix indentation problem in git-commit(1)
Junio C Hamano [Sat, 20 Feb 2010 18:38:42 +0000 (10:38 -0800)]
Merge branch 'maint'
* maint:
git-p4: fix bug in symlink handling
t1450: fix testcases that were wrongly expecting failure
Documentation: Fix indentation problem in git-commit(1)
Thomas Rast [Sat, 20 Feb 2010 11:42:04 +0000 (12:42 +0100)]
cherry_pick_list: quit early if one side is empty
The --cherry-pick logic starts by counting the commits on each side,
so that it can filter away commits on the bigger one. However, so
far it missed an opportunity for optimization: it doesn't need to do
any work if either side is empty.
This in particular helps the common use-case 'git rebase -i HEAD~$n':
it internally uses --cherry-pick, but since HEAD~$n is a direct
ancestor the left side is always empty.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jonathan Nieder [Fri, 19 Feb 2010 07:18:58 +0000 (01:18 -0600)]
tests: Add tests for automatic use of pager
Git’s automatic pagination support has some subtleties. Add some
tests to make sure we don’t break:
- when git will use a pager by default;
- the effect of the --paginate and --no-pager options;
- the effect of pagination on use of color;
- how the choice of pager is configured.
This does not yet test:
- use of pager by scripted commands (git svn and git am);
- effect of the pager.* configuration variables;
- setting of the LESS variable.
Some features involve checking whether stdout is a terminal, so many
of these tests are skipped unless output is passed through to the
terminal (i.e., unless $GIT_TEST_OPTS includes --verbose).
The immediate purpose for these tests was to avoid making things worse
after the breakage from my jn/editor-pager series (see commit 376f39,
2009-11-20). Thanks to Sebastian Celis <sebastian@sebastiancelis.com>
for the report.
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
René Scharfe [Fri, 19 Feb 2010 22:20:44 +0000 (23:20 +0100)]
utf8.c: speculatively assume utf-8 in strbuf_add_wrapped_text()
is_utf8() works by calling utf8_width() for each character at the
supplied location. In strbuf_add_wrapped_text(), we do that anyway
while wrapping the lines. So instead of checking the encoding
beforehand, optimistically assume that it's utf-8 and wrap along
until an invalid character is hit, and when that happens start over.
This pays off if the text consists only of valid utf-8 characters.
The following command was run against the Linux kernel repo with
git 1.7.0:
$ time git log --format='%b' v2.6.32 >/dev/null
real 0m2.679s
user 0m2.580s
sys 0m0.100s
$ time git log --format='%w(60,4,8)%b' >/dev/null
real 0m4.342s
user 0m4.230s
sys 0m0.110s
And with this patch series:
$ time git log --format='%w(60,4,8)%b' >/dev/null
real 0m3.741s
user 0m3.630s
sys 0m0.110s
So the cost of wrapping is reduced to 70% in this case.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
René Scharfe [Fri, 19 Feb 2010 22:16:45 +0000 (23:16 +0100)]
utf8.c: remove strbuf_write()
The patch before the previous one made sure that all callers of
strbuf_add_wrapped_text() supply a strbuf. Replace all calls of
strbuf_write() with regular strbuf functions and remove it.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
René Scharfe [Fri, 19 Feb 2010 22:15:55 +0000 (23:15 +0100)]
utf8.c: remove print_spaces()
The previous patch made sure that strbuf_add_wrapped_text() (and thus
strbuf_add_indented_text(), too) always get a strbuf. Make use of
this fact by adding strbuf_addchars(), a small helper that adds a
char the specified number of times to a strbuf, and use it to replace
print_spaces().
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
René Scharfe [Fri, 19 Feb 2010 22:15:01 +0000 (23:15 +0100)]
utf8.c: remove print_wrapped_text()
strbuf_add_wrapped_text() is called only from print_wrapped_text()
without a strbuf (in which case it writes its results to stdout).
At its only callsite, supply a strbuf, call strbuf_add_wrapped_text()
directly and remove the wrapper function.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Evan Powers [Tue, 16 Feb 2010 08:44:08 +0000 (00:44 -0800)]
git-p4: fix bug in symlink handling
Fix inadvertent breakage from
b932705 (git-p4: stream from perforce to
speed up clones, 2009-07-30) in the code that strips the trailing '\n'
from p4 print on a symlink. (In practice, contents is of the form
['target\n', ''].)
Signed-off-by: Evan Powers <evan.powers@gmail.com>
Acked-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Thomas Rast [Sat, 20 Feb 2010 00:18:44 +0000 (01:18 +0100)]
t1450: fix testcases that were wrongly expecting failure
Almost exactly a year ago in
02a6552 (Test fsck a bit harder), I
introduced two testcases that were expecting failure.
However, the only bug was that the testcases wrote *blobs* because I
forgot to pass -t tag to hash-object. Fix this, and then adjust the
rest of the test to properly check the result.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jacob Helwig [Mon, 15 Feb 2010 12:33:06 +0000 (04:33 -0800)]
Documentation: Fix indentation problem in git-commit(1)
Ever since the "See linkgit:git-config[1]..." paragraph was added to the
description for --untracked-files (
d6293d1), the paragraphs for the
following options were indented at the same level as the "See
linkgit:git-config[1]" paragraph. This problem showed up in the
manpages, but not in the HTML documentation.
While this does fix the alignment of the options following
--untracked-files in the manpage, the "See linkgit..." portion of the
description does not retain its previous indentation level in the
manpages, or HTML documentation.
Signed-off-by: Jacob Helwig <jacob.helwig@gmail.com>
Acked-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Fri, 19 Feb 2010 09:32:05 +0000 (01:32 -0800)]
Merge branch 'master' into next
* master:
rm: fix bug in recursive subdirectory removal
Documentation: describe --thin more accurately
Junio C Hamano [Fri, 19 Feb 2010 09:31:42 +0000 (01:31 -0800)]
Merge branch 'maint'
* maint:
rm: fix bug in recursive subdirectory removal
Documentation: describe --thin more accurately
Junio C Hamano [Fri, 19 Feb 2010 09:31:37 +0000 (01:31 -0800)]
Merge branch 'jk/maint-rmdir-fix' into maint
* jk/maint-rmdir-fix:
rm: fix bug in recursive subdirectory removal
Jeff King [Fri, 19 Feb 2010 05:57:21 +0000 (00:57 -0500)]
rm: fix bug in recursive subdirectory removal
If we remove a path in a/deep/subdirectory, we should try to
remove as many trailing components as possible (i.e.,
subdirectory, then deep, then a). However, the test for the
return value of rmdir was reversed, so we only ever deleted
at most one level.
The fix is in remove_path, so "apply" and "merge-recursive"
also are fixed.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Mark Lodato [Wed, 17 Feb 2010 04:55:58 +0000 (23:55 -0500)]
Add an optional argument for --color options
Make git-branch, git-show-branch, git-grep, and all the diff-based
programs accept an optional argument <when> for --color. The argument
is a colorbool: "always", "never", or "auto". If no argument is given,
"always" is used; --no-color is an alias for --color=never. This makes
the command-line interface consistent with other GNU tools, such as `ls'
and `grep', and with the git-config color options. Note that, without
an argument, --color and --no-color work exactly as before.
To implement this, two internal changes were made:
1. Allow the first argument of git_config_colorbool() to be NULL,
in which case it returns -1 if the argument isn't "always", "never",
or "auto".
2. Add OPT_COLOR_FLAG(), OPT__COLOR(), and parse_opt_color_flag_cb()
to the option parsing library. The callback uses
git_config_colorbool(), so color.h is now a dependency
of parse-options.c.
Signed-off-by: Mark Lodato <lodatom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Stephen Boyd [Thu, 18 Feb 2010 09:10:28 +0000 (01:10 -0800)]
Documentation: describe --thin more accurately
The description for --thin was misleading and downright wrong. Correct
it with some inspiration from the description of index-pack's --fix-thin
and some background information from Nicolas Pitre <nico@fluxnic.net>.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Thu, 18 Feb 2010 07:04:00 +0000 (23:04 -0800)]
Merge branch 'master' into next
* master:
docs: don't talk about $GIT_DIR/refs/ everywhere
Junio C Hamano [Thu, 18 Feb 2010 07:03:46 +0000 (23:03 -0800)]
Merge branch 'maint'
* maint:
docs: don't talk about $GIT_DIR/refs/ everywhere
Jeff King [Thu, 18 Feb 2010 01:16:20 +0000 (20:16 -0500)]
docs: don't talk about $GIT_DIR/refs/ everywhere
It is misleading to say that we pull refs from $GIT_DIR/refs/*, because we
may also consult the packed refs mechanism. These days we tend to treat
the "refs hierarchy" as more of an abstract namespace that happens to be
represented as $GIT_DIR/refs. At best, this is a minor inaccuracy, but at
worst it can confuse users who then look in $GIT_DIR/refs and find that it
is missing some of the refs they expected to see.
This patch drops most uses of "$GIT_DIR/refs/*", changing them into just
"refs/*", under the assumption that users can handle the concept of an
abstract refs namespace. There are a few things to note:
- most cases just dropped the $GIT_DIR/ portion. But for cases where
that left _just_ the word "refs", I changed it to "refs/" to help
indicate that it was a hierarchy. I didn't do the same for longer
paths (e.g., "refs/heads" remained, instead of becoming
"refs/heads/").
- in some cases, no change was made, as the text was explicitly about
unpacked refs (e.g., the discussion in git-pack-refs).
- In some cases it made sense instead to note the existence of packed
refs (e.g., in check-ref-format and rev-parse).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 23:33:27 +0000 (15:33 -0800)]
Merge branch 'master' into next
* master:
Update draft release notes to 1.7.1
Update 1.7.0.1 release notes
fast-import: use the diff_delta() max_delta_size argument
fast-import: honor pack.indexversion and pack.packsizelimit config vars
fast-import: make default pack size unlimited
fast-import: use write_idx_file() instead of custom code
fast-import: use sha1write() for pack data
fast-import: start using struct pack_idx_entry
Michael Lukashov [Tue, 16 Feb 2010 23:42:54 +0000 (23:42 +0000)]
refactor duplicated encode_header in pack-objects and fast-import
The following function is duplicated:
encode_header
Move this function to sha1_file.c and rename it 'encode_in_pack_object_header',
as suggested by Junio C Hamano
Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 23:28:25 +0000 (15:28 -0800)]
Merge branch 'np/fast-import-idx-v2'
* np/fast-import-idx-v2:
fast-import: use the diff_delta() max_delta_size argument
fast-import: honor pack.indexversion and pack.packsizelimit config vars
fast-import: make default pack size unlimited
fast-import: use write_idx_file() instead of custom code
fast-import: use sha1write() for pack data
fast-import: start using struct pack_idx_entry
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Michael Lukashov [Tue, 16 Feb 2010 23:42:55 +0000 (23:42 +0000)]
refactor duplicated fill_mm() in checkout and merge-recursive
The following function is duplicated:
fill_mm
Move it to xdiff-interface.c and rename it 'read_mmblob', as suggested
by Junio C Hamano.
Also, change parameters order for consistency with read_mmfile().
Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Michael Lukashov [Tue, 16 Feb 2010 23:42:52 +0000 (23:42 +0000)]
refactor duplicated code in builtin-send-pack.c and transport.c
The following functions are (almost) identical:
verify_remote_names
update_tracking_ref
refs_pushed
print_push_status
Move common versions of these functions to transport.c and rename
them, as suggested by Jeff King and Junio C Hamano.
These functions have been removed entirely from builtin-send-pack.c,
since they are only used internally by print_push_status():
print_ref_status
status_abbrev
print_ok_ref_status
print_one_push_status
Also, move #define SUMMARY_WIDTH to transport.h and rename it
TRANSPORT_SUMMARY_WIDTH as it is used in builtin-fetch.c and
transport.c
Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Acked-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Michael Lukashov [Wed, 17 Feb 2010 20:56:02 +0000 (20:56 +0000)]
connect.c: move duplicated code to a new function 'get_host_and_port'
The following functions:
git_tcp_connect_sock (IPV6 version)
git_tcp_connect_sock (no IPV6 version),
git_proxy_connect
have common block of code. Move it to a new function 'get_host_and_port'
Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 23:01:11 +0000 (15:01 -0800)]
Update draft release notes to 1.7.1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 23:00:10 +0000 (15:00 -0800)]
Merge branch 'maint'
* maint:
Update 1.7.0.1 release notes
Junio C Hamano [Wed, 17 Feb 2010 23:00:00 +0000 (15:00 -0800)]
Update 1.7.0.1 release notes
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 22:55:24 +0000 (14:55 -0800)]
Merge branch 'jk/cherry-pick-reword' into maint
* jk/cherry-pick-reword:
cherry-pick: prettify the advice message
cherry-pick: show commit name instead of sha1
cherry-pick: format help message as strbuf
cherry-pick: refactor commit parsing code
cherry-pick: rewrap advice message
Junio C Hamano [Wed, 17 Feb 2010 22:55:15 +0000 (14:55 -0800)]
Merge branch 'jk/grep-double-dash' into maint
* jk/grep-double-dash:
accept "git grep -- pattern"
Junio C Hamano [Wed, 17 Feb 2010 22:55:09 +0000 (14:55 -0800)]
Merge branch 'jc/typo' into maint
* jc/typo:
Typofixes outside documentation area
Junio C Hamano [Wed, 17 Feb 2010 20:30:41 +0000 (12:30 -0800)]
status: preload index to optimize lstat(2) calls
Noticed by James Pickens
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 19:44:25 +0000 (11:44 -0800)]
Merge branch 'jc/grep-author-all-match-implicit' into next
* jc/grep-author-all-match-implicit:
"log --author=me --grep=it" should find intersection, not union
Junio C Hamano [Wed, 17 Feb 2010 19:43:43 +0000 (11:43 -0800)]
Merge branch 'jc/checkout-detached' into next
* jc/checkout-detached:
Reword "detached HEAD" notification
Junio C Hamano [Wed, 17 Feb 2010 19:42:03 +0000 (11:42 -0800)]
Merge branch 'ac/cvsimport-revision-mapping' into next
* ac/cvsimport-revision-mapping:
cvsimport: new -R option: generate .git/cvs-revisions mapping
Junio C Hamano [Wed, 17 Feb 2010 19:41:38 +0000 (11:41 -0800)]
Merge branch 'pb/log-first-parent-p-m' into next
* pb/log-first-parent-p-m:
git log -p -m: document -m and honor --first-parent
Junio C Hamano [Wed, 17 Feb 2010 19:40:40 +0000 (11:40 -0800)]
Merge branch 'hm/maint-imap-send-crlf' into next
* hm/maint-imap-send-crlf:
git-imap-send: Convert LF to CRLF before storing patch to draft box
Junio C Hamano [Wed, 17 Feb 2010 19:22:15 +0000 (11:22 -0800)]
Merge branch 'master' into next
* master:
gitweb: Protect escaping functions against calling on undef
gitweb: esc_html (short) error message in die_error
Jakub Narebski [Sun, 7 Feb 2010 20:52:25 +0000 (21:52 +0100)]
gitweb: Protect escaping functions against calling on undef
This is a bit of future-proofing esc_html and friends: when called
with undefined value they would now would return undef... which would
probably mean that error would still occur, but closer to the source
of problem.
This means that we can safely use
esc_html(shift) || "Internal Server Error"
in die_error() instead of
esc_html(shift || "Internal Server Error")
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jakub Narebski [Sun, 7 Feb 2010 20:51:18 +0000 (21:51 +0100)]
gitweb: esc_html (short) error message in die_error
The error message (second argument to die_error) is meant to be short,
one-line text description of given error. A few callers call
die_error with error message containing unescaped user supplied data
($hash, $file_name). Instead of forcing callers to escape data,
simply call esc_html on the parameter.
Note that optional third parameter, which contains detailed error
description, is meant to be HTML formatted, and therefore should be
not escaped.
While at it update esc_html synopsis/usage, and bring default error
description to read 'Internal Server Error' (titlecased).
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johan Herland [Tue, 16 Feb 2010 10:21:14 +0000 (11:21 +0100)]
submodule summary: Don't barf when invoked in an empty repo
When invoking "git submodule summary" in an empty repo (which can be
indirectly done by setting status.submodulesummary = true), it currently
emits an error message (via "git diff-index") since HEAD points to an
unborn branch.
This patch adds handling of the HEAD-points-to-unborn-branch special case,
so that "git submodule summary" no longer emits this error message.
The patch also adds a test case that verifies the fix.
Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Wed, 17 Feb 2010 19:05:56 +0000 (14:05 -0500)]
fast-import: use the diff_delta() max_delta_size argument
This let diff_delta() abort early if it is going to bust the given
size limit. Also, only objects larger than 20 bytes are considered
as objects smaller than that are most certainly going to produce
larger deltas than the original object due to the additional headers.
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Wed, 17 Feb 2010 19:05:55 +0000 (14:05 -0500)]
fast-import: honor pack.indexversion and pack.packsizelimit config vars
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Wed, 17 Feb 2010 19:05:54 +0000 (14:05 -0500)]
fast-import: make default pack size unlimited
Now that fast-import is creating packs with index version 2, there is
no point limiting the pack size by default. A pack split will still
happen if off_t is not sufficiently large to hold large offsets.
While updating the doc, let's remove the "packfiles fit on CDs"
suggestion. Pack files created by fast-import are still suboptimal and
a 'git repack -a -f -d' or even 'git gc --aggressive' would be a pretty
good idea before considering storage on CDs.
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Wed, 17 Feb 2010 19:05:53 +0000 (14:05 -0500)]
fast-import: use write_idx_file() instead of custom code
This allows for the creation of pack index version 2 with its object
CRC and the possibility for a pack to be larger than 4 GB.
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Wed, 17 Feb 2010 19:05:52 +0000 (14:05 -0500)]
fast-import: use sha1write() for pack data
This is in preparation for using write_idx_file(). Also, by using
sha1write() we get some buffering to reduces the number of write
syscalls, and the written data is SHA1 summed which allows for the extra
data integrity validation check performed in fixup_pack_header_footer()
(details on this in commit
abeb40e5aa).
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Wed, 17 Feb 2010 19:05:51 +0000 (14:05 -0500)]
fast-import: start using struct pack_idx_entry
This is in preparation for using write_idx_file().
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Gabriel Filion [Wed, 17 Feb 2010 04:18:50 +0000 (23:18 -0500)]
require_work_tree broken with NONGIT_OK
With NONGIT_OK set, require_work_tree function outside a git repository
gives a syntax error. This is caused by an incorrect use of "test" that
didn't anticipate $(git rev-parse --is-inside-work-tree) may return an
empty string.
Properly quote the argument to "test", and send the standard error stream
to /dev/null to avoid giving duplicate error messages.
Signed-off-by: Gabriel Filion <lelutin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Hitoshi Mitake [Tue, 16 Feb 2010 06:34:07 +0000 (22:34 -0800)]
imap-send: support CRAM-MD5 authentication
CRAM-MD5 authentication ought to be independent from SSL, but NO_OPENSSL
build will not support this because the base64 and md5 code are used from
the OpenSSL library in this implementation.
Signed-off-by: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 07:03:40 +0000 (23:03 -0800)]
Merge branch 'mv/request-pull-modernize' into jch
* mv/request-pull-modernize:
request-pull: avoid mentioning that the start point is a single commit
Junio C Hamano [Wed, 17 Feb 2010 07:03:20 +0000 (23:03 -0800)]
Merge branch 'jn/makefile-script-lib' into jch
* jn/makefile-script-lib:
Do not install shell libraries executable
Junio C Hamano [Wed, 17 Feb 2010 07:02:43 +0000 (23:02 -0800)]
Merge branch 'sp/push-sideband' into jch
* sp/push-sideband:
receive-pack: Send internal errors over side-band #2
t5401: Use a bare repository for the remote peer
receive-pack: Send hook output over side band #2
receive-pack: Wrap status reports inside side-band-64k
receive-pack: Refactor how capabilities are shown to the client
send-pack: demultiplex a sideband stream with status data
run-command: support custom fd-set in async
run-command: Allow stderr to be a caller supplied pipe
Junio C Hamano [Wed, 17 Feb 2010 07:02:21 +0000 (23:02 -0800)]
Merge branch 'tc/maint-transport-ls-remote-with-void' into jch
* tc/maint-transport-ls-remote-with-void:
transport: add got_remote_refs flag
Junio C Hamano [Wed, 17 Feb 2010 07:01:28 +0000 (23:01 -0800)]
Merge branch 'ml/maint-grep-doc' into jch
* ml/maint-grep-doc:
grep documentation: clarify what files match
Mark Lodato [Tue, 16 Feb 2010 00:25:40 +0000 (19:25 -0500)]
grep documentation: clarify what files match
Clarify that git-grep(1) searches only tracked files, and that each
<pathspec> is a pathspec, as in any other ordinary git commands.
Add an example to show a simple use case for searching all .c and .h
files in the current directory and below.
Signed-off-by: Mark Lodato <lodatom@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 06:50:22 +0000 (22:50 -0800)]
Merge branch 'jc/maint-fix-test-perm' into jch
* jc/maint-fix-test-perm:
lib-patch-mode.sh: Fix permission
t6000lib: Fix permission
Junio C Hamano [Wed, 17 Feb 2010 06:45:14 +0000 (22:45 -0800)]
Merge branch 'jc/typo'
* jc/typo:
Typofixes outside documentation area
Junio C Hamano [Wed, 17 Feb 2010 06:40:45 +0000 (22:40 -0800)]
Merge branch 'maint'
* maint:
Prepare 1.7.0.1 release notes
Fix use of mutex in threaded grep
dwim_ref: fix dangling symref warning
stash pop: remove 'apply' options during 'drop' invocation
diff: make sure --output=/bad/path is caught
Remove hyphen from "git-command" in two error messages
Junio C Hamano [Wed, 17 Feb 2010 06:25:03 +0000 (22:25 -0800)]
Prepare 1.7.0.1 release notes
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 17 Feb 2010 06:23:25 +0000 (22:23 -0800)]
Merge branch 'jc/maint-grep-one-thread-mutex-fix' into maint
* jc/maint-grep-one-thread-mutex-fix:
Fix use of mutex in threaded grep
Junio C Hamano [Tue, 16 Feb 2010 02:34:28 +0000 (18:34 -0800)]
Fix use of mutex in threaded grep
The program can decide at runtime not to use threading even if the support
is compiled in. In such a case, mutexes are not necessary and left
uninitialized. But the code incorrectly tried to take and release the
read_sha1_mutex unconditionally.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Fredrik Kuivinen <frekui@gmail.com>
Junio C Hamano [Tue, 16 Feb 2010 23:05:02 +0000 (15:05 -0800)]
Merge branch 'maint-1.6.6' into maint
* maint-1.6.6:
dwim_ref: fix dangling symref warning
stash pop: remove 'apply' options during 'drop' invocation
diff: make sure --output=/bad/path is caught
Remove hyphen from "git-command" in two error messages
Junio C Hamano [Tue, 16 Feb 2010 23:04:55 +0000 (15:04 -0800)]
Merge branch 'maint-1.6.5' into maint-1.6.6
* maint-1.6.5:
dwim_ref: fix dangling symref warning
stash pop: remove 'apply' options during 'drop' invocation
diff: make sure --output=/bad/path is caught