gitweb.git
git-send-email: Accept fifos as well as filesKevin Ballard Wed, 25 Jun 2008 22:44:40 +0000 (15:44 -0700)

git-send-email: Accept fifos as well as files

When a fifo is given, validation must be skipped because we can't
read the fifo twice. Ideally git-send-email would cache the read
data instead of attempting to read twice, but for now just skip
validation.

Signed-off-by: Kevin Ballard <kevin@sb.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pack.indexversion config option now defaults to 2Nicolas Pitre Wed, 25 Jun 2008 04:25:53 +0000 (00:25 -0400)

pack.indexversion config option now defaults to 2

As announced for 1.6.0.

Git older than version 1.5.2 (or any other git version with this option
set to 1) may revert to version 1 of the pack index by manually deleting
all .idx files and recreating them using 'git index-pack'. Communication
over the git native protocol is unaffected since the pack index is never
transferred.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Thu, 26 Jun 2008 01:29:14 +0000 (18:29 -0700)

Merge branch 'maint'

* maint:
GIT 1.5.6.1
fix update-hook-example to work with packed tag references
clone: create intermediate directories of destination repo
for-each-ref: implement missing tag values
git-rebase.sh: Add check if rebase is in progress

Allow "git-reset path" when unambiguousJunio C Hamano Thu, 26 Jun 2008 01:16:36 +0000 (18:16 -0700)

Allow "git-reset path" when unambiguous

Resetting a selected set of index entries is done with
"git reset -- paths" syntax, but we did not allow -- to be omitted
even when the command is unambiguous.

This updates the command to follow the general rule:

* When -- appears, revs come before it, and paths come after it;

* When there is no --, earlier ones are revs and the rest are paths, and
we need to guess. When lack of -- marker forces us to guess, we
protect from user errors and typoes by making sure what we treat as
revs do not appear as filenames in the work tree, and what we treat as
paths do appear as filenames in the work tree, and by erroring out if
that is not the case. We tell the user to disambiguate by using -- in
such a case.

which is employed elsewhere in the system.

When this rule is applied to "reset", because we can have only zero or one
rev to the command, the check can be slightly simpler than other programs.
We have to check only the first one or two tokens after the command name
and options, and when they are:

-- A:
no explicit rev given; "A" and whatever follows it are paths.

A --:
explicit rev "A" given and whatever follows the "--" are paths.

A B:
"A" could be rev or path and we need to guess. "B" could
be missing but if exists that (and everything that follows) would
be paths.

So we apply the guess only in the last case and only to "A" (not "B" and
what comes after it).

* As long as "A" is unambiguously a path, index entries for "A", "B" (and
everything that follows) are reset to the HEAD revision.

* If "A" is unambiguously a rev, on the other hand, the index entries for
"B" (and everything that follows) are reset to the "A" revision.

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

Fix use of "perl -i" on WindowsAlex Riesen Wed, 25 Jun 2008 18:35:13 +0000 (20:35 +0200)

Fix use of "perl -i" on Windows

The perldiag(1) has following to say about this:

"Can't do inplace edit without backup"

(F) You're on a system such as MS-DOS that gets confused if
you try reading from a deleted (but still opened) file. You
have to say -i.bak, or some such.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

GIT 1.5.6.1 v1.5.6.1Junio C Hamano Thu, 26 Jun 2008 00:09:40 +0000 (17:09 -0700)

GIT 1.5.6.1

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

Merge branch 'sb/rebase'Junio C Hamano Wed, 25 Jun 2008 20:20:26 +0000 (13:20 -0700)

Merge branch 'sb/rebase'

* sb/rebase:
t3404: stricter tests for git-rebase--interactive
api-builtin.txt: update and fix typo

Merge branch 'lw/gitweb'Junio C Hamano Wed, 25 Jun 2008 20:19:53 +0000 (13:19 -0700)

Merge branch 'lw/gitweb'

* lw/gitweb:
gitweb: standarize HTTP status codes

Merge branch 'lt/config-fsync'Junio C Hamano Wed, 25 Jun 2008 20:19:49 +0000 (13:19 -0700)

Merge branch 'lt/config-fsync'

* lt/config-fsync:
Add config option to enable 'fsync()' of object files
Split up default "i18n" and "branch" config parsing into helper routines
Split up default "user" config parsing into helper routine
Split up default "core" config parsing into helper routine

Merge branch 'sr/tests'Junio C Hamano Wed, 25 Jun 2008 20:19:22 +0000 (13:19 -0700)

Merge branch 'sr/tests'

* sr/tests:
Hook up the result aggregation in the test makefile.
A simple script to parse the results from the testcases
Modify test-lib.sh to output stats to t/test-results/*

Conflicts:

t/test-lib.sh

Merge branch 'jh/clone-packed-refs'Junio C Hamano Wed, 25 Jun 2008 20:18:54 +0000 (13:18 -0700)

Merge branch 'jh/clone-packed-refs'

* jh/clone-packed-refs:
Teach "git clone" to pack refs
Prepare testsuite for a "git clone" that packs refs
Move pack_refs() and friends into libgit
Incorporate fetched packs in future object traversal

Merge branch 'lw/perlish'Junio C Hamano Wed, 25 Jun 2008 20:18:46 +0000 (13:18 -0700)

Merge branch 'lw/perlish'

* lw/perlish:
Git.pm: add test suite
t/test-lib.sh: add test_external and test_external_without_stderr

fix update-hook-example to work with packed tag referencesDmitry Potapov Wed, 25 Jun 2008 08:26:55 +0000 (12:26 +0400)

fix update-hook-example to work with packed tag references

The update-hook-example used 'test -f' to check the tag present, which
does not work if the checked reference is packed. This check has been
changed to use 'git rev-parse $tag' instead.

Signed-off-by: Dmitry Potapov <dpotapov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clone: create intermediate directories of destination... Jeff King Wed, 25 Jun 2008 05:41:34 +0000 (01:41 -0400)

clone: create intermediate directories of destination repo

The shell version used to use "mkdir -p" to create the repo
path, but the C version just calls "mkdir". Let's replicate
the old behavior. We have to create the git and worktree
leading dirs separately; while most of the time, the
worktree dir contains the git dir (as .git), the user can
override this using GIT_WORK_TREE.

We can reuse safe_create_leading_directories, but we need to
make a copy of our const buffer to do so. Since
merge-recursive uses the same pattern, we can factor this
out into a global function. This has two other cleanup
advantages for merge-recursive:

1. mkdir_p wasn't a very good name. "mkdir -p foo/bar" actually
creates bar, but this function just creates the leading
directories.

2. mkdir_p took a mode argument, but it was completely
ignored.

Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jc/maint-combine-diff-pre-context' into... Junio C Hamano Wed, 25 Jun 2008 18:20:01 +0000 (11:20 -0700)

Merge branch 'jc/maint-combine-diff-pre-context' into maint

* jc/maint-combine-diff-pre-context:
diff -c/--cc: do not include uninteresting deletion before leading context

Merge branch 'lt/maint-gitdir-relative' into maintJunio C Hamano Wed, 25 Jun 2008 18:19:33 +0000 (11:19 -0700)

Merge branch 'lt/maint-gitdir-relative' into maint

* lt/maint-gitdir-relative:
Make git_dir a path relative to work_tree in setup_work_tree()

Merge branch 'sb/maint-rebase' into maintJunio C Hamano Wed, 25 Jun 2008 18:18:39 +0000 (11:18 -0700)

Merge branch 'sb/maint-rebase' into maint

* sb/maint-rebase:
git-rebase.sh: Add check if rebase is in progress

for-each-ref: implement missing tag valuesJeff King Wed, 25 Jun 2008 16:08:15 +0000 (12:08 -0400)

for-each-ref: implement missing tag values

The "type" and "object" fields for tags were accepted as
valid atoms, but never implemented. Consequently, they
simply returned the empty string, even for valid tags.

Noticed by Lea Wiemann.

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

repack.usedeltabaseoffset config option now defaults... Nicolas Pitre Wed, 25 Jun 2008 04:24:53 +0000 (00:24 -0400)

repack.usedeltabaseoffset config option now defaults to "true"

As announced for 1.6.0.

Access over the native protocol by old git versions is unaffected as
this capability is negociated by the protocol. Otherwise setting this
config option to "false" and doing a 'git repack -a -d' is enough to
remain compatible with ancient git versions (older than 1.4.4).

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify-pack: test for detection of index v2 object... Nicolas Pitre Wed, 25 Jun 2008 03:19:44 +0000 (23:19 -0400)

verify-pack: test for detection of index v2 object CRC mismatch

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

verify-pack: check packed object CRC when using index... Nicolas Pitre Wed, 25 Jun 2008 03:19:02 +0000 (23:19 -0400)

verify-pack: check packed object CRC when using index version 2

To do so, check_pack_crc() moved from builtin-pack-objects.c to
pack-check.c where it is more logical to share.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

move show_pack_info() where it belongsNicolas Pitre Wed, 25 Jun 2008 03:18:17 +0000 (23:18 -0400)

move show_pack_info() where it belongs

This is called when verify_pack() has its verbose argument set, and
verbose in this context makes sense only for the actual 'git verify-pack'
command. Therefore let's move show_pack_info() to builtin-verify-pack.c
instead and remove useless verbose argument from verify_pack().

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

optimize verify-pack a bitNicolas Pitre Wed, 25 Jun 2008 03:17:12 +0000 (23:17 -0400)

optimize verify-pack a bit

Using find_pack_entry_one() to get object offsets is rather suboptimal
when nth_packed_object_offset() can be used directly.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

clone: create intermediate directories of destination... Jeff King Wed, 25 Jun 2008 05:41:34 +0000 (01:41 -0400)

clone: create intermediate directories of destination repo

The shell version used to use "mkdir -p" to create the repo
path, but the C version just calls "mkdir". Let's replicate
the old behavior. We have to create the git and worktree
leading dirs separately; while most of the time, the
worktree dir contains the git dir (as .git), the user can
override this using GIT_WORK_TREE.

We can reuse safe_create_leading_directories, but we need to
make a copy of our const buffer to do so. Since
merge-recursive uses the same pattern, we can factor this
out into a global function. This has two other cleanup
advantages for merge-recursive:

1. mkdir_p wasn't a very good name. "mkdir -p foo/bar" actually
creates bar, but this function just creates the leading
directories.

2. mkdir_p took a mode argument, but it was completely
ignored.

Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Keep some git-* programs in $(bindir)Junio C Hamano Wed, 25 Jun 2008 02:58:11 +0000 (19:58 -0700)

Keep some git-* programs in $(bindir)

Otherwise remote executions directly over ssh won't find them as they used
to. --upload-pack and --receive-pack options _could_ be used on the
client side, but things should keep working out-of-box for older clients.

Later versions of clients (fetch-pack and send-pack) probably could start
asking for these programs with dashless form, but that is a different
topic.

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

Ship sample hooks with .sample suffixJunio C Hamano Wed, 25 Jun 2008 01:45:21 +0000 (18:45 -0700)

Ship sample hooks with .sample suffix

We used to mark hooks we ship as samples by making them unexecutable, but
some filesystems cannot tell what is executable and what is not.

This makes it much more explicit. The hooks are suffixed with .sample
(but now are made executable), so enabling it is still one step operation
(instead of "chmod +x $hook", you would do "mv $hook.sample $hook") but
now they won't get accidentally enabled on systems without executable bit.

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

pre-rebase hook updateJunio C Hamano Wed, 25 Jun 2008 02:05:45 +0000 (19:05 -0700)

pre-rebase hook update

This hook is what I have been using to manage topic branches in git.git,
but have not been updated to the Real Thing for a while.

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

refactor pack structure allocationNicolas Pitre Tue, 24 Jun 2008 22:58:06 +0000 (18:58 -0400)

refactor pack structure allocation

New pack structures are currently allocated in 2 different places
and all members have to be initialized explicitly. This is prone
to errors leading to segmentation faults as found by Teemu Likonen.

Let's have a common place where this structure is allocated, and have
all members explicitly initialized to zero.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Prepare execv_git_cmd() for removal of builtins from... Junio C Hamano Sun, 2 Dec 2007 06:09:22 +0000 (22:09 -0800)

Prepare execv_git_cmd() for removal of builtins from the filesystem

Currently, execv_git_cmd() always try running the dashed form, which
means we cannot easily remove the git-foo hardlinks for built-in
commands. This updates the function to always exec "git foo" form, and
makes sure "git" potty does not infinitely recurse to itself.

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

git-shell: accept "git foo" formJunio C Hamano Sun, 2 Dec 2007 06:16:19 +0000 (22:16 -0800)

git-shell: accept "git foo" form

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

test case for pack resilience against corruptionsNicolas Pitre Tue, 24 Jun 2008 01:24:28 +0000 (21:24 -0400)

test case for pack resilience against corruptions

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

implement some resilience against pack corruptionsNicolas Pitre Tue, 24 Jun 2008 01:23:39 +0000 (21:23 -0400)

implement some resilience against pack corruptions

We should be able to fall back to loose objects or alternative packs when
a pack becomes corrupted. This is especially true when an object exists
in one pack only as a delta but its base object is corrupted. Currently
there is no way to retrieve the former object even if the later is
available in another pack or loose.

This patch allows for a delta to be resolved (with a performance cost)
using a base object from a source other than the pack where that delta
is located. Same thing for non-delta objects: rather than failing
outright, a search is made in other packs or used loose when the
currently active pack has it but corrupted.

Of course git will become extremely noisy with error messages when that
happens. However, if the operation succeeds nevertheless, a simple
'git repack -a -f -d' will "fix" the corrupted repository given that all
corrupted objects have a good duplicate somewhere in the object store,
possibly manually copied from another source.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

call init_pack_revindex() lazilyNicolas Pitre Tue, 24 Jun 2008 01:22:14 +0000 (21:22 -0400)

call init_pack_revindex() lazily

This makes life much easier for next patch, as well as being more efficient
when the revindex is actually not used.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Tue, 24 Jun 2008 00:52:02 +0000 (17:52 -0700)

Merge branch 'maint'

* maint:
git-svn: make rebuild respect rewriteRoot option
Workaround for AIX mkstemp()

git-svn: make rebuild respect rewriteRoot optionJan Krüger Tue, 24 Jun 2008 00:17:36 +0000 (02:17 +0200)

git-svn: make rebuild respect rewriteRoot option

Suppose someone fetches git-svn-ified commits from another repo and then
attempts to use 'git-svn init --rewrite-root=foo bar'. Using git svn rebase
after that will fail badly:

* For each commit tried by working_head_info, rebuild is called indirectly.
* rebuild will iterate over all commits and skip all of them because the
URL does not match. Because of that no rev_map file is generated at all.
* Thus, rebuild will run once for every commit. This takes ages.
* In the end there still isn't any rev_map file and thus working_head_info
fails.

Addressing this behaviour fixes an apparently not too uncommon problem with
providing git-svn mirrors of Subversion repositories. Some repositories are
accessed using different URLs depending on whether the user has push
privileges or not. In the latter case, an anonymous URL is often used that
differs from the push URL. Providing a mirror that is usable in both cases
becomes a lot more possible with this change.

Signed-off-by: Jan Krüger <jk@jk.gs>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Workaround for AIX mkstemp()Patrick Higgins Mon, 23 Jun 2008 21:33:41 +0000 (15:33 -0600)

Workaround for AIX mkstemp()

The AIX mkstemp will modify it's template parameter to an empty string if
the call fails. This caused a subsequent mkdir to fail.

Signed-off-by: Patrick Higgins <patrick.higgins@cexp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9301-fast-export.sh: Remove debug lineMichele Ballabio Mon, 23 Jun 2008 16:19:23 +0000 (18:19 +0200)

t9301-fast-export.sh: Remove debug line

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Windows: Implement start_command().Johannes Sixt Fri, 7 Dec 2007 21:08:59 +0000 (22:08 +0100)

Windows: Implement start_command().

On Windows, we have spawnv() variants to run a child process instead of
fork()/exec(). In order to attach pipe ends to stdin, stdout, and stderr,
we have to use this idiom:

save1 = dup(1);
dup2(pipe[1], 1);
spawnv();
dup2(save1, 1);
close(pipe[1]);

assuming that the descriptors created by pipe() are not inheritable.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: A pipe() replacement whose ends are not inheri... Johannes Sixt Fri, 7 Dec 2007 21:05:36 +0000 (22:05 +0100)

Windows: A pipe() replacement whose ends are not inherited to children.

On Unix the idiom to use a pipe is as follows:

pipe(fd);
pid = fork();
if (!pid) {
dup2(fd[1], 1);
close(fd[1]);
close(fd[0]);
...
}
close(fd[1]);

i.e. the child process closes the both pipe ends after duplicating one
to the file descriptors where they are needed.

On Windows, which does not have fork(), we never have an opportunity to
(1) duplicate a pipe end in the child, (2) close unused pipe ends. Instead,
we must use this idiom:

save1 = dup(1);
pipe(fd);
dup2(fd[1], 1);
spawn(...);
dup2(save1, 1);
close(fd[1]);

i.e. save away the descriptor at the destination slot, replace by the pipe
end, spawn process, restore the saved file.

But there is a problem: Notice that the child did not only inherit the
dup2()ed descriptor, but also *both* original pipe ends. Although the one
end that was dup()ed could be closed before the spawn(), we cannot close
the other end - the child inherits it, no matter what.

The solution is to generate non-inheritable pipes. At the first glance,
this looks strange: The purpose of pipes is usually to be inherited to
child processes. But notice that in the course of actions as outlined
above, the pipe descriptor that we want to inherit to the child is
dup2()ed, and as it so happens, Windows's dup2() creates inheritable
duplicates.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Wrap execve so that shell scripts can be invoked.Johannes Sixt Tue, 4 Dec 2007 11:38:32 +0000 (12:38 +0100)

Windows: Wrap execve so that shell scripts can be invoked.

When an external git command is invoked, it can be a Bourne shell script.
This patch looks into the command file to see whether it is one.
In this case, the command line is rearranged to invoke the shell
with the proper arguments.

With this change, scripted git commands work. Command line arguments
to those scripts cannot be complex (contain spaces or double-quotes), yet.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Implement setitimer() and sigaction().Johannes Sixt Tue, 13 Nov 2007 09:14:45 +0000 (10:14 +0100)

Windows: Implement setitimer() and sigaction().

The timer is implemented using a thread that calls the signal handler
at regular intervals.

We also replace Windows's signal() function because we must intercept
that SIGALRM is set (which is used when a timer is canceled).

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Fix PRIuMAX definition.Johannes Sixt Fri, 23 Mar 2007 09:57:05 +0000 (10:57 +0100)

Windows: Fix PRIuMAX definition.

Since GIT calls into Microsoft's MSVCRT.DLL, it must use the printf
format that this DLL uses for 64-bit integers, which is %I64u instead
of %llu.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Implement gettimeofday().Johannes Sixt Sat, 1 Dec 2007 20:51:20 +0000 (21:51 +0100)

Windows: Implement gettimeofday().

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Make my_mktime() public and rename it to tm_to_time_t()Johannes Sixt Mon, 23 Jun 2008 06:31:41 +0000 (08:31 +0200)

Make my_mktime() public and rename it to tm_to_time_t()

We will use it from the MinGW port's gettimeofday() substitution.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Work around misbehaved rename().Johannes Sixt Fri, 7 Dec 2007 21:19:40 +0000 (22:19 +0100)

Windows: Work around misbehaved rename().

Windows's rename() is based on the MoveFile() API, which fails if the
destination exists. Here we work around the problem by using MoveFileEx().
Furthermore, the posixly correct error is returned if the destination is
a directory.

The implementation is still slightly incomplete, however, because of the
missing error code translation: We assume that the failure is due to
permissions.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: always chmod(, 0666) before unlink().Johannes Schindelin Tue, 23 Jan 2007 12:39:09 +0000 (13:39 +0100)

Windows: always chmod(, 0666) before unlink().

On Windows, read-only files cannot be deleted. To make sure that
deletion does not fail because of this, always call chmod() before
unlink().

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: A minimal implemention of getpwuid().Johannes Sixt Sat, 1 Dec 2007 21:09:17 +0000 (22:09 +0100)

Windows: A minimal implemention of getpwuid().

getpwuid() is implemented just enough that GIT does not issue errors.
Since the information that it returns is not very useful, users are
required to set up user.name and user.email configuration.

All uses of getpwuid() are like getpwuid(getuid()), hence, the return value
of getuid() is irrelevant and the uid parameter is not even looked at.

Side note: getpwnam() is only used to resolve '~' and '~username' paths,
which is an idiom not known on Windows, hence, we don't implement it.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Implement a wrapper of the open() function.Johannes Sixt Thu, 15 Nov 2007 21:22:47 +0000 (22:22 +0100)

Windows: Implement a wrapper of the open() function.

The wrapper does two things:
- Requests to open /dev/null are redirected to open the nul pseudo file.
- A request to open a file that currently exists as a directory on
Windows fails with EACCES; this is changed to EISDIR.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Strip ".exe" from the program name.Johannes Sixt Sat, 8 Dec 2007 19:57:25 +0000 (20:57 +0100)

Windows: Strip ".exe" from the program name.

Before we can successfully parse a builtin command from the program name
we must strip off unneeded parts, that is, the file extension.

Furthermore, we must take Windows style path names into account when we
parse the program name.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Handle absolute paths in safe_create_leading_d... Johannes Sixt Fri, 30 Nov 2007 20:36:00 +0000 (21:36 +0100)

Windows: Handle absolute paths in safe_create_leading_directories().

In this function we must be careful to handle drive-local paths else there
is a danger that it runs into an infinite loop.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Windows: Treat Windows style path names.Johannes Sixt Wed, 5 Mar 2008 20:51:27 +0000 (21:51 +0100)

Windows: Treat Windows style path names.

GIT's guts work with a forward slash as a path separators. We do not change
that. Rather we make sure that only "normalized" paths enter the depths
of the machinery.

We have to translate backslashes to forward slashes in the prefix and in
command line arguments. Fortunately, all of them are passed through
functions in setup.c.

A macro has_dos_drive_path() is defined that checks whether a path begins
with a drive letter+colon combination. This predicate is always false on
Unix. Another macro is_dir_sep() abstracts that a backslash is also a
directory separator on Windows.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

setup.c: Prepare for Windows directory separators.Johannes Sixt Sat, 1 Mar 2008 20:11:14 +0000 (21:11 +0100)

setup.c: Prepare for Windows directory separators.

This turns two switch/case statements into an if-else-if cascade because
we later do not want to have

case '/':
#ifdef __MINGW32__
case '\\':
#endif

but use a predicate is_dir_sep(foo) in order to check for the directory
separator.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Shrink the git binary a bit by avoiding unnecessary... Linus Torvalds Sun, 22 Jun 2008 19:19:25 +0000 (12:19 -0700)

Shrink the git binary a bit by avoiding unnecessary inline functions

So I was looking at the disgusting size of the git binary, and even with
the debugging removed, and using -Os instead of -O2, the size of the text
section was pretty high. In this day and age I guess almost a megabyte of
text isn't really all that surprising, but it still doesn't exactly make
me think "lean and mean".

With -Os, a surprising amount of text space is wasted on inline functions
that end up just being replicated multiple times, and where performance
really isn't a valid reason to inline them. In particular, the trivial
wrapper functions like "xmalloc()" are used _everywhere_, and making them
inline just duplicates the text (and the string we use to 'die()' on
failure) unnecessarily.

So this just moves them into a "wrapper.c" file, getting rid of a tiny bit
of unnecessary bloat. The following numbers are both with "CFLAGS=-Os":

Before:
[torvalds@woody git]$ size git
text data bss dec hex filename
700460 15160 292184 1007804 f60bc git

After:
[torvalds@woody git]$ size git
text data bss dec hex filename
670540 15160 292184 977884 eebdc git

so it saves almost 30k of text-space (it actually saves more than that
with the default -O2, but I don't think that's necessarily a very relevant
number from a "try to shrink git" standpoint).

It might conceivably have a performance impact, but none of this should be
_that_ performance critical. The real cost is not generally in the wrapper
anyway, but in the code it wraps (ie the cost of "xread()" is all in the
read itself, not in the trivial wrapping of it).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Mon, 23 Jun 2008 01:39:37 +0000 (18:39 -0700)

Merge branch 'maint'

* maint:
Extend parse-options test suite
api-parse-options.txt: Introduce documentation for parse options API
parse-options.c: fix documentation syntax of optional arguments
api-builtin.txt: update and fix typo

Extend parse-options test suiteStephan Beyer Sun, 22 Jun 2008 15:04:26 +0000 (17:04 +0200)

Extend parse-options test suite

This patch serves two purposes:
1. test-parse-option.c should be a more complete
example for the parse-options API, and
2. there have been no tests for OPT_CALLBACK,
OPT_DATE, OPT_BIT, OPT_SET_INT and OPT_SET_PTR
before.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

api-parse-options.txt: Introduce documentation for... Stephan Beyer Sun, 22 Jun 2008 15:04:25 +0000 (17:04 +0200)

api-parse-options.txt: Introduce documentation for parse options API

Add some documentation of basics, macros and callback
implementation of the parse-options API.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse-options.c: fix documentation syntax of optional... Michele Ballabio Sun, 22 Jun 2008 14:39:04 +0000 (16:39 +0200)

parse-options.c: fix documentation syntax of optional arguments

When an argument for an option is optional, short options don't need a
space between the option and the argument, and long options need a "=".
Otherwise, arguments are misinterpreted.

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

api-builtin.txt: update and fix typoStephan Beyer Sat, 21 Jun 2008 23:54:36 +0000 (01:54 +0200)

api-builtin.txt: update and fix typo

Mention NEED_WORK_TREE flag and command-list.txt.
Fix "bulit-in" typo and AsciiDoc-formatting of a paragraph.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-rebase.sh: Add check if rebase is in progressStephan Beyer Sun, 22 Jun 2008 14:07:02 +0000 (16:07 +0200)

git-rebase.sh: Add check if rebase is in progress

"git rebase --continue" and friends gave nonsense errors when there is no
rebase in progress.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3404: stricter tests for git-rebase--interactiveStephan Beyer Sat, 21 Jun 2008 23:55:50 +0000 (01:55 +0200)

t3404: stricter tests for git-rebase--interactive

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

api-builtin.txt: update and fix typoStephan Beyer Sat, 21 Jun 2008 23:54:36 +0000 (01:54 +0200)

api-builtin.txt: update and fix typo

Mention NEED_WORK_TREE flag and command-list.txt.
Fix "bulit-in" typo and AsciiDoc-formatting of a paragraph.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'rs/archive-ignore'Junio C Hamano Sun, 22 Jun 2008 21:46:11 +0000 (14:46 -0700)

Merge branch 'rs/archive-ignore'

* rs/archive-ignore:
Teach new attribute 'export-ignore' to git-archive

Merge branch 'lt/racy-empty'Junio C Hamano Sun, 22 Jun 2008 21:34:20 +0000 (14:34 -0700)

Merge branch 'lt/racy-empty'

* lt/racy-empty:
racy-git: an empty blob has a fixed object name

Merge branch 'sn/static'Junio C Hamano Sun, 22 Jun 2008 21:34:09 +0000 (14:34 -0700)

Merge branch 'sn/static'

* sn/static:
config.c: make git_env_bool() static
environment.c: remove unused function

Merge branch 'jc/maint-combine-diff-pre-context'Junio C Hamano Sun, 22 Jun 2008 21:33:56 +0000 (14:33 -0700)

Merge branch 'jc/maint-combine-diff-pre-context'

* jc/maint-combine-diff-pre-context:
diff -c/--cc: do not include uninteresting deletion before leading context

Merge branch 'lt/maint-gitdir-relative'Junio C Hamano Sun, 22 Jun 2008 21:33:53 +0000 (14:33 -0700)

Merge branch 'lt/maint-gitdir-relative'

* lt/maint-gitdir-relative:
Make git_dir a path relative to work_tree in setup_work_tree()

Merge branch 'jk/test'Junio C Hamano Sun, 22 Jun 2008 21:33:02 +0000 (14:33 -0700)

Merge branch 'jk/test'

* jk/test:
enable whitespace checking of test scripts
avoid trailing whitespace in zero-change diffstat lines
avoid whitespace on empty line in automatic usage message
mask necessary whitespace policy violations in test scripts
fix whitespace violations in test scripts

Merge branch 'pb/fast-export'Junio C Hamano Sun, 22 Jun 2008 21:32:58 +0000 (14:32 -0700)

Merge branch 'pb/fast-export'

* pb/fast-export:
builtin-fast-export: Add importing and exporting of revision marks

Merge branch 'mo/status-untracked'Junio C Hamano Sun, 22 Jun 2008 21:32:27 +0000 (14:32 -0700)

Merge branch 'mo/status-untracked'

* mo/status-untracked:
Add configuration option for default untracked files mode
Add argument 'no' commit/status option -u|--untracked-files
Add an optional <mode> argument to commit/status -u|--untracked-files option

Conflicts:

Documentation/git-commit.txt

Merge branch 'kh/update-ref'Junio C Hamano Sun, 22 Jun 2008 21:31:57 +0000 (14:31 -0700)

Merge branch 'kh/update-ref'

* kh/update-ref:
Make old sha1 optional with git update-ref -d
Clean up builtin-update-ref's option parsing

Merge branch 'jn/web'Junio C Hamano Sun, 22 Jun 2008 21:31:49 +0000 (14:31 -0700)

Merge branch 'jn/web'

* jn/web:
gitweb: Separate generating 'sort by' table header
gitweb: Separate filling list of projects info

Merge branch 'rg/gitweb'Junio C Hamano Sun, 22 Jun 2008 21:31:44 +0000 (14:31 -0700)

Merge branch 'rg/gitweb'

* rg/gitweb:
gitweb: remove git_blame and rename git_blame2 to git_blame

Windows: Use the Windows style PATH separator ';'.Johannes Sixt Mon, 3 Dec 2007 20:55:57 +0000 (21:55 +0100)

Windows: Use the Windows style PATH separator ';'.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Add target architecture MinGW.Johannes Sixt Sat, 1 Dec 2007 20:24:59 +0000 (21:24 +0100)

Add target architecture MinGW.

With this change GIT can be compiled and linked using MinGW. Builtins
that only read the repository such as the log family and grep already
work.

Simple stubs are provided for a number of functions that the Windows C
runtime does not offer. They will be completed in later patches.
However, a fix for the snprintf/vsnprintf replacement is applied here
to avoid buffer overflows.

Dmitry Kakurin pointed out that access(..., X_OK) would always fails on
Vista and suggested the -D__USE_MINGW_ACCESS workaround.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Compile some programs only conditionally.Johannes Sixt Sat, 1 Dec 2007 10:10:54 +0000 (11:10 +0100)

Compile some programs only conditionally.

These programs depend on difficult to emulate POSIX functionality.
On Windows, we won't compile them.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Add compat/regex.[ch] and compat/fnmatch.[ch].Johannes Sixt Sun, 9 Dec 2007 14:43:34 +0000 (15:43 +0100)

Add compat/regex.[ch] and compat/fnmatch.[ch].

We don't have fnmatch and regular expressions on Windows. We borrow
fnmatch.[ch] from the GNU C library (license is LGPL 2 or later) and
GNU regexp (regexp.c[ch], license is GPL 2 or later). Note that regexp.c
was changed slightly to avoid warnings with gcc.

We make the addition of these files an extra commit so as not to clutter
the next commits.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>

Correct documentation for git-push --mirrorShawn O. Pearce Sat, 21 Jun 2008 03:25:25 +0000 (23:25 -0400)

Correct documentation for git-push --mirror

This option behaves more like:

git push $url +refs/*:refs/*

than it does like:

git push $url +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*

so we should document it to be more clear about that.

Suggested-by: Marek Zawirski <marek.zawirski@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/README: Add 'Skipping Tests' section below 'Running... Jakub Narebski Fri, 20 Jun 2008 21:10:50 +0000 (23:10 +0200)

t/README: Add 'Skipping Tests' section below 'Running Tests'

Add description of GIT_SKIP_TESTS variable, taken almost verbatim
(adjusting for conventions in t/README) from the commit message in

04ece59 (GIT_SKIP_TESTS: allow users to omit tests that are known to break)

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Print errno upon failure to open the COMMIT_EDITMSG... Cristian Peraferrer Fri, 20 Jun 2008 15:24:20 +0000 (17:24 +0200)

Print errno upon failure to open the COMMIT_EDITMSG file

When the COMMIT_EDITMSG cannot be opened, give more information to the user
by giving the 'errno' information.

Signed-off-by: Cristian Peraferrer <corellian.c@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add target "install-html" the the top level MakefileTeemu Likonen Tue, 10 Jun 2008 08:34:25 +0000 (11:34 +0300)

Add target "install-html" the the top level Makefile

This makes it possible to install html documents from the top level
directory. Previously such target was only in Documentation/Makefile.

Signed-off-by: Teemu Likonen <tlikonen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

bash: Add more option completions for 'git log'Teemu Likonen Fri, 20 Jun 2008 13:02:10 +0000 (16:02 +0300)

bash: Add more option completions for 'git log'

Options added: --walk-reflogs --stat --numstat --shortstat
--decorate --diff-filter= --color-words

Signed-off-by: Teemu Likonen <tlikonen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Add a helper script to send patches with Mozilla Thunde... Lukas Sandström Thu, 19 Jun 2008 23:21:33 +0000 (01:21 +0200)

Add a helper script to send patches with Mozilla Thunderbird

The script appp.sh can be used with the External Editor extension for
Mozilla Thunderbird in order to be able to send inline patches in an
easy way.

Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitweb: standarize HTTP status codesLea Wiemann Thu, 19 Jun 2008 20:03:21 +0000 (22:03 +0200)

gitweb: standarize HTTP status codes

Many error status codes simply default to 403 Forbidden, which is not
correct in most cases. This patch makes gitweb return semantically
correct status codes.

For convenience the die_error function now only takes the status code
without reason as first parameter (e.g. 404 instead of "404 Not
Found"), and it now defaults to 500 (Internal Server Error), even
though the default is not used anywhere.

Also documented status code conventions in die_error.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config.c: make git_env_bool() staticしらいしななこ Wed, 18 Jun 2008 23:21:11 +0000 (08:21 +0900)

config.c: make git_env_bool() static

This function is not used by any other file.

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

environment.c: remove unused functionしらいしななこ Wed, 18 Jun 2008 23:21:09 +0000 (08:21 +0900)

environment.c: remove unused function

get_refs_directory() is not used anywhere.

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Make git_dir a path relative to work_tree in setup_work... Linus Torvalds Thu, 19 Jun 2008 19:34:06 +0000 (12:34 -0700)

Make git_dir a path relative to work_tree in setup_work_tree()

Once we find the absolute paths for git_dir and work_tree, we can make
git_dir a relative path since we know pwd will be work_tree. This should
save the kernel some time traversing the path to work_tree all the time
if git_dir is inside work_tree.

Daniel's patch didn't apply for me as-is, so I recreated it with some
differences, and here are the numbers from ten runs each.

There is some IO for me - probably due to more-or-less random flushing of
the journal - so the variation is bigger than I'd like, but whatever:

Before:
real 0m8.135s
real 0m7.933s
real 0m8.080s
real 0m7.954s
real 0m7.949s
real 0m8.112s
real 0m7.934s
real 0m8.059s
real 0m7.979s
real 0m8.038s

After:
real 0m7.685s
real 0m7.968s
real 0m7.703s
real 0m7.850s
real 0m7.995s
real 0m7.817s
real 0m7.963s
real 0m7.955s
real 0m7.848s
real 0m7.969s

Now, going by "best of ten" (on the assumption that the longer numbers
are all due to IO), I'm saying a 7.933s -> 7.685s reduction, and it does
seem to be outside of the noise (ie the "after" case never broke 8s, while
the "before" case did so half the time).

So looks like about 3% to me.

Doing it for a slightly smaller test-case (just the "arch" subdirectory)
gets more stable numbers probably due to not filling the journal with
metadata updates, so we have:

Before:
real 0m1.633s
real 0m1.633s
real 0m1.633s
real 0m1.632s
real 0m1.632s
real 0m1.630s
real 0m1.634s
real 0m1.631s
real 0m1.632s
real 0m1.632s

After:
real 0m1.610s
real 0m1.609s
real 0m1.610s
real 0m1.608s
real 0m1.607s
real 0m1.610s
real 0m1.609s
real 0m1.611s
real 0m1.608s
real 0m1.611s

where I'ld just take the averages and say 1.632 vs 1.610, which is just
over 1% peformance improvement.

So it's not in the noise, but it's not as big as I initially thought and
measured.

(That said, it obviously depends on how deep the working directory path is
too, and whether it is behind NFS or something else that might need to
cause more work to look up).

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

Merge branch 'maint'Junio C Hamano Thu, 19 Jun 2008 23:30:48 +0000 (16:30 -0700)

Merge branch 'maint'

* maint:
Documentation: fix formatting in git-svn
t7502-commit.sh: test_must_fail doesn't work with inline environment variables
completion: add --graph to log command completion
git-merge.sh: fix typo in usage message: sucesses --> succeeds

Documentation: fix formatting in git-svnJan Krüger Thu, 19 Jun 2008 22:41:42 +0000 (00:41 +0200)

Documentation: fix formatting in git-svn

Due to a misplaced list block separator, general hints about the config
file options got indented at the same level as the description of the last
option, making it easy to miss them.

Signed-off-by: Jan Krüger <jk@jk.gs>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7502-commit.sh: test_must_fail doesn't work with inlin... Brandon Casey Thu, 19 Jun 2008 17:32:02 +0000 (12:32 -0500)

t7502-commit.sh: test_must_fail doesn't work with inline environment variables

When the arguments to test_must_fail() begin with a variable assignment,
test_must_fail() attempts to execute the variable assignment as a command.
This fails, and so test_must_fail returns with a successful status value
without running the command it was intended to test.

For example, the following script:

#!/bin/sh
test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 129
}
foo='wo adrian'
test_must_fail foo='yo adrian' sh -c 'echo foo: $foo'

always exits zero and prints the message:

test.sh: line 3: foo=yo adrian: command not found

Test 16 calls test_must_fail in such a way and therefore has not been
testing whether git 'do[es] not fire editor in the presence of conflicts'.

A workaround is to set and export the variable in a normal way, not
using one-shot notation. Because this would affect the remainder of
the process, the test is done inside a subshell.

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

completion: add --graph to log command completionDan McGee Thu, 19 Jun 2008 21:15:53 +0000 (16:15 -0500)

completion: add --graph to log command completion

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Move all dashed-form commands to libexecdirNguyễn Thái Ngọc Duy Wed, 28 Nov 2007 16:21:57 +0000 (23:21 +0700)

Move all dashed-form commands to libexecdir

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

Teach "git clone" to pack refsJohan Herland Sun, 15 Jun 2008 14:06:16 +0000 (16:06 +0200)

Teach "git clone" to pack refs

In repos with many refs, it is unlikely that most refs will ever change.
This fact is already exploited by "git gc" by executing "git pack-refs"
to consolidate all refs into a single file.

When cloning a repo with many refs, it does not make sense to create the
loose refs in the first place, just to have the next "git gc" consolidate
them into one file. Instead, make "git clone" create the packed refs file
immediately, and forego the loose refs completely.

Signed-off-by: Johan Herland <johan@herland.net>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Prepare testsuite for a "git clone" that packs refsJohan Herland Sun, 15 Jun 2008 23:16:53 +0000 (01:16 +0200)

Prepare testsuite for a "git clone" that packs refs

t5515-fetch-merge-logic removes many, but not all, refs between each test.
This is done by removing the corresponding refs/foo/* files in the .git/refs
hierarchy. However, once "git clone" starts producing packed refs, these refs
will no longer be in the .git/refs hierarchy, but rather listed in
.git/packed-refs. This patch teaches t5515-fetch-merge-logic to remove the
refs using "git update-ref -d" which properly handles packed refs.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Move pack_refs() and friends into libgitJohan Herland Sun, 15 Jun 2008 14:05:06 +0000 (16:05 +0200)

Move pack_refs() and friends into libgit

This moves pack_refs() and underlying functionality into the library,
to make pack-refs functionality easily available to all git programs.

Most of builtin-pack-refs.c has been moved verbatim into a new file
pack-refs.c that is compiled into libgit.a. A corresponding header
file, pack-refs.h, has also been added, declaring pack_refs() and
the #defines associated with the flags parameter to pack_refs().

This patch introduces no other changes in functionality.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Incorporate fetched packs in future object traversalJohan Herland Sun, 15 Jun 2008 14:04:20 +0000 (16:04 +0200)

Incorporate fetched packs in future object traversal

Immediately after fetching a pack, we should call reprepare_packed_git() to
make sure the objects in the pack are reachable. Otherwise, we will fail to
look up objects that are present only in the fetched pack.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

builtin-fast-export: Add importing and exporting of... Pieter de Bie Wed, 11 Jun 2008 11:17:04 +0000 (13:17 +0200)

builtin-fast-export: Add importing and exporting of revision marks

This adds the --import-marks and --export-marks to fast-export. These import
and export the marks used to for all revisions exported in a similar fashion
to what fast-import does. The format is the same as fast-import, so you can
create a bidirectional importer / exporter by using the same marks file on
both sides.

Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git.pm: add test suiteLea Wiemann Thu, 19 Jun 2008 20:32:49 +0000 (22:32 +0200)

Git.pm: add test suite

Add a shell script (t/t9700-perl-git.sh) that sets up a git repository
and a perl script (t/t9700/test.pl) that runs the actual tests.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/test-lib.sh: add test_external and test_external_with... Lea Wiemann Thu, 19 Jun 2008 18:18:03 +0000 (20:18 +0200)

t/test-lib.sh: add test_external and test_external_without_stderr

This is for running external test scripts in other programming
languages that provide continuous output about their tests. Using
test_expect_success (like "test_expect_success 'description' 'perl
test-script.pl'") doesn't suffice here because test_expect_success
eats stdout in non-verbose mode, which is not fixable without major
file descriptor trickery.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib.sh: add --long-tests optionLea Wiemann Tue, 17 Jun 2008 01:29:02 +0000 (03:29 +0200)

test-lib.sh: add --long-tests option

Add a --long-tests option to test-lib.sh, which enables tests to
selectively run more exhaustive (longer running, potentially
brute-force) tests. Such exhaustive tests would only be useful if one
works on the specific module that is being tested -- for a general "cd
t/; make" to check whether everything is OK, such exhaustive tests
shouldn't be run by default since the longer it takes to run the
tests, the less often they are actually run.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

racy-git: an empty blob has a fixed object nameLinus Torvalds Tue, 10 Jun 2008 17:44:43 +0000 (10:44 -0700)

racy-git: an empty blob has a fixed object name

We use size=0 as the magic token to say the entry is known to be racily
clean, but a sequence that does:

- update the path with a non-empty blob and write the index;
- update an unrelated path and write the index -- this smudges
the above entry;
- truncate the path to size zero.

would make both the size field for the path in the index and the size on
the filesystem zero. We should not mistake it as a clean index entry.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>