Junio C Hamano [Sun, 18 Nov 2007 05:18:14 +0000 (21:18 -0800)]
grep -An -Bm: fix invocation of external grep command
When building command line to invoke external grep, the
arguments to -A/-B/-C options were placd in randarg[] buffer,
but the code forgot that snprintf() does not count terminating
NUL in its return value. This caused "git grep -A1 -B2" to
invoke external grep with "-B21 -A1".
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Sat, 17 Nov 2007 22:09:28 +0000 (23:09 +0100)]
fetch-pack: Prepare for a side-band demultiplexer in a thread.
get_pack() receives a pair of file descriptors that communicate with
upload-pack at the remote end. In order to support the case where the
side-band demultiplexer runs in a thread, and, hence, in the same process
as the main routine, we must not close the readable file descriptor early.
The handling of the readable fd is changed in the case where upload-pack
supports side-band communication: The old code closed the fd after it was
inherited to the side-band demultiplexer process. Now we do not close it.
The caller (do_fetch_pack) will close it later anyway. The demultiplexer
is the only reader, it does not matter that the fd remains open in the
main process as well as in unpack-objects/index-pack, which inherits it.
The writable fd is not needed in get_pack(), hence, the old code closed
the fd. For symmetry with the readable fd, we now do not close it; the
caller (do_fetch_pack) will close it later anyway. Therefore, the new
behavior is that the channel now remains open during the entire
conversation, but this has no ill effects because upload-pack does not read
from it once it has begun to send the pack data. For the same reason it
does not matter that the writable fd is now inherited to the demultiplexer
and unpack-objects/index-pack processes.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
J. Bruce Fields [Sat, 3 Nov 2007 02:54:31 +0000 (22:54 -0400)]
git-remote.txt: fix example url
If I'm going to use a real example as a URL, I suppose I should get it
right....
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Junio C Hamano [Sun, 18 Nov 2007 00:40:03 +0000 (16:40 -0800)]
Merge git://git.bogomips.org/git-svn
* git://git.bogomips.org/git-svn:
git-svn: Fix a typo and add a comma in an error message in git-svn
git-svn log: handle unreachable revisions like "svn log"
git-svn log: include commit log for the smallest revision in a range
git-svn log: fix ascending revision ranges
git-svn's dcommit must use subversion's config
git-svn: add tests for command-line usage of init and clone commands
David Reiss [Tue, 13 Nov 2007 21:47:26 +0000 (13:47 -0800)]
git-svn: Fix a typo and add a comma in an error message in git-svn
Signed-off-by: David Reiss <dreiss@facebook.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
David D Kilzer [Mon, 12 Nov 2007 06:56:52 +0000 (22:56 -0800)]
git-svn log: handle unreachable revisions like "svn log"
When unreachable revisions are given to "svn log", it displays all commit
logs in the given range that exist in the current tree. (If no commit
logs are found in the current tree, it simply prints a single commit log
separator.) This patch makes "git-svn log" behave the same way.
Ten tests added to t/t9116-git-svn-log.sh.
Signed-off-by: David D Kilzer <ddkilzer@kilzer.net>
Acked-by: Eric Wong <normalperson@yhbt.net>
David D Kilzer [Sun, 11 Nov 2007 06:10:34 +0000 (22:10 -0800)]
git-svn log: include commit log for the smallest revision in a range
The "svn log -rM:N" command shows commit logs inclusive in the range [M,N].
Previously "git-svn log" always excluded the commit log for the smallest
revision in a range, whether the range was ascending or descending. With
this patch, the smallest revision in a range is always shown.
Updated tests for ascending and descending revision ranges.
Signed-off-by: David D Kilzer <ddkilzer@kilzer.net>
Acked-by: Eric Wong <normalperson@yhbt.net>
David D Kilzer [Sun, 11 Nov 2007 06:10:33 +0000 (22:10 -0800)]
git-svn log: fix ascending revision ranges
Fixed typo in Git::SVN::Log::git_svn_log_cmd(). Previously a command like
"git-svn log -r1:4" would only show a commit log separator.
Added tests for ascending and descending revision ranges.
Signed-off-by: David D Kilzer <ddkilzer@kilzer.net>
Acked-by: Eric Wong <normalperson@yhbt.net>
Konstantin V. Arkhipov [Wed, 14 Nov 2007 00:52:02 +0000 (03:52 +0300)]
git-svn's dcommit must use subversion's config
When doing dcommit git-svn must use subversion's config or newly created
files will not include svn's properties
(defined in [auto-props] with 'enable-auto-props = yes').
Signed-off-by: Konstantin V. Arkhipov <voxus@onphp.org>
Acked-by: Eric Wong <normalperson@yhbt.net>
Eric Wong [Sat, 17 Nov 2007 20:47:16 +0000 (12:47 -0800)]
git-svn: add tests for command-line usage of init and clone commands
Some patches broke these commands in certain cases and were only
caught by manual testing.
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Jeff King [Sat, 17 Nov 2007 12:56:03 +0000 (07:56 -0500)]
send-pack: assign remote errors to each ref
This lets us show remote errors (e.g., a denied hook) along
with the usual push output.
There is a slightly clever optimization in receive_status
that bears explanation. We need to correlate the returned
status and our ref objects, which naively could be an O(m*n)
operation. However, since the current implementation of
receive-pack returns the errors to us in the same order that
we sent them, we optimistically look for the next ref to be
looked up to come after the last one we have found. So it
should be an O(m+n) merge if the receive-pack behavior
holds, but we fall back to a correct but slower behavior if
it should change.
Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Sat, 17 Nov 2007 12:55:15 +0000 (07:55 -0500)]
send-pack: check ref->status before updating tracking refs
Previously, we manually checked the 'NONE' and 'UPTODATE'
conditions. Now that we have ref->status, we can easily
say "only update if we pushed successfully".
This adds a test for and fixes a regression introduced in
ed31df31 where deleted refs did not have their tracking
branches removed. This was due to a bogus per-ref error test
that is superseded by the more accurate ref->status flag.
Signed-off-by: Jeff King <peff@peff.net>
Completely-Acked-By: Alex "Sleepy" Riesen <raa.lkml@gmail.com>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Sat, 17 Nov 2007 12:54:27 +0000 (07:54 -0500)]
send-pack: track errors for each ref
Instead of keeping the 'ret' variable, we instead have a
status flag for each ref that tracks what happened to it.
We then print the ref status after all of the refs have
been examined.
This paves the way for three improvements:
- updating tracking refs only for non-error refs
- incorporating remote rejection into the printed status
- printing errors in a different order than we processed
(e.g., consolidating non-ff errors near the end with
a special message)
Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Alex Riesen <raa.lkml@gmail.com>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Christian Couder [Sat, 17 Nov 2007 13:35:25 +0000 (14:35 +0100)]
Bisect visualize: use "for-each-ref" to list all good refs.
In bisect_visualize, "cd $GIT_DIR/refs && echo bisect/good-*" was
still used instead of "git for-each-ref". This patch fix it.
We now pass "refs/bisect/bad" and "--not refs/bisect/good-<rev>"
instead of "bisect/bad" and "--not bisect/good-<rev>" to gitk,
but it seems to work.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Sat, 17 Nov 2007 05:47:59 +0000 (21:47 -0800)]
Update draft release notes for 1.5.4
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Mike Hommey [Fri, 16 Nov 2007 22:02:08 +0000 (23:02 +0100)]
Fix and improve t7004 (git-tag tests)
Brown paper bag fix to avoid using non portable sed syntax. The
test by itself didn't catch what it was supposed to, anyways.
The new test first checks if git-tag correctly errors out when
the user exited the editor without editing the file. Then it
checks if what the user was presented in the editor was any
useful, which we define as the following:
* It begins with a single blank line, where the invoked editor
would typically place the editing curser at, so that the user
can immediately start typing;
* It has some instruction but that comes after that initial
blank line, all lines prefixed with "#". We specifically do
not check for the wording of this instruction.
* And it has nothing else, as the expected behaviour is "Hey
you did not leave any message".
Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sergei Organov [Fri, 16 Nov 2007 18:43:16 +0000 (21:43 +0300)]
Documentation: fix git-clone manpage not to refer to itself
Signed-off-by: Sergei Organov <osv@javad.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sergei Organov [Fri, 16 Nov 2007 11:28:57 +0000 (14:28 +0300)]
user-manual.txt: minor clarification.
Signed-off-by: Sergei Organov <osv@javad.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Linus Torvalds [Sun, 11 Nov 2007 23:35:23 +0000 (23:35 +0000)]
Fix rev-list when showing objects involving submodules
The function mark_tree_uninteresting() assumed that the tree entries
are blob when they are not trees. This is not so. Since we do
not traverse into submodules (yet), the gitlinks should be ignored.
In general, we should try to start moving away from using the
"S_ISLNK()" like things for internal git state. It was a mistake to
just assume the numbers all were same across all systems in the first
place. This implementation converts to the "object_type", and then
uses a case statement.
Noticed by Ilari on IRC.
Test script taken from an earlier version by Dscho.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Sat, 17 Nov 2007 05:30:06 +0000 (21:30 -0800)]
Merge branch 'maint'
* maint:
Update draft release notes for 1.5.3.6
Fix per-directory exclude handing for "git add"
core.excludesfile clean-up
Fix t9101 test failure caused by Subversion "auto-props"
git-send-email: add charset header if we add encoded 'From'
Junio C Hamano [Sat, 17 Nov 2007 02:44:06 +0000 (18:44 -0800)]
Update draft release notes for 1.5.3.6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Sat, 17 Nov 2007 05:14:17 +0000 (21:14 -0800)]
Merge branch 'ds/maint-deflatebound' into maint
* ds/maint-deflatebound:
Improve accuracy of check for presence of deflateBound.
Junio C Hamano [Fri, 16 Nov 2007 09:15:41 +0000 (01:15 -0800)]
Fix per-directory exclude handing for "git add"
In "dir_struct", each exclusion element in the exclusion stack records a
base string (pointer to the beginning with length) so that we can tell
where it came from, but this pointer is just pointing at the parameter
that is given by the caller to the push_exclude_per_directory()
function.
While read_directory_recursive() runs, calls to excluded() makes use
the data in the exclusion elements, including this base string. The
caller of read_directory_recursive() is not supposed to free the
buffer it gave to push_exclude_per_directory() earlier, until it
returns.
The test case Bruce Stephens gave in the mailing list discussion
was simplified and added to the t3700 test.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Sat, 17 Nov 2007 01:05:02 +0000 (17:05 -0800)]
core.excludesfile clean-up
There are inconsistencies in the way commands currently handle
the core.excludesfile configuration variable. The problem is
the variable is too new to be noticed by anything other than
git-add and git-status.
* git-ls-files does not notice any of the "ignore" files by
default, as it predates the standardized set of ignore files.
The calling scripts established the convention to use
.git/info/exclude, .gitignore, and later core.excludesfile.
* git-add and git-status know about it because they call
add_excludes_from_file() directly with their own notion of
which standard set of ignore files to use. This is just a
stupid duplication of code that need to be updated every time
the definition of the standard set of ignore files is
changed.
* git-read-tree takes --exclude-per-directory=<gitignore>,
not because the flexibility was needed. Again, this was
because the option predates the standardization of the ignore
files.
* git-merge-recursive uses hardcoded per-directory .gitignore
and nothing else. git-clean (scripted version) does not
honor core.* because its call to underlying ls-files does not
know about it. git-clean in C (parked in 'pu') doesn't either.
We probably could change git-ls-files to use the standard set
when no excludes are specified on the command line and ignore
processing was asked, or something like that, but that will be a
change in semantics and might break people's scripts in a subtle
way. I am somewhat reluctant to make such a change.
On the other hand, I think it makes perfect sense to fix
git-read-tree, git-merge-recursive and git-clean to follow the
same rule as other commands. I do not think of a valid use case
to give an exclude-per-directory that is nonstandard to
read-tree command, outside a "negative" test in the t1004 test
script.
This patch is the first step to untangle this mess.
The next step would be to teach read-tree, merge-recursive and
clean (in C) to use setup_standard_excludes().
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Wincent Colaiuta [Fri, 16 Nov 2007 13:25:10 +0000 (14:25 +0100)]
Fix t9101 test failure caused by Subversion "auto-props"
If a user has an "auto-prop" in his/her ~/.subversion/config file for
automatically setting the svn:keyword Id property on all ".c" files
(a reasonably common configuration in the Subversion world) then one
of the "svn propset" operations in the very first test would become a
no-op, which in turn would make the next commit a no-op.
This then caused the 25th test ('test propget') to fail because it
expects a certain number of commits to have taken place but the actual
number of commits was off by one.
Björn Steinbrink identified the "auto-prop" feature as the cause
of the failure. This patch avoids it by passing the "--no-auto-prop"
flag to "svn import" when setting up the test repository, thus ensuring
that the "svn propset" operation is no longer a no-op, regardless of the
users' settings in their config.
Signed-off-by: Wincent Colaiuta <win@wincent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Fri, 16 Nov 2007 10:49:09 +0000 (05:49 -0500)]
git-send-email: add charset header if we add encoded 'From'
We sometimes pick out the original rfc822 'From' header and
include it in the body of the message. If the original
author's name needs encoding, then we should specify that in
the content-type header.
If we already had a content-type header in the mail, then we
may need to re-encode. The logic is there to detect
this case, but it doesn't actually do the re-encoding.
Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Thu, 15 Nov 2007 08:47:53 +0000 (00:47 -0800)]
git-bisect: modernize branch shuffling hack
When switching to a new rev, we first made "new-bisect" branch to
point at the chosen commit, attempt to switch to it, and then
finally renamed the new-bisect branch to bisect by hand when
successful. This is so that we can catch checkout failure (your
local modification may interfere with switching to the chosen
version) without losing information on which commit the next
attempt should be made.
Rewrite it using a more modern form but without breaking the
safety.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Thu, 15 Nov 2007 08:42:04 +0000 (00:42 -0800)]
git-bisect: use update-ref to mark good/bad commits
This removes the last instance of making a ref by hand with
"echo SHA1 >.git/refs/$refname" from the script and replaces it
with update-ref.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Thu, 15 Nov 2007 08:39:57 +0000 (00:39 -0800)]
git-bisect: war on "sed"
We do not need to pipe "echo" to "sed" only to strip refs/heads/
from the beginning. We are assuming not-so-ancient shells these
days.
Also there is no need to avoid assuming \012 is the LF; we do
not run on EBCDIC, sorry. Other parts of the script already
uses tr to convert separator to LF that way.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Christian Couder [Thu, 15 Nov 2007 07:18:07 +0000 (08:18 +0100)]
Bisect reset: remove bisect refs that may have been packed.
If refs were ever packed in the middle of bisection, the bisect
refs were not removed from the "packed-refs" file.
This patch fixes this problem by using "git update-ref -d $ref $hash"
in "bisect_clean_state".
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Simon Hausmann [Thu, 15 Nov 2007 09:38:45 +0000 (10:38 +0100)]
git-p4: Fix direct import from perforce after fetching changes through git from origin
When using an existing git repository to cache the perforce import we don't
fetch the branch mapping from perforce as that is a slow operation. However
the origin repository may not be fully up-to-date and therefore it may be
necessary to import more changes directly from Perforce.
Such a direct import needs self.knownBranches to be set up though, so
initialize it from the existing p4/* git branches.
Signed-off-by: Simon Hausmann <simon@lst.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Fri, 16 Nov 2007 09:15:41 +0000 (01:15 -0800)]
Fix per-directory exclude handing for "git add"
In "dir_struct", each exclusion element in the exclusion stack records a
base string (pointer to the beginning with length) so that we can tell
where it came from, but this pointer is just pointing at the parameter
that is given by the caller to the push_exclude_per_directory()
function.
While read_directory_recursive() runs, calls to excluded() makes use
the data in the exclusion elements, including this base string. The
caller of read_directory_recursive() is not supposed to free the
buffer it gave to push_exclude_per_directory() earlier, until it
returns.
The test case Bruce Stephens gave in the mailing list discussion
was simplified and added to the t3700 test.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sergei Organov [Thu, 15 Nov 2007 13:19:29 +0000 (16:19 +0300)]
Documentation: customize diff-options depending on particular command
Customize diff-options depending on particular command as follows,
mostly to make git-diff and git-format-patch manuals less confusing:
* git-format-patch:
- Mark --patch-with-stat as being the default.
- Change -p description so that it matches what it actually does and
so that it doesn't refer to absent "section on generating
patches".
* git-diff: mark -p as being the default.
* git-diff-index/git-diff-files/git-diff-tree: mark --raw as being
the default.
Signed-off-by: Sergei Organov <osv@javad.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Thu, 15 Nov 2007 07:04:30 +0000 (02:04 -0500)]
git-ls-files: add --exclude-standard
This provides a way for scripts to get at the new standard exclude
function.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Guido Ostkamp [Thu, 15 Nov 2007 22:19:11 +0000 (23:19 +0100)]
Remove unreachable statements
Solaris Workshop Compiler found a few unreachable statements.
Signed-off-by: Guido Ostkamp <git@ostkamp.fastmail.fm>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nicolas Pitre [Thu, 15 Nov 2007 17:24:17 +0000 (12:24 -0500)]
rehabilitate some t5302 tests on 32-bit off_t machines
Commit
8ed2fca458d085f12c3c6808ef4ddab6aa40ef14 was a bit draconian in
skipping certain tests which should be perfectly valid even on platform
with a 32-bit off_t.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Thu, 15 Nov 2007 16:33:44 +0000 (17:33 +0100)]
refs.c: Remove unused get_ref_sha1()
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:05:06 +0000 (21:05 +0100)]
Allow ETC_GITCONFIG to be a relative path.
If ETC_GITCONFIG is not an absolute path, interpret it relative to
--exec-dir. This makes the installed binaries relocatable because the
prefix is not compiled-in.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:05:05 +0000 (21:05 +0100)]
Introduce git_etc_gitconfig() that encapsulates access of ETC_GITCONFIG.
In a subsequent patch the path to the system-wide config file will be
computed. This is a preparation for that change. It turns all accesses
of ETC_GITCONFIG into function calls. There is no change in behavior.
As a consequence, config.c is the only file that needs the definition of
ETC_GITCONFIG. Hence, -DETC_GITCONFIG is removed from the CFLAGS and a
special build rule for config.c is introduced. As a side-effect, changing
the defintion of ETC_GITCONFIG (e.g. in config.mak) does not trigger a
complete rebuild anymore.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:05:04 +0000 (21:05 +0100)]
Allow a relative builtin template directory.
In order to make git relocatable (i.e. not have the prefix compiled-in)
the template directory must depend on the location where this git instance
is found, which is GIT_EXEC_DIR.
The exec path is prepended only if the compiled-in default template
directory is to be used and that is relative. Any relative directories
that are specified via environment variable or the --exec-dir switch are
taken as is.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Schindelin [Tue, 13 Nov 2007 20:05:03 +0000 (21:05 +0100)]
Close files opened by lock_file() before unlinking.
This is needed on Windows since open files cannot be unlinked.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:05:02 +0000 (21:05 +0100)]
builtin run_command: do not exit with -1.
There are shells that do not correctly detect an exit code of -1 as a
failure. We simply truncate the status code to the lower 8 bits.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:05:01 +0000 (21:05 +0100)]
Move #include <sys/select.h> and <sys/ioctl.h> to git-compat-util.h.
... since all system headers are pulled in via git-compat-util.h
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:05:00 +0000 (21:05 +0100)]
Use is_absolute_path() in sha1_file.c.
There are some places that test for an absolute path. Use the helper
function to ease porting.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:04:59 +0000 (21:04 +0100)]
Skip t3902-quoted.sh if the file system does not support funny names.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:04:58 +0000 (21:04 +0100)]
t5302-pack-index: Skip tests of 64-bit offsets if necessary.
There are platforms where off_t is not 64 bits wide. In this case many tests
are doomed to fail. Let's skip them.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:04:57 +0000 (21:04 +0100)]
t7501-commit.sh: Not all seds understand option -i
Use mv instead.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Tue, 13 Nov 2007 20:04:56 +0000 (21:04 +0100)]
t5300-pack-object.sh: Split the big verify-pack test into smaller parts.
This makes it easier to spot which of the tests failed.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 14 Nov 2007 08:05:00 +0000 (00:05 -0800)]
core.excludesfile clean-up
There are inconsistencies in the way commands currently handle
the core.excludesfile configuration variable. The problem is
the variable is too new to be noticed by anything other than
git-add and git-status.
* git-ls-files does not notice any of the "ignore" files by
default, as it predates the standardized set of ignore files.
The calling scripts established the convention to use
.git/info/exclude, .gitignore, and later core.excludesfile.
* git-add and git-status know about it because they call
add_excludes_from_file() directly with their own notion of
which standard set of ignore files to use. This is just a
stupid duplication of code that need to be updated every time
the definition of the standard set of ignore files is
changed.
* git-read-tree takes --exclude-per-directory=<gitignore>,
not because the flexibility was needed. Again, this was
because the option predates the standardization of the ignore
files.
* git-merge-recursive uses hardcoded per-directory .gitignore
and nothing else. git-clean (scripted version) does not
honor core.* because its call to underlying ls-files does not
know about it. git-clean in C (parked in 'pu') doesn't either.
We probably could change git-ls-files to use the standard set
when no excludes are specified on the command line and ignore
processing was asked, or something like that, but that will be a
change in semantics and might break people's scripts in a subtle
way. I am somewhat reluctant to make such a change.
On the other hand, I think it makes perfect sense to fix
git-read-tree, git-merge-recursive and git-clean to follow the
same rule as other commands. I do not think of a valid use case
to give an exclude-per-directory that is nonstandard to
read-tree command, outside a "negative" test in the t1004 test
script.
This patch is the first step to untangle this mess.
The next step would be to teach read-tree, merge-recursive and
clean (in C) to use setup_standard_excludes().
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 14 Nov 2007 22:26:04 +0000 (14:26 -0800)]
Merge branch 'sp/fetch-fix'
* sp/fetch-fix:
git-fetch: avoid local fetching from alternate (again)
rev-list: Introduce --quiet to avoid /dev/null redirects
run-command: Support sending stderr to /dev/null
git-fetch: Always fetch tags if the object they reference exists
Junio C Hamano [Wed, 14 Nov 2007 22:25:46 +0000 (14:25 -0800)]
Merge branch 'bs/maint-commit-options'
* bs/maint-commit-options:
git-commit: Add tests for invalid usage of -a/--interactive with paths
git-commit.sh: Fix usage checks regarding paths given when they do not make sense
Junio C Hamano [Wed, 14 Nov 2007 22:25:33 +0000 (14:25 -0800)]
Merge branch 'rv/maint-index-commit'
* rv/maint-index-commit:
Make GIT_INDEX_FILE apply to git-commit
Junio C Hamano [Wed, 14 Nov 2007 22:25:19 +0000 (14:25 -0800)]
Merge branch 'bs/maint-t7005'
* bs/maint-t7005:
t7005-editor.sh: Don't invoke real vi when it is in GIT_EXEC_PATH
Junio C Hamano [Wed, 14 Nov 2007 22:15:40 +0000 (14:15 -0800)]
Merge branch 'jc/maint-add-sync-stat'
* jc/maint-add-sync-stat:
t2200: test more cases of "add -u"
git-add: make the entry stat-clean after re-adding the same contents
ce_match_stat, run_diff_files: use symbolic constants for readability
Conflicts:
builtin-add.c
Junio C Hamano [Wed, 14 Nov 2007 22:06:09 +0000 (14:06 -0800)]
Merge branch 'mh/retag'
* mh/retag:
Add tests for git tag
Reuse previous annotation when overwriting a tag
Junio C Hamano [Wed, 14 Nov 2007 22:05:47 +0000 (14:05 -0800)]
Merge branch 'jc/stash-create'
* jc/stash-create:
git-stash: Fix listing stashes
git-merge: no reason to use cpio anymore
Revert "rebase: allow starting from a dirty tree."
rebase: allow starting from a dirty tree.
stash: implement "stash create"
Junio C Hamano [Wed, 14 Nov 2007 22:04:25 +0000 (14:04 -0800)]
Merge branch 'bg/format-patch-N'
* bg/format-patch-N:
Rearrange git-format-patch synopsis to improve clarity.
format-patch: Test --[no-]numbered and format.numbered
format-patch: Add configuration and off switch for --numbered
Junio C Hamano [Wed, 14 Nov 2007 22:04:19 +0000 (14:04 -0800)]
Merge branch 'np/progress'
* np/progress:
nicer display of thin pack completion
make display of total transferred fully accurate
remove dead code from the csum-file interface
git-fetch: be even quieter.
make display of total transferred more accurate
sideband.c: ESC is spelled '\033' not '\e' for portability.
fix display overlap between remote and local progress
Junio C Hamano [Wed, 14 Nov 2007 22:04:06 +0000 (14:04 -0800)]
Merge branch 'js/rebase-detached'
* js/rebase-detached:
rebase: fix "rebase --continue" breakage
rebase: operate on a detached HEAD
Junio C Hamano [Wed, 14 Nov 2007 22:03:50 +0000 (14:03 -0800)]
Merge branch 'rs/pretty'
* rs/pretty:
Fix preprocessor logic that determines the availablity of strchrnul().
Simplify strchrnul() compat code
--format=pretty: avoid calculating expensive expansions twice
add strbuf_adddup()
--pretty=format: parse commit message only once
--pretty=format: on-demand format expansion
Add strchrnul()
Junio C Hamano [Wed, 14 Nov 2007 22:03:40 +0000 (14:03 -0800)]
Merge branch 'rr/cvsexportcommit-w'
* rr/cvsexportcommit-w:
cvsexportcommit: Add switch to specify CVS workdir
Junio C Hamano [Wed, 14 Nov 2007 22:03:27 +0000 (14:03 -0800)]
Merge branch 'gh/cvsimport-user'
* gh/cvsimport-user:
git-cvsimport: fix handling of user name when it is not set in CVSROOT
Sergei Organov [Wed, 14 Nov 2007 20:08:15 +0000 (12:08 -0800)]
user-manual: minor rewording for clarity.
Junio screwed up when applying the previous round of the patch;
rewording from "previous" to "old" does make the description
clearer.
Also revert the rewording from head to branch. The description
is talking about the branch's tip commit and using the word head
is clearer.
Based on input from Sergei and Bruce.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Linus Torvalds [Tue, 13 Nov 2007 07:16:08 +0000 (23:16 -0800)]
Fix parent rewriting in --early-output
We cannot tell a node that has been checked and found not to be
interesting (which does not have the TREECHANGE flag) from a
node that hasn't been checked if it is interesting or not,
without relying on something else, such as object->parsed.
But an object can get the "parsed" flag for other reasons.
Which means that "TREECHANGE" has the wrong polarity.
This changes the way how the path pruning logic marks an
uninteresting commits. From now on, we consider a commit
interesting by default, and explicitly mark the ones we decided
to prune. The flag is renamed to "TREESAME".
Then, this fixes the logic to show the early output with
incomplete pruning. It basically says "a commit that has
TREESAME set is kind-of-UNINTERESTING", but obviously in a
different way than an outright UNINTERESTING commit. Until we
parse and examine enough parents to determine if a commit
becomes surely "kind-of-UNINTERESTING", we avoid rewriting
the ancestry so that later rounds can fix things up.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Linus Torvalds [Sun, 11 Nov 2007 23:35:23 +0000 (23:35 +0000)]
Fix rev-list when showing objects involving submodules
The function mark_tree_uninteresting() assumed that the tree entries
are blob when they are not trees. This is not so. Since we do
not traverse into submodules (yet), the gitlinks should be ignored.
In general, we should try to start moving away from using the
"S_ISLNK()" like things for internal git state. It was a mistake to
just assume the numbers all were same across all systems in the first
place. This implementation converts to the "object_type", and then
uses a case statement.
Noticed by Ilari on IRC.
Test script taken from an earlier version by Dscho.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 14 Nov 2007 11:37:18 +0000 (03:37 -0800)]
Merge branch 'maint'
* maint:
git-clean: honor core.excludesfile
Documentation: Fix man page breakage with DocBook XSL v1.72
git-remote.txt: fix typo
core-tutorial.txt: Fix argument mistake in an example.
replace reference to git-rm with git-reset in git-commit doc
Grammar fixes for gitattributes documentation
Don't allow fast-import tree delta chains to exceed maximum depth
revert/cherry-pick: allow starting from dirty work tree.
t/t3404: fix test for a bogus todo file.
Conflicts:
fast-import.c
Junio C Hamano [Wed, 14 Nov 2007 11:13:30 +0000 (03:13 -0800)]
Merge branch 'aw/mirror-push' into jk/send-pack
* aw/mirror-push:
git-push: add documentation for the newly added --mirror mode
Add tests for git push'es mirror mode
git-push: plumb in --mirror mode
Teach send-pack a mirror mode
send-pack: segfault fix on forced push
send-pack: require --verbose to show update of tracking refs
receive-pack: don't mention successful updates
more terse push output
Conflicts:
transport.c
transport.h
Junio C Hamano [Wed, 14 Nov 2007 11:11:37 +0000 (03:11 -0800)]
Merge branch 'ar/send-pack-remote-track' into jk/send-pack
* ar/send-pack-remote-track:
Update the tracking references only if they were succesfully updated on remote
Add a test checking if send-pack updated local tracking branches correctly
Junio C Hamano [Wed, 14 Nov 2007 11:09:52 +0000 (03:09 -0800)]
Merge branch 'db/remote-builtin' into jk/send-pack
* db/remote-builtin:
Reteach builtin-ls-remote to understand remotes
Build in ls-remote
Use built-in send-pack.
Build-in send-pack, with an API for other programs to call.
Build-in peek-remote, using transport infrastructure.
Miscellaneous const changes and utilities
Conflicts:
transport.c
Alex Riesen [Tue, 13 Nov 2007 23:16:36 +0000 (00:16 +0100)]
Fix dependencies of parse-options test program
A stale test-parse-options can break t0040 otherwise.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sergei Organov [Tue, 13 Nov 2007 18:19:39 +0000 (21:19 +0300)]
user-manual.txt: fix a few mistakes
Signed-off-by: Sergei Organov <osv@javad.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Wed, 14 Nov 2007 09:54:43 +0000 (01:54 -0800)]
git-clean: honor core.excludesfile
git-clean did not honor core.excludesfile configuration
variable, although some other commands such as git-add and
git-status did. Fix this inconsistency.
Original report and patch from Shun'ichi Fuji. Rewritten by me
and bugs and tests are mine.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jonas Fonseca [Wed, 14 Nov 2007 09:38:46 +0000 (10:38 +0100)]
Documentation: Fix man page breakage with DocBook XSL v1.72
From version 1.72 it will replace all dots in roff requests with U+2302
("house" character), and add escaping in output for all instances of dot
that are not in roff requests. This caused the ".ft" hack forcing
monospace font in listingblocks to end up as "\&.ft" and being visible
in the resulting man page.
The fix adds a DOCBOOK_XSL_172 build variable that will disable the
hack. To allow this variable to be defined in config.mak it also moves
build variable handling below the inclusion of config.mak.
Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Shawn O. Pearce [Tue, 13 Nov 2007 08:22:44 +0000 (03:22 -0500)]
Handle broken vsnprintf implementations in strbuf
Solaris 9's vsnprintf implementation returns -1 if we pass it a
buffer of length 0. The only way to get it to give us the actual
length necessary for the formatted string is to grow the buffer
out to have at least 1 byte available in the strbuf and then ask
it to compute the length.
If the available space is 0 I'm growing it out by 64 to ensure
we will get an accurate length estimate from all implementations.
Some callers may need to grow the strbuf again but 64 should be a
reasonable enough initial growth.
We also no longer silently fail to append to the string when we are
faced with a broken vsnprintf implementation. On Solaris 9 this
silent failure caused me to no longer be able to execute "git clone"
as we tried to exec the empty string rather than "git-clone".
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sergei Organov [Tue, 13 Nov 2007 18:17:47 +0000 (21:17 +0300)]
git-remote.txt: fix typo
Signed-off-by: Sergei Organov <osv@javad.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sergei Organov [Sat, 10 Nov 2007 13:17:33 +0000 (16:17 +0300)]
core-tutorial.txt: Fix argument mistake in an example.
One of examples has wrong output given the arguments provided.
Fix arguments to match the output.
Fix a minor syntax mistake in another place.
Signed-off-by: Sergei Organov <osv@javad.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jing Xue [Mon, 12 Nov 2007 04:43:00 +0000 (23:43 -0500)]
replace reference to git-rm with git-reset in git-commit doc
The message in git-commit suggesting to use 'git rm --cached'
to unstage is just plain wrong. It really should mention 'git reset'.
Suggested by Jan Hudec.
Signed-off-by: Jing Xue <jingxue@digizenstudio.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Wincent Colaiuta [Wed, 14 Nov 2007 07:51:41 +0000 (08:51 +0100)]
Grammar fixes for gitattributes documentation
Tweak the "filter" section of the gitattributes documentation to add
some
missing articles and improve some word choices without changing the
semantics of the section.
Signed-off-by: Wincent Colaiuta <win@wincent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Shawn O. Pearce [Wed, 14 Nov 2007 04:48:42 +0000 (23:48 -0500)]
Don't allow fast-import tree delta chains to exceed maximum depth
Brian Downing noticed fast-import can produce tree depths of up
to 6,035 objects and even deeper. Long delta chains can create
very small packfiles but cause problems during repacking as git
needs to unpack each tree to count the reachable blobs.
What's happening here is the active branch cache isn't big enough.
We're swapping out the branch and thus recycling the tree information
(struct tree_content) back into the free pool. When we later reload
the tree we set the delta_depth to 0 but we kept the tree we just
reloaded as a delta base.
So if the tree we reloaded was already at the maximum depth we
wouldn't know it and make the new tree a delta. Multiply the
number of times the branch cache has to swap out the tree times
max_depth (10) and you get the maximum delta depth of a tree created
by fast-import. In Brian's case above the active branch cache had
to swap the branch out 603/604 times during this import to produce
a tree with a delta depth of 6035.
Acked-by: Brian Downing <bdowning@lavos.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Tue, 13 Nov 2007 21:45:11 +0000 (13:45 -0800)]
Resurrect git-revert.sh example and add comment to builtin-revert.c
I had to scratch my head for quite some time figuring out why we
cannot optimize out write_tree() we do when --no-commit option
is given, whose purpose seem to be only to check if the index is
unmerged, with a simple loop over the active_cache[].
So add a comment to describe why the write_tree() is there, and
resurrect the last scripted version as a reference material in
contrib/example directory with others.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Tue, 13 Nov 2007 20:28:53 +0000 (12:28 -0800)]
revert/cherry-pick: allow starting from dirty work tree.
There is no reason to forbid a dirty work tree when reverting or
cherry-picking a change, as long as the index is clean.
The scripted version used to allow it:
case "$no_commit" in
t)
# We do not intend to commit immediately. We just want to
# merge the differences in.
head=$(git-write-tree) ||
die "Your index file is unmerged."
;;
*)
head=$(git-rev-parse --verify HEAD) ||
die "You do not have a valid HEAD"
files=$(git-diff-index --cached --name-only $head) || exit
if [ "$files" ]; then
die "Dirty index: cannot $me (dirty: $files)"
fi
;;
esac
but C rewrite tightened the check, probably by mistake.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Tue, 13 Nov 2007 21:05:50 +0000 (13:05 -0800)]
t/t3404: fix test for a bogus todo file.
The test wants to see if there are still remaining tasks, but checked
a wrong file.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Andy Whitcroft [Mon, 12 Nov 2007 12:07:40 +0000 (12:07 +0000)]
git-quiltimport.sh fix --patches handling
When converting git-quiltimport.sh to the new git-rev-part --parseopt
system, the handling of --patches was broken. We inadvertantly always
attempt to use '--patches' as the value.
This was introduced in the following commit:
commit
e01fbf1a8f185bf6722e828286862a4122269ef7
Author: Pierre Habouzit <madcoder@debian.org>
Date: Sun Nov 4 11:31:01 2007 +0100
Migrate git-quiltimport.sh to use git-rev-parse --parseopt
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Björn Steinbrink [Mon, 12 Nov 2007 15:15:39 +0000 (16:15 +0100)]
git-commit: Add tests for invalid usage of -a/--interactive with paths
git-commit was/is broken in that it accepts paths together with -a or
--interactive, which it shouldn't. There tests check those usage errors.
Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Andy Whitcroft [Fri, 9 Nov 2007 23:32:57 +0000 (23:32 +0000)]
git-push: add documentation for the newly added --mirror mode
Add some basic documentation on the --mirror mode for git-push.
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Andy Whitcroft [Fri, 9 Nov 2007 23:32:41 +0000 (23:32 +0000)]
Add tests for git push'es mirror mode
Add some tests for git push --mirror mode.
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Mon, 12 Nov 2007 10:09:05 +0000 (11:09 +0100)]
Fix preprocessor logic that determines the availablity of strchrnul().
Apart from the error in the condition (&& should actually be ||), the
construct
#if !defined(A) || !A
leads to a syntax error in the C preprocessor if A is indeed not defined.
Tested-by: David Symonds <dsymonds@gmail.com>
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Alex Riesen [Mon, 12 Nov 2007 21:39:38 +0000 (22:39 +0100)]
Update the tracking references only if they were succesfully updated on remote
It fixes the bug where local tracking branches were filled with zeroed
SHA-1 if the remote branch was not updated because, for instance, it
was not an ancestor of the local (i.e. had other changes).
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Alex Riesen [Mon, 12 Nov 2007 21:38:23 +0000 (22:38 +0100)]
Add a test checking if send-pack updated local tracking branches correctly
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt [Mon, 12 Nov 2007 08:27:35 +0000 (09:27 +0100)]
git-clean: Fix error message if clean.requireForce is not set.
It was distracting to see this error message:
clean.requireForce set and -n or -f not given; refusing to clean
even though clean.requireForce was not set at all. This patch distinguishes
the cases and gives a different message depending on whether the
configuration variable is not set or set to true.
While we are here, we also divert the error messages to stderr.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Schindelin [Mon, 12 Nov 2007 13:11:46 +0000 (13:11 +0000)]
rebase: fix "rebase --continue" breakage
The --skip case was handled properly when rebasing without --merge,
but the --continue case was not.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Eric Wong [Mon, 12 Nov 2007 07:37:42 +0000 (23:37 -0800)]
git-svn: support for funky branch and project names over HTTP(S)
SVN requires that paths be URI-escaped for HTTP(S) repositories.
file:// and svn:// repositories do not need these rules.
Additionally, accessing individual paths inside repositories
(check_path() and get_log() do NOT require escapes to function
and in fact it breaks things).
Noticed-by: Michael J. Cohen <mjc@cruiseplanners.com>
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jonas Fonseca [Mon, 12 Nov 2007 00:32:51 +0000 (01:32 +0100)]
Documentation: Fix references to deprecated commands
... by changing git-tar-tree reference to git-archive and removing
seemingly unrelevant footnote about git-ssh-{fetch,upload}.
Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Mon, 12 Nov 2007 08:14:15 +0000 (00:14 -0800)]
Merge branch 'maint'
* maint:
for-each-ref: fix off by one read.
git-branch: remove mention of non-existent '-b' option
git-svn: prevent dcommitting if the index is dirty.
Fix memory leak in traverse_commit_list
Junio C Hamano [Mon, 12 Nov 2007 08:00:00 +0000 (00:00 -0800)]
Merge branch 'sp/maint-plug-traverse-commit-list-leak' into maint
* sp/maint-plug-traverse-commit-list-leak:
Fix memory leak in traverse_commit_list
Christian Couder [Mon, 12 Nov 2007 04:37:25 +0000 (05:37 +0100)]
for-each-ref: fix off by one read.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King [Mon, 12 Nov 2007 04:07:05 +0000 (23:07 -0500)]
git-branch: remove mention of non-existent '-b' option
This looks like a cut and paste error from the git-checkout
explanation of --no-track.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Benoit Sigoure [Sun, 11 Nov 2007 18:41:41 +0000 (19:41 +0100)]
git-svn: prevent dcommitting if the index is dirty.
dcommit uses rebase to sync the history with what has just been pushed to
SVN. Trying to dcommit with a dirty index is troublesome for rebase, so now
the user will get an error message if he attempts to dcommit with a dirty
index.
Signed-off-by: Benoit Sigoure <tsuna@lrde.epita.fr>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano [Mon, 12 Nov 2007 02:44:16 +0000 (18:44 -0800)]
t2200: test more cases of "add -u"
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Shawn O. Pearce [Sun, 11 Nov 2007 07:29:47 +0000 (02:29 -0500)]
git-fetch: avoid local fetching from alternate (again)
Back in
e3c6f240fd9c5bdeb33f2d47adc859f37935e2df Junio taught
git-fetch to avoid copying objects when we are fetching from
a repository that is already registered as an alternate object
database. In such a case there is no reason to copy any objects
as we can already obtain them through the alternate.
However we need to ensure the objects are all reachable, so we
run `git rev-list --objects $theirs --not --all` to verify this.
If any object is missing or unreadable then we need to fetch/copy
the objects from the remote. When a missing object is detected
the git-rev-list process will exit with a non-zero exit status,
making this condition quite easy to detect.
Although git-fetch is currently a builtin (and so is rev-list)
we cannot invoke the traverse_objects() API at this point in the
transport code. The object walker within traverse_objects() calls
die() as soon as it finds an object it cannot read. If that happens
we want to resume the fetch process by calling do_fetch_pack().
To get around this we spawn git-rev-list into a background process
to prevent a die() from killing the foreground fetch process,
thus allowing the fetch process to resume into do_fetch_pack()
if copying is necessary.
We aren't interested in the output of rev-list (a list of SHA-1
object names that are reachable) or its errors (a "spurious" error
about an object not being found as we need to copy it) so we redirect
both stdout and stderr to /dev/null.
We run this git-rev-list based check before any fetch as we may
already have the necessary objects local from a prior fetch. If we
don't then its very likely the first $theirs object listed on the
command line won't exist locally and git-rev-list will die very
quickly, allowing us to start the network transfer. This test even
on remote URLs may save bandwidth if someone runs `git pull origin`,
sees a merge conflict, resets out, then redoes the same pull just
a short time later. If the remote hasn't changed between the two
pulls and the local repository hasn't had git-gc run in it then
there is probably no need to perform network transfer as all of
the objects are local.
Documentation for the new quickfetch function was suggested and
written by Junio, based on his original comment in git-fetch.sh.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>