Compare commits

...

1648 Commits

Author SHA1 Message Date
9de0834663 Fix hash function in xdiff library
Jim Mayering noticed that xdiff library took insanely long time
when comparing files with many identical lines.

This was because the hash function used in the library is broken
on 64-bit architectures and caused too many collisions.

http://thread.gmane.org/gmane.comp.version-control.git/28962/focus=28994

Acked-by: Davide Libenzi <davidel@xmaliserver.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-10-16 21:27:44 -07:00
6fe5b7ff6c git-push: .git/remotes/ file does not require SP after colon
Although most people would have one after colon if only for
readability, we never required it in git-parse-remote, so let's
not require one only in git-push.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-10-02 00:43:52 -07:00
4fddf5798d git-mv: invalidate the removed path properly in cache-tree
The command updated the cache without invalidating the cache
tree entries while removing an existing entry.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-10-01 23:32:39 -07:00
82ca505564 git-diff -B output fix.
Geert noticed that complete rewrite diff missed the usual a/ and b/
leading paths.  Pickaxe says it never worked, ever.

Embarrassing.

Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from bc1a580757 commit)
2006-09-29 22:32:16 -07:00
f2b5792564 Fix git-am safety checks
An earlier commit cbd64af added a check that prevents "git-am"
to run without its standard input connected to a terminal while
resuming operation.  This was to catch a user error to try
feeding a new patch from its standard input while recovery.

The assumption of the check was that it is an indication that a
new patch is being fed if the standard input is not connected to
a terminal.  It is however not quite correct (the standard input
can be /dev/null if the user knows the operation does not need
any input, for example).  This broke t3403 when the test was run
with its standard input connected to /dev/null.

When git-am is given an explicit command such as --skip, there
is no reason to insist that the standard input is a terminal; we
are not going to read a new patch anyway.

Credit goes to Gerrit Pape for noticing and reporting the
problem with t3403-rebase-skip test.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-09-17 22:13:01 -07:00
0b7c5a5450 Fix duplicate xmalloc in builtin-add
[jc: patch came without sign-off but it was too obvious and trivial.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-09-17 21:40:03 -07:00
883653babd http-fetch: fix alternates handling.
Fetch over http from a repository that uses alternates to borrow
from neighbouring repositories were quite broken, apparently for
some time now.

We parse input and count bytes to allocate the new buffer, and
when we copy into that buffer we know exactly how many bytes we
want to copy from where.  Using strlcpy for it was simply
stupid, and the code forgot to take it into account that strlcpy
terminated the string with NUL.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-09-13 00:54:43 -07:00
60a6bf5f53 builtin-mv: readability patch
The old version was not liked at all. This is hopefully better. Oh, and it
gets rid of the goto.

Note that it does not change any functionality.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-21 14:15:52 -07:00
6e17886d37 git-mv: fix off-by-one error
Embarassing.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-21 14:15:45 -07:00
c5203bdf66 git-mv: special case destination "."
Since the normalized basename of "." is "", the check for directory
failed erroneously.

Noticed by Fredrik Kuivinen.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-21 14:15:43 -07:00
d78b0f3d6a [PATCH] git-mv: add more path normalization
We already use the normalization from get_pathspec(), but now we also
remove a trailing slash. So,

	git mv some_path/ into_some_path/

works now.

Also, move the "can not move directory into itself" test before the
subdirectory expansion.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-16 13:19:06 -07:00
53e1a761be finish_connect(): thinkofix
All but one callers have ignore the return value from this
function, but the only caller, builtin-tar-tree.c::remote_tar(),
assumed it returns non-zero on failure and zero on success.  The
implementation however was returning either the waited pid
(which must be the same as its input) or -1 (an error).

Fix this thinko, while getting rid of an assignment of return
value from waitpid() into a variable of type int.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-15 21:02:16 -07:00
1d6249e609 git-mv: succeed even if source is a prefix of destination
As noted by Fredrik Kuivinen, without this patch, git-mv fails on

	git-mv README README-renamed

because "README" is a prefix of "README-renamed".

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-15 21:00:20 -07:00
66c4509b73 Solaris does not support C99 format strings before version 10
Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-15 02:55:39 -07:00
9a1ae9ab03 sample commit-msg hook: no silent exit on duplicate Signed-off-by lines
git-commit would silently exit if duplicate Signed-off-by
lines were found.  Users of git-commit would not know it,
unless they checked '$?'.  This patch makes git-commit
actually print out a message that nothing was commited
since duplicate Signed-off-lines were found.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-13 01:46:28 -07:00
e77235ea38 Fix regex pattern in commit-msg
Between the count and the line output, some
uniq(1) versions put a TAB character, not a space.
Make sure both are handled.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-13 01:46:28 -07:00
01aaf1f88d GIT 1.4.2 2006-08-12 18:32:58 -07:00
67e31d6234 Merge git://git.kernel.org/pub/scm/gitk/gitk
* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Show the currently checked-out head in bold font
  gitk: Allow the user to set some colors
2006-08-12 18:32:17 -07:00
6c7f4cebdb t/t4013: fix futzing with the version string.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-12 18:11:10 -07:00
40aaae88ad Better error message when we are unable to lock the index file
Most of the callers except the one in refs.c use the function to
update the index file.  Among the index writers, everybody
except write-tree dies if they cannot open it for writing.

This gives the function an extra argument, to tell it to die
when it cannot create a new file as the lockfile.

The only caller that does not have to die is write-tree, because
updating the index for the cache-tree part is optional and not
being able to do so does not affect the correctness.  I think we
do not have to be so careful and make the failure into die() the
same way as other callers, but that would be a different patch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-12 17:08:25 -07:00
fd7bcfb524 git-am: give better diagnostics when the patch does not apply during --3way
If the user tries to apply a patch that was hand-edited in such
a way that it does not apply to the original file recorded on
its "index" line anymore, we did detect the situation but did
not issue an error message that is specific enough.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-12 17:08:07 -07:00
022f25e8d4 Merge branch 'rj/header'
* rj/header:
  Fix header breakage with _XOPEN_SOURCE.
2006-08-12 16:09:19 -07:00
a69a165fb4 git-svn: split the path from the url correctly with limited perms
This version of the splitter (that only affects SVN:: library
users) works when one only has limited read-permissions to
the repository they're fetching from.

Updated from the original patch to workaround some SVN bug
somewhere, which only seems to happen against file://
repositories...  Here's the diff against the original patch I
submitted:

@@ -1159,8 +1159,8 @@ sub repo_path_split {
 	}

 	if ($_use_lib) {
-		$SVN = libsvn_connect($full_url);
-		my $url = $SVN->get_repos_root;
+		my $tmp = libsvn_connect($full_url);
+		my $url = $tmp->get_repos_root;
 		$full_url =~ s#^\Q$url\E/*##;
 		push @repo_path_split_cache, qr/^(\Q$url\E)/;
 		return ($url, $full_url);

Somehow connecting to a repository with the full url makes the
returned SVN::Ra object act strangely and break things, so now
we just drop the SVN::Ra object that we made our initial
connection with.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-11 23:55:21 -07:00
c8769f76d9 git-sh-setup: do not use repo-config to test the git directory
Since repo-config does not fail in non-git directory, it is not
a good command to use to test the git-ness nor validate the
repository revision of $GIT_DIR.

Original patch by Robert Shearman but with minor fixes.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-11 18:52:43 -07:00
308906fa6e git-svn: bugfix: allow SVN:: lib users to track the root of the repository
I'm not sure if anybody has hit this (besides me), but this
fixes the problem where I ran into while attempting to import a
small repo at the root level:  I ended up with all the commits, but
with no file/tree changes at all throughout the entire history.

Also, fix a warning if the commit message is not defined for revision 0.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-11 16:21:51 -07:00
17a10f3709 git-svn: correctly kill keyword expansion without munging EOLs
This bugfix applies to users of the svn command-line client only.

We no longer muck with newlines when killing keyword expansion.
This tended to generate unintended diffs in commits because svn
revert -R would destroy the manual EOL changes we were doing. Of
course, we didn't need the EOL munging in the first place, as
svn seems to do it for us even in the text-base files.

Now we set the mtime and atime the files changed by keyword
expansion killing to avoid triggering a change on svn revert,
which svn still seems to want to do.

Thanks to Seth Falcon for reporting this bug.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-11 16:16:40 -07:00
5bb1cda5f7 drop length argument of has_extension
As Fredrik points out the current interface of has_extension() is
potentially confusing.  Its parameters include both a nul-terminated
string and a length-limited string.

This patch drops the length argument, requiring two nul-terminated
strings; all callsites are updated.  I checked that all of them indeed
provide nul-terminated strings.  Filenames need to be nul-terminated
anyway if they are to be passed to open() etc.  The performance penalty
of the additional strlen() is negligible compared to the system calls
which inevitably surround has_extension() calls.

Additionally, change has_extension() to use size_t inside instead of
int, as that is the exact type strlen() returns and memcmp() expects.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-11 16:06:34 -07:00
ca9e3b124f Merge branch 'rn/push-dav'
* rn/push-dav:
  http-push: Make WebDAV work with (broken?) default apache2 WebDAV module
2006-08-10 23:13:50 -07:00
65cdb5f165 Add Documentation/howto/setup-git-server-over-http.txt
A small howto on how to setup GIT over HTTP transport protocol by
setting up WebDAV access on apache2.

[jc: minimum ispell fixes applied]

Signed-off-by: Rutger Nijlunsing <git@tux.tmfweb.nl>
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 15:07:11 -07:00
0eaf22f4c4 git-verify-pack: no need to count errors
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:16:02 -07:00
f711ab5470 git-verify-pack: buffer overrun paranoia
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:15:55 -07:00
d0d619c8c5 git-verify-pack: free pack after use and a cleanup
Plug memory leak in verify_one_pack() by freeing the struct packed_git
we got from add_packed_git().  Also rename g to pack and pull an
assignment out of an if statement while we're at it.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:15:49 -07:00
fc5fc50980 git-verify-pack: get rid of while loop
Get rid of that while loop which was apparently used as a way to avoid
goto's (why?).  It's easy now because there is only one break left at
the end of it.  Also make the comment clearer.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:15:41 -07:00
68f4c78b95 git-verify-pack: insist on .idx extension
git-verify-pack can be called with a filename without .idx extension.
add_packed_git() on the other hand depends on its presence.  So
instead of trying to call it with whatever the user gave us check for
that extension and add it if it's missing.

That means that you can't name your index file "blah" and your pack
file ".pack" anymore ("git-verify-pack blah" currently works in that
case).  I think this regression is a good change. ;-)

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:14:34 -07:00
ae9c86f2b6 git-verify-pack: more careful path handling
Use strlcpy() to copy the filename into a buffer and complain if it
doesn't fit.  Also move the path buffer into verify_one_pack(); it is
used only there.  Now we can const'ify the first argument of this
function.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:14:27 -07:00
6f05b57da8 git-verify-pack: show usage when no pack was specified
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:14:24 -07:00
83a2b841d6 Add has_extension()
The little helper has_extension() documents through its name what we are
trying to do and makes sure we don't forget the underrun check.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 14:13:53 -07:00
242abf106c builtin-apply: remove unused increment
We do not use desc.alloc after assigning desc.buffer to patch->result;
do not bother to increment it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 00:56:40 -07:00
306ea2df03 Fix git-diff A...B
Commit 9919f41 meant to make git-diff A...B to (usually) mean
"git-diff `git-merge-base A B` B", but it got the parameters wrong
and ended up showing "git-diff `git-merge-base A B` A" by mistake.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 00:50:15 -07:00
567a03d14c combine-diff: use color
Using the same mechanism as the regular diffs, color combined diff
output.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-10 00:30:33 -07:00
1e8d304507 http-push: Make WebDAV work with (broken?) default apache2 WebDAV module
WebDAV on Debian unstable cannot handle renames on WebDAV from
file.ext to newfile (without ext) when newfile* already
exists. Normally, git creates a file like 'objects/xx/sha1.token',
which is renamed to 'objects/xx/sha1' when transferred completely.

Just use '_' instead of '.' so WebDAV doesn't see it as an extension
change.

Signed-off-by: Rutger Nijlunsing <git@tux.tmfweb.nl>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 23:40:40 -07:00
2c71810b90 git-apply: applying a patch to make a symlink shorter.
The internal representation of the result is counted string
(i.e. char *buf and ulong size), which is fine for writing out
to regular file, but throwing the buf at symlink(2) was a
no-no.

Reported by Willy Tarreau.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 22:47:25 -07:00
943d5b73e2 allow diff.renamelimit to be set regardless of -M/-C
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 14:05:23 -07:00
03b9d560be make --find-copies-harder imply -C
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 13:17:19 -07:00
02c5cba200 find_unique_abbrev() with len=0 should not abbreviate
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 13:17:04 -07:00
72ee96c0f1 check return value from diff_setup_done()
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 12:45:27 -07:00
1d17c25c38 Fix tutorial-2.html
Honza Pazdziora noticed that one example did not match reality.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-09 01:03:39 -07:00
fb6ff943de Documentation: git-status takes the same options as git-commit
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-08 21:55:05 -07:00
d5dc6a76d4 Update git-init-db(1) and documentation of core.sharedRepository
Combine option descriptions in git-init-db(1). Reflect the changes to
additionally allow all users to read the created git repository.

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-08 17:45:20 -07:00
6c8d06aff1 git-push: allow pushing from subdirectories
The semantics are equivalent to pushing from the root; we just try harder to
find the .git directory.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-08 13:30:10 -07:00
c96c29093f GIT-VERSION-GEN: adjust for ancient git
When an ancient "git" that does not understand "describe"
command is on the $PATH, "git describe" emitted a Usage message
without exiting non-zero status (which is a mistake we cannot
fix retroactively).  Catch this case to make sure we do not try
using phoney multi-line string as a version number.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-08 13:20:18 -07:00
329a304714 builtin-mv: fix use of uninitialized memory.
Juergen Ruehle noticed that add_slash() tries to strcat()
into uninitialized memory and fails.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-08 12:47:55 -07:00
aa5481c1af debugging: XMALLOC_POISON
Compile with -DXMALLOC_POISON=1 to catch errors from using uninitialized
memory returned by xmalloc.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-08 12:24:13 -07:00
7c49cb2881 annotate: Fix bug when parsing merges with differing real and logical parents.
Signed-off-by: Ryan Anderson <ryan@michonline.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-07 11:46:04 -07:00
1dcb69224c log-tree: show_log() should respect the setting of diffopt->line_termination
Signed-off-by: Ryan Anderson <ryan@michonline.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-07 11:38:53 -07:00
b20805af60 handle https:// protocol in git-clone
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-07 11:35:16 -07:00
f25b79397c Fix "grep -w"
We used to find the first match of the pattern and then if the
match is not for the entire word, declared that the whole line
does not match.

But that is wrong.  The command "git grep -w -e mmap" should
find that a line "foo_mmap bar mmap baz" matches, by tring the
second instance of pattern "mmap" on the same line.

Problems an earlier round of "fix" had were pointed out by Morten
Welinder, which have been incorporated in the t7002 tests.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-06 01:37:08 -07:00
0d958ac47a Makefile: Cygwin does not seem to need NO_STRLCPY
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-05 13:52:05 -07:00
19c4588178 commit walkers: setup_ident() to record correct committer in ref-log.
The function pull() in fetch.c calls write_ref_sha1(), which may
need committer identity to update the ref-log, so they need to
call setup_ident() before calling git_config() function.

Acked-by: Shawn Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-05 13:51:58 -07:00
07efc6a6b6 Allow config file to specify Signed-off-by identity in format-patch.
Unlike git-commit, git-format-patch was not picking up and using the
user.email config variable for the email part of the committer info.
I was forced to use the GIT_COMMITTER_EMAIL environment variable to
override the default <user@localhost.localdomain>. The fix was to
simply move the call to setup_ident() to come before the git_config()
call.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-04 17:30:24 -07:00
4e273c9dcf Merge branch 'jc/c99'
* jc/c99:
  Cygwin needs NO_C99_FORMAT???
2006-08-04 12:09:53 -07:00
3a3c3fc42a Fix crash when GIT_DIR is invalid
We used to test if a pointer was NULL, and if it was, try to access it.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-04 11:30:19 -07:00
7e18e56920 git-tar-tree: fix minor memory leak
Free the root tree object buffer when we're done, plugging a minor leak
in generate_tar().  Note: we cannot simply free(tree.buf) because this
pointer is modified by tree_entry() calls in traverse_tree().

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-04 02:08:20 -07:00
d249b45547 Document rev-list's option --merge
Signed-off-by: Uwe Zeisberger <Uwe_Zeisberger@digi.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-04 02:08:02 -07:00
cba05fa840 Further clean-up: usage() vs die()
This hopefully finishes the clean-up Ramsay started with recent
commit 15e593e4d3 and commit
8cdf33643d.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 21:55:41 -07:00
8cdf33643d Replace some calls to die(usage_str) with usage(usage_str).
The only change in behaviour should be having a "usage: " prefix
on the output string rather than "fatal: ", and an exit code of
129 rather than 128.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 21:44:13 -07:00
15e593e4d3 Fixup command names in some usage strings.
Most usage strings, such as for command xxx, start with "git-xxx".
This updates the rebels to conform to the general pattern.
(The git wrapper is an exception to this, of course ...)

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 21:38:24 -07:00
5a716826a6 GIT 1.4.2-rc3
We ended up merging too many stuff after -rc2, so here is
another round of release candidate.  Non bugfixes will be
queued to "next" from now on until a real 1.4.2 happens.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 16:40:20 -07:00
f5fffbd3e8 Documentation/git.txt: link git-svn and git-instaweb from the main page.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 16:28:24 -07:00
962ad61874 Merge branch 'jc/sideband'
* jc/sideband:
  sideband: do not use color, just say "remote:"
  fetch/clone: mark messages from remote side stand out.
2006-08-03 16:02:14 -07:00
2de196fec1 sideband: do not use color, just say "remote:"
... per suggestion by Andrew.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 16:01:58 -07:00
53dd8a9cb5 Show both blob names from "git diff blob1 blob2"
Earlier we deliberately showed only blob1's name because showing
both names labeled the output as a renaming patch.  Now the output
routine (namely, diff.c::resolve_rename_copy()) is taught not to
use pathname comparison to tell if a filepair is a rename, we can
safely do this change.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 14:41:53 -07:00
ef677686ef diff.c: do not use pathname comparison to tell renames
The final output from diff used to compare pathnames between
preimage and postimage to tell if the filepair is a rename/copy.
By explicitly marking the filepair created by diffcore_rename(),
the output routine, resolve_rename_copy(), does not have to do
so anymore.  This helps feeding a filepair that has different
pathnames in one and two elements to the diff machinery (most
notably, comparing two blobs).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 14:41:53 -07:00
c43ce6d603 Add a couple of subdirectory tests.
We still have too few of them, but we have to start from somewhere.
The general rule is to make tests easy to debug when run with -v (notice
use of seemingly useless echo everywhere in the new tests).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 14:41:29 -07:00
a91af794bb read-tree: shadowed variable fix.
Recent changes to built-ins broke committing from subdirectory,
because the unused parameter "prefix" shadowed a global variable.

Spotted by Jeff King.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 13:44:09 -07:00
47781bf779 fixed variable declaration in gitk
Signed-off-by: Michael <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 13:21:07 -07:00
f82cd3c610 Fix "git diff blob1 blob2" showing the diff in reverse.
This was introduced by mistake when revision.c::add_pending_object()
was modified to use object-array instead of object-list.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-03 11:50:10 -07:00
70b9c59656 Cygwin needs NO_C99_FORMAT???
I noticed that t3800 test breaks with git built without this
option.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 17:06:50 -07:00
fba0cbd95d git-grep: document --and, --or, --not, ( and )
[jc: added an example section.]

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 17:05:34 -07:00
25f38f064f use declarations from builtin.h for builtin commands
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 17:05:21 -07:00
e12c095aa6 Make git-repo-config a builtin
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 17:05:14 -07:00
53bb2c002a Make git-prune-packed a builtin
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 11:36:01 -07:00
d4ad9b0484 git-annotate: remove extraneous debugging line
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 11:33:33 -07:00
7fe08af485 Documentation: convert uses of git-link macro to gitlink
There isn't and never was such a macro; all uses are typos.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 11:32:04 -07:00
ec19a22b74 git-push: remove obsolete git-push.sh
This was converted to a C builtin over three months ago.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 11:31:03 -07:00
8f615493e6 git-push: allow -f as an alias for --force
This was already documented in the options section of the manpage. This
patch implements it, adds it to the usage message, and mentions it at the
top of the manpage.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 11:30:42 -07:00
da7bad50ed Fix header breakage with _XOPEN_SOURCE.
convert-objects.c sets _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED before
including <time.h>, in order to get the declaration of strptime().
This leads to breakage in cache.h, due to S_ISLNK and S_IFLNK no longer
being defined by <sys/stat.h>.  These definitions are protected by the
__USE_BSD symbol, which is not set when _XOPEN_SOURCE is set.  Moving
the #defines and #include <time.h> below all other #includes does not
fix the problem, however, since now _USE_XOPEN, which protects the
declaration of strptime(), is now not defined (don't ask!).

The fix is to #define _GNU_SOURCE, which enables the definition of
practically everything.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:48 -07:00
822a7d5071 Remove cmd_usage() routine and re-organize the help/usage code.
The cmd_usage() routine was causing warning messages due to a NULL
format parameter being passed in three out of four calls. This is a
problem if you want to compile with -Werror. A simple solution is to
simply remove the GNU __attribute__ format pragma from the cmd_usage()
declaration in the header file. The function interface was somewhat
muddled anyway, so re-write the code to finesse the problem.

[jc: this incidentally revealed that t9100 test assumed that the output
 from "git help" to be fixed in stone, but this patch lower-cases
 "Usage" to "usage".  Update the test not to rely on "git help" output.]

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:18 -07:00
8e76483ce0 Fix header breakage due to redefining PATH_MAX.
The header builtin.h was, incorrectly, redefining PATH_MAX which
causes a header order dependency in builtin-write-tree.c.  The fix
is to simply include <limits.h> directly to obtain the correct
definition of PATH_MAX.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:18 -07:00
579d1fbfaf Add NO_C99_FORMAT to support older compilers.
The NO_C99_FORMAT macro allows compilers that lack support for the
ll,hh,j,z,t size specifiers (eg. gcc 2.95.2) to adapt the code to avoid
runtime errors in the formatted IO functions.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:18 -07:00
446c6faec6 New tests and en-passant modifications to mktag.
These changes were originally part of the next patch, but have been
split out since they were peripheral to the main purpose of that patch.

  - update comment describing the signature format to reflect
    the current code.
  - remove trailing \n in calls to error(), since a \n is already
    provided by error().
  - remove redundant call to get_sha1_hex().
  - call sha1_to_hex(sha1) to convert to ascii, rather than attempting
    to print the raw sha1.

The new tests provide a regression suite to support the modifications
to git-mktag in this and the next patch.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:18 -07:00
7ffe7098dc Fix installation of templates on ancient systems.
Do not use $(call) for 'shell quoting' paths, and pass DESTDIR down
to the templates makefile.

[jc: we have fixed the main Makefile long time ago, but somehow
 forgot to apply the same fix to templates Makefile.]

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:18 -07:00
1fd4da643c Fix annotate test script; notice when git-annotate fails.
The t8001-annotate.sh test claimed all tests pass, when in fact
the git-annotate perl script failed to run! (prior to fixing the
script to work with perl 5.5).

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:17 -07:00
6ebdee5af4 Ensure git-clone exits with error if perl script fails.
This helps tests 5400,5600,5700,5710 "fail correctly" rather than
give some false positives.  Also ensure cleanup actions in exit trap
work correctly even if user has alias rm='rm -i'.

Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-02 00:27:17 -07:00
dfa4647812 fetch/clone: mark messages from remote side stand out.
When dealing with a corrupt or out of sync remote repository,
the user often gets error messages like this:

	error: refs/heads/devel does not point to a valid commit object!

which leaves the user wondering if the breakage is on the local
end or on the remote end.  This is unnecessarily alarming.

This patch changes the way we display messages received from the
remote side over the git protocol sideband (i.e. stderr stream
of the remote process).  It shows them with blue background with
white letters, but this presentation is subject to proposals of
better ways from the list.

The problem was pointed out by Andrew Morton.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-08-01 01:43:26 -07:00
bc9e1b8483 Merge branch 'rs/rebase'
* rs/rebase:
  rebase: Make the fast-fowarding message more user-friendly by using branch names instead of SHA1 IDs.
  rebase: Fix the detection of fast-forwarding of the current branch to upstream.
2006-07-31 23:02:28 -07:00
056d6d4e89 Merge branch 'ml/pager' 2006-07-31 23:00:51 -07:00
0225de86a4 Merge branch 'jc/checkout'
* jc/checkout:
  git-checkout: allow "checkout HEAD -- path"
2006-07-31 22:59:33 -07:00
aa086eb813 pager: config variable pager.color
enable/disable colored output when the pager is in use

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 15:32:24 -07:00
9590b041ea Builtins: control the use of pager from the command table.
This moves the built-in "always-use-pager" logic for log family
to the command dispatch table of git wrapper.  This makes it
easier to change the default use of pager, and has an added
benefit that we fork and exec the pager early before packs are
mmapped.

Pointed out by Juergen Ruehle <j.ruehle@bmiag.de>.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 15:32:23 -07:00
3e04228b0c Fix up some fallout from "setup_git_directory()" cleanups
git-ls-files was broken by the setup_git_directory() calling changes,
because I had missed the fact that the "prefix" variable in that file was
static to the whole file, and unlike git-ls-tree (where I had fixed it
up), it ended up using two different variables with the same name
depending on what the scoping happened to be.

This fixes it up properly (by just removing the static variable, and
passing the automatic one around properly), and git-ls-files should work
again.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 13:42:13 -07:00
7f8508e8d3 Fix double "close()" in ce_compare_data
Doing an "strace" on "git diff" shows that we close() a file descriptor
twice (getting EBADFD on the second one) when we end up in ce_compare_data
if the index does not match the checked-out stat information.

The "index_fd()" function will already have closed the fd for us, so we
should not close it again.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 11:55:56 -07:00
2608003f55 git-checkout: allow "checkout HEAD -- path"
Even though -- is redundant in this case, we should allow it to prevent
confusion.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 03:07:12 -07:00
d587ed13bc rebase: Make the fast-fowarding message more user-friendly by using branch names instead of SHA1 IDs.
Signed-off-by: Robert Shearman <rob@codeweavers.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 00:15:59 -07:00
83c31614ce rebase: Fix the detection of fast-forwarding of the current branch to upstream.
Previously, a rebasing operation with on a branch that is just tracking
an upstream branch would output a confusing "Nothing to do" due to no
patches being given to git-am.

The test brings the behaviour back into line with that of just before
e646c9c8c0.

Signed-off-by: Robert Shearman <rob@codeweavers.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-31 00:15:59 -07:00
b63fafdfd8 tar-tree: illustrate an obscure feature better
Since you can tar just a subdirectory of a certain revision, tell
the users so, by showing an example how to do it.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-30 18:18:13 -07:00
0347a8c764 git.c: allow alias expansion without a git directory
With this, the configuration mechanism can be used to say:

	[alias]
		init = init-db --template=/path/to/template

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-30 17:45:57 -07:00
41e95f6990 setup_git_directory_gently: do not barf when GIT_DIR is given.
Earlier we barfed when GIT_DIR environment variable points at a
directory yet to be created, which made it impossible to use
configuration mechanism in "git-init-db".

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-30 17:45:57 -07:00
ca7a741647 Build on Debian GNU/kFreeBSD
Patch from Petr Salinger to make the build process detect and support the
Debian GNU/kFreeBSD architecture, see
 http://bugs.debian.org/380209

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-30 13:36:12 -07:00
e6a4e5816e Merge branch 'lt/web'
* lt/web:
  gitweb.cgi: git_blame2: slight optimization reading the blame lines
  gitweb.cgi: git_blame2: Revision blocks now have alternating colors
  gitweb.cgi: git_blame2: Allow back-trekking through commits
  gitweb.cgi: git_blame2: an alternative simple working git blame
2006-07-30 13:35:08 -07:00
3fe5dbf57f Merge branch '__/setup-n-mv'
* __/setup-n-mv:
  Call setup_git_directory() much earlier
  Call setup_git_directory() early
2006-07-30 13:34:52 -07:00
522a98caa5 Merge branch 'js/mv'
* js/mv:
  builtin git-mv: support moving directories
  Make git-mv a builtin
  Extract helper bits from c-merge-recursive work
2006-07-30 13:24:48 -07:00
2dcb927f37 Merge branch 'jn/make'
* jn/make:
  Set datarootdir in config.mak.in
  Quote all calls to GIT_CONF_APPEND_LINE
  Typofix in configure.ac comment.
  configure.ac vertical whitespace usage cleanup
  autoconf: Checks for some programs
  autoconf: Checks for libraries
  autoconf: Checks for some library functions.
  autoconf: Checks for typedefs, structures, and compiler characteristics.
  autoconf: Preparing the way for autodetection
  Copy description of build configuration variables to configure.ac
  Teach make clean about configure and autoconf
  autoconf: Use autoconf to write installation directories to config.mak.autogen
2006-07-30 13:24:29 -07:00
7061cf0f20 Merge branch 'lt/setup' into __/setup-n-mv
This merges the new built-in calling convention code into Johannes's
builtin-mv topic in order to resolve their conflicts early on.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-29 01:54:54 -07:00
a633fca0c0 Call setup_git_directory() much earlier
This changes the calling convention of built-in commands and
passes the "prefix" (i.e. pathname of $PWD relative to the
project root level) down to them.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-29 01:34:07 -07:00
db6296a566 Call setup_git_directory() early
Any git command that expects to work in a subdirectory of a project, and
that reads the git config files (which is just about all of them) needs to
make sure that it does the "setup_git_directory()" call before it tries to
read the config file.

This means, among other things, that we need to move the call out of
"init_revisions()", and into the caller.

This does the mostly trivial conversion to do that.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 22:03:06 -07:00
818f477c40 Display an error from update-ref if target ref name is invalid.
Alex Riesen (raa.lkml@gmail.com) recently observed that git branch
would fail with no error message due to unexpected situations with
regards to refs.  For example, if .git/refs/heads/gu is a file but
"git branch -b refs/heads/gu/fixa HEAD" was invoked by the user
it would fail silently due to refs/heads/gu being a file and not
a directory.

This change adds a test for trying to create a ref within a directory
that is actually currently a file, and adds error printing within
the ref locking routine should the resolve operation fail.

The error printing code probably belongs at this level of the library
as other failures within the ref locking, writing and logging code
are also currently at this level of the code.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 20:53:53 -07:00
1b03dfed18 Fix http-fetch
With the latest changes in fetch.c, http-fetch crashed accessing
write_ref[i], where write_ref was NULL.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 17:13:00 -07:00
fff8fd5b1e Merge branch 'pb/multi-fetch'
* pb/multi-fetch:
  Teach git-http-fetch the --stdin switch
  Teach git-local-fetch the --stdin switch
  Make pull() support fetching multiple targets at once
  Make pull() take some implicit data as explicit arguments
2006-07-28 13:25:20 -07:00
556032566e Merge branch 'lt/web' 2006-07-28 13:19:38 -07:00
922819c3d5 Merge branch 'js/cvs'
* js/cvs:
  cvsserver: imitate git-update-ref when committing
2006-07-28 13:18:19 -07:00
205be1ee07 Merge branch 'js/alias-p'
* js/alias-p:
  git wrapper: add --git-dir=<path> and --bare options
  Allow an alias to start with "-p"
2006-07-28 12:33:57 -07:00
f789f82993 Merge branch 'jc/diff'
* jc/diff:
  git-diff A...B to (usually) mean "git-diff `git-merge-base A B` B"
2006-07-28 12:23:52 -07:00
5afa69b415 t4103: fix binary patch application test.
The generated binary patch was _not_ binary -- earlier I made
the --full-index flag to imply binary patch generation to the diff
machinery, but later we made it independent from --binary (although
the latter implies the former).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 12:23:28 -07:00
ab9f30fd75 git-apply -R: binary patches are irreversible for now.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 12:21:17 -07:00
e5a94313c0 Teach git-apply about '-R'
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 11:18:02 -07:00
2941cab99c Makefile: ssh-pull.o depends on ssh-fetch.c
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-28 11:15:35 -07:00
ef1d9c5aa4 log and diff family: honor config even from subdirectories
There currently is an unfortunate circular dependency between
what init_revisions (the command line revision specification
parser) does and setting up the log and diff options.  The
function uses setup_git_directory() to find the root of the
project relative to the current directory and calls diff_setup()
to prepare diff generation.  However, some of the things that
diff_setup() does needs to depend on the configuration variable,
which needs to be read after setup_git_directory() is called.

This patch is a low impact workaround.  It first lets
init_revisions() to run and do its thing, then uses git_config()
and diff_setup() after it returns, so that configuration
variables that affects the diff operation can be used from
subdirectories.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 22:55:44 -07:00
dee4e384f3 git-reset: detect update-ref error and report it.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 22:27:44 -07:00
5f468c4805 lost-found: use fsck-objects --full
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 22:15:01 -07:00
8e29f6a07e Teach git-http-fetch the --stdin switch
Speeds up things quite a lot when fetching tags with Cogito.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 19:33:48 -07:00
8e87ca6615 Teach git-local-fetch the --stdin switch
This makes it possible to fetch many commits (refs) at once, greatly
speeding up cg-clone.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 19:33:48 -07:00
4211e4d10c Make pull() support fetching multiple targets at once
pull() now takes an array of arguments instead of just one of each kind.
Currently, no users use the new capability, but that'll change.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 19:33:48 -07:00
c6b69bdbc1 Make pull() take some implicit data as explicit arguments
Currently it's a bit weird that pull() takes a single argument
describing the commit but takes the write_ref from a global variable.
This makes it take that as a parameter as well, which might be nicer
for the libification in the future, but especially it will make for
nicer code when we implement pull()ing multiple commits at once.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 19:33:48 -07:00
c2c487cf3a mailinfo: accept >From in message header
Mail I get sometimes has multiple From lines, like this:

    From Majordomo@vger.kernel.org  Thu Jul 27 16:39:36 2006
    >From mtsirkin  Thu Jul 27 16:39:36 2006
    Received: from yok.mtl.com [10.0.8.11]
    ...

which confuses git-mailinfo since that does not recognize >From
as a valid header line.

This patch makes it recognize >From XXX as a valid header line.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 19:33:06 -07:00
cc41cd2e60 Remove -d from *-fetch usage strings
This is a really ancient remnant of the short era of delta objects stored
directly in the object database.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 14:21:03 -07:00
6c35119ac7 daemon: documentation for --reuseaddr, --detach and --pid-file
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-27 13:55:31 -07:00
cadbcf2712 cvsserver: imitate git-update-ref when committing
git-update-ref writes into the lockfile, and renames it afterwards. Like
commit v1.3.0-rc3~22, it is not only cleaner, but also helps with shared
setups: every developer can have a different primary group; what matters
is that $GIT_DIR/refs/heads has to be writable by a group you are in.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 14:32:13 -07:00
5209eda863 instaweb: Be more clear if httpd or the browser fail
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 14:29:40 -07:00
ac64a72207 builtin git-mv: support moving directories
This fixes the builtin mv for the test which Josef provided, and also
fixes moving directories into existing directories, as noted by Jon Smirl.
In case the destination exists, fail early (this cannot be overridden
by -f).

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 13:36:36 -07:00
11be42a476 Make git-mv a builtin
This also moves add_file_to_index() to read-cache.c. Oh, and while
touching builtin-add.c, it also removes a duplicate git_config() call.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 13:36:36 -07:00
8fd2cb4069 Extract helper bits from c-merge-recursive work
This backports the pieces that are not uncooked from the merge-recursive
WIP we have seen earlier, to be used in git-mv rewritten in C.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 13:36:36 -07:00
24cf6e5847 Merge branch 'pb/configure'
* pb/configure:
  Rename man1 and man7 variables to man1dir and man7dir
  Allow INSTALL, bindir, mandir to be set in main Makefile
2006-07-26 13:35:35 -07:00
2c3cff4930 git-cvsserver: support multiline commit messages
Earlier, cvsserver barfed when you tried to check in files with a
multiline commit message.

That is what Argumentx is for... Argument: lines can be followed by
several Argumentx: lines, which means they should be appended.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 13:03:01 -07:00
a1dad607fa t7001: add test for git-mv dir1 dir2/
If dir2 already exists, git-mv should move dir1 _into_dir2/.
Noticed by Jon Smirl.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 12:24:49 -07:00
4325b4ad16 gitweb: fix two warnings
These warnings cluttered up my log.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 12:24:36 -07:00
941ba215fb git-instaweb: respect bindir from Makefile
Not everybody installs git to /usr/bin/git.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 12:24:19 -07:00
2b5d2d8792 git-instaweb: some Apache have mod_cgi builtin
So test for it, and do not always try to load mod_cgi.o.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 12:24:15 -07:00
b7a036bb5f t4112: simplify the test and remove unneeded working tree file.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 11:05:44 -07:00
afd222967c Extend testing git-mv for renaming of subdirectories
Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-26 11:05:44 -07:00
6acbcb927f git wrapper: add --git-dir=<path> and --bare options
With this, you can say

	git --bare repack -a -d

inside a bare repository, and it will actually work. While at it,
also move the --version, --help and --exec-path options to the
handle_options() function.

While at documenting the new options, also document the --paginate
option.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-25 14:15:47 -07:00
4ab243a944 Allow an alias to start with "-p"
Now, something like

	[alias]
		pd = -p diff

works as expected.

[jc: a follow-up fix from Jeff King folded in.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-25 14:15:46 -07:00
96256bba94 cvsserver: avoid warning about active db handles
Turns out that DBD::SQLite does not favour preparing statements which are
never executed. So, turn all 4 statements, which were prepared _always_,
into methods, like the other 12 prepared statements.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-25 14:11:36 -07:00
42217f13ef cvsserver: suppress warnings
This patch defines $state->{prependdir} as the empty string, so that
quite a few warnings are avoided.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Acked-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-25 14:09:21 -07:00
28f7581806 Substitute xmalloc()+memset(0) with xcalloc().
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-25 14:08:09 -07:00
143c89b003 gitweb: escape tag comments
I have a tag with a comment which includes an & character. Firefox wouldn't
display my gitweb summary page due to malformed XML. This solves the problem.

Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-25 14:05:55 -07:00
09f5dc406a Merge branch 'jc/clone-bind-failure'
* jc/clone-bind-failure:
  fetch/clone: check return status from ls-remote
2006-07-25 13:19:54 -07:00
e79992abdb Merge branch 'jt/format-patch'
* jt/format-patch:
  builtin-log: typefix for recent format-patch changes.
  Add option to set initial In-Reply-To/References
  Add option to enable threading headers
  git-format-patch: Make the second and subsequent mails replies to the first
2006-07-25 12:54:57 -07:00
a8861ea81b Merge branch 'ew/apply'
* ew/apply:
  Fix t4114 on cygwin
  apply: handle type-changing patch correctly.
  apply: split out removal and creation into different phases.
  apply: check D/F conflicts more carefully.
  typechange tests for git apply (currently failing)
2006-07-25 12:50:23 -07:00
325ba14e40 Merge branch 'jc/read-tree'
* jc/read-tree:
  checkout -f failed to check out a file if an existing directory interfered.
2006-07-24 21:01:14 -07:00
a0764cb838 upload-pack: fix timeout in create_pack_file
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:37:40 -07:00
acb0f6f337 gitweb.cgi: git_blame2: slight optimization reading the blame lines
Eliminate git_read_blame_line() -- move that code inline and
optimize it.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:53 -07:00
6343310615 gitweb.cgi: Centralize printing of the page path
Centralize printing of the page path so that
if the entity is a blob, we can set the page path
to be the link to the HEAD revision of the
"raw" blob.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:52 -07:00
cc1bf97e24 gitweb.cgi: git_blame2: Revision blocks now have alternating colors
A revision block is the largest number of adjacent
lines of code originating from the same revision.

This patch adds color to git_blame2(), in that no two
adjacent revision blocks have the same color.  The color
alternates between light and dark.

As we annotate the code lines, we alternate the color
(light, dark) of code lines _per revision_.  This makes it
easier to see line conglomerations per revision.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:52 -07:00
93d5f0619c gitweb.cgi: Show "raw" head of project link even when $hash is not defined
Some callers of git_history() do not set $hash of $file_name.
Add code to find it, if it is not defined.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:52 -07:00
4f7b34c98f gitweb.cgi: git_blame2: Allow back-trekking through commits
This patch adds the capability of back-trekking through
commits from git_blame2() as follows:
blame2->commit->blame2->commit->blame2->...->initial commit.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:52 -07:00
1f2857ea32 gitweb.cgi: git_blame2: an alternative simple working git blame
This patch adds an alternative simple working git-blame
called git_blame2().  Simple, because it displays just
three columns: the commit, the line number and the line
of code.  Alternative, because the original git_blame()
is left untouched.  Lines of code are printed html
escaped, but as-is.

git_blame2() uses git-blame as opposed to git-annotate
used by git_blame().

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:52 -07:00
cff0771bfb gitweb.cgi: Include direct link to "raw" files from "history"
In "history" view, the "page_path" is now also a URL link to
the "raw" format of the file, which will always give you
the latest version in the repository.

This is helpful for externally linking files, such that
the latest version is always referenced and in "raw" format.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:51 -07:00
c6e1d9ed50 gitweb.cgi: Teach git_history() to read hash from $hash_base
Teach git_history() to take its hash argument from
the hb parameter, i.e. from $hash_base.  Also change
all "a=history" actions to pass "hb=" instead of "h=".

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 18:21:51 -07:00
83e12e51c1 Merge branch 'lt/objformat'
* lt/objformat:
  sha1_file: add the ability to parse objects in "pack file format"
2006-07-24 17:38:03 -07:00
57c7d9a775 Trivial path optimization test
Linus:
    get_pathspec() does turn '.' into an empty string (which is
    correct - git internally does _not_ ever understand the notion of
    "." as the current working directory), but it doesn't ever do the
    optimization of noticing that a pathspec that consists solely of
    an empty string is "equivalent" to an empty pathspec.

The test is to ensure that this behaviour stays.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 17:32:22 -07:00
e557667e2d Always reset the color _before_ printing out the newline
This patch brings the benefits of part of v1.4.1-rc2~37
to the "commit" colorizing patch.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 10:49:11 -07:00
0d516adab8 upload-pack: fix timeout in create_pack_file
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 00:56:16 -07:00
5e27e27e5d Defaulting fetch to origin when set in the repo-config
Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 00:32:24 -07:00
ce43697379 Colorize 'commit' lines in log ui
When paging through the output of git-whatchanged, the color cues help to
visually navigate within a diff. However, it is difficult to notice when a
new commit starts, because the commit and log are shown in the "normal"
color. This patch colorizes the 'commit' line, customizable through
diff.colors.commit and defaulting to yellow.

As a side effect, some of the diff color engine (slot enum, get_color) has
become accessible outside of diff.c.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-24 00:04:41 -07:00
cbd64afbb3 git-am: Don't accept an mbox on stdin of we already have a .dotest directory
It makes no sense to accept an mbox via stdin when we
won't accept it on the commandline.

The patch helps the following scenario:

# git init-db
"add file1 with content"
# git checkout -b apply
"edit file1 && commit"

# git checkout -b conflict master
"edit file1 && commit"

# git checkout -b ok master
"add file2"

# git checkout apply
# git format-patch -k -3 master..conflict | git am -k -3
=> git-am fails with a conflict message
# git reset --hard

# git format-patch -k -3 master..ok | git am -k -3
=> git am fails with the same conflict message as above,
=> since it's trying to apply the old .dotest directory

With the patch it complains about an old .dotest
directory instead.

Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:58:40 -07:00
f8263c5339 show-branch: Fix another performance problem.
When naming commits, stop walking the parent chain as soon as we find
a commit that already has a name. The parent chain of that commit will
be walked later on in any case (or may even have been walked already).
This avoids O(n^2) behavior; on a tree where show-branch displays 6800
commits, the total run time drops from 77 seconds to 5 seconds.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:44:00 -07:00
4812a93a8c pack-objects: check pack.window for default window size
For some repositories, deltas simply don't make sense. One can disable
them for git-repack by adding --window, but git-push insists on making
the deltas which can be very CPU-intensive for little benefit.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:40:35 -07:00
8eb38cad44 Disable linking with Fink or DarwinPorts.
It may be desirable for the compiler to disable linking against Fink
or DarwinPorts, especially if both are installed on the system and
the user wants GIT to be linked specifically to only one of them.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:39:37 -07:00
5df52584fa git.el: Put the git customize group in the 'tools' parent group.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:36:05 -07:00
73389f12bf git.el: Try to reuse an existing buffer when running git-status.
By default, running git-status again will now reuse an existing buffer
that displays the same directory. The old behavior of always creating
a new buffer can be obtained by customizing the git-reuse-status-buffer
option.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:36:03 -07:00
9f56a7fda9 git.el: Prepend a slash to the file name when adding to .gitignore.
This way the ignore command will really only ignore the marked files
and not files with the same name in subdirectories.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:35:32 -07:00
51a6e56fb7 git.el: Run git-rerere on commits if the rr-cache directory exists.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:35:29 -07:00
d0d8f7dc5f git-svn: fix fetching new directories copies when using SVN:: libs
Log output from SVN doesn't list all the new files that were
added if a new directory was copied from an existing place in
the repository.  This means we'll have to do some extra work and
traverse new directories ourselves.

This has been updated from the original patch to defer traversed
adds until all removals have been done.  Please disregard the
original.

Thanks to Ben Williamson for the excellent bug report and
testing.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:35:24 -07:00
ce1a79b6a7 tar-tree: add the "tar.umask" config option
By default, git-tar-tree(1) sets file and directories modes to 0666
or 0777. While this is both useful and acceptable for projects such
as the Linux Kernel, it might be excessive for other projects. With
this variable, it becomes possible to tell git-tar-tree(1) to apply
a specific umask to the modes above. The special value "user"
indicates that the user's current umask will be used. This should be
enough for most projects, as it will lead to the same permissions as
git-checkout(1) would use. The default value remains 0, which means
world read-write.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Acked-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:35:13 -07:00
56ac168f6f Fix t4114 on cygwin
On cygwin, when you try to create a symlink over a directory, you do
not get EEXIST, but EACCES.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 23:27:41 -07:00
1b91abe350 cvsexportcommit - add -a (add author line) flag, cleanup warnings
This patch adds support for -a which will add an "Author: " line, and possibly
a "Committer: " line to the bottom of the commit message for CVS.

The commit message parser is now a little bit better, and some warnings
have been cleaned up.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-23 22:51:14 -07:00
e7a0f6714b unpack-objects: remove stale and confusing comment
The very initial version of unpack-objects.c::unpack_all() used
to unpack from the end of the pack, but since end of June last
year it was changed to stream from the front and the comment
does not reflect the reality anymore.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-17 13:10:58 -07:00
482faa8daf git-fetch: fix --keep vs --thin
When --keep is specified there is no reason to pass --thin to git-fetch-pack,
which are mutually exclusive.  This does not hurt because fetch-pack disables
thin transfer when both are given internally, but still is confusing.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-17 13:01:27 -07:00
9919f41c91 git-diff A...B to (usually) mean "git-diff git-merge-base A B B"
This tweaks the argument parser of "git diff" to allow "git-diff
A...B" to show diffs leading to B since their merge-base, when
there is only one sensible merge base between A and B.

Currently nonsense cases are thrown at combined-diff to produce
nonsense results, which would eventually need to be fixed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-17 01:10:03 -07:00
b9718d41c7 Merge branch 'sp/reflog'
* sp/reflog:
  Record rebase changes as 'rebase' in the reflog.
  Log ref changes made by resolve.
  Log ref changes made by quiltimport.
  Log ref changes made by git-merge and git-pull.
2006-07-17 01:08:11 -07:00
7f95aef28f apply: handle type-changing patch correctly.
A type-change diff is always split into a patch to delete old,
immediately followed by a patch to create new.  check_patch()
routine noticed that the path to be created already exists in
the working tree and/or in the index when looking at the
creation patch and mistakenly thought it to be an error.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-17 00:10:47 -07:00
eed46644ca apply: split out removal and creation into different phases.
This reworks write_out_result() loop so we first remove the paths that
are to go away and then create them after finishing all the removal.

This is necessary when a patch creates a file "foo" and removes a file
"foo/bar".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-16 23:52:09 -07:00
c28c571c14 apply: check D/F conflicts more carefully.
When creating a new file where a directory used to be (or the user had
an empty directory) the code did not check the result from lstat() closely
enough, and mistakenly thought the path already existed in the working tree.

This does not fix the problem where you have a patch that creates a file
at "foo" and removes a file at "foo/bar" (which presumably is the last file
in "foo/" directory in the original).  For that, we would need to restructure
write_out_results() loop.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-16 23:28:36 -07:00
f8f0b1f0e7 checkout -f failed to check out a file if an existing directory interfered.
When path foo/bar existed in the working tree, checkout -f to switch to
a branch that has a file foo silently did a wrong thing.  It failed to
remove the directory foo, did not check out the file foo, and the worst
of all it did not report any errors.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-16 23:25:12 -07:00
8641fb24ee typechange tests for git apply (currently failing)
I've found that git apply is incapable of handling patches
involving object type changes to the same path.

Of course git itself is perfectly capable of making commits that
generate these changes, as it only tracks trees states.  It's
just that the diffs between them are less useful if they can't
be applied.

Some of these are rare, but I've hit one of them (file becoming
a symlink) recently in real-world usage, and was inspired to
find more potential breakages :)

I'm not sure when I'll have time to fix these myself and I'm not
very familiar with the apply code.   So if someone could get
some or all of these cases working, they would be my hero :)

Some of these are what I would refer to as corner-cases from
hell.  Most (if not all) other systems fail some of these.  In
fact, they aren't even capable of representing most of these
changes in their histories; much less being able to handle
patches to that effect.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-16 22:15:21 -07:00
7b520e62a2 git-svn: don't check for migrations/upgrades on commit-diff
Unlike other git-svn commands, commit-diff is intended to
operate without needing any additional metadata inside .git

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-16 13:46:47 -07:00
26a8ad25b2 show-branch: fix performance problem.
The core function used in show-branch, join_revs(), was supposed
to be exactly the same algorithm as merge_bases(), except that
it was a version enhanced for use with more than two heads.
However, it needed to mark and keep a list of all the commits it
has seen, because it needed them for its semi-graphical output.
The function to implement this list, mark_seen(), stupidly used
insert_by_date(), when it did not need to keep the list sorted
during its processing.  This made "show-branch --merge-base"
more than 20x slower compared to "merge-base --all" in some
cases (e.g. between b5032a5 and 48ce8b0 in the Linux 2.6 kernel
archive).  The performance of "show-branch --independent"
suffered from the same reason.

This patch sorts the resulting list after the list traversal
just once to fix these problems.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-16 00:00:09 -07:00
76af073457 builtin-log: typefix for recent format-patch changes.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 22:47:53 -07:00
2d023581c9 Set datarootdir in config.mak.in
Autoconf 2.60 expresses datadir in terms of datarootdir.  If datarootdir
is not substituted, configure issues a warning and uses a compatibility
substitution for datadir.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 22:33:12 -07:00
66142aa1f5 Quote all calls to GIT_CONF_APPEND_LINE
Not quoting macro arguments that contain other macros is a big no-no in
Autoconf.  It can break at any time.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 22:33:10 -07:00
da56645dd7 Add option to set initial In-Reply-To/References
Add the --in-reply-to option to provide a Message-Id for an initial
In-Reply-To/References header, useful for including a new patch series as part
of an existing thread.

Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 20:41:37 -07:00
cc35de8470 Add option to enable threading headers
Add a --thread option to enable generation of In-Reply-To and References
headers, used to make the second and subsequent mails appear as replies to the
first.

Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 20:41:37 -07:00
d1566f7883 git-format-patch: Make the second and subsequent mails replies to the first
Add message_id and ref_message_id fields to struct rev_info, used in show_log
with CMIT_FMT_EMAIL to set Message-Id and In-Reply-To/References respectively.
Use these in git-format-patch to make the second and subsequent patch mails
replies to the first patch mail.

Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 20:41:36 -07:00
a3e65d74ee Documentation/urls.txt: Use substitution to escape square brackets
This changes "[user@]" to use {startsb} and {endsb} to insert [ and ],
similar to how {caret} is used in git-rev-parse.txt.

[jc: Removed a well-intentioned comment that broke the final
 formatting from the original patch.  While we are at it,
 updated the paragraph that claims to be equivalent to the
 section that was updated earlier without making matching
 changes.]

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 16:36:00 -07:00
c7543ce0be Documentation/Makefile: product depends on asciidoc.conf
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 16:32:38 -07:00
5cd060b56c Merge branch 'lt/unitype'
* lt/unitype:
  builtin-prune.c: forgot TYPE => OBJ changes.
  Remove TYPE_* constant macros and use object_type enums consistently.
2006-07-14 15:39:19 -07:00
1733832d8e Merge branch 'sp/lazy-mkdir'
* sp/lazy-mkdir:
  Make lazy mkdir more robust.
2006-07-14 15:38:37 -07:00
7eae7b993e Fix "git-fetch --tags" exit status when nothing has been changed
After commit 55b7835e1b git-fetch --tags
exits with status 1 when no tags have been changed, which breaks calling
git-fetch from scripts.

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 11:33:14 -07:00
d5b9e6cfa7 argv created by handle_alias should be NULL terminated
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-14 11:32:39 -07:00
dd4c59121f documentation (urls.txt) typofix 2006-07-14 11:31:50 -07:00
e5a78b1ca8 builtin-prune.c: forgot TYPE => OBJ changes.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 23:37:52 -07:00
93821bd97a sha1_file: add the ability to parse objects in "pack file format"
The pack-file format is slightly different from the traditional git
object format, in that it has a much denser binary header encoding.
The traditional format uses an ASCII string with type and length
information, which is somewhat wasteful.

A new object format starts with uncompressed binary header
followed by compressed payload -- this will allow us later to
copy the payload straight to packfiles.

Obviously they cannot be read by older versions of git, so for
now new object files are created with the traditional format.
core.legacyheaders configuration item, when set to false makes
the code write in new format for people to experiment with.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 23:11:56 -07:00
57a39690b9 fetch/clone: check return status from ls-remote
Some callers of ls-remote did not check its return status.
2006-07-13 23:10:21 -07:00
8ef1c7c77d Record rebase changes as 'rebase' in the reflog.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 23:08:24 -07:00
4b7ce6e2d6 gitweb.css: Use monospace fonts for commits and tree-diff.
Use monospace fonts for the commit header, commit message,
and tree-diff.  This helps viewing commit logs with ASCII art.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 22:02:43 -07:00
3dffd2c828 Do not use perl in git-commit.sh
git-commit.sh has the only one place where perl is used
and there it can quite trivially be done in sh.

git-ls-files without "-z" produces quoted output, even if
is different from that produced by perl code it is good
enough.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 22:00:16 -07:00
f5b571fcf7 diff: Support 256 colors
Add support for more than 8 colors.  Colors can be specified as numbers
-1..255.  -1 is same as "normal".

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:53:25 -07:00
f37399e6b0 diff: Support both attributes and colors
Make it possible to set both colors and a attribute for diff colors.
Background colors are supported too.

Syntax is now:

	[attr] [fg [bg]]
	[fg [bg]] [attr]

Empty value is same as "normal normal", ie use default colors.  The new
syntax is backwards compatible.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:53:23 -07:00
ff4d78041e Documentation about exclude/ignore files
Use .git/info/exclude in the example in git-ls-files.txt,
instead of .git/ignore, and update the list of commands looking
at .git/info/exclude in repository-layout.txt.

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:52:42 -07:00
a5262768e1 daemon: new option --detach to run git-daemon in background
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:50:46 -07:00
45ed5d7f4c daemon: new option --pid-file=<path> to store the pid
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:50:41 -07:00
5f490ce03c upload-pack: ignore write errors to stderr
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:50:22 -07:00
258e93a155 daemon: if one of the standard fds is missing open it to /dev/null
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:50:20 -07:00
ad8b4f56b5 daemon: use a custom die routine with syslog
Removed the git-daemon prefix from die() because no other call to die
does this.

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:50:14 -07:00
8d5e26848d Documentation: Fix ssh://[user@]host.xz URL
Earlier commit c3f17061 broke asciidoc markup.

Noticed by Alp Toker with a fix, but fixed up in a way with smaller
formatting impact.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:48:45 -07:00
855409296d Adjust t4013 tests to corrected format-patch.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:40:44 -07:00
19b3bd3e2d format-patch: Generate a newline between the subject header and the message body
format-patch previously didn't generate a newline after a subject. This
caused the diffstat to not be displayed in messages with only one line
for the commit message.
This patch fixes this by adding a newline after the headers if a body
hasn't been added.
Signed-off-by: Robert Shearman <rob@codeweavers.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:40:43 -07:00
a40d384cac t4013 diff format tests update
This changes one test commit in the sequence to have more than
one lines of commit log.  A few output formats (--pretty=email
aka format-patch and --pretty=oneline) need to behave
differently on single and multi-line log, and this change will
help catching breakages.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:40:43 -07:00
5716e794bf Display help for Git mode after pressing h' or ?' in *git-status*
Add bindings for "h" and "?" in git-status-mode to display help about the mode,
including keymap via (describe-function 'git-status-mode), like in PCL-CVS.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:21:34 -07:00
1b3a667461 Wrap long lines in docstrings in contrib/emacs/git.el
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-13 21:21:27 -07:00
1974632c66 Remove TYPE_* constant macros and use object_type enums consistently.
This updates the type-enumeration constants introduced to reduce
the memory footprint of "struct object" to match the type bits
already used in the packfile format, by removing the former
(i.e. TYPE_* constant macros) and using the latter (i.e. enum
object_type) throughout the code for consistency.

Eventually we can stop passing around the "type strings"
entirely, and this will help - no confusion about two different
integer enumeration.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-12 23:18:03 -07:00
756aaf4ac5 Make lazy mkdir more robust.
Linus Torvalds <torvalds@osdl.org> wrote:

  It's entirely possible that we should just make that whole

	  if (ret == ENOENT)

  go away. Yes, it's the right error code if a subdirectory is missing, and
  yes, POSIX requires it, and yes, WXP is probably just a horrible piece of
  sh*t, but on the other hand, I don't think git really has any serious
  reason to even care.
2006-07-12 23:16:29 -07:00
d3ba675aae Merge branch 'ml/trace'
* ml/trace:
  test-lib: unset GIT_TRACE
  GIT_TRACE: fix a mixed declarations and code warning
  GIT_TRACE: show which built-in/external commands are executed
2006-07-12 23:09:10 -07:00
1d0361e806 test-lib: unset GIT_TRACE
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-12 23:09:00 -07:00
a72f9373c0 git-repack: avoid redirecting stderr into git-pack-objects
We are trying to catch error condition of git-rev-list and cause
the downstream pack-objects to barf, but if you run rev-list
with anything that mucks with its stderr (such as GIT_TRACE),
any stderr output would cause the pipeline to fail.

[jc: originally from Matthias Lederhofer, with a reworded error message.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-12 23:00:46 -07:00
869659a6a1 Fix grammatical error in git-revert
We always talk about "commit xyz".

We never talk about "xyz commit", except when we end up talking
about a commit as a branch head (notably, I would say "the HEAD
commit", or possibly "the top-of-master commit", but here
$commit is a SHA1 name, not anything else).

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-12 22:51:25 -07:00
e40e0135f2 Merge branch 'js/merge-base'
* js/merge-base:
  Additional merge-base tests (revised)
  merge-base: update the clean-up postprocessing
2006-07-12 22:44:59 -07:00
3939b805f4 Merge branch 'lt/prune'
* lt/prune:
  builtin "git prune"
2006-07-12 22:31:55 -07:00
096b173234 Merge branch 'lt/merge-tree'
* lt/merge-tree:
  Improved three-way blob merging code
  Prepare "git-merge-tree" for future work
  xdiff: generate "anti-diffs" aka what is common to two files
2006-07-12 22:31:22 -07:00
e918c6abac fmt-merge-msg fix
The new C version mistranslated the original Perl version in the
case to pull from the HEAD.  This made it to say nonsense like
this:

	Merge commit ...url... of HEAD

        * HEAD:
        ...

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-12 22:21:47 -07:00
e130ddaaf3 gitweb: Make command invocations go through the git wrapper
This patch makes invocations of core git commands go through the 'git'
binary itself, which improves readability and might help system
administrators lock down their CGI environment for security.

Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-12 22:00:22 -07:00
49da1dafc0 gitweb: Include a site name in page titles
This helps users tell one 'git' bookmark apart from the other in their
browser and improves the indexing of gitweb sites in Web search engines.
The title defaults to the SERVER_NAME environment variable, often given
by the webserver.

Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 14:18:42 -07:00
f6801d669e gitweb: Send XHTML as 'application/xhtml+xml' where possible
"The 'text/html' media type [RFC2854] is primarily for HTML, not for
XHTML. In general, this media type is NOT suitable for XHTML."

This patch makes gitweb use content negotiation to conservatively send
pages as Content-Type 'application/xhtml+xml' when the user agent
explicitly claims to support it.

It falls back to 'text/html' even if the user agent appears to
implicitly support 'application/xhtml+xml' due to a '*/*' glob, working
around an insidious bug in Internet Explorer where sending the correct
media type prevents the page from being displayed.

Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 14:18:42 -07:00
5a6852fef1 Log ref changes made by resolve.
Since git-resolve is essentially a form of git-merge record any
ref updates it makes similiar to how git-merge would record them.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 14:16:53 -07:00
09a28eccce Log ref changes made by quiltimport.
When importing a quilt patch to a branch which has a reflog record
the update to HEAD with a log message indicating the change was
made by quiltimport and what patch caused the change.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 14:16:53 -07:00
e1447e38c0 Log ref changes made by git-merge and git-pull.
When git-merge updates HEAD as a result of a merge record what
happened during the merge into the reflog associated with HEAD
(if any).  The log reports who caused the update (git-merge or
git-pull, by invoking git-merge), what the remote ref names were
and the type of merge process used.

The merge information can be useful when reviewing a reflog for
a branch such as `master` where fast forward and trivial in index
merges might be common as the user tracks an upstream.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 14:16:53 -07:00
ed0e078f96 git-fetch: fix a bashism (==)
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 14:14:09 -07:00
38d3874ddc Make the unpacked object header functions static to sha1_file.c
Nobody else uses them, and I'm going to start changing them.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 12:58:53 -07:00
d2216f2317 git-send-email: Remove redundant Reply-To header
There is no sense in duplicating the sender address in Reply-To as it's
already provided in the From header.

Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 12:48:18 -07:00
2a75848edd typofix (git-name-rev documentation)
Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 12:45:20 -07:00
c3f17061be Mention the [user@] part in documentation of ssh:// urls.
Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 12:39:09 -07:00
8ff99e7417 tests: Set EDITOR=: and VISUAL=: globally
This way we don't have to remember to set it for each test; and
if we forget, we won't cause interactive editors to be spawned
for non-interactive tests.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-11 12:32:54 -07:00
55b7835e1b Log ref changes made by git-fetch and git-pull.
When git-fetch updates a reference record in the associated reflog
what type of update took place and who caused it (git-fetch or
git-pull, by invoking git-fetch).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 21:21:27 -07:00
a3a733e63b Record the type of commit operation in the reflog.
If committing a merge (.git/MERGE_HEAD exists), an initial tree
(no HEAD) or using --amend to amend the prior commit then denote
the subtype of commit in the reflog.  This helps to distinguish
amended or merge commits from normal commits.

In the case of --amend the prior sha1 is probably the commit which
is being thrown away in favor of the new commit.  Since it is likely
that the old commit doesn't have any ref pointing to it anymore
it can be interesting to know why that the commit was replaced
and orphaned.

In the case of a merge the prior sha1 is probably the first parent
of the new merge commit.  Consequently having its prior sha1 in the
reflog is slightly less interesting but its still informative to
know the commit was the result of a merge which had to be completed
by hand.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 21:21:16 -07:00
0b0fe4a65d Allow user.name and user.email to drive reflog entry.
Apparently calling setup_ident() after git_config causes the
user.name and user.email values read from the config file to be
replaced with the data obtained from the host.  This means that
users who have setup their email address in user.email will instead
be writing reflog entries with their hostname.

Moving setup_ident() to before git_config in update-ref resolves
this ordering problem.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 21:12:40 -07:00
b75a82b754 Fix linking for not-so-clever linkers.
On one of my systems, the linker is not intelligent enough to link with
pager.o (in libgit.a) when only the variable pager_in_use is needed. The
consequence is that the linker complains about an undefined variable. So,
put the variable into environment.o, where it is linked always.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 14:48:56 -07:00
f443455a5b git-rev-list: add documentation for --parents, --no-merges
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 13:48:22 -07:00
868227b0d1 Merge branch 'jc/show-merge'
* jc/show-merge:
  git log -p --merge [[--] paths...]
2006-07-10 00:53:39 -07:00
a9486b02ec Avoid C99 comments, use old-style C comments instead.
This doesn't make the code uglier or harder to read, yet it makes the
code more portable.  This also simplifies checking for other potential
incompatibilities.  "gcc -std=c89 -pedantic" can flag many incompatible
constructs as warnings, but C99 comments will cause it to emit an error.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 00:47:13 -07:00
82e5a82fd7 Fix more typos, primarily in the code
The only visible change is that git-blame doesn't understand
"--compability" anymore, but it does accept "--compatibility" instead,
which is already documented.

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 00:36:44 -07:00
930cf7dd7c gitweb.cgi: Teach "a=blob" action to know the blob/file mime type
Now action "blob" knows the file type: if the file type is
not "text/*" then action "blob" defaults to "blob_plain",
i.e. the file is downloaded raw for the browser to interpret.
If the file type is "text/*", then "blob" defaults to the
current "cat -n"-like output, from which you can click
"plain", to get the "blob_plain" output.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 00:30:11 -07:00
9af2511796 gitweb.cgi: Create $git_temp if it doesn't exist
Unless we'd done diffs, $git_temp doesn't exist and then
mime lookups fail.  Explicitly create it, if it doesn't
exist already.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 00:21:33 -07:00
8499294c41 Merge branch 'lt/gitweb'
* lt/gitweb:
  Add "raw" output option to blobs in "tree" view format
2006-07-10 00:20:42 -07:00
4ad4515dfe git-svn: fix --file/-F option in commit-diff
Also, allow messages from tags to be used as
commit messages.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 00:19:34 -07:00
344c52aee5 Avoid C99 initializers
In a handful places, we use C99 structure and array
initializers, which some compilers do not support.

This can be handy when you are trying to compile GIT on a
Solaris system that has an older C compiler, for example.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-10 00:13:28 -07:00
4f12d529ab Merge branch 'jc/rename'
* jc/rename:
  diffcore-rename: try matching up renames without populating filespec first.
2006-07-10 00:03:55 -07:00
405a99a67f Merge branch 'jc/grep'
* jc/grep:
  git-grep: boolean expression on pattern matching.
2006-07-09 23:49:03 -07:00
12d4a97a03 Merge branch 'jc/mailinfo'
* jc/mailinfo:
  mailinfo: assume input is latin-1 on the header as we do for the body
2006-07-09 23:49:00 -07:00
fc93dbbfc9 Merge branch 'ew/diff'
* ew/diff:
  templates/hooks--update: replace diffstat calls with git diff --stat
  diff: do not use configuration magic at the core-level
  Update diff-options and config documentation.
  diff.c: --no-color to defeat diff.color configuration.
  diff.c: respect diff.renames config option
2006-07-09 23:47:39 -07:00
e6ff54a261 Merge branch 'ew/svn'
* ew/svn:
  Fix some doubled word typos
  Typofix in Makefile comment.
  Makefile: export NO_SVN_TESTS
  git-svn: migrate out of contrib (follow-up)
  git-svn: migrate out of contrib
2006-07-09 23:37:19 -07:00
cd6f207a44 Additional merge-base tests (revised)
Signed-off-by: A Large Angry SCM <gitzilla@gmail.com>
2006-07-09 03:38:12 -07:00
f324943816 merge-base: update the clean-up postprocessing
This removes the "contaminate the well even more" approach
taken in the current merge-base postprosessing code.  Instead,
when there are more than one merge-base results, we compute the
merge-base between them and see if one is a fast-forward of the
other, in which case the ancestor is removed from the result.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 03:38:12 -07:00
ff4c848527 Fix typos involving the word 'commit'
Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 03:31:36 -07:00
cb65296348 Fix some doubled word typos
Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 03:30:51 -07:00
3e564f3a6c Fix some doubled word typos
Signed-off-by: Alp Toker <alp@atoker.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 03:29:35 -07:00
85fb65ed6e "git -p cmd" to page anywhere
This allows you to say:

	git -p diff v2.6.16-rc5..

and the command pipes the output of any git command to your pager.

[jc: this resurrects a month old RFC patch with improvement
 suggested by Linus to call it --paginate instead of --less.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 03:27:03 -07:00
cfc01c0387 change ent to tree in git-diff documentation
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 03:26:49 -07:00
81d0e51e28 Typofix in configure.ac comment.
[jc: copied from Makefile typofix in "master"]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:47:31 -07:00
02853588a4 Typofix in Makefile comment.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:44:58 -07:00
addf88e455 Assorted typo fixes
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:42:41 -07:00
f671957206 configure.ac vertical whitespace usage cleanup
configure.ac |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:20:59 -07:00
fd22c0271b autoconf: Checks for some programs
./configure script checks now for the following programs:
 * CC  - using AC_PROG_CC
 * AR  - using AC_CHECK_TOOL among ar
 * TAR - among gtar, tar

Checks not implemented:
 * INSTALL  - needs install-sh or install.sh in sources
 * RPMBUILD - not known alternatives for rpmbuild
 * PYTHON   - no PYTHON variable in Makefile,
              has to set NO_PYTHON if not present

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:20:57 -07:00
ebdf53210c autoconf: Checks for libraries
./configure script checks now if the following libraries are present:
 * -lssl    for SHA1_Init (NO_OPENSSL)
 * -lcurl   for curl_easy_setopt (NO_CURL)
 * -lexpat  for XML_ParserCreate (NO_EXPAT)
It also checks if adding the following libraries are needed:
 * -lcrypto for SHA1_Init (NEEDS_SSL_WITH_CRYPTO)
 * -liconv  for iconv (NEEDS_LIBICONV)
 * -lsocket for socket (NEEDS_SOCKET)

Policy: we check also if NEEDS_LIBRARY libraries are present, even if
there is no NO_LIBRARY variable.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:20:54 -07:00
1bbbadbc2c autoconf: Checks for some library functions.
./configure script checks now for the following library functions:
 * strcasestr (NO_STRCASESTR)
 * strlcpy (NO_STRLCPY)
 * setenv (NO_SETENV)
in default C library and in libraries which have AC_CHECK_LIB done for
them.

Checks not implemented:
 * NO_MMAP  - probably only via optional features configuration
 * NO_IPV6  - what does "lack IPv6 support" mean?
 * NO_ICONV - what does "properly support iconv" mean?

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:20:47 -07:00
eb0f255d61 autoconf: Checks for typedefs, structures, and compiler characteristics.
./configure script checks now for existence of the following types,
structures, and structure members:
 * dirent.d_ino  in <dirent.h> (NO_D_INO_IN_DIRENT)
 * dirent.d_type in <dirent.h> (NO_D_TYPE_IN_DIRENT)
 * 'struct sockaddr_storage' in <netinet/in.h> (NO_SOCKADDR_STORAGE)

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:20:40 -07:00
d3a6db9811 autoconf: Preparing the way for autodetection
Prepares configure.ac to output autodetected and selected (by using
--with/--without and --enable/disable parameters to generated
./configure script) building configuration in "git style", i.e. by
appending appropriate variables to output file config.mak.autogen
(via temporary file config.mak.append).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:20:32 -07:00
633b423961 Copy description of build configuration variables to configure.ac
Copy description of build configuration variables from the commentary
in the top Makefile (from 'next' branch) to configure.ac, splitting
them into "autoconf" sections.

This is to be able to easily check which build/install configuration
variables are covered by current configure.ac

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 02:19:38 -07:00
e82e058d3a GIT_TRACE: fix a mixed declarations and code warning
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 00:57:23 -07:00
575ba9d69d GIT_TRACE: show which built-in/external commands are executed
With the environment variable GIT_TRACE set git will show
 - alias expansion
 - built-in command execution
 - external command execution
on stderr.

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 00:57:23 -07:00
ba84a797e7 builtin "git prune"
This actually removes the objects to be pruned, unless you specify "-n"
(at which point it will just tell you which files it would prune).

This doesn't do the pack-file pruning that the shell-script used to do,
but if somebody really wants to, they could add it easily enough. I wonder
how useful it is, though, considering that "git repack -a -d" is just a
lot more efficient and generates a better end result.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 00:57:22 -07:00
25b7c18ecd Add "raw" output option to blobs in "tree" view format
Add a "raw" output option to blobs in "tree" view format, so that the
user doesn't have to click on "blob", wait for the (binary) file to be
uploaded and shown in "blob" mode, and then click on "plain" to
download the (binary) file.

This is useful when the file is clearly binary and we don't want the
browser to upload and display it in "blob" mode, but we just want to
download it.  Case in point: pdf files, wlg.

Note: the "raw" format is equivalent to the blob->plain view, not
blob->head view. I.e. the view has the hash of the file as listed
by git-ls-tree, not just "HEAD".

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 00:57:22 -07:00
88f0d5d7d9 Merge branch 'sf/diff' 2006-07-09 00:52:36 -07:00
f3aafa4db2 Disable color detection during format-patch
Signed-off-by: Ryan Anderson <ryan@michonline.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 00:48:16 -07:00
135a522e3f git-cvsexportcommit can't handle merge commits correctly
git-cvsexportcommit should check if the parent (supplied on the cmdline) to use
for a merge commit is one of the real parents of the merge.

But it errors out if the _first_ parent doesn't match and never checks
the other parents.

Signed-off-by: Peter Baumann <siprbaum@stud.informatik.uni-erlangen.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-09 00:46:56 -07:00
92b878ade1 Teach make clean about configure and autoconf
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 14:24:06 -07:00
d9bffc08fd Using 'perl' in *.sh
Some GIT's shell script are using bare 'perl' for perl invocation.
Use @@PERL@@ symbol and replace it with PERL_PATH_SQ everywhere.

Signed-off-by: Michal Rokos <michal.rokos@nextsoft.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 11:35:20 -07:00
6e959ab05a sed -e '/RE/r rfile/' needs space in 'r rfile'
Some implementations of sed (like HP-UX one) mandate a space between 'r'
and 'rfile'.

Signed-off-by: Michal Rokos <michal.rokos@nextsoft.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 11:28:32 -07:00
6244b24906 Close the index file between writing and committing
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 03:28:19 -07:00
3a895e0268 templates/hooks--update: replace diffstat calls with git diff --stat
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 03:11:16 -07:00
83ad63cfeb diff: do not use configuration magic at the core-level
The Porcelainish has become so much usable as the UI that there
is not much reason people should be using the core programs by
hand anymore.  At this point we are better off making the
behaviour of the core programs predictable by keeping them
unaffected by the configuration variables.  Otherwise they will
become very hard to use as reliable building blocks.

For example, "git-commit -a" internally uses git-diff-files to
figure out the set of paths that need to be updated in the
index, and we should never allow diff.renames that happens to be
in the configuration to interfere (or slow down the process).

The UI level configuration such as showing renamed diff and
coloring are still honored by the Porcelainish ("git log" family
and "git diff"), but not by the core anymore.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 03:11:01 -07:00
a0c2089c1d colored diff: diff.color = auto fix
Even if the standard output is connected to a tty, do not
colorize the diff if we are talking to a dumb terminal when
diff.color configuration variable is set to "auto".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 17:48:02 -07:00
ae3e5e1ef2 git log -p --merge [[--] paths...]
This adds Linus's wish, "--merge" flag, which makes the above
expand to a rough equivalent to:

	git log -p HEAD MERGE_HEAD ^$(git-merge-base HEAD MERGE_HEAD) \
		-- $(git-ls-files -u [paths...] | cut -f2 | uniq)

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 13:32:31 -07:00
140245b3e2 Makefile: export NO_SVN_TESTS
Without this patch, it really is not sufficient to define NO_SVN_TESTS
in config.mak or the Makefile.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:43:45 -07:00
b53766483f Update diff-options and config documentation.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:54 -07:00
fef88bb013 diff.c: --no-color to defeat diff.color configuration.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:54 -07:00
b68ea12e30 diff.c: respect diff.renames config option
diff.renames is mentioned several times in the documentation,
but to my surprise it didn't do anything before this patch.

Also add the --no-renames option to override this from the
command-line.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:53 -07:00
d507bb1500 diff-options: Explain --text and -a
Signed-off-by: Stephan Feder <sf@b-i-t.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:04 -07:00
ca49920f6f Add -a and --text to common diff options help
Signed-off-by: Stephan Feder <sf@b-i-t.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:04 -07:00
63ac450119 Teach diff -a as shorthand for --text
Signed-off-by: Stephan Feder <sf@b-i-t.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:04 -07:00
6d64ea965b Teach --text option to diff
Add new item text to struct diff_options.
If set then do not try to detect binary files.

Signed-off-by: Stephan Feder <sf@b-i-t.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 12:28:04 -07:00
6bdca89057 send-email: format 2822 datestring ourselves.
It is not worth trying to force C locale (and failing) just to
format the 2822 datestring.

This code was borrowed from /usr/bin/822-date (Ian Jackson and
Klee Dienes, both in public domain), per suggestion by Eric Wong.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Acked-by: Jakub Narebski <jnareb@gmail.com>
2006-07-07 12:17:49 -07:00
c9c95bbc9c Do not drop data from '\0' until eol in patch output
The binary file detection is just a heuristic which can well fail.
Do not produce garbage patches in these cases.

Signed-off-by: Stephan Feder <sf@b-i-t.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 03:48:10 -07:00
97beb812db builtin-log: respect diff configuration options
The log commands are all capable of generating diffs, so we
should respect those configuration options for diffs here.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 03:25:14 -07:00
4b832e819d git-svn: migrate out of contrib (follow-up)
Check for SVN::Core so test 910[45] don't fail if the user
doesn't have those installed.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-07 03:17:59 -07:00
be4c7014f2 rev-parse documentation: talk about range notation.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 22:37:51 -07:00
8048e24b87 show-branch: match documentation and usage
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 19:29:00 -07:00
bf928e9d2c Merge branch 'js/merge-base' 2006-07-06 19:26:13 -07:00
b7d936b2fd builtin-rev-parse.c: constness tightening
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 17:18:30 -07:00
17e6019a2a diffcore-rename: try matching up renames without populating filespec first.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 17:03:52 -07:00
60d02ccc18 git-svn: migrate out of contrib
Allow NO_SVN_TESTS to be defined to skip git-svn tests.  These
tests are time-consuming due to SVN being slow, and even more so
if SVN Perl libraries are not available.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 17:02:47 -07:00
c31cfb3db3 Merge branch 'ew/instaweb'
* ew/instaweb:
  instaweb: fix unportable ';' usage in sed
  Makefile: replace ugly and unportable sed invocation
  Add git-instaweb, instantly browse the working repo with gitweb
  gitweb: Declare global variables with "our"
  gitweb: Enable tree (directory) history display
  gitweb: optimize per-file history generation
2006-07-06 17:01:00 -07:00
3d3e95af82 core.compression documentation formatting fix.
I didn't notice earlier that two colons are required for the
asciidoc entry.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 16:50:50 -07:00
b75bf2c3f0 mailinfo: assume input is latin-1 on the header as we do for the body
When the input mbox does not identify what encoding it is in,
and already have RFC2047 stripped away, we cannot tell what
encoding the header text is in.  For body text, when the message
does not say what charset it is in, we fall back to assume
latin-1 input when converting to utf8.  This should be done
consistently to the header as well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-06 00:10:49 -07:00
ac83aa2e1f git-reset: complain and exit upon seeing an unknown parameter.
The check to use "rev-parse --verify" was defeated by the use of
"--default HEAD".  "git reset --hard bogus-committish" just
defaulted to reset to the HEAD without complaining.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-05 19:44:03 -07:00
8a48571ce5 gitk: Show the currently checked-out head in bold font
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-07-06 10:21:23 +10:00
79d3696cfb git-grep: boolean expression on pattern matching.
This extends the behaviour of git-grep when multiple -e options
are given.  So far, we allowed multiple -e to behave just like
regular grep with multiple -e, i.e. the patterns are OR'ed
together.

With this change, you can also have multiple patterns AND'ed
together, or form boolean expressions, like this (the
parentheses are quoted from the shell in this example):

	$ git grep -e _PATTERN --and \( -e atom -e token \)

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-05 16:41:23 -07:00
bc483d0480 Merge branch 'lt/gitweb'
* lt/gitweb:
  gitweb: Declare global variables with "our"
  gitweb: Enable tree (directory) history display
  gitweb: optimize per-file history generation
2006-07-05 16:40:15 -07:00
a3d470c2d5 Merge branch 'jc/fmt-merge-msg-test'
* jc/fmt-merge-msg-test:
  t6200: fmt-merge-msg test.
2006-07-05 16:36:46 -07:00
b296990c3b Merge branch 'jc/sha1'
* jc/sha1:
  A better-scheduled PPC SHA-1 implementation.
  test-sha1: test hashing large buffer
  Makefile: add framework to verify and bench sha1 implementations.
2006-07-05 16:36:25 -07:00
49b2788539 Merge branch 'jc/diff-test'
* jc/diff-test:
  t4013: add "diff" UI program tests.
2006-07-05 16:33:50 -07:00
0c926a3d9c Merge branch 'th/diff'
* th/diff:
  builtin-diff: turn recursive on when defaulting to --patch format.
  t4013: note improvements brought by the new output code.
  t4013: add format-patch tests.
  format-patch: fix diff format option implementation
  combine-diff.c: type sanity.
  t4013 test updates for new output code.
  Fix some more diff options changes.
  Fix diff-tree -s
  log --raw: Don't descend into subdirectories by default
  diff-tree: Use ---\n as a message separator
  Print empty line between raw, stat, summary and patch
  t4013: add more tests around -c and --cc
  whatchanged: Default to DIFF_FORMAT_RAW
  Don't xcalloc() struct diffstat_t
  Add msg_sep to diff_options
  DIFF_FORMAT_RAW is not default anymore
  Set default diff output format after parsing command line
  Make --raw option available for all diff commands
  Merge with_raw, with_stat and summary variables to output_format
  t4013: add tests for diff/log family output options.
2006-07-05 16:31:24 -07:00
169c2e9d1e Merge branch 'jc/grepfix'
* jc/grepfix:
  git-grep: use a bit more specific error messages.
  git-grep: fix exit code when we use external grep.
  git-grep: fix parsing of pathspec separator '--'
2006-07-05 16:25:32 -07:00
d87b90e47f Merge branch 'js/fmt-merge-msg'
* js/fmt-merge-msg:
  Make git-fmt-merge-msg a builtin
2006-07-05 16:23:46 -07:00
b5dd9d2027 Fix print-log and diff compatibility with recent vc versions
Here's a patch that fixes print-log and diff compatibility with recent
vc versions, such as current GNU Emacs CVS.

Signed-off-by: Ville Skytt,Ad(B <scop@xemacs.org>
2006-07-05 16:17:56 -07:00
4bbf599f7b git-svn: avoid fetching files outside of the URL we're tracking
Thanks to Santi <sbejar@gmail.com> for the bug report and explanation:
> /path/to/repository/project/file
> /path/to/repository/project-2/file
<...>
> you end up with a project with the following files:
>
> file
> -2/file

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-07-05 16:17:47 -07:00
f8a2c0d14f gitk: Allow the user to set some colors
This makes the colors for the diff old/new lines and hunk headers
configurable, as well as the background and foreground (text color)
of the various panes.  There is now a GUI in the edit->preferences
window to set them.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-07-05 22:56:37 +10:00
58ecf5c1cd Re-fix clear_commit_marks().
Fix clear_commit_marks() enough to be usable in
get_merge_bases(), and retire now unused clear_object_marks().

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 17:45:22 -07:00
2718ff098a Improve git-peek-remote
This makes git-peek-remote able to basically do everything that
git-ls-remote does (but obviously just for the native protocol, so no
http[s]: or rsync: support).

The default behaviour is the same, but you can now give a mixture of
"--refs", "--tags" and "--heads" flags, where "--refs" forces
git-peek-remote to only show real refs (ie none of the fakey tag lookups,
but also not the special pseudo-refs like HEAD and MERGE_HEAD).

The "--tags" and "--heads" flags respectively limit the output to just
regular tags and heads, of course.

You can still also ask to limit them by name too.

You can combine the flags, so

	git peek-remote --refs --tags .

will show all local _true_ tags, without the generated tag lookups
(compare the output without the "--refs" flag).

And "--tags --heads" will show both tags and heads, but will avoid (for
example) any special refs outside of the standard locations.

I'm also planning on adding a "--ignore-local" flag that allows us to ask
it to ignore any refs that we already have in the local tree, but that's
an independent thing.

All this is obviously gearing up to making "git fetch" cheaper.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 14:50:35 -07:00
4205eca8de rev-list: free commit_list in ... handler
Johannes noticed the missing call to free_commit_list() in the
patch from Santi to add ... support to rev-parse.  Turns out I
forgot it too in rev-list.  This patch is against the next branch
(3b1d06a).

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 14:32:52 -07:00
088b084bbb git-grep: use a bit more specific error messages.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 03:15:46 -07:00
fcfe34b5ac git-grep: fix exit code when we use external grep.
Upon hit, we should exit with status 0.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 03:15:46 -07:00
5390590f6d git-grep: fix parsing of pathspec separator '--'
We used to misparse

	git grep -e foo -- '*.sh'

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 03:15:46 -07:00
3dd4e7320d Teach rev-parse the ... syntax.
[jc: moved the difference code around into its own function.]

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 03:14:23 -07:00
4d62eaabeb t8001-annotate: fix a bash-ism in this test
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-04 02:55:52 -07:00
00449f992b Make git-fmt-merge-msg a builtin
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 19:42:41 -07:00
30a95f3073 t6200: fmt-merge-msg test.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 19:12:43 -07:00
280242d1cc send-email: do not barf when Term::ReadLine does not like your terminal
As long as we do not need to readline from the terminal, we
should not barf when starting up the program.  Without this
patch, t9001 test on Cygwin occasionally died with the following
error message:

Unable to get Terminal Size. The TIOCGWINSZ ioctl didn't work. The COLUMNS and LINES environment variables didn't work. The resize program didn't work. at /usr/lib/perl5/vendor_perl/5.8/cygwin/Term/ReadKey.pm line 362.
Compilation failed in require at /usr/lib/perl5/vendor_perl/5.8/Term/ReadLine/Perl.pm line 58.

Acked-by: Ryan Anderson <ryan@michonline.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 19:04:46 -07:00
624314fda7 boolean: accept yes and no as well
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 18:48:23 -07:00
3f492ba1fc annotate: Correct most merge following to annotate correctly.
There is still a bug involving octopus merges, somewhere, but this gets normal
merges correct, so it's still an improvement over the existing version.

Signed-off-by: Ryan Anderson <ryan@michonline.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 18:43:49 -07:00
f560069bc5 annotate: Support annotation of files on other revisions.
This is a bug fix, and cleans up one or two other things spotted during the
course of tracking down the main bug here.

Also, the test-suite is updated to reflect this case.

Signed-off-by: Ryan Anderson <ryan@michonline.com>
(cherry picked from 2f7554b4db3ab2c2d3866b160245c91c9236fc9a commit)
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 18:41:58 -07:00
12f6c308d5 Make zlib compression level configurable, and change default.
With the change in default, "git add ." on kernel dir is about
twice as fast as before, with only minimal (0.5%) change in
object size. The speed difference is even more noticeable
when committing large files, which is now up to 8 times faster.

The configurability is through setting core.compression = [-1..9]
which maps to the zlib constants; -1 is the default, 0 is no
compression, and 1..9 are various speed/size tradeoffs, 9
being slowest.

Signed-off-by: Joachim B Haga (cjhaga@fys.uio.no)
Acked-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 13:55:11 -07:00
f23c75a8ec Merge branch 'master' into js/merge-base
This is to pull in the object-hash clean-up from the master branch.
2006-07-03 03:16:52 -07:00
160b798303 revert clear-commit-marks for now.
Earlier change broke "git describe A B" among other things.
Revert it for now, and clean the commits smudged by
get_merge_bases using clear_object_marks() function.  For
complex commit ancestry graph, this is way cheaper as well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 03:05:20 -07:00
2ef108013e get_merge_bases: clean up even when there is no common commit.
Actually in this case we would have traversed a lot of commits, so cleaning
things up is even more important.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 03:02:27 -07:00
8fced61cbc Makefile: tighten git-http-{fetch,push} dependencies
Although our "git-%$X:" implicit target had dependency on
$(GITLIBS) which included xdiff/lib.a, git-http-{fetch,push} had
their own building rules and with an obsolete dependency on
$(LIB_FILES).  Update the rules to depend on $(GITLIBS), to make
parallel build work correctly.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-03 00:58:34 -07:00
556677144b autoconf: Use autoconf to write installation directories to config.mak.autogen
This is beginning of patch series introducing installation configuration
using autoconf (and no other autotools) to git. The idea is to generate
config.mak.autogen using ./configure (generated from configure.ac by running
autoconf) from config.mak.in, so one can use autoconf as an _alternative_ to
ordinary Makefile, and creating one's own config.mak. Local settings in
config.mak override generated settings in config.mak.autogen

This patch includes minimal configure.ac and config.mak.in, so one can set
installation directories using autoconf generated ./configure script
e.g. ./configure --prefix=/usr

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 17:11:52 -07:00
35c636ec48 Empty author may be presented by svn as an empty string or a null value.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 17:07:45 -07:00
542ccefe89 commit.c: do not redefine UNINTERESTING bit.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 11:34:17 -07:00
6ee030d68a instaweb: fix unportable ';' usage in sed
Hint taken from Johannes.  I've tested this with sed --posix on
my system with GNU sed and it works fine with and also without
it.  Further portability testing/review would be good.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 11:04:56 -07:00
07002287f3 Makefile: replace ugly and unportable sed invocation
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 11:04:50 -07:00
c0fa8255c6 Fold get_merge_bases_clean() into get_merge_bases()
Change get_merge_bases() to be able to clean up after itself if
needed by adding a cleanup parameter.

We don't need to save the flags and restore them afterwards anymore;
that was a leftover from before the flags were moved out of the
range used in revision.c.  clear_commit_marks() sets them to zero,
which is enough.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 10:58:25 -07:00
02d3dca3bf revision.c: fix "dense" under --remove-empty
It had the wrong test for whether a commit was a merge. What it did was to
say that a non-merge has exactly one parent (which sounds almost right),
but the fact is, initial trees have no parent at all, but they're
obviously not merges.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-02 10:55:59 -07:00
047fbe906b builtin-diff: turn recursive on when defaulting to --patch format.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 22:15:40 -07:00
b319b02e2a t4013: add "diff" UI program tests.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 22:02:17 -07:00
a51d37c1df Add git-instaweb, instantly browse the working repo with gitweb
I got tired of having to configure gitweb for every repository
I work on.  I sometimes prefer gitweb to standard GUIs like gitk
or gitview; so this lets me automatically configure gitweb to
browse my working repository and also opens my browser to it.

Updates from the original patch:

Added Apache/mod_perl2 compatibility if Dennis Stosberg's gitweb
has been applied, too: <20060621130708.Gcbc6e5c@leonov.stosberg.net>

General cleanups in shell code usage.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:26 -07:00
dc6d9b4999 gitweb: Declare global variables with "our"
Variables declared with "my" in the file scope cannot be accessed from
subroutines with mod_perl.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:26 -07:00
e0becd9445 gitweb: Enable tree (directory) history display
This patch allows history display of whole trees/directories a la
"git-rev-list HEAD -- <dir or file>".  I find this useful especially
when a project lives in its own subdirectory, as opposed to being all
of the GIT repository (i.e. when a sub-project is merged into a
super-project).

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:25 -07:00
b00d7079ce gitweb: optimize per-file history generation
The rev-list command that is recent enough can filter commits
based on paths they touch, so use it instead of generating the
full list and limiting it by passing it with diff-tree --stdin.

[jc: The patch originally came from Luben Tuikov but the it was
 corrupt, but it was short enough to be applied by hand.  I
 added the --full-history to make the output compatible with the
 original while doing so.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:25 -07:00
4a87b43e37 gitweb: Declare global variables with "our"
Variables declared with "my" in the file scope cannot be accessed from
subroutines with mod_perl.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:13 -07:00
85b7cfb103 gitweb: Enable tree (directory) history display
This patch allows history display of whole trees/directories a la
"git-rev-list HEAD -- <dir or file>".  I find this useful especially
when a project lives in its own subdirectory, as opposed to being all
of the GIT repository (i.e. when a sub-project is merged into a
super-project).

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:13 -07:00
cdd4037d70 gitweb: optimize per-file history generation
The rev-list command that is recent enough can filter commits
based on paths they touch, so use it instead of generating the
full list and limiting it by passing it with diff-tree --stdin.

[jc: The patch originally came from Luben Tuikov but the it was
 corrupt, but it was short enough to be applied by hand.  I
 added the --full-history to make the output compatible with the
 original while doing so.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:29:13 -07:00
0556a11a0d git object hash cleanups
This IMNSHO cleans up the object hashing.

The hash expansion is separated out into a function of its own, the hash
array (and size) names are made more obvious, and the code is generally
made to look a bit more like the object-ref hashing.

It also gets rid of "find_object()" returning an index (or negative
position if no object is found), since that is made redundant by the
simplified object rehashing. The basic operation is now "lookup_object()"
which just returns the object itself.

There's an almost unmeasurable speed increase, but more importantly, I
think the end result is more readable.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:28:15 -07:00
6631c73685 revision.c: --full-history fix.
With history simplification, we still show merges that are required
to make the history _complete_, i.e. say that you had:

	  a
	  |
	  b
	 / \
	c   d
	|   |

and neither "a" nor "b" actually changed the file, but both "c" and "d"
did: in this case we have to leave "b" around just because otherwise there
would be no way to show the _relationship_, even if "b" itself doesn't
actually change the tree in any way what-so-ever.

It would make sense to make that further simplification if the
"--parents" flag wasn't present.  In that case the user is
literally asking for a list of commits and is not interested in
the relationship between them.

This patch also fixes a real bug.  Without this patch, the
"--parents --full-history" combination (which you'd get if you
do something like

	gitk --full-history Makefile

or similar) will actually _drop_ merges where all children are identical.
That's wrong in the --full-history case, because it means that the graph
ends up missing lots of entries.

In the process, this also should make

	git-rev-list --full-history Makefile

give just the _true_ list of all commits that changed Makefile (and
properly ignore merges that were identical in one parent), because now
we're not asking for "--parent", so we don't need the unnecessary merge
commits to keep the history together.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:21:03 -07:00
31aea7ef77 Make clear_commit_marks() clean harder
Don't care if objects have been parsed or not and don't stop when we
reach a commit that is already clean -- its parents could be dirty.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:14:03 -07:00
0d2c9d67d9 Add '...' operator for revisions
'A...B' is a shortcut for 'A B --not $(git-merge-base --all A B)'.
This XOR-like operation is called symmetric difference in set
theory.

The symbol '...' has been chosen because it's rather similar to the
existing '..' operator and the somewhat more natural caret ('^') is
already taken.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:13:47 -07:00
31609c1725 Add get_merge_bases_clean()
Add get_merge_bases_clean(), a wrapper for get_merge_bases() that cleans
up after doing its work and make get_merge_bases() NOT clean up.
Single-shot programs like git-merge-base can use the dirty and fast
version.

Also move the object flags used in get_merge_bases() out of the range
defined in revision.h.  This fixes the "66ae0c77...ced9456a
89719209...262a6ef7" test of the ... operator which is introduced with
the next patch.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 18:13:25 -07:00
ac3bc6c1d1 Fix errno usage in connect.c
errno was used after it could've been modified by a subsequent library call.
Spotted by Morten Welinder.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 17:09:26 -07:00
c64ea8521b Minor documentation fixup.
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-01 17:09:01 -07:00
03e0ea8712 git-svn: allow a local target directory to be specified for init
git-svn init url://to/the/repo local-repo

will create the local-repo dirrectory if doesn't exist yet and
populate it as expected.

Original patch by Luca Barbato, cleaned up and made to work for
the current version of git-svn by me (Eric Wong).

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-30 22:50:47 -07:00
560b25a86f don't load objects needlessly when repacking
If no delta is attempted on some objects then it is useless to load them
in memory, neither create any delta index for them.  The best thing to
do is therefore to load and index them only when really needed.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-30 20:14:47 -07:00
e3a5629813 upload-pack.c: <sys/poll.h> includes <ctype.h> on OpenBSD 3.8
Merlyn reports that <sys/poll.h> on OpenBSD 3.8 includes <ctype.h>
and having our custom ctype (done in git-compat-util.h which is
included via cache.h) makes upload-pack.c uncompilable.  Try to
work it around by including the system headers first.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-30 17:25:20 -07:00
7b8cf0cf29 Rename man1 and man7 variables to man1dir and man7dir
This patch renames man1 and man7 variables to man1dir and man7dir,
according to "Makefile Conventions: Variables for Installation
Directories" in make.info of GNU Make.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 23:49:16 -07:00
e14421b9aa Allow INSTALL, bindir, mandir to be set in main Makefile
Makefiles in subdirectories now use existing value of INSTALL, bindir,
mandir if it is set, allowing those to be set in main Makefile or in
included config.mak.  Main Makefile exports variables which it sets.

Accidentally it renames bin to bindir in Documentation/Makefile
(should be bindir from start, but is unused, perhaps to be removed).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 23:49:16 -07:00
fc046a75d5 Abstract out accesses to object hash array
There are a few special places where some programs accessed the object
hash array directly, which bothered me because I wanted to play with some
simple re-organizations.

So this patch makes the object hash array data structures all entirely
local to object.c, and the few users who wanted to look at it now get to
use a function to query how many object index entries there can be, and to
actually access the array.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 23:48:31 -07:00
8dbbd14ea3 consider previous pack undeltified object state only when reusing delta data
Without this there would never be a chance to improve packing for
previously undeltified objects.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 23:48:29 -07:00
93326071ea Merge branch 'jc/test-3402'
* jc/test-3402:
  Racy GIT (part #3)
2006-06-29 23:47:59 -07:00
51d1e83f91 Do not try futile object pairs when repacking.
In the repacking window, if both objects we are looking at already came
from the same (old) pack-file, don't bother delta'ing them against each
other.

That means that we'll still always check for better deltas for (and
against!) _unpacked_ objects, but assuming incremental repacks, you'll
avoid the delta creation 99% of the time.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 15:24:29 -07:00
cc7d5bcf00 Racy GIT (part #3)
Commit 29e4d36357 fixed the
underlying update-index races but git-commit was not careful
enough to preserve the index file timestamp when copying the
index file.  This caused t3402 test to occasionally fail.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 14:48:22 -07:00
7c6f8aaf6d move get_merge_bases() to core lib.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 13:50:46 -07:00
52cab8a084 refactor merge_bases() as preparation to libify merge-base
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 13:50:46 -07:00
f3bc468212 Merge branch 'jc/diff-test-updates' into th/diff
* jc/diff-test-updates:
  t4013: note improvements brought by the new output code.
2006-06-29 12:09:22 -07:00
026625e78e t4013: note improvements brought by the new output code.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 12:07:27 -07:00
6adc876016 Merge branch 'jc/diff-test' into jc/diff-test-updates
* jc/diff-test:
  t4013: add format-patch tests.
2006-06-29 11:52:33 -07:00
26183e25d4 Merge branch 'jc/diff-test' into th/diff
* jc/diff-test:
  t4013: add format-patch tests.
2006-06-29 00:30:57 -07:00
d410e43b35 t4013: add format-patch tests.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-29 00:28:30 -07:00
27e1b127f3 format-patch: fix diff format option implementation
The updates forgot to make the diff go recursive.
2006-06-29 00:19:36 -07:00
75dedd5a21 Merge branch 'jc/repack'
* jc/repack:
  git-repack: Be careful when updating the same pack as an existing one.
2006-06-28 23:43:48 -07:00
f38c2a9c99 Merge branch 'js/patch'
* js/patch:
  diff.c: fix get_patch_id()
  t4014: fix test commit labels.
  format-patch: use clear_commit_marks() instead of some ad-hockery
  t4014: fix for whitespace from "wc -l"
  t4014: add format-patch --ignore-if-in-upstream test
  format-patch: introduce "--ignore-if-in-upstream"
  add diff_flush_patch_id() to calculate the patch id
2006-06-28 23:42:40 -07:00
9fdc3bb5c2 diff.c: fix get_patch_id()
The function internally generated diff to get the patch id but
passed a wrong emit flags to the xdiff layer when it did so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 22:49:42 -07:00
982b64e4cc t4014: fix test commit labels.
The commit tag and commit comments used in the test claimed that
the #1 commit was merged upstream where the test actually let the
upstream merge #2 commit.  Fix them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 22:48:34 -07:00
0c7993839b Improved three-way blob merging code
This fleshes out the code that generates a three-way merge of a set of
blobs.

It still actually does the three-way merge using an external executable
(ie just calling "merge"), but the interfaces have been cleaned up a lot
and are now fully based on the 'mmfile_t' interface, so if libxdiff were
to ever grow a compatible three-way-merge, it could probably be directly
plugged in.

It also uses the previous XDL_EMIT_COMMON functionality extension to
libxdiff to generate a made-up base file for the merge for the case where
no base file previously existed. This should be equivalent to what we
currently do in git-merge-one-file.sh:

	diff -u -La/$orig -Lb/$orig $orig $src2 | git-apply --no-add

except it should be much simpler and can be done using the direct libxdiff
interfaces.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 22:24:45 -07:00
83788070a3 Prepare "git-merge-tree" for future work
This changes how "git-merge-tree" works in two ways:

 - instead of printing things out as we walk the trees, we save the
   results in memory.
 - when we've walked the tree fully, we print out the results in a more
   explicit way, describing the data.

This is basically preparatory work for extending the git-merge-tree
functionality in interesting directions.

In particular, git-merge-tree is also how you would create a diff between
two trees _without_ necessarily creating the merge commit itself. In other
words, if you were to just wonder what another branch adds, you should be
able to (eventually) just do

	git merge-tree -p $base HEAD $otherbranch

to generate a diff of what the merge would look like. The current merge
tree already basically has all the smarts for this, and the explanation of
the results just means that hopefully somebody else than me could do the
boring work.

(You'd basically be able to do the above diff by just changing the
printout format for the explanation, and making the "changed in both"
first do a three-way merge before it diffs the result).

The other thing that the in-memory format allows is rename detection
(which the current code does not do). That's the basic reason why we don't
want to just explain the differences as we go along - because we want to
be able to look at the _other_ differences to see whether the reason an
entry got deleted in either branch was perhaps because it got added in
another place..

Rename detection should be a fairly trivial pass in between the tree
diffing and the explanation.

In the meantime, this doesn't actually do anything new, it just outputs
the information in a more verbose manner.

For an example merge, commit 5ab2c0a475 in
the git tree works well and shows renames, along with true removals and
additions and files that got changed in both branches. To see that as a
tree merge, do:

	git-merge-tree 64e86c57 c5c23745 928e47e3

where the two last ones are the tips that got merged, and the first one is
the merge base.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 22:24:45 -07:00
a9ed376b15 xdiff: generate "anti-diffs" aka what is common to two files
This fairly trivial patch adds a new XDL_EMIT_xxx flag to tell libxdiff
that we don't want to generate the _diff_ between two files, we want to
see the lines that are _common_ to two files.

So when you set XDL_EMIT_COMMON, xdl_diff() will do everything exactly
like it used to do, but the output records it generates just contain the
lines that aren't part of the diff.

This is for doing things like generating the common base case for a file
that was added in both branches.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 22:24:32 -07:00
abc0267016 checkout -m: fix read-tree invocation
When we updated "read-tree -m -u" to be careful about not
removing untracked working tree files, we broke "checkout -m" to
switch between branches.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 19:30:51 -07:00
8f4a9b62ee t/README: start testing porcelainish
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 11:45:52 -07:00
f252281102 Merge branch 'jc/diff-test-updates' into th/diff
* jc/diff-test-updates:
  t4013 test updates for new output code.
2006-06-28 04:02:46 -07:00
2c0b4dfd5a combine-diff.c: type sanity.
In diff_tree_combined(), show_log_first boolean is initialized with
rev->loginfo (pointer to a string); the intention is that if we have
some string to be emitted we would want to remember that fact.  Picky
compilers are offended by this, so make the expression a bit type-safer.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:58:55 -07:00
47e5c0ca2c Save errno in handle_alias()
git.c:main() relies on the value of errno being set by the last attempt to
execute the command. However, if something goes awry in handle_alias(),
that assumption is wrong. So restore errno before returning from
handle_alias().

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:55:36 -07:00
f0ef05967f rebase: check for errors from git-commit
commit does not always succeed, so we'll have to check for
it in the absence of set -e.  This fixes a regression
introduced in 9e4bc7dd1b

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:54:31 -07:00
c5f448b0f2 cvsimport - cleanup of the multi-indexes handling
Indexes are only needed when we are about preparing to commit. Prime them
inside commit() when we have all the info we need, and remove all the
redundant index setups.

While we are at it, make sure that index handling is correct when opening
new branches, and on initial import.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:53:37 -07:00
3b44f15a35 connect.c: check the commit buffer boundary while parsing.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:51:00 -07:00
c78963d280 connect.c: remove unused parameters from tcp_connect and proxy_connect
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:50:33 -07:00
554fe20d80 Make some strings const
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:24:37 -07:00
66eb64cba6 rebase: get rid of outdated MRESOLVEMSG
There was a time when rebase --skip didn't work when used with
--merge, but that is no more so we don't need that message
anymore.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:51 -07:00
33ebb8717f git wrapper: fix command name in an error message.
When the command execution by execv_git_cmd() fails with an errno
other than ENOENT, we used an uninitialized variable instead of
the string that holds the command name to report what failed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:51 -07:00
80f50749da git-svn: be verbose by default on fetch/commit, add -q/--quiet option
Slower connections can make git-svn look as if it's doing
nothing for a long time; leaving the user wondering if we're
actually doing anything.  Now we print some file progress just
to assure the user that something is going on while they're
waiting.

Added the -q/--quiet option to users to revert to the old method
if they preferred it.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:51 -07:00
a00439acd2 git-svn: add --follow-parent and --no-metadata options to fetch
--follow-parent:
  This is especially helpful when we're tracking a directory
  that has been moved around within the repository, or if we
  started tracking a branch and never tracked the trunk it was
  descended from.

  This relies on the SVN::* libraries to work.  We can't
  reliably parse path info from the svn command-line client
  without relying on XML, so it's better just to have the SVN::*
  libs installed.

  This also removes oldvalue verification when calling update-ref

  In SVN, branches can be deleted, and then recreated under the
  same path as the original one with different ancestry
  information, causing parent information to be mismatched /
  misordered.

  Also force the current ref, if existing, to be a parent,
  regardless of whether or not it was specified.

--no-metadata:
  This gets rid of the git-svn-id: lines at the end of every commit.

  With this, you lose the ability to use the rebuild command.  If
  you ever lose your .git/svn/git-svn/.rev_db file, you won't be
  able to fetch again, either.  This is fine for one-shot imports.

  Also fix some issues with multi-fetch --follow-parent that were
  exposed while testing this.  Additionally, repack checking is
  simplified greatly.

  git-svn log will not work on repositories using this, either.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:50 -07:00
27e9fb8d41 git-svn: add the commit-diff command
This is intended for interoperability with git-svnimport.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:50 -07:00
c1927a8554 git-svn: several graft-branches improvements
The 'graft-branches' command can now analyze tree matches for
merge detection after commits are done, when --branch or
--branch-all-refs options are used.

We ensure that tree joins (--branch and --branch-all-refs
options) during commit time only add SVN parents that occurred
before the commit we're importing

Also fixed branch detection via merge messages, this manner of
merge detection (a la git-svnimport) is really all fuzzy, but at
least it actually works now :)

Add some new tests to go along with these fixes, too.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:50 -07:00
dc62e25cbd git-svn: SVN 1.1.x library compatibility
Tested on a plain Ubuntu Hoary installation
using subversion 1.1.1-2ubuntu3

1.1.x issues I had to deal with:

* Avoid the noisy command-line client compatibility check if we
  use the libraries.

* get_log() arguments differ (now using a nice wrapper from
  Junio's suggestion)

* get_file() is picky about what kind of file handles it gets,
  so I ended up redirecting STDOUT.  I'm probably overflushing
  my file handles, but that's the safest thing to do...

* BDB kept segfaulting on me during tests, so svnadmin will use FSFS
  whenever we can.

* If somebody used an expanded CVS $Id$ line inside a file, then
  propsetting it to use svn:keywords will cause the original CVS
  $Id$ to be retained when asked for the original file.  As far as
  I can see, this is a server-side issue.  We won't care in the
  test anymore, as long as it's not expanded by SVN, a static
  CVS $Id$ line is fine.

While we're at making ourselves more compatible, avoid grep
along with the -q flag, which is GNU-specific. (grep avoidance
tip from Junio, too)

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 03:20:29 -07:00
2386c2975d combine-diff.c: type sanity
- combine_diff() took cnt (count) which is unsigned in nature but the
  parameter type was declared as "int";
- find_next() took "uninteresting" parameter, which masked a static
  function of the same name;
- show_parent_lno() took an unused parameter "cnt";
- show_patch_diff() used a local variable in nested inner scope with
  the same name with different type, masking the one in the outer scope;
- the last loop in show_patch_diff iterated over lines so it should use
  the local variable "lno"

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 01:38:19 -07:00
8dcaefb52f quote.c: silence compiler warnings from EMIT macro
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 01:18:18 -07:00
81db094107 format-patch: use clear_commit_marks() instead of some ad-hockery
It is cleaner, and it describes better what the idea behind the code is.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 16:03:59 -07:00
9e76bab14e t4013 test updates for new output code.
These are updates to the test vector that shows the "incompatibility" of
the new output code.  The changes are actually the good ones, so instead
of keeping the older output we adjust the test to the new code.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 15:36:19 -07:00
3969cf7db1 Fix some more diff options changes.
This fixes various problems in the new diff options code.

 - Fix --cc/-c --patch; it showed two-tree diff used internally.

 - Use "---\n" only where it matters -- that is, use it
   immediately after the commit log text when we show a
   commit log and something else before the patch text.

 - Do not output spurious extra "\n"; have an extra newline
   after the commit log text always when we have diff output and
   we are not doing oneline.

 - When running a pickaxe you need to go recursive.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 15:33:40 -07:00
a959e0dc16 Merge branch 'jc/diff-test' into th/diff
* jc/diff-test:
  t4013: add more tests around -c and --cc
  t4013: add tests for diff/log family output options.
2006-06-27 11:05:02 -07:00
3223847a8f Fix diff-tree -s
setup_revisions() calls diff_setup_done() before we can set default
value for output_format.  Don't convert DIFF_FORMAT_NO_OUTPUT to 0 in
diff_setup_done(), it is useless and makes diff-tree believe no diff
format parameters were given and thus lets it reset output_format to
DIFF_FORMAT_RAW.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 11:04:47 -07:00
1798562745 log --raw: Don't descend into subdirectories by default
Only do so when -r is given.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 11:04:16 -07:00
f005df3910 diff-tree: Use ---\n as a message separator
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 11:03:41 -07:00
946c3784a3 Print empty line between raw, stat, summary and patch
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 10:59:34 -07:00
8096fae726 Fix expr usage for FreeBSD
Some implementations of "expr" (e.g. FreeBSD's) fail, if an
argument starts with a dash.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 10:56:05 -07:00
8780bd8fd2 t4014: fix for whitespace from "wc -l"
Some "wc" insist on putting a TAB in front of the number.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-27 10:55:33 -07:00
47979d5d5b t4013: add more tests around -c and --cc
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 23:29:11 -07:00
ece3c67f9c t4014: add format-patch --ignore-if-in-upstream test
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 15:40:09 -07:00
9dafea2678 whatchanged: Default to DIFF_FORMAT_RAW
Split cmd_log_wc() to cmd_log_init() and cmd_log_walk() and set default
diff output format for whatchanged to DIFF_FORMAT_RAW.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:41 -07:00
5e2b0636c7 Don't xcalloc() struct diffstat_t
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:41 -07:00
39bc9a6c20 Add msg_sep to diff_options
Add msg_sep variable to struct diff_options.  msg_sep is printed after
commit message.  Default is "\n", format-patch sets it to "---\n".

This also removes the second argument from show_log() because all
callers derived it from the first argument:

    show_log(rev, rev->loginfo, ...

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:41 -07:00
0e677e1a6b DIFF_FORMAT_RAW is not default anymore
diff_setup() used to initialize output_format to DIFF_FORMAT_RAW.  Now
the default is 0 (no output) so don't compare against DIFF_FORMAT_RAW to
see if any diff format command line flags were given.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:41 -07:00
c9b5ef998a Set default diff output format after parsing command line
Initialize output_format to 0 instead of DIFF_FORMAT_RAW so that we can see
later if any command line options changed it.  Default value is set only if
output format was not specified.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:40 -07:00
a610786f4b Make --raw option available for all diff commands
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:40 -07:00
c6744349df Merge with_raw, with_stat and summary variables to output_format
DIFF_FORMAT_* are now bit-flags instead of enumerated values.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:58:40 -07:00
9c6efa366e format-patch: introduce "--ignore-if-in-upstream"
With this flag, format-patch will try very hard not to output patches which
are already in the upstream branch.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:44:04 -07:00
fcb3d0adc1 add diff_flush_patch_id() to calculate the patch id
Call it like this:

unsigned char id[20];
if (diff_flush_patch_id(diff_options, id))
	printf("And the patch id is: %s\n", sha1_to_hex(id));

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:44:03 -07:00
3c2f75b590 t4013: add tests for diff/log family output options.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 14:36:40 -07:00
1ef9e05dbf Merge branch 'jc/squash'
* jc/squash:
  git-merge --squash
2006-06-26 14:36:10 -07:00
6a0dbb8a5c Merge branch 'jc/diff'
* jc/diff:
  diff --color: use $GIT_DIR/config
2006-06-26 14:36:02 -07:00
9f9817e34a Merge branch 'ml/cvsimport'
* ml/cvsimport:
  cvsimport: always set $ENV{GIT_INDEX_FILE} to $index{$branch}
  cvsimport: setup indexes correctly for ancestors and incremental imports
2006-06-26 14:35:33 -07:00
2cc06a0500 Merge branch 'js/diff'
* js/diff:
  Teach diff about -b and -w flags
2006-06-26 14:28:42 -07:00
57be46fd21 Merge branch 'ew/rebase'
* ew/rebase:
  rebase: allow --skip to work with --merge
  rebase: cleanup rebasing with --merge
  rebase: allow --merge option to handle patches merged upstream
2006-06-26 14:05:13 -07:00
07d68930c2 Fix pkt-line.h to compile with a non-GCC compiler
pkt-line.h uses GCC's __attribute__ extension but does not include
git-compat-util.h.  So it will not compile with a compiler that does
not support this extension.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 02:11:53 -07:00
e898081dfb Solaris needs inclusion of signal.h for signal()
Currently the compilation fails in connect.c and merge-index.c

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-26 02:11:44 -07:00
3acb27b6a4 correct documentation for git grep
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 10:09:19 -07:00
2ad47d61b9 git-repack: Be careful when updating the same pack as an existing one.
After a clone, packfiles are read-only by default and "mv" to
replace the pack with a new one goes interactive, asking if the
user wants to replace it.  If one is successfully moved and the
other is not, the pack and its idx would become out-of-sync and
corrupts the repository.

Recovering is straightforward -- it is just the matter of
finding the remaining .tmp-pack-* and make sure they are both
moved -- but we should be extra careful not to do something so
alarming to the users.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 05:28:58 -07:00
801235c5e6 diff --color: use $GIT_DIR/config
This lets you use something like this in your $GIT_DIR/config
file.

	[diff]
		color = auto

	[diff.color]
		new = blue
		old = yellow
		frag = reverse

When diff.color is set to "auto", colored diff is enabled when
the standard output is the terminal.  Other choices are "always",
and "never".  Usual boolean true/false can also be used.

The colormap entries can specify colors for the following slots:

	plain	- lines that appear in both old and new file (context)
	meta	- diff --git header and extended git diff headers
	frag	- @@ -n,m +l,k @@ lines (hunk header)
	old	- lines deleted from old file
	new	- lines added to new file

The following color names can be used:

	normal, bold, dim, l, blink, reverse, reset,
	black, red, green, yellow, blue, magenta, cyan,
	white

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 00:39:13 -07:00
d5e673b60b rebase: allow --skip to work with --merge
Now that we control the merge base selection, we won't be forced
into rolling things in that we wanted to skip beforehand.

Also, add a test to ensure this all works as intended.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 00:38:34 -07:00
9e4bc7dd1b rebase: cleanup rebasing with --merge
We no longer have to recommit each patch to remove the parent
information we're rebasing since we're using the low-level merge
strategies directly instead of git-merge.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 00:38:34 -07:00
9a99c087da rebase: allow --merge option to handle patches merged upstream
Enhance t3401-rebase-partial to test with --merge as well as
the standard am -3 strategy.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 00:38:34 -07:00
29f4ad867c git-commit: filter out log message lines only when editor was run.
The current behaviour strips out lines starting with a # even when fed
through stdin or -m.  This is particularly bad when importing history from
another SCM (tailor 0.9.23 uses git-commit).  In the best cases all lines
are stripped and the commit fails with a confusing "empty log message"
error, but in many cases the commit is done, with loss of information.

Note that it is quite peculiar to just have "#" handled as a leading
comment char here.  One commonly meet CVS: or CG: or STG: as prefixes, and
using GIT: would be more robust as well as consistent with other commit
tools.  However, that would break any tool relying on the # (if any).

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-25 00:35:52 -07:00
817151e61a Rename safe_strncpy() to strlcpy().
This cleans up the use of safe_strncpy() even more.  Since it has the
same semantics as strlcpy() use this name instead.  Also move the
definition from inside path.c to its own file compat/strlcpy.c, and use
it conditionally at compile time, since some platforms already has
strlcpy().  It's included in the same way as compat/setenv.c.

Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 23:16:25 -07:00
3eaa38da94 apply: replace NO_ACCURATE_DIFF with --inaccurate-eof runtime flag.
It does not make much sense to build git whose behaviour is
different depending on the brokenness of diff implementation of
the platform because the brokenness of the patch that is applied
with the tool depends on brokenness of the diff the person who
generates the patch uses.  So we do not use NO_ACCURATE_DIFF
anymore, but help people to apply patches that do not record
incomplete lines correctly with a runtime flag.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 22:18:44 -07:00
d2543b8ee3 Clean up diff.c
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 20:16:55 -07:00
061303f0b5 cvsimport: always set $ENV{GIT_INDEX_FILE} to $index{$branch}
Also, make sure that the initial git-read-tree is performed.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
2006-06-24 20:08:25 -07:00
7ccd9009ac cvsimport: setup indexes correctly for ancestors and incremental imports
Two bugs had slipped in the "keep one index per branch during import"
patch. Both incremental imports and new branches would see an
empty tree for their initial commit. Now we cover all the relevant
cases, checking whether we actually need to setup the index before
preparing the actual commit, and doing it.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 05:30:06 -07:00
acb70149bc repo-config: fix printing of bool
When a bool variable appears without any value, it means true.
However, replacing the NULL value with an empty string, an earlier
commit f067a13745 broke show-config.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 05:19:30 -07:00
0ec2f6b739 diff --color: use reset sequence when we mean reset.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 04:24:34 -07:00
1054dcd165 git-repack -- respect -q and be quiet
git-repack was passing the -q along to pack-objects but ignoring it
itself. Correct the oversight.
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 03:06:30 -07:00
84702995f8 A better-scheduled PPC SHA-1 implementation.
This is about 15% faster that the current sha1ppc.S on a G4, and
5% faster on a G5 when hashing 10 million bytes, unaligned.
(The G5 ratio seems to get better as the sizes fall.)

It's also somewhat smaller, due to using load-multiple instructions.

No copyright is claimed on the changes to Paul Mackerras' work below.
2006-06-24 03:02:00 -07:00
b57cbbf8a8 test-sha1: test hashing large buffer
test to hash a large buffer in one go is more important than
hashing large amount of data in small fixed chunks.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 02:59:20 -07:00
7d0c68871a git-merge --squash
Some people tend to do many little commits on a topic branch,
recording all the trials and errors, and when the topic is
reasonably cooked well, would want to record the net effect of
the series as one commit on top of the mainline, removing the
cruft from the history.  The topic is then abandoned or forked
off again from that point at the mainline.

The barebone porcelainish that comes with core git tools does
not officially support such operation, but you can fake it by
using "git pull --no-merge" when such a topic branch is not a
strict superset of the mainline, like this:

	git checkout mainline
	git pull --no-commit . that-topic-branch
	: fix conflicts if any
	rm -f .git/MERGE_HEAD
        git commit -a -m 'consolidated commit log message'
	git branch -f that-topic-branch ;# now fully merged

This however does not work when the topic branch is a fast
forward of the mainline, because normal "git pull" will never
create a merge commit in such a case, and there is nothing
special --no-commit could do to begin with.

This patch introduces a new option, --squash, to support such a
workflow officially in both fast-forward case and true merge
case.  The user-level operation would be the same in both cases:

	git checkout mainline
        git pull --squash . that-topic-branch
        : fix conflicts if any -- naturally, there would be
        : no conflict if fast forward.
	git commit -a -m  'consolidated commit log message'
	git branch -f that-topic-branch ;# now fully merged

When the current branch is already up-to-date with respect to
the other branch, there truly is nothing to do, so the new
option does not have any effect.

This was brought up in #git IRC channel recently.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 01:11:19 -07:00
b65bc21e7d Makefile: add framework to verify and bench sha1 implementations.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 01:10:40 -07:00
86378b3289 git-pull: abort when fmt-merge-msg fails.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 01:10:27 -07:00
bc1f262d67 Merge branch 'pb/error'
* pb/error:
  usage: minimum type fix.
  Customizable error handlers
  git-merge: Don't use -p when outputting summary
  git-commit: allow -e option anywhere on command line
  patch-id: take "commit" prefix as well as "diff-tree" prefix
2006-06-24 01:06:51 -07:00
ce88ac5b12 usage: minimum type fix.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 00:12:52 -07:00
39a3f5ea7c Customizable error handlers
This patch makes the usage(), die() and error() handlers customizable.
Nothing in the git code itself uses that but many other libgit users
(like Git.pm) will.

This is implemented using the mutator functions primarily because you
cannot directly modifying global variables of libgit from a program that
dlopen()ed it, apparently. But having functions for that is a better API
anyway.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-24 00:12:52 -07:00
5e7c91d6f7 git-merge: Don't use -p when outputting summary
-p is not needed and we only want diffstat and summary.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-23 22:49:41 -07:00
0d21efa51c Teach diff about -b and -w flags
This adds -b (--ignore-space-change) and -w (--ignore-all-space) flags to
diff. The main part of the patch is teaching libxdiff about it.

[jc: renamed xdl_line_match() to xdl_recmatch() since the former is used
 for different purposes in xpatchi.c which is in the parts of the upstream
 source we do not use.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-23 17:35:27 -07:00
cda8ab59bb git-commit: allow -e option anywhere on command line
Previously, the command 'git-commit -e -m foo' would ignore the '-e' option
because the '-m' option overwrites the no_edit flag during sequential
option parsing. Now we cause -e to reset the no_edit flag after all
options are parsed.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-23 16:55:51 -07:00
8d3cbd27d4 patch-id: take "commit" prefix as well as "diff-tree" prefix
Some time ago we changed git-log in a massive way, and one consequence is
that the keyword changed. Adjust patch-id for that.

[jc: as Linus suggests, allowing both old and new prefix.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-23 16:55:15 -07:00
1f33026937 Makefile: do not recompile main programs when libraries have changed.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 16:20:54 -07:00
f60349aa78 add GIT-CFLAGS to .gitignore
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 16:18:32 -07:00
50f575fc98 Tweak diff colors
This patch does:

 - always reset the color _before_ printing out the newline.

   This is actually important. You (and Johannes) didn't see it, because
   it only matters if you set the background, but if you don't do this,
   you get some random and funky behaviour if you pick a color with a
   non-default background (which still potentially has problems with tabs
   etc, but less so).

 - allow people to have a different color for the "file headers"
   (DIFF_METAINFO) and for the "fragment header" (DIFF_FRAGINFO). Also,
   make a difference between "normal color" and "reset colors"

 - default to red/green for old/new lines. That's the norm, I'd think.

 - instead of that eye-popping (and eye-ball-with-a-fondue-fork-popping)
   purple color for metadata, use bold-face for file headers, and cyan for
   the frag headers. I actually prefer the "gray background" for that, but
   it only works well in xterms, so COLOR_CYAN it is..

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 15:08:36 -07:00
bf9e9542f9 Merge branch 'master' into next
* master:
  git-svn: fix commit --edit flag when using SVN:: libraries
  Makefile: do not force unneeded recompilation upon GIT_VERSION changes
  Check and document the options to prevent mistakes.
  Pass -DDEFAULT_GIT_TEMPLATE_DIR only where actually used.
2006-06-22 10:36:26 -07:00
5ab2c0a475 Merge branch 'js/lsfix'
* js/lsfix:
  Initialize lock_file struct to all zero.
  Make git-update-ref a builtin
  Make git-update-index a builtin
  Make git-stripspace a builtin
  Make git-mailinfo a builtin
  Make git-mailsplit a builtin
  Make git-write-tree a builtin
2006-06-22 10:35:13 -07:00
c5c23745d8 Merge branch 'ew/rebase'
* ew/rebase:
  rebase --merge: fix for rebasing more than 7 commits.
  rebase: error out for NO_PYTHON if they use recursive merge
  Add renaming-rebase test.
  rebase: Allow merge strategies to be used when rebasing
2006-06-22 10:34:02 -07:00
c3e1608862 Merge branch 'jn/web'
* jn/web:
  gitweb: whitespace cleanup around '='
  gitweb: Use $hash_base as $search_hash if possible
  gitweb: Make use of $PATH_INFO for project parameter
  Move $gitbin earlier in gitweb.cgi
  Add git version to gitweb output
  gitweb: whitespace cleanup
  gitweb: style done with stylesheet
  gitweb: A couple of page title tweaking
  Fix: Support for the standard mime.types map in gitweb
  gitweb: add type="text/css" to stylesheet link
  Make CSS file gitweb/gitweb.css more readable
  Fix gitweb stylesheet
  Support for the standard mime.types map in gitweb
  gitweb: text files for 'blob_plain' action without charset by default
  gitweb: safely output binary files for 'blob_plain' action
  Move gitweb style to gitweb.css
2006-06-22 10:33:34 -07:00
f4241c4c9a Merge early parts of branch 'js/diff' 2006-06-22 10:32:58 -07:00
16bf4e1f1e Merge branch 'jc/upload-corrupt'
* jc/upload-corrupt:
  daemon: send stderr to /dev/null instead of closing.
  upload-pack/fetch-pack: support side-band communication
  Retire git-clone-pack
  upload-pack: prepare for sideband message support.
  upload-pack: avoid sending an incomplete pack upon failure
2006-06-22 10:25:51 -07:00
b8ca3fbd46 Merge branch 'ew/rebase' into next
* ew/rebase:
  rebase --merge: fix for rebasing more than 7 commits.
2006-06-22 02:29:58 -07:00
8ec7e19499 Merge branch 'jn/web' into next
* jn/web:
  gitweb: whitespace cleanup around '='
  gitweb: Use $hash_base as $search_hash if possible
2006-06-22 02:29:50 -07:00
8adc4bd4a5 gitweb: whitespace cleanup around '='
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 02:25:39 -07:00
4c5c20261c gitweb: Use $hash_base as $search_hash if possible
$hash (h parameter) does not always point to a commit. Use $hash_base as
$search_hash when it is defined.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 02:23:12 -07:00
b879de1812 Merge branch 'jc/waitpid'
* jc/waitpid:
  Restore SIGCHLD to SIG_DFL where we care about waitpid().
2006-06-22 02:19:08 -07:00
e94528a0e9 Merge branch 'ff/c99'
* ff/c99:
  Remove all void-pointer arithmetic.
  Change types used in bitfields to be `int's.
  Don't use empty structure initializers.
  Cast pointers to `void *' when used in a format.
  Don't instantiate structures with FAMs.
  Initialize FAMs using `FLEX_ARRAY'.
  Remove ranges from switch statements.
2006-06-22 02:18:51 -07:00
c0a2e1c0ba Merge branch 'pb/config'
* pb/config:
  git_config: access() returns 0 on success, not > 0
  repo-config: Fix late-night bug
  Read configuration also from $HOME/.gitconfig
  Fix setting config variables with an alternative GIT_CONFIG
  Support for extracting configuration from different files
2006-06-22 02:15:45 -07:00
f97ccded31 Merge branch 'lt/objlist'
* lt/objlist:
  Add "named object array" concept
2006-06-22 02:15:22 -07:00
ec9d00d078 git-svn: fix commit --edit flag when using SVN:: libraries
Trying to open an interactive editor in the console while stdout is
being piped to the parent process doesn't work out very well.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 02:15:16 -07:00
bbc932c845 Makefile: do not force unneeded recompilation upon GIT_VERSION changes
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 02:04:27 -07:00
5887ac821f rebase --merge: fix for rebasing more than 7 commits.
Instead of using 4-digit numbers to name commits being rebased,
just use "cmt.$msgnum" string, with $msgnum as a decimal number
without leading zero padding.  This makes it possible to rebase
more than 9999 commits, but of more practical importance is that
the earlier code used "printf" to format already formatted
$msgnum and barfed when it counted up to 0008.  In other words,
the old code was incapable of rebasing more than 7 commits, and
this fixes that problem.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 01:46:48 -07:00
79ee555bac Check and document the options to prevent mistakes.
When multiple recipients are given to git-send-email on the same
--cc line the code does not properly handle it.

Full and proper parsing of the email addresses so I can detect
which commas mean a new email address is more than I care to implement.

In particular this email address: "bibo,mao" <bibo.mao@intel.com>
must not be treated as two email addresses.

So this patch simply treats all commas in recipient lists as
an error and fails if one is given.

At the same time it documents that git-send-email wants multiple
instances of --cc specified on the command line if you want to
cc multiple recipients.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 00:20:20 -07:00
c1f8064b14 Pass -DDEFAULT_GIT_TEMPLATE_DIR only where actually used.
Before this patch, -DDEFAULT_GIT_TEMPLATE_DIR was passed on compilation
command line to all and every .c file compiled. In fact the macro
is used by only one .c file, and unused by all other .c files.
Remove -DDEFAULT_GIT_TEMPLATE_DIR where unused. Follow the example of
exec_cmd.o. Pass -DDEFAULT_GIT_TEMPLATE_DIR only where actually used.

Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-22 00:11:23 -07:00
fba6e3f039 Merge branch 'master' into next
* master:
  Fix grow_refs_hash()
2006-06-21 18:37:31 -07:00
78831b40d6 Merge branch 'jc/upload-corrupt' into next
* jc/upload-corrupt:
  daemon: send stderr to /dev/null instead of closing.
2006-06-21 16:38:11 -07:00
811476d224 Merge branch 'jn/web' into next
* jn/web:
  gitweb: Make use of $PATH_INFO for project parameter
2006-06-21 16:38:05 -07:00
ba0012c367 daemon: send stderr to /dev/null instead of closing.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 16:37:48 -07:00
49f582a040 gitweb: Make use of $PATH_INFO for project parameter
Allow to have project name in the path part of URL, just after the name of
script. For example instead of gitweb.cgi?p=git.git you can write
gitweb.cgi/git.git or gitweb.cgi/git.git/

Not used in URLs inside gitweb; it means that the above alternate syntax
must be generated by hand, at least for now.

Side effect: project name parameter is now stripped of leading and
trailing slash before validation.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 14:01:15 -07:00
5fdc849965 Fix grow_refs_hash()
Earlier commit 3e4339e6f9 had a
thinko that did not check for collisions while repopulating the
objects in the new hash table.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 12:39:39 -07:00
160a59f326 Merge branch 'ew/rebase' into next
* ew/rebase:
  rebase: error out for NO_PYTHON if they use recursive merge
  Add renaming-rebase test.
  rebase: Allow merge strategies to be used when rebasing
  object-refs: avoid division by zero
2006-06-21 03:56:41 -07:00
693c15dc28 rebase: error out for NO_PYTHON if they use recursive merge
recursive merge relies on Python, and we can't perform
rename-aware merges without the recursive merge.  So bail out
before trying it.

The test won't work w/o recursive merge, either, so skip that,
too.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 03:56:30 -07:00
c3fb0e358e Add renaming-rebase test.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 03:56:29 -07:00
58634dbff8 rebase: Allow merge strategies to be used when rebasing
This solves the problem of rebasing local commits against an
upstream that has renamed files.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 03:56:29 -07:00
86f660b1f1 object-refs: avoid division by zero
Currently, we don't check refs_hash_size size and happily call
lookup_object_refs() even if refs_hash_size is zero which leads to
a division by zero in hash_obj().

Signed-off-by: Andre Noll <maan@systemlinux.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 03:56:00 -07:00
9d24ed4f01 Merge branch 'ff/c99' into next
* ff/c99:
  Remove all void-pointer arithmetic.
2006-06-21 03:51:59 -07:00
3bec0da08d Merge branch 'jc/upload-corrupt' into next
* jc/upload-corrupt:
  upload-pack/fetch-pack: support side-band communication
  Retire git-clone-pack
  upload-pack: prepare for sideband message support.
  upload-pack: avoid sending an incomplete pack upon failure
  Fix possible out-of-bounds array access
2006-06-21 02:50:59 -07:00
583b7ea31b upload-pack/fetch-pack: support side-band communication
This implements a protocol extension between fetch-pack and
upload-pack to allow stderr stream from upload-pack (primarily
used for the progress bar display) to be passed back.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:50:32 -07:00
efc7fa5355 Retire git-clone-pack
The program is not used by git-clone since git-fetch-pack was extended
to allow its caller do what git-clone-pack alone did, and git-clone was
updated to use it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:34:14 -07:00
363b7817e0 upload-pack: prepare for sideband message support.
This does not implement sideband for propagating the status to
the downloader yet, but add code to capture the standard error
output from the pack-objects process in preparation for sending
it off to the client when the protocol extension allows us to do
so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:34:14 -07:00
b1c71b7281 upload-pack: avoid sending an incomplete pack upon failure
When the repository on the remote side is corrupted, rev-list
spawned from upload-pack would die with error, but pack-objects
that reads from the rev-list happily created a packfile that can
be unpacked by the downloader.  When this happens, the resulting
packfile is not corrupted and unpacks cleanly, but the list of
the objects contained in it is not what the protocol exchange
computed.

This update makes upload-pack to monitor its subprocesses, and
when either of them dies with error, sends an incomplete pack
data to the downloader to cause it to fail.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:34:14 -07:00
48401221b3 Merge branch 'jn/web' into next
* jn/web:
  Move $gitbin earlier in gitweb.cgi
  Add git version to gitweb output
  gitweb: whitespace cleanup
2006-06-21 02:33:43 -07:00
bb9e15a83c Fix possible out-of-bounds array access
If match is "", match[-1] is accessed.  Let pathspec_matches return 1 in that
case indicating that "" matches everything.

Incidently this fixes git-grep'ing in ".".

Signed-off-by: Uwe Zeisberger <Uwe_Zeisberger@digi.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:30:46 -07:00
3f7f271004 Move $gitbin earlier in gitweb.cgi
(cherry picked from 9dca843086356b964f27d8fabe1e3c48074a9f02 commit)

Signed-off-by: Jakub Narebski <jnareb.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:02:01 -07:00
ae20de5386 Add git version to gitweb output
Add git-core binaries used version as the comment at the beginning of HTML
output, just below the comment with version of git web interface version.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:02:01 -07:00
7a9b4c5fe3 gitweb: whitespace cleanup
Do not use tabs to align variable initialization (actually use
tabs only at the beginning of line, for code indent).  Remove trailing
whitespace.  Make whitespace usage more consistent.

Signed-off-by: Jakub Narebski <jnareb.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-21 02:02:00 -07:00
ad9f72a704 Merge branch 'master' into next
* master:
  checkout -f: do not leave untracked working tree files.
  Log peer address when git-daemon called from inetd
2006-06-21 01:24:45 -07:00
4170af8232 checkout -f: do not leave untracked working tree files.
Earlier we did not consider untracked working tree files
"precious", but we have always considered them fair game to
clobber.  These days, branch switching by read-tree is more
careful and tries to protect untracked working tree files.  This
caused the following workflow to stop working:

	git checkout one-branch-with-file-F
	git checkout -f another-without-file-F
	git pull . one-branch-with-file-F

Because the second checkout leaves F from the previous state as
untracked file in the working tree, the merge would fail, trying
to protect F from being clobbered.

This changes "git checkout -f" to remove working tree files that
are known to git in the switched-from state but do not exist in
the switched-to state, borrowing the same logic from "reset --hard".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 22:21:11 -07:00
5b276ee4fb Log peer address when git-daemon called from inetd
When we run git-daemon from inetd, even with the --verbose option, it
doesn't log the peer address. That logic was only in the standalone
daemon code -- move it to the execute() function instead. Tested with
both IPv6 and Legacy IP clients, in both inetd and daemon mode.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Acked-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 22:19:29 -07:00
69d830d1a3 Merge branch 'jn/web' into next
* jn/web:
  gitweb: style done with stylesheet
  gitweb: A couple of page title tweaking
2006-06-20 14:06:32 -07:00
1f1ab5f05b gitweb: style done with stylesheet
Replace (almost) all 'style' attributes with 'class' attribute
and adding rule to CSS file. Some tables use CSS for styling
instead of legacy styling attributes.

[jc: too many rejects -- hand fixed and reindented]
2006-06-20 14:01:13 -07:00
7bedd9fc81 gitweb: A couple of page title tweaking
[jc: the e-mailed patch did not apply, so I had to guess but I think
 I got the result right.]
2006-06-20 13:46:30 -07:00
02ca920481 Merge branch 'jn/web' into next 2006-06-20 03:00:13 -07:00
57bd4d3523 Fix: Support for the standard mime.types map in gitweb
Temporary fix: commented out offending line in mimetype_guess.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 02:59:55 -07:00
753fa210cc Merge branch 'master' into next 2006-06-20 02:51:23 -07:00
a796b89511 Merge branch 'jn/web' into next 2006-06-20 02:39:53 -07:00
9e37f72afe Merge branch 'pb/config' into next 2006-06-20 02:39:48 -07:00
1d7f171c3a Remove all void-pointer arithmetic.
ANSI C99 doesn't allow void-pointer arithmetic. This patch fixes this in
various ways. Usually the strategy that required the least changes was used.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 01:59:46 -07:00
c07eee1f2a git-svn: fix --rmdir when using SVN:: libraries
When tracking directories with nearly all of its files at
the most nested levels, --rmdir would accidentally go too
far when deleting.

Of course, we'll add a test for this condition, too.

Makefile: automatically run new tests as they appear in t/

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 01:31:57 -07:00
e33d0611c0 git_config: access() returns 0 on success, not > 0
Another late-night bug. Sorry again.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 01:21:53 -07:00
92a28be0ce repo-config: Fix late-night bug
This bug was hidden by the "future-proofing" of the test. Sigh.

When neither GIT_CONFIG nor GIT_CONFIG_LOCAL is set, do not use NULL,
but $GIT_DIR/config. Instead of using $GIT_DIR/config when only
GIT_CONFIG_LOCAL is set. Sorry.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-20 01:21:51 -07:00
7b6511a13f gitweb: add type="text/css" to stylesheet link
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 21:16:09 -07:00
592689c461 Merge branch 'jc/waitpid' into next
* jc/waitpid:
  Restore SIGCHLD to SIG_DFL where we care about waitpid().
2006-06-19 18:47:51 -07:00
b19beecd94 Merge branch 'lt/objlist' into next
* lt/objlist:
  Add "named object array" concept
  xdiff: minor changes to match libxdiff-0.21
  fix rfc2047 formatter.
  Fix t8001-annotate and t8002-blame for ActiveState Perl
  Add specialized object allocator
2006-06-19 18:47:29 -07:00
474bc4e274 Merge branches 'js/lsfix', 'pb/config' and 'jn/web' into next
* js/lsfix:
  Initialize lock_file struct to all zero.

* pb/config:
  Read configuration also from $HOME/.gitconfig
  Fix setting config variables with an alternative GIT_CONFIG

* jn/web:
  Make CSS file gitweb/gitweb.css more readable
2006-06-19 18:46:56 -07:00
1f1e895fcc Add "named object array" concept
We've had this notion of a "object_list" for a long time, which eventually
grew a "name" member because some users (notably git-rev-list) wanted to
name each object as it is generated.

That object_list is great for some things, but it isn't all that wonderful
for others, and the "name" member is generally not used by everybody.

This patch splits the users of the object_list array up into two: the
traditional list users, who want the list-like format, and who don't
actually use or want the name. And another class of users that really used
the list as an extensible array, and generally wanted to name the objects.

The patch is fairly straightforward, but it's also biggish. Most of it
really just cleans things up: switching the revision parsing and listing
over to the array makes things like the builtin-diff usage much simpler
(we now see exactly how many members the array has, and we don't get the
objects reversed from the order they were on the command line).

One of the main reasons for doing this at all is that the malloc overhead
of the simple object list was actually pretty high, and the array is just
a lot denser. So this patch brings down memory usage by git-rev-list by
just under 3% (on top of all the other memory use optimizations) on the
mozilla archive.

It does add more lines than it removes, and more importantly, it adds a
whole new infrastructure for maintaining lists of objects, but on the
other hand, the new dynamic array code is pretty obvious. The change to
builtin-diff-tree.c shows a fairly good example of why an array interface
is sometimes more natural, and just much simpler for everybody.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 18:45:48 -07:00
f0b7367cb1 Restore SIGCHLD to SIG_DFL where we care about waitpid().
It was reported that under one implementation of socks client
"git clone" fails with "error: waitpid failed (No child processes)",
because "git" is spawned after setting SIGCHLD to SIG_IGN.

Arguably it may be a broken setting, but we should protect
ourselves so that we can get reliable results from waitpid() for
the children we care about.

This patch resets SIGCHLD to SIG_DFL in three places:

 - connect.c::git_connect() - initiators of git native
   protocol transfer are covered with this.

 - daemon.c::main() - obviously.

 - merge-index.c::main() - obviously.

There are other programs that do fork() but do not waitpid():
http-push, imap-send.  upload-pack does not either, but in the
case of that program, each of the forked halves runs exec()
another program, so this change would not have much effect
there.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 18:44:58 -07:00
d281786fcd xdiff: minor changes to match libxdiff-0.21
This reformats the change 621c53cc08
introduced to match what upstream author implemented in libxdiff-0.21
without changing any logic (hopefully ;-).  This is to help keep
us in sync with the upstream.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 18:43:49 -07:00
0da4677149 fix rfc2047 formatter.
Running git-format-patch on patches from Lukas destroyed
the From: line.  This fixes it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 18:43:30 -07:00
0e26f7a1c3 Fix t8001-annotate and t8002-blame for ActiveState Perl
There seems to be at least one implementation of Perl which requires the
user to specify an extension for backup files.

Reported by Alex Riesen.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 18:43:20 -07:00
855419f764 Add specialized object allocator
This creates a simple specialized object allocator for basic
objects.

This avoids wasting space with malloc overhead (metadata and
extra alignment), since the specialized allocator knows the
alignment, and that objects, once allocated, are never freed.

It also allows us to track some basic statistics about object
allocations. For example, for the mozilla import, it shows
object usage as follows:

     blobs:   627629 (14710 kB)
     trees:  1119035 (34969 kB)
   commits:   196423  (8440 kB)
      tags:     1336    (46 kB)

and the simpler allocator shaves off about 2.5% off the memory
footprint off a "git-rev-list --all --objects", and is a bit
faster too.

[ Side note: this concludes the series of "save memory in object storage".
  The thing is, there simply isn't much more to be saved on the objects.

  Doing "git-rev-list --all --objects" on the mozilla archive has a final
  total RSS of 131498 pages for me: that's about 513MB. Of that, the
  object overhead is now just 56MB, the rest is going somewhere else (put
  another way: the fact that this patch shaves off 2.5% of the total
  memory overhead, considering that objects are now not much more than 10%
  of the total shows how big the wasted space really was: this makes
  object allocations much more memory- and time-efficient).

  I haven't looked at where the rest is, but I suspect the bulk of it is
  just the pack-file loading. It may be that we should pack the tree
  objects separately from the blob objects: for git-rev-list --objects, we
  don't actually ever need to even look at the blobs, but since trees and
  blobs are interspersed in the pack-file, we end up not being dense in
  the tree accesses, so we end up looking at more pages than we strictly
  need to.

  So with a 535MB pack-file, it's entirely possible - even likely - that
  most of the remaining RSS is just the mmap of the pack-file itself. We
  don't need to map in _all_ of it, but we do end up mapping a fair
  amount. ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 18:42:21 -07:00
5f1a63e0ef Read configuration also from $HOME/.gitconfig
This patch is based on Pasky's, with three notable differences:

- I did not yet update the documentation
- I named it .gitconfig, not .gitrc
- git-repo-config does not barf when a unique key is overridden locally

The last means that if you have something like

	[alias]
		l = log --stat -M

in ~/.gitconfig, and

	[alias]
		l = log --stat -M next..

in $GIT_DIR/config, then

	git-repo-config alias.l

returns only one value, namely the value from $GIT_DIR/config.

If you set the environment variable GIT_CONFIG, $HOME/.gitconfig is not
read, and neither $GIT_DIR/config, but $GIT_CONFIG instead.

If you set GIT_CONFIG_LOCAL instead, it is interpreted instead of
$GIT_DIR/config, but $HOME/.gitconfig is still read.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 17:53:13 -07:00
9c3796fc04 Fix setting config variables with an alternative GIT_CONFIG
When setting a config variable, git_config_set() ignored the variables
GIT_CONFIG and GIT_CONFIG_LOCAL. Now, when GIT_CONFIG_LOCAL is set, it
will write to that file. If not, GIT_CONFIG is checked, and only as a
fallback, the change is written to $GIT_DIR/config.

Add a test for it, and also future-proof the test for the upcoming
$HOME/.gitconfig support.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 17:30:34 -07:00
928e47e3d5 Initialize lock_file struct to all zero.
hold_lock_file_for_update() relies on that.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 17:04:27 -07:00
75c84ddb46 Make CSS file gitweb/gitweb.css more readable
Taken from git://git.xmms.se/xmms2/gitweb-xmms2.git
commit  561262030d58a6325f500b36d836dbe02a5abc68
"Make CSS readable" by Daniel Svensson, with extra
parts removed and consistent whitespace usage.

[jc: tabified the results to cleaning things up, and removed an
 added item that was commented out. ]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-19 13:13:07 -07:00
275fb96ae6 Merge early parts of branch 'ff/c99' 2006-06-18 22:13:54 -07:00
69c18d8872 Merge early parts of branch 'ls/am' 2006-06-18 22:13:11 -07:00
854b4629f9 Make git-update-ref a builtin
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 22:12:20 -07:00
fefe81c996 Make git-update-index a builtin
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 22:12:19 -07:00
7499c99615 Make git-stripspace a builtin
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 22:12:16 -07:00
34488e3c37 Make git-mailinfo a builtin
[jc: with a bit of constness tightening]

Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 22:10:28 -07:00
e690e84315 Make git-mailsplit a builtin
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:58:20 -07:00
8ed05fb5e9 Make git-write-tree a builtin
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:58:19 -07:00
cc1dca7975 Merge branch 'jn/web' into next
* jn/web:
  Fix gitweb stylesheet
  Support for the standard mime.types map in gitweb
  gitweb: text files for 'blob_plain' action without charset by default
  gitweb: safely output binary files for 'blob_plain' action
  Move gitweb style to gitweb.css
2006-06-18 21:50:19 -07:00
42d5042488 Merge branch 'pb/config' into next
* pb/config:
  Support for extracting configuration from different files
  Fix PPC SHA1 routine for large input buffers
  Make t8001-annotate and t8002-blame more portable
  Remove "refs" field from "struct object"
  Make release tarballs friendlier to older tar versions
2006-06-18 21:48:32 -07:00
c729127ca7 Fix gitweb stylesheet
An earlier commit forgot to move some piece from the CGI script
to the external stylesheet.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:14 -07:00
2d00737489 Support for the standard mime.types map in gitweb
gitweb will try to look up the filename mimetype in /etc/mime.types
and optionally a user-configured mime.types map as well.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:14 -07:00
ad14e93175 gitweb: text files for 'blob_plain' action without charset by default
$default_text_plain_charset is undefined (no specified charset) by
default. Additionally ':raw' layer for binmode is used for outputting file
content.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:14 -07:00
f5aa79d909 gitweb: safely output binary files for 'blob_plain' action
gitweb tries now to output correct Content-Type header for
'blob_plain' action; for now text/plain for text files,
appropriate image MIME type for *.png, *.gif and *.jpg/*.jpeg files,
and application/octet-stream for other binary files.

Introduced new configuration variables: $default_blob_plain_mimetype
and $default_text_plain_charset (only 'utf-8' is guaranteed to work
for the latter).

binmode changed to ':raw' in git_blob_plain for output of non-text files.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:14 -07:00
aedd9425ce Move gitweb style to gitweb.css
Move gitweb style from embedded <style> element in gitweb/gitweb.cgi
to external CSS file gitweb/gitweb.css.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:13 -07:00
2bda77e080 Change types used in bitfields to be `int's.
According to ANSI C99 bitfields are only defined for `signed int' and `unsigned
int'. This patch corrects the bitfield in the `msg_data_t' type from
`imap-send.c'.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:10 -07:00
571ea603a6 Don't use empty structure initializers.
Empty initializers for structures are not allowed in ANSI C99. This patch
removes such an initializer from `builtin-read-tree.c'. Since the struct was
static (and is therefore implicitely initialized to zero anyway) it wasn't
actually needed.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:10 -07:00
04f086071e Cast pointers to `void *' when used in a format.
ANSI C99 requires void-pointers when using the `%p' format. This patch adds the
neccessary cast in `blame.c'.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:10 -07:00
b4b1550315 Don't instantiate structures with FAMs.
Since structures with `flexible array members' are an incomplete datatype ANSI
C99 forbids creating instances of them. This patch removes such an instance
from `diff-lib.c' and replaces it with a pointer to a `struct
combine_diff_path'. Since all neccessary memory is allocated at once the number
of calls to `xmalloc' is not increased.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:09 -07:00
63f175693e Initialize FAMs using `FLEX_ARRAY'.
When initializing a `flexible array member' the macro `FLEX_ARRAY' should be
used. This was forgotten in `diff-delta.c'.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:09 -07:00
cfd432e63d Remove ranges from switch statements.
Though very nice and readable, the "case 'a'...'z':" construct is not ANSI C99
compliant. This patch unfolds the range in `quote.c' and substitutes the
switch-statement with an if-statement in `http-fetch.c' and `http-push.c'.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:09 -07:00
7f29f7a95c Support for extracting configuration from different files
Add $GIT_CONFIG environment variable whose content is used instead
of .git/config if set. Also add $GIT_CONFIG_LOCAL as a
forward-compatibility cue for whenever we will finally come to support]
global configuration files (properly).

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 21:19:07 -07:00
64e86c5786 Merge branch 'yl/build'
* yl/build:
  auto-detect changed prefix and/or changed build flags
2006-06-18 21:18:49 -07:00
d9faecac64 Merge branch 'jc/shared'
* jc/shared:
  shared repository: optionally allow reading to "others".
2006-06-18 20:19:09 -07:00
72afd3eea6 Merge branch 'eb/mail'
* eb/mail:
  Fix git-format-patch -s
2006-06-18 20:18:21 -07:00
b47f509ba5 Fix PPC SHA1 routine for large input buffers
The PPC SHA1 routine had an overflow which meant that it gave
incorrect results for input buffers >= 512MB.  This fixes it by
ensuring that the update of the total length in bits is done using
64-bit arithmetic.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 20:12:20 -07:00
476a4dfc05 Make t8001-annotate and t8002-blame more portable
These two tests assume that "sed" will not modify the final line of a
stream if it does not end with a newline character.  The assumption is
not true at least for FreeBSD and Solaris 9.  FreeBSD's "sed" appends
a newline character; "sed" in Solaris 9 even removes the incomplete
final line.  This patch makes the test use perl instead.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 13:58:20 -07:00
3e4339e6f9 Remove "refs" field from "struct object"
This shrinks "struct object" to the absolutely minimal size possible.
It now contains /only/ the object flags and the SHA1 hash name of the
object.

The "refs" field, which is really needed only for fsck, is maintained in
a separate hashed lookup-table, allowing all normal users to totally
ignore it.

This helps memory usage, although not as much as I hoped: it looks like
the allocation overhead of malloc (and the alignment constraints in
particular) means that while the structure size shrinks, the actual
allocation overhead mostly does not.

[ That said: memory usage is actually down, but not as much as it should
  be: I suspect just one of the object types actually ended up shrinking
  its effective allocation size.

  To get to the next level, we probably need specialized allocators that
  don't pad the allocation more than necessary. ]

The separation makes for some code cleanup, though, and makes the ref
tracking that fsck wants a clearly separate thing.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 13:51:27 -07:00
9cd625b79b Make release tarballs friendlier to older tar versions
git-tar-tree adds an extended pax header to archives if its first
parameter points to a commit.  It confuses older tars and isn't
very useful in the case of git anyway, so stop doing it.

Idea: Junio, implementation: Junio.  I just wrote it up. :-)

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 11:29:36 -07:00
94b9e07d05 Merge branch 'master' into next
* master:
  git-tar-tree: no more void pointer arithmetic
  git-tar-tree: documentation update
  git-tar-tree: Simplify write_trailer()
2006-06-18 04:20:50 -07:00
6698060c15 git-tar-tree: no more void pointer arithmetic
Noticed by Florian Forster: Use a char pointer when adding offsets,
because void pointer arithmetic is a GNU extension.   Const'ify the
function arguments while we're at it.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 04:18:43 -07:00
9236cdd488 git-tar-tree: documentation update
* add example on how to avoid adding a global extended pax header
 * don't mention linux anymore, use git itself as an example instead
 * update to v1.4.0 ;-)
 * append missing :: to the examples

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 04:18:25 -07:00
37958be792 git-tar-tree: Simplify write_trailer()
We can write the trailer in one or at most two steps; it will always
fit within two blocks.  With the last caller of get_record() gone we
can get rid of it.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-18 04:17:49 -07:00
1910fe0d7b Merge branch 'yl/build' into next
* yl/build:
  auto-detect changed prefix and/or changed build flags
2006-06-17 19:17:41 -07:00
ca3bcabf11 auto-detect changed prefix and/or changed build flags
Detect changed prefix and/or changed build flags in the middle
of the build (or between 'make' and 'make install'), and if change
is detected, make sure all objects are compiled with same build
flags and same prefix, thus avoiding inconsistent/broken build.

[jc: removed otherwise unnecessary Makefile target to test the
 change this patch introduces. ]

Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 19:17:34 -07:00
8a02ad4f44 Merge branch 'eb/mail' into next
* eb/mail:
  Fix git-format-patch -s
  Some more memory leak avoidance
  Move "void *util" from "struct object" into "struct commit"
  Shrink "struct object" a bit
2006-06-17 18:56:08 -07:00
6c4cca1c72 Fix git-format-patch -s
When git-format-patch was converted to a builtin an appropriate call
to setup_ident was missed and thus git-format-patch -s fails because
it doesn't look up anything in the password file.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 18:51:53 -07:00
cb115748ec Some more memory leak avoidance
This is really the dregs of my effort to not waste memory in git-rev-list,
and makes barely one percent of a difference in the memory footprint, but
hey, it's also a pretty small patch.

It discards the parent lists and the commit buffer after the commit has
been shown by git-rev-list (and "git log" - which already did the commit
buffer part), and frees the commit list entry that was used by the
revision walker.

The big win would be to get rid of the "refs" pointer in the object
structure (another 5%), because it's only used by fsck. That would require
some pretty major surgery to fsck, though, so I'm timid and did the less
interesting but much easier part instead.

This (percentually) makes a bigger difference to "git log" and friends,
since those are walking _just_ commits, and thus the list entries tend to
be a bigger percentage of the memory use. But the "list all objects" case
does improve too.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 18:49:52 -07:00
d3ff6f5501 Move "void *util" from "struct object" into "struct commit"
Every single user actually wanted this only for commit objects, and we
have no reason to waste space on it for other object types. So just move
the structure member from the low-level "struct object" into the "struct
commit".

This leaves the commit object the same size, and removes one unnecessary
pointer from all other object allocations.

This shrinks memory usage (still at a fairly hefty half-gig, admittedly)
of "git-rev-list --all --objects" on the mozilla repo by another 5% in my
tests.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 18:49:45 -07:00
885a86abe2 Shrink "struct object" a bit
This shrinks "struct object" by a small amount, by getting rid of the
"struct type *" pointer and replacing it with a 3-bit bitfield instead.

In addition, we merge the bitfields and the "flags" field, which
incidentally should also remove a useless 4-byte padding from the object
when in 64-bit mode.

Now, our "struct object" is still too damn large, but it's now less
obviously bloated, and of the remaining fields, only the "util" (which is
not used by most things) is clearly something that should be eventually
discarded.

This shrinks the "git-rev-list --all" memory use by about 2.5% on the
kernel archive (and, perhaps more importantly, on the larger mozilla
archive). That may not sound like much, but I suspect it's more on a
64-bit platform.

There are other remaining inefficiencies (the parent lists, for example,
probably have horrible malloc overhead), but this was pretty obvious.

Most of the patch is just changing the comparison of the "type" pointer
from one of the constant string pointers to the appropriate new TYPE_xxx
small integer constant.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 18:49:18 -07:00
210a0be504 Merge early part of branch 'jc/fetchupload' 2006-06-17 17:57:33 -07:00
75c3a5ccdf Merge branch 'jc/rw-prefix'
* jc/rw-prefix:
  read-tree: reorganize bind_merge code.
  write-tree: --prefix=<path>
  read-tree: --prefix=<path>/ option.
2006-06-17 17:56:52 -07:00
8c278abcbe Merge branch 'pe/date'
* pe/date:
  date.c: improve guess between timezone offset and year.
2006-06-17 17:49:28 -07:00
fc5201ac9f Merge branch 'js/diff' 2006-06-17 17:08:36 -07:00
cd112cef99 diff options: add --color
This patch is a slightly adjusted version of Junio's patch:
http://www.gelato.unsw.edu.au/archives/git/0604/19354.html

However, instead of using a config variable, this patch makes it available
as a diff option.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 17:08:16 -07:00
ae448e3854 mailinfo: ignore blanks after in-body headers.
[jc: this is based on Eric's patch but also fixes up the parsed
 subject headers].

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 17:05:36 -07:00
2662dbfa58 Don't parse any headers in the real body of an email message.
It was pointed out that the current behaviour might mispart a patch comment
so remove this behaviour for now.

[jc: this fixes "From: line in the middle" check in t5100 test.]

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 16:27:12 -07:00
4839c0b5fa t5100: mailinfo and mailsplit tests.
Currently the test passes with 1.3.3 but not with the tip of
"master".  This is to verify the fixes from Eric W Biedermann.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 16:26:20 -07:00
f0338bbd82 Make t4101-apply-nonl bring along its patches
Some versions of "diff" (e.g. on FreeBSD and older Linux systems) do
not support the "\ No newline at end of file" remark and are not
able to generate the patches needed for this test.  This lets the
test fail, although git-apply is working perfectly.  This patch adds
the pre-generated patches to t/t4100/ and makes the test use them.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 16:06:21 -07:00
175fb6c040 Update gitweb README: gitweb is now included with git
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 16:06:20 -07:00
e968751573 git-cvsexportcommit.perl: fix typo
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-17 16:06:18 -07:00
9202434cbd gitweb.cgi history not shown
This does:

 - add a "rev.simplify_history" flag which defaults to on
 - it turns it off for "git whatchanged" (which thus now has real
   semantics outside of "git log")
 - it adds a command line flag ("--full-history") to turn it off for
   others (ie you can make "git log" and "gitk" etc get the semantics if
   you want to.

Now, just as an example of _why_ you really really really want to simplify
history by default, apply this patch, install it, and try these two
command lines:

	gitk --full-history -- git.c
	gitk -- git.c

and compare the output.

So with this, you can also now do

	git whatchanged -p -- gitweb.cgi
	git log -p --full-history -- gitweb.cgi

and it will show the old history of gitweb.cgi, even though it's not
relevant to the _current_ state of the name "gitweb.cgi"

NOTE NOTE NOTE! It will still actually simplify away merges that didn't
change anything at all into either child. That creates these bogus strange
discontinuities if you look at it with "gitk" (look at the --full-history
gitk output for git.c, and you'll see a few strange cases).

So the whole "--parent" thing ends up somewhat bogus with --full-history
because of this, but I'm not sure it's worth even worrying about. I don't
think you'd ever want to really use "--full-history" with the graphical
representation, I just give it as an example exactly to show _why_ doing
so would be insane.

I think this is trivial enough and useful enough to be worth merging into
the stable branch.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:53:11 -07:00
bfbd0bb6ec Implement safe_strncpy() as strlcpy() and use it more.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:12 -07:00
5996ca0836 gitweb: Make the `blame' interface in gitweb optional.
Since `git-annotate' is an expensive operation to run it may be
desirable to deactivate this functionality. This patch introduces
the `gitweb.blame' option to git-repo-config and disables the blame
support by default.

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:12 -07:00
e34ef62148 gitweb: Adding a `blame' interface.
This patch adds an interface for `git-blame' to `gitweb.cgi'.
Links to it are placed in `git_blob'.

Internally the code uses `git-annotate' because `git-blame's output
differs for files that have been renamed in the past. However, I like
the term `blame' better.

[jc: blame can be told to produce the compatible format btw...]

Signed-off-by: Florian Forster <octo@verplant.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:11 -07:00
8f732649bc cvsimport: keep one index per branch during import
With this patch we have a speedup and much lower IO when
importing trees with many branches. Instead of forcing
index re-population for each branch switch, we keep
many index files around, one per branch.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:11 -07:00
2f57c69792 cvsimport: complete the cvsps run before starting the import
We now capture the output of cvsps to a tempfile, and then read it in.
cvsps 2.1 works quite a bit "in memory", and only prints its patchset
info once it has finished talking with cvs, but apparently retaining
all that memory allocation. With this patch, cvsps is finished and
reaped before cvsimport start working (and growing). So the footprint
of the whole process is much lower.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:11 -07:00
71b0814836 cvsimport: ignore CVSPS_NO_BRANCH and impossible branches
cvsps output often contains references to CVSPS_NO_BRANCH, commits
that it could not trace to a branch. Ignore that branch.

Additionally, cvsps will sometimes draw circular relationships
between branches -- where two branches are recorded as opening
from the other.  In those cases, and where the ancestor branch
hasn't been seen, ignore it.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:11 -07:00
b19ee24b22 blame: Add --time to produce raw timestamps
fix the usage string and clean up the docs while we are at it

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:45:11 -07:00
d8498500ba fix git alias
When extra command line arguments are given to a command that
was alias-expanded, the code generated a wrong argument list,
leaving the original alias in the result, and forgetting to
terminate the new argv list.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-16 22:34:09 -07:00
ada7781dc3 Add a "--notags" option for git-p4import.
P4import currently creates a git tag for every commit it imports.
When importing from a large repository too many tags can be created
for git to manage, so this provides an option to shut that feature
off if necessary.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
2006-06-16 22:33:46 -07:00
5b139a66fc Merge git://git.bogomips.org/git-svn
* git://git.bogomips.org/git-svn: (25 commits)
  git-svn: rebuild convenience and bugfixes
  git-svn: svn (command-line) 1.0.x compatibility
  git-svn: tests no longer fail if LC_ALL is not a UTF-8 locale
  git-svn: bugfix and optimize the 'log' command
  git-svn: Eliminate temp file usage in libsvn_get_file()
  git-svn: fix several small bugs, enable branch optimization
  git-svn: avoid creating some small files
  git-svn: make the $GIT_DIR/svn/*/revs directory obsolete
  git-svn: add support for Perl SVN::* libraries
  git-svn: add 'log' command, a facsimile of basic `svn log'
  git-svn: add UTF-8 message test
  git-svn: add some functionality to better support branches in svn
  git-svn: add --shared and --template= options to pass to init-db
  git-svn: add --repack and --repack-flags= options
  git-svn: minor cleanups, extra error-checking
  git-svn: Move all git-svn-related paths into $GIT_DIR/svn
  git-svn: support manually placed initial trees from fetch
  git-svn: optimize --branch and --branch-all-ref
  git-svn: --branch-all-refs / -B support
  git-svn: support -C<num> passing to git-diff-tree
  ...
2006-06-16 22:33:28 -07:00
1a82e79315 git-svn: rebuild convenience and bugfixes
We will now automatically fetch the refs/remotes/git-svn ref
from origin and store a Pull: line for it.

--remote=<origin> may be passed if your remote is named something
other than 'origin'

Also, remember to make GIT_SVN_DIR whenever we need to create
.rev_db

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:21 -07:00
0e8a002c59 git-svn: svn (command-line) 1.0.x compatibility
Tested on a plain Ubuntu Warty installation
using subversion 1.0.6-1.2ubuntu3

svn add --force was never needed, as it only affected
directories, which git (thankfully) doesn't track

The 1.0.x also didn't support symlinks(!), so allow NO_SYMLINK
to be defined for running tests

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:21 -07:00
86f363791b git-svn: tests no longer fail if LC_ALL is not a UTF-8 locale
Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:21 -07:00
c0d4822268 git-svn: bugfix and optimize the 'log' command
Revisions with long commit messages were being skipped, since
the 'git-svn-id' metadata line was at the end and git-log uses a
32k buffer to print the commits.

Also the last 'git-svn-id' metadata line in a commit is always
the valid one, so make sure we use that, as well.

Made the verbose flag work by passing the correct option switch
('--summary') to git-log.

Finally, optimize -r/--revision argument handling by passing
the appropriate limits to revision

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:21 -07:00
968bdf1f3d git-svn: Eliminate temp file usage in libsvn_get_file()
This means we'll have a loose object when we encounter a symlink
but that's not the common case.

We also don't have to worry about svn:eol-style when using the
SVN libraries, either.  So remove the code to deal with that.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:21 -07:00
cf7424b021 git-svn: fix several small bugs, enable branch optimization
Share the repack counter between branches when doing
multi-fetch.

Pass the -d flag to git repack by default.  That's the
main reason we will want automatic pack generation, to
save space and improve disk cache performance.  I won't
add -a by default since it can generate extremely large
packs that make RAM-starved systems unhappy.

We no longer generate the .git/svn/$GIT_SVN_ID/info/uuid
file, either.  It was never read in the first place.

Check for and create .rev_db if we need to during fetch (in case
somebody manually blew away their .rev_db and wanted to start
over.  Mainly makes debugging easier).

Croak with $? instead of $! if there's an error closing pipes

Quiet down some of the chatter, too.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
6c5cda89e9 git-svn: avoid creating some small files
repo_path_split() is already pretty fast, and is already
optimized via caching.

We also don't need to create an exclude file if we're
relying on the SVN libraries.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
42d328701d git-svn: make the $GIT_DIR/svn/*/revs directory obsolete
This is a very intrusive change, so I've beefed up the tests
significantly.  Added 'full-test' a target to the Makefile,
to test different possible configurations.  This is intended
for maintainers only.  Users should only be concerned with
'test' succeeding.

We now have a very simple custom database format for handling
mapping of svn revisions => git commits.  Of course, we're
not really using it yet, either.

Also disabled automatic branch-finding on new trees for now.
It's too easily broken.  revisions_eq() function should be
helpful for branch detection.

Also removed an extra assertion in fetch_cmd() that wasn't
correctly done.  This bug was found by full-test.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
a5e0cedc0a git-svn: add support for Perl SVN::* libraries
This means we no longer have to deal with having bloated SVN
working copies around and we get a nice performance increase as
well because we don't have to exec the SVN binary and start a
new server connection each time.

Of course we have to manually manage memory with SVN::Pool
whenever we can, and hack around cases where SVN just eats
memory despite pools (I blame Perl, too).  I would like to
keep memory usage as stable as possible during long fetch/commit
processes since I still use computers with only 256-512M RAM.

commit should always be faster with the SVN library code.  The
SVN::Delta interface is leaky (or I'm not using it with pools
correctly), so I'm forking on every commit, but that doesn't
seem to hurt performance too much (at least on normal Unix/Linux
systems where fork() is pretty cheap).

fetch should be faster in most common cases, but probably not all.
fetches will be faster where client/server delta generation is
the bottleneck and not bandwidth.  Of course, full-files are
generated server-side via deltas, too.  Full files are always
transferred when they're updated, just like git-svnimport and
unlike command-line svn.  I'm also hacking around memory leaks
(see comments) here by using some more forks.

I've tested fetch with http://, https://, file://, and svn://
repositories, so we should be reasonably covered in terms of
error handling for fetching.

Of course, we'll keep plain command-line svn compatibility as a
fallback for people running SVN 1.1 (I'm looking into library
support for 1.1.x SVN, too).  If you want to force command-line
SVN usage, set GIT_SVN_NO_LIB=1 in your environment.

We also require two simultaneous connections (just like
git-svnimport), but this shouldn't be a problem for most
servers.

Less important commands:

show-ignore is slower because it requires repository
access, but -r/--revision <num> can be specified.

graft-branches may use more memory, but it's a
short-term process and is funky-filename-safe.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
79bb8d88fc git-svn: add 'log' command, a facsimile of basic `svn log'
This quick feature should make it easy to look up svn log
messages when svn users refer to -r/--revision numbers.

The following features from `svn log' are supported:

  --revision=<n>[:<n>] - is supported, non-numeric args are not:
			 HEAD, NEXT, BASE, PREV, etc ...
  -v/--verbose         - just maps to --raw (in git log), so
			 it's completely incompatible with
			 the --verbose output in svn log
  --limit=<n>          - is NOT the same as --max-count,
			 doesn't count merged/excluded commits
  --incremental        - supported (trivial :P)

New features:

  --show-commit        - shows the git commit sha1, as well
  --oneline            - our version of --pretty=oneline

Any other arguments are passed directly to `git log'

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
7a97de4e19 git-svn: add UTF-8 message test
Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
9d55b41aad git-svn: add some functionality to better support branches in svn
New commands:

graft-branches - The most interesting command of the bunch.  It
detects branches in SVN via various techniques (currently
regexes and file copies).   It can be later extended to handle
svk and other properties people may use to track merges in svk.
Basically, merge tracking is not standardized at all in the SVN
world, and git grafts are perfect for dealing with this
situation.

Existing branch support (via tree matches) is only handled at
fetch time.

The following tow were originally implemented as shell scripts
several months ago, but I just decided to streamline things a
bit and added them to the main script.

multi-init - supports git-svnimport-like command-line syntax for
importing repositories that are layed out as recommended by the
SVN folks.  This is a bit more tolerant than the git-svnimport
command-line syntax and doesn't require the user to figure out
where the repository URL ends and where the repository path
begins.

multi-fetch - runs fetch on all known SVN branches we're
tracking.  This will NOT discover new branches (unlike
git-svnimport), so multi-init will need to be re-run (it's
idempotent).

Consider these three to be auxilliary commands (like
show-ignore, and rebuild) so their behavior won't receive as
much testing or scrutiny as the core commands (fetch and
commit).

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
f8ab6b732f git-svn: add --shared and --template= options to pass to init-db
Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
dc5869c00d git-svn: add --repack and --repack-flags= options
This should help keep disk usage sane for large imports.

--repack takes an optional argument for the interval, it
defaults to 1000 if no argument is specified.

Arguments to --repack-flags are passed directly to git-repack.
No arguments are passed by default.

Idea stolen from git-cvsimport :)

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
b8c92cadda git-svn: minor cleanups, extra error-checking
While we're at it, read_repo_config has been added and
expanded to handle case where command-line arguments are
optional to Getopt::Long

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
883d0a78d2 git-svn: Move all git-svn-related paths into $GIT_DIR/svn
Since GIT_SVN_ID usage is probably going to become more
widespread <evil grin>, we won't run the chance of somebody
having a GIT_SVN_ID name that conflicts with one of the default
directories that already exist in $GIT_DIR (branches/tags).

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
6dfbe5163e git-svn: support manually placed initial trees from fetch
Sometimes I don't feel like downloading an entire tree again when
I actually decide a branch is worth tracking, so some users can
get around it more easily with this.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
098749d9be git-svn: optimize --branch and --branch-all-ref
By breaking the pipe read once we've seen a commit twice.

This should make -B/--branch-all-ref faster and usable on a
frequent basis.

We use topological order now for calling git-rev-list, and any
commit we've seen before should imply that all parents have been
seen (at least I hope that's the case for --topo-order).

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
bf78b1d89b git-svn: --branch-all-refs / -B support
This should make life easier for all those who type:

	`git-rev-parse --symbolic --all | xargs -n1 echo -b`

every time they run git-svn fetch.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:20 -07:00
162f412921 git-svn: support -C<num> passing to git-diff-tree
The repo-config key is 'svn.copysimilarity'

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:19 -07:00
b63af9b340 git-svn: don't allow commit if svn tree is not current
If new revisions are fetched, that implies we haven't merged,
acked, or nacked them yet, and attempting to write the tree
we're committing means we'd silently clobber the newly fetched
changes.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:19 -07:00
ce475dfcb5 git-svn: restore original LC_ALL setting (or unset) for commit
svn forces UTF-8 for commit messages, and with LC_ALL set to 'C'
it is unable to determine encoding of the git commit message.

Now we'll just assume the user has set LC_* correctly for
the commit message they're using.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:19 -07:00
4a393f2b53 git-svn: eol_cp corner-case fixes
If we read the maximum size of our buffer into $buf, and the
last character is '\015', there's a chance that the character is
'\012', which means our regex won't work correctly.  At the
worst case, this could introduce an extra newline into the code.
We'll now read an extra character if we see '\015' is the last
character in $buf.

We also forgot to recalculate the length of $buf after doing the
newline substitution, causing some files to appeare truncated.
We'll do that now and force byte semantics in length() for good
measure.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:19 -07:00
8a97e36888 git-svn: fix handling of filenames with embedded '@'
svn has trouble parsing files with embedded '@' characters.  For
example,

  svn propget svn:keywords foo@bar.c
  svn: Syntax error parsing revision 'bar.c'

I asked about this on #svn and the workaround suggested was to append
an explicit revision specifier:

  svn propget svn:keywords foo@bar.c@BASE

This patch appends '@BASE' to the filename in all calls to 'svn
propget'.

Patch originally by Seth Falcon <sethfalcon@gmail.com>
Seth: signoff?

[ew: Made to work with older svn that don't support peg revisions]

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:19 -07:00
c7162c1db6 git-svn: t0000: add -f flag to checkout
Some changes to the latest git.git made this test croak.  So
we'll always just force everything when using a new branch.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-06-16 03:04:19 -07:00
b642d9ef64 Merge git://git.kernel.org/pub/scm/gitk/gitk
* git://git.kernel.org/pub/scm/gitk/gitk:
  [PATCH] gitk: rereadrefs needs listrefs
2006-06-13 10:53:41 -07:00
2e1ded44f7 [PATCH] gitk: rereadrefs needs listrefs
The listrefs procedure was inadvertently removed during the course of
development, but there is still a user of it, so resurrect it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-06-12 09:37:44 +10:00
ada5853c98 Merge branch 'master' into next
* master: (148 commits)
  GIT 1.4.0
  v267
  prepend '--' to filelist when calling git-diff-tree
  v266
  remove Christian's email address
  v265
  handle utf8 characters from /etc/passwd
  v264
  fix: Use of uninitialized value
  v263
  allow working in repositories with textual symref HEAD
  resolve textual hashes when looking up "refs"
  v262
  define default colors
  v261
  fix leading whitespace in commit text
  more tags
  v260
  attach tag to the link
  v259
  ...
2006-06-10 14:07:46 -07:00
41292ddd37 GIT 1.4.0
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-10 12:41:54 -07:00
0a8f4f0020 Merge git://git.kernel.org/pub/scm/git/gitweb 2006-06-10 11:20:59 -07:00
52ba03cbb1 Built-in git-get-tar-commit-id
By being an internal command git-get-commit-id can make use of
struct ustar_header and other stuff and stops wasting precious
disk space.

Note: I recycled one of the two "tar-tree" entries instead of
splitting that cleanup into a separate patch.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-10 11:14:00 -07:00
67d4160712 Merge branch 'jc/shared' into next
* jc/shared:
  shared repository: optionally allow reading to "others".
  git-clone: fix --bare over dumb-http
  shared repository - add a few missing calls to adjust_shared_perm().
  Fix formatting of Documentation/git-clone.txt
  builtin-init-db: spell the in-program configuration variable in lowercase.
2006-06-10 01:31:58 -07:00
94df2506ed shared repository: optionally allow reading to "others".
This enhances core.sharedrepository to have additionally
specify that read and exec permissions to be given to others as
well.  It is useful when serving a repository via gitweb and
git-daemon that runs as a user outside the project group.

The configuration item can take the following values:

    [core]
	sharedrepository 	 ; the same as "group"
	sharedrepository = true  ; ditto
	sharedrepository = 1	 ; ditto
	sharedrepository = group ; allow rwx to group
	sharedrepository = all   ; allow rwx to group, allow rx to other
	sharedrepository = umask ; not shared - use umask

It also extends "git init-db" to take "--shared=all" and friends
from the command line.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-10 01:31:31 -07:00
5e3a620cd5 git-clone: fix --bare over dumb-http
It left an extra .git/ directory under the target directory by
mistake.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-10 01:12:50 -07:00
138086a725 shared repository - add a few missing calls to adjust_shared_perm().
There were a few calls to adjust_shared_perm() that were
missing:

 - init-db creates refs, refs/heads, and refs/tags before
   reading from templates that could specify sharedrepository in
   the config file;

 - updating config file created it under user's umask without
   adjusting;

 - updating refs created it under user's umask without
   adjusting;

 - switching branches created .git/HEAD under user's umask
   without adjusting.

This moves adjust_shared_perm() from sha1_file.c to path.c,
since a few SIMPLE_PROGRAM need to call repository configuration
functions which in turn need to call adjust_shared_perm().
sha1_file.c needs to link with SHA1 computation library which
is usually not linked to SIMPLE_PROGRAM.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-09 22:15:50 -07:00
f6407823d1 Fix formatting of Documentation/git-clone.txt
Signed-off-by: Horst H. von Brand <vonbrand@inf.utfsm.cl>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-09 20:37:45 -07:00
e9b9368168 builtin-init-db: spell the in-program configuration variable in lowercase.
Just for consistency -- setup.c spells it in lowercase.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-09 15:26:08 -07:00
55becd7b5f Merge branch 'pe/date' into next
* pe/date:
  date.c: improve guess between timezone offset and year.
  git-rm: honor -n flag.
  git-clone: fix duplicated "master" in $GIT_DIR/remotes/origin
  check for error return from fork()
  Document git-clone --use-separate-remote
2006-06-08 21:23:35 -07:00
7122f82f56 date.c: improve guess between timezone offset and year.
When match_digit() guesses a four-digit string to tell if it is
a year or a timezone, it did not consider that some real-world
places have UTC offsets equal to +1400.

   $ date; TZ=UTC0 date; TZ=Pacific/Kiritimati date
   Wed Jun  7 23:25:42 PDT 2006
   Thu Jun  8 06:25:42 UTC 2006
   Thu Jun  8 20:25:42 LINT 2006

Signed-off-by: Paul Eggert <eggert@CS.UCLA.EDU>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-08 21:22:33 -07:00
7612a1efdb git-rm: honor -n flag.
Even when invoked with -n flag, git-rm removed the matching
paths anyway.  Also includes the missing check spotted by
SungHyun Nam, which caused it to segfault.  Now we refuse to run
without any paths.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-08 21:11:25 -07:00
2048bb00ee git-clone: fix duplicated "master" in $GIT_DIR/remotes/origin
Under --use-separate-remote we ended up duplicating the branch
remote HEAD pointed at in $GIT_DIR/remotes/origin file.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-08 16:19:37 -07:00
c9bc159d7f check for error return from fork()
Trivial fixup for fork() callsites which do not check for errors.

Signed-off-by: Paul T Darga <pdarga@umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-08 11:57:00 -07:00
fb6a9f93d3 Document git-clone --use-separate-remote
Signed-off-by: Uwe Zeisberger <uzeisberger@io.fsforth.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-08 00:37:41 -07:00
a95e01885a Merge branch 'master' into next
* master:
  Documentation: add another example to git-ls-files
2006-06-07 20:19:18 -07:00
b86bec6c4f Documentation: add another example to git-ls-files
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 20:19:00 -07:00
ab1b3af792 Merge branch 'master' into next
* master:
  Documentation: git aliases
  git-cvsserver asciidoc formatting tweaks
  config.txt grammar, typo, and asciidoc fixes
  Documentation: git-ls-tree (typofix)
  Document git-ls-tree --fullname
  Document git aliases support
  make clean: remove dist-doc targets.
  Misc doc improvements
  Documentation: add missing docs make check-docs found.
  Some doc typo fixes
  Off-by-one error in get_path_prefix(), found by Valgrind
  gitk: Re-read the descendent/ancestor tag & head info on update
2006-06-07 17:27:09 -07:00
99b41c84a5 Documentation: git aliases
Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 17:25:21 -07:00
0fc8573d4b git-cvsserver asciidoc formatting tweaks
No content change here.

html output improved. man output changed.

Signed-off-by: Francis Daly <francis@daoine.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 16:32:50 -07:00
b8936cf060 config.txt grammar, typo, and asciidoc fixes
Nothing major.

Signed-off-by: Francis Daly <francis@daoine.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 16:32:35 -07:00
4269822012 Documentation: git-ls-tree (typofix)
spotted by jdl.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 16:29:36 -07:00
fd7e9fb7ae Document git-ls-tree --fullname
Additionally, reformat synopsis and remove stub notice.

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 12:48:34 -07:00
4514ad4fb7 Document git aliases support
This patch ports and modifies appropriately the git aliases documentation
from my patch, shall it rest in peace.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 12:37:46 -07:00
9dc2164ab3 make clean: remove dist-doc targets.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 12:37:46 -07:00
74237d6236 Misc doc improvements
Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 12:37:46 -07:00
34925d35ff Documentation: add missing docs make check-docs found.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 11:49:35 -07:00
3742506578 Some doc typo fixes
All should be clear enough, except perhaps committish / commitish.
I just kept the more-used one within the current docs.

[jc: with rephrasing of check-ref-format description later discussed
 on the list]

Signed-off-by: Francis Daly <francis@daoine.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 11:49:35 -07:00
17cf250aff Off-by-one error in get_path_prefix(), found by Valgrind
[jc: original fix was done by Pavel and this contains improvements
 by Rene.]

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Acked-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-07 11:49:08 -07:00
7fb23e6083 Merge git://git.kernel.org/pub/scm/gitk/gitk
* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Re-read the descendent/ancestor tag & head info on update
  gitk: Show branch name(s) as well, if "show nearby tags" is enabled
  gitk: Show nearby tags
  gitk: Add a goto next/previous highlighted commit function
  gitk: Provide ability to highlight based on relationship to selected commit
  gitk: Fix bug in highlight stuff when no line is selected
  gitk: Move "pickaxe" find function to highlight facility
  gitk: Improve the text window search function
  gitk: First cut at a search function in the patch/file display window
  gitk: Highlight paths of interest in tree view as well
  gitk: Highlight entries in the file list as well
  gitk: Make a row of controls for controlling highlighting
2006-06-06 23:24:27 -07:00
fd4c6cc9d6 Merge branch 'master' into next
* master:
  http-fetch: fix possible segfault
  Refactor git_tcp_connect() functions a little.
  builtin-grep: pass ignore case option to external grep
2006-06-06 22:36:10 -07:00
e8dff6ba8b http-fetch: fix possible segfault
Initialize an object request's slot to a safe value.  A non-NULL value
can cause a segfault if the request is aborted before it starts.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 22:32:51 -07:00
5ad312bede Refactor git_tcp_connect() functions a little.
Add client side sending of "\0host=%s\0" extended
arg for git native protocol, backwards compatibly.

Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 21:44:39 -07:00
9941afc051 Merge branch 'jc/lockfile'
* jc/lockfile:
  ref-log: style fixes.
  refs.c: convert it to use lockfile interface.
  Make index file locking code reusable to others.
2006-06-06 16:42:52 -07:00
44fe4f522e Merge branch 'js/alias'
* js/alias:
  git alias: try alias last.
  If you have a config containing something like this:
2006-06-06 16:42:46 -07:00
ad0e0b0a31 Merge branch 'vb/sendemail'
* vb/sendemail:
  send-email: a bit more careful domain regexp.
  send-email: be more lenient and just catch obvious mistakes.
  Cleanup git-send-email.perl:extract_valid_email
2006-06-06 16:42:33 -07:00
3026402cbc builtin-grep: pass ignore case option to external grep
Don't just read the --ignore-case/-i option, pass the flag on to the
external grep program.

Signed-off-by: Robert Fitzsimons <robfitz@273k.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 16:22:45 -07:00
2d71bcccc8 gitk: Re-read the descendent/ancestor tag & head info on update
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-06-07 09:19:45 +10:00
68a40e5096 Merge branch 'jc/lockfile' into next
* jc/lockfile:
  ref-log: style fixes.
  refs.c: convert it to use lockfile interface.
  Make index file locking code reusable to others.
  HTTP cleanup
  HTTP cleanup
  git-format-patch: add --output-directory long option again
2006-06-06 14:31:29 -07:00
8779767a58 Merge branch 'vb/sendemail' into next
* vb/sendemail:
  send-email: a bit more careful domain regexp.
2006-06-06 14:31:24 -07:00
e5f38ec3c5 ref-log: style fixes.
A few style fixes to get the code in line with the rest.

 - asterisk to make a type a pointer to something goes in front
   of the variable, not at the end of the base type.
   E.g. a pointer to an integer is "int *ip", not "int* ip".

 - open parenthesis for function parameter list, unlike
   syntactic constructs, comes immediately after the function
   name.  E.g. "if (foo) bar();" not "if(foo) bar ();".

 - "else" does not come on the same line as the closing brace of
   corresponding "if".

The style is mostly a matter of personal taste, and people may
disagree, but consistency is important.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:30:58 -07:00
c33d5174d6 refs.c: convert it to use lockfile interface.
This updates the ref locking code to use creat-rename locking
code we use for the index file, so that it can borrow the code
to clean things up upon signals and program termination.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:30:58 -07:00
021b6e4549 Make index file locking code reusable to others.
The framework to create lockfiles that are removed at exit is
first used to reliably write the index file, but it is
applicable to other things, so stop calling it "cache_file".

This also rewords a few remaining error message that called the
index file "cache file".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:30:58 -07:00
dd8239f997 HTTP cleanup
This ifdef's out more functions that are not used while !USE_MULTI
in http code.  Also the dependency of http related objects on http.h
header file was missing in the Makefile.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:26:57 -07:00
b3ca4e4ebb HTTP cleanup
Fix broken build when USE_CURL_MULTI is not defined, as noted by Becky Bruce.

During cleanup, free header slist that was created during init, as noted
by Junio.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:18:00 -07:00
efd0201684 git-format-patch: add --output-directory long option again
Additionally notices and complains to an -o option without
directory or a duplicated -o option, -o and --stdout given
together.  Also delays the creation of directory until all
arguments are parsed, so that the command does not leave an
empty directory behind when it exits after seeing an unrelated
invalid option.

[jc: originally from Dennis Stosberg but with minor fixes, and
 documentation updates from Dennis.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:16:43 -07:00
09302e177e send-email: a bit more careful domain regexp.
This tightens the regexp a bit to make sure there is no double dots.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:12:46 -07:00
9c41a17ca2 Merge branch 'vb/sendemail' into next
* vb/sendemail:
  send-email: be more lenient and just catch obvious mistakes.
2006-06-06 00:06:44 -07:00
ad9c18f504 send-email: be more lenient and just catch obvious mistakes.
This cleans up the pattern matching subroutine by introducing
two variables to hold regexp to approximately match local-part
and domain in the e-mail address.  It is meant to catch obvious
mistakes with a cheap check.

The patch also moves "scalar" to force Email::Valid->address()
to work in !wantarray environment to extract_valid_address;
earlier it was in the caller of the subroutine, which was way
too error prone.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 00:05:56 -07:00
9f575b9c1a Merge branch 'master' into next
* master:
  rev-parse: tighten constness properly.
  A Perforce importer for git.
2006-06-05 22:36:35 -07:00
16cee38ae2 rev-parse: tighten constness properly.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 22:36:21 -07:00
1d84a60459 A Perforce importer for git.
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 22:17:26 -07:00
c49b5a3c89 Merge branch 'js/alias' into next
* js/alias:
  git alias: try alias last.
  If you have a config containing something like this:
  builtin-push: don't pass --thin to HTTP transport
  pack-objects: improve path grouping heuristics.
  rev-list: fix process_tree() conversion.
  Fix typo in tutorial-2.txt
  Fix Documentation/everyday.txt: Junio's workflow
  Add example xinetd(8) configuration to Documentation/everyday.txt
  read-tree: fix eye-candy.
  gitview: Add some useful keybindings.
2006-06-05 18:10:20 -07:00
a025463bc0 git alias: try alias last.
This disables alias "foo" from being used for git-foo, and when
we do use alias we check the built-in and then existing command
names first and then alias as the fallback.  This avoids the
problem of common commands used in scripts getting clobbered by
user specific aliases.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 18:09:40 -07:00
2b11e3170e If you have a config containing something like this:
[alias]
		l = "log --stat -M ORIG_HEAD.."

you can call

	git l

and it will do the same as

	git log --stat -M ORIG_HEAD..

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 17:49:17 -07:00
441c823e89 builtin-push: don't pass --thin to HTTP transport
git-http-push does not currently use packs to transfer objects.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 17:39:44 -07:00
ce0bd64299 pack-objects: improve path grouping heuristics.
This trivial patch not only simplifies the name hashing, it actually
improves packing for both git and the kernel.

The git archive pack shrinks from 6824090->6622627 bytes (a 3%
improvement), and the kernel pack shrinks from 108756213 to 108219021 (a
mere 0.5% improvement, but still, it's an improvement from making the
hashing much simpler!)

We just create a 32-bit hash, where we "age" previous characters by two
bits, so the last characters in a filename count most. So when we then
compare the hashes in the sort routine, filenames that end the same way
sort the same way.

It takes the subdirectory into account (unless the filename is > 16
characters), but files with the same name within the same subdirectory
will obviously sort closer than files in different subdirectories.

And, incidentally (which is why I tried the hash change in the first
place, of course) builtin-rev-list.c will sort fairly close to rev-list.c.

And no, it's not a "good hash" in the sense of being secure or unique, but
that's not what we're looking for. The whole "hash" thing is misnamed
here. It's not so much a hash as a "sorting number".

[jc: rolled in simplification for computing the sorting number
 computation for thin pack base objects]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 17:23:31 -07:00
87cefaaff9 rev-list: fix process_tree() conversion.
The tree-walking conversion of the "process_tree()" function
broke packing by using an unrelated variable from outer scope.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 14:54:17 -07:00
2befe6feb9 Fix typo in tutorial-2.txt
This should be obvious enough.

I didn't actually _test_ the tutorial, but if the old command worked,
something is really wrong!

Signed-off-by: Linus "Duh!" Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 13:05:49 -07:00
53bcf78a02 Fix Documentation/everyday.txt: Junio's workflow
The workflow for Junio was badly formatted.

Signed-off-by: Horst H. von Brand <vonbrand@inf.utfsm.cl>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 12:27:03 -07:00
c51901de1d Add example xinetd(8) configuration to Documentation/everyday.txt
Many Linux distributions use xinetd(8), not inetd(8).
Give a sample configuration file.

Signed-off-by: Horst H. von Brand <vonbrand@inf.utfsm.cl>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 12:26:59 -07:00
eff97e3fae read-tree: fix eye-candy.
Anton Blanchard spotted that watching checkout stage of a clone
on a slow terminal takes ages because it forgot to clear the
"once a second happened" flag, so instead of updates the
percentage output for every file it checks out after the first
second has passed.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-05 12:26:53 -07:00
4e2e5647f2 gitview: Add some useful keybindings.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-04 13:29:36 -07:00
b266b123cd Fix earlier mismerges.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-04 00:10:48 -07:00
0e84fb06a1 Merge branch 'new' of git://git.kernel.org/pub/scm/gitk/gitk into next
* 'new' of git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Show branch name(s) as well, if "show nearby tags" is enabled
  gitk: Show nearby tags
  gitk: Add a goto next/previous highlighted commit function
  gitk: Provide ability to highlight based on relationship to selected commit
  gitk: Fix bug in highlight stuff when no line is selected
  gitk: Move "pickaxe" find function to highlight facility
  gitk: Improve the text window search function
  gitk: First cut at a search function in the patch/file display window
  gitk: Highlight paths of interest in tree view as well
  gitk: Highlight entries in the file list as well
  gitk: Make a row of controls for controlling highlighting
2006-06-04 00:02:03 -07:00
f63237a18e Merge branch 'vb/sendemail' into next
* vb/sendemail:
  Cleanup git-send-email.perl:extract_valid_email
  read-tree --reset: update working tree file for conflicted paths.
  Documentation: Spelling fixes
  Builtin git-rev-parse.
  fetch: do not report "same" unless -verbose.
2006-06-04 00:01:52 -07:00
e96fd30553 Cleanup git-send-email.perl:extract_valid_email
- Fix the regular expressions for local addresses
- Fix the fallback regexp for non-local addresses, simplify the logic

Signed-off-by: Horst H. von Brand <vonbrand@inf.utfsm.cl>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-04 00:00:20 -07:00
16a4c6ee0d Merge branch 'lt/tree-2'
* lt/tree-2:
  fetch.c: do not call process_tree() from process_tree().
  tree_entry(): new tree-walking helper function
  adjust to the rebased series by Linus.
  Remove "tree->entries" tree-entry list from tree parser
  Switch "read_tree_recursive()" over to tree-walk functionality
  Make "tree_entry" have a SHA1 instead of a union of object pointers
  Add raw tree buffer info to "struct tree"
  Remove last vestiges of generic tree_entry_list
  Convert fetch.c: process_tree() to raw tree walker
  Convert "mark_tree_uninteresting()" to raw tree walker
  Remove unused "zeropad" entry from tree_list_entry
  fsck-objects: avoid unnecessary tree_entry_list usage
  Remove "tree->entries" tree-entry list from tree parser
  builtin-read-tree.c: avoid tree_entry_list in prime_cache_tree_rec()
  Switch "read_tree_recursive()" over to tree-walk functionality
  Make "tree_entry" have a SHA1 instead of a union of object pointers
  Make "struct tree" contain the pointer to the tree buffer
2006-06-03 23:59:27 -07:00
f0679f474a Merge branch 'sp/reflog'
* sp/reflog:
  fetch.c: do not pass uninitialized lock to unlock_ref().
  Test that git-branch -l works.
  Verify git-commit provides a reflog message.
  Enable ref log creation in git checkout -b.
  Create/delete branch ref logs.
  Include ref log detail in commit, reset, etc.
  Change order of -m option to update-ref.
  Correct force_write bug in refs.c
  Change 'master@noon' syntax to 'master@{noon}'.
  Log ref updates made by fetch.
  Force writing ref if it doesn't exist.
  Added logs/ directory to repository layout.
  General ref log reading improvements.
  Fix ref log parsing so it works properly.
  Support 'master@2 hours ago' syntax
  Log ref updates to logs/refs/<ref>
  Convert update-ref to use ref_lock API.
  Improve abstraction of ref lock/write.
2006-06-03 23:59:03 -07:00
731651fe25 Merge branch 'ff/svnimport'
* ff/svnimport:
  git-svnimport: Improved detection of merges.
2006-06-03 23:58:26 -07:00
b0d6e64629 read-tree --reset: update working tree file for conflicted paths.
The earlier "git reset --hard" simplification stopped removing
leftover working tree files from a failed automerge, when
switching back to the HEAD version that does not have the
paths.

This patch, instead of removing the unmerged paths from the
index, drops them down to stage#0 but marks them with mode=0
(the same "to be deleted" marker we internally use for paths
deleted by the merge).  one_way_merge() function and the
functions it calls already know what to do with them -- if the
tree we are reading has the path the working tree file is
overwritten, and if it doesn't the working tree file is
removed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-03 23:57:41 -07:00
bf41bf2db7 Merge branch 'jc/fmt-patch'
* jc/fmt-patch:
  Update documentation for git-format-patch
  format-patch: resurrect extra headers from config
  format-patch --signoff
2006-06-03 23:57:15 -07:00
abda1ef590 Documentation: Spelling fixes
Signed-off-by: Horst H. von Brand <vonbrand@inf.utfsm.cl>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-03 23:54:55 -07:00
895f10c3b5 Builtin git-rev-parse.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-03 23:45:30 -07:00
ea5aeb07e9 fetch: do not report "same" unless -verbose.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-03 23:44:40 -07:00
ef030b8547 gitk: Show branch name(s) as well, if "show nearby tags" is enabled
This is a small extension to the code that reads the complete commit
graph, to make it compute descendent heads as well as descendent tags.
We don't exclude descendent heads that are descendents of other
descendent heads as we do for tags, since it is useful to know all the
branches that a commit is on.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-06-04 11:50:38 +10:00
b8ab2e177a gitk: Show nearby tags
This adds a feature to the diff display window where it will show
the tags that this commit follows (is a descendent of) and precedes
(is an ancestor of).  Specifically, it will show the tags for all
tagged descendents that are not a descendent of another tagged
descendent of this commit, and the tags for all tagged ancestors
that are not ancestors of another tagged ancestor of this commit.

To do this, gitk reads the complete commit graph using git rev-list
and performs a couple of traversals of the tree.  This is done in
the background, but since it can be time-consuming, there is an option
to turn it off in the `edit preferences' window.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-06-03 19:11:13 +10:00
b9d301bca7 Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Update documentation for git-format-patch
2006-06-02 18:17:58 -07:00
2f164c35fa Merge branch 'ds/doc' into jc/fmt-patch
* ds/doc:
  Update documentation for git-format-patch
  sha1_file: avoid re-preparing duplicate packs
  handle concurrent pruning of packed objects
  http: prevent segfault during curl handle reuse
  Remove possible segfault in http-fetch.
  gitk: show_error fix
  [PATCH] gitk: start-up bugfix
  [PATCH] gitk: Replace "git-" commands with "git "
  [PATCH] gitk: Display commit messages with word wrap
  gitk: Fix bug where page-up/down wouldn't always work properly
  gitk: Fix display of "(...)" for parents/children we haven't drawn
  send-email: only 'require' instead of 'use' Net::SMTP
  Allow multiple -m options to git-commit.
2006-06-02 18:17:35 -07:00
2052d146f6 Update documentation for git-format-patch
[jc: adjusted for recently resurrected features]

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-02 18:17:08 -07:00
1da07343ae Merge branch 'master' into next
* master:
  sha1_file: avoid re-preparing duplicate packs
  handle concurrent pruning of packed objects
2006-06-02 15:24:26 -07:00
0fa5cb0d1e Merge branch 'lt/tree-2' into next
* lt/tree-2:
  fetch.c: do not call process_tree() from process_tree().
2006-06-02 15:24:07 -07:00
6f9012b625 fetch.c: do not call process_tree() from process_tree().
This function reads a freshly fetched tree object, and schedules
the objects pointed by it for further fetching, so doing
lookup_tree() and process_tree() recursively from there does not
make much sense.  We need to use process() on it to make sure we
fetch it first, and leave the recursive processing to later
stages.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-02 15:23:47 -07:00
283d3184df Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  format-patch: resurrect extra headers from config
2006-06-02 13:50:31 -07:00
86f7780c0b sha1_file: avoid re-preparing duplicate packs
When adding packs, skip the pack if we already have it in the packed_git
list. This might happen if we are re-preparing our packs because of a
missing object.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-02 11:09:44 -07:00
637cdd9d1d handle concurrent pruning of packed objects
This patch causes read_sha1_file and sha1_object_info to re-examine the
list of packs if an object cannot be found. It works by re-running
prepare_packed_git() after an object fails to be found.

It does not attempt to clean up the old pack list. Old packs which are in
use can continue to be used (until unused by lru selection).  New packs
are placed at the front of the list and will thus be examined before old
packs.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-02 11:09:38 -07:00
3126262710 Merge branch 'nh/http'
* nh/http:
  http: prevent segfault during curl handle reuse
  Remove possible segfault in http-fetch.
2006-06-02 10:31:15 -07:00
20ff06805c format-patch: resurrect extra headers from config
Once again, if you have

	[format]
		headers = "Origamization: EvilEmpire\n"

format-patch will add these headers just after the "Subject:" line.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-02 07:30:55 -07:00
423a15c849 Merge branch 'master' into next
* master:
  gitk: show_error fix
  [PATCH] gitk: start-up bugfix
  [PATCH] gitk: Replace "git-" commands with "git "
  [PATCH] gitk: Display commit messages with word wrap
  gitk: Fix bug where page-up/down wouldn't always work properly
  gitk: Fix display of "(...)" for parents/children we haven't drawn
2006-05-31 23:26:45 -07:00
0825de892f Merge git://git.kernel.org/pub/scm/gitk/gitk
* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: show_error fix
  [PATCH] gitk: start-up bugfix
  [PATCH] gitk: Replace "git-" commands with "git "
  [PATCH] gitk: Display commit messages with word wrap
  gitk: Fix bug where page-up/down wouldn't always work properly
  gitk: Fix display of "(...)" for parents/children we haven't drawn
2006-05-31 22:27:26 -07:00
5f625247ee Merge branch 'master' into next
* master:
  send-email: only 'require' instead of 'use' Net::SMTP
  Allow multiple -m options to git-commit.
2006-05-31 18:24:45 -07:00
5ff6a32690 Merge branch 'nh/http' into next
* nh/http:
  http: prevent segfault during curl handle reuse
2006-05-31 18:24:19 -07:00
9094950d73 http: prevent segfault during curl handle reuse
If a curl handle is configured with special options, they may reference
information that is freed after the request is complete which can cause
a segfault if the curl handle is reused for a different type of request.

This patch resets these options to a safe state when a transfer slot is
assigned to a new request.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-31 18:24:05 -07:00
87840620fd send-email: only 'require' instead of 'use' Net::SMTP
This was proposed by Eric Wong and fixes the test. (Of course, git-send-email
does not work, if there is no Net::SMTP here, but it will say what is wrong
when you actually try to use send-email.)

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-31 16:17:15 -07:00
6891281cfa Allow multiple -m options to git-commit.
I find it very convenient to be able to supply multiple paragraphs
of text on the command line with a single git-commit call.  This
change permits multiple -m/--message type options to be supplied
to git-commit with each message being added as its own paragraph
of text in the commit message.

The -m option is still not permitted with -c/-C/-F nor are multiple
occurrences of these options permitted.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-31 15:40:47 -07:00
b0a7ca5ee0 Merge branch 'sp/reflog' into next
* sp/reflog:
  fetch.c: do not pass uninitialized lock to unlock_ref().
2006-05-31 15:23:54 -07:00
99bd0f5558 fetch.c: do not pass uninitialized lock to unlock_ref().
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-31 15:23:44 -07:00
a25963bb3f Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  format-patch --signoff
2006-05-31 15:14:58 -07:00
cf2251b604 format-patch --signoff
This resurrects --signoff option to format-patch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-31 15:11:49 -07:00
100c25f3cf Merge branch 'ff/svnimport' into next
* ff/svnimport:
  git-svnimport: Improved detection of merges.
  Improved pack format documentation.
  git_exec_path, execv_git_cmd: ignore empty environment variables
  execv_git_cmd: Fix stack buffer overflow.
  Fixed Cygwin CR-munging problem in mailsplit
2006-05-31 14:26:39 -07:00
422dfaf079 Merge branch 'lt/tree-2' into next
* lt/tree-2:
  tree_entry(): new tree-walking helper function
2006-05-31 14:23:58 -07:00
65160b8b04 git-svnimport: Improved detection of merges.
The regexes detecting merges (while still relying on the commit messages,
though) have been improved to catch saner (and hopefully more) messages. The
old regex was so generic that it often matched something else and missed the
actual merge-message.
Also, the regex given with the `-M' commandline-option is checked first:
Explicitely given regexes should be considered better than the builtin ones,
and should therefore be given a chance to match a message first.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-31 14:22:28 -07:00
1361fa3e49 Improved pack format documentation.
While trying to implement a pack reader in Java I was mislead by
some facts listed in this documentation as well as found a few
details to be missing about the pack header.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-30 23:09:02 -07:00
4c068a9831 tree_entry(): new tree-walking helper function
This adds a "tree_entry()" function that combines the common operation of
doing a "tree_entry_extract()" + "update_tree_entry()".

It also has a simplified calling convention, designed for simple loops
that traverse over a whole tree: the arguments are pointers to the tree
descriptor and a name_entry structure to fill in, and it returns a boolean
"true" if there was an entry left to be gotten in the tree.

This allows tree traversal with

	struct tree_desc desc;
	struct name_entry entry;

	desc.buf = tree->buffer;
	desc.size = tree->size;
	while (tree_entry(&desc, &entry) {
		... use "entry.{path, sha1, mode, pathlen}" ...
	}

which is not only shorter than writing it out in full, it's hopefully less
error prone too.

[ It's actually a tad faster too - we don't need to recalculate the entry
  pathlength in both extract and update, but need to do it only once.
  Also, some callers can avoid doing a "strlen()" on the result, since
  it's returned as part of the name_entry structure.

  However, by now we're talking just 1% speedup on "git-rev-list --objects
  --all", and we're definitely at the point where tree walking is no
  longer the issue any more. ]

NOTE! Not everybody wants to use this new helper function, since some of
the tree walkers very much on purpose do the descriptor update separately
from the entry extraction. So the "extract + update" sequence still
remains as the core sequence, this is just a simplified interface.

We should probably add a silly two-line inline helper function for
initializing the descriptor from the "struct tree" too, just to cut down
on the noise from that common "desc" initializer.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-30 23:03:01 -07:00
2b6016263c git_exec_path, execv_git_cmd: ignore empty environment variables
Ignoring empty environment variables is good common practice.
Ignoring --exec-path with empty argument won't harm, too:
if user means current directory, there is a "--exec-path=."

Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-30 21:49:01 -07:00
d685990101 execv_git_cmd: Fix stack buffer overflow.
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-30 21:47:29 -07:00
347f1d2608 Fixed Cygwin CR-munging problem in mailsplit
Do not open mailbox file as fopen(..., "rt")
as this strips CR characters from the diff,
thus breaking the patch context for changes
in CRLF files.

Signed-off-by: Salikh Zakirov <Salikh.Zakirov@Intel.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-30 21:46:03 -07:00
1130ef362f v267 2006-05-30 14:41:04 +02:00
bfb689bcf3 prepend '--' to filelist when calling git-diff-tree 2006-05-30 14:40:10 +02:00
96535e615d Merge branch 'master' into new
Conflicts:

	gitk
2006-05-30 21:35:07 +10:00
4e7d677949 gitk: Add a goto next/previous highlighted commit function
This is invoked by shift-down/shift-up.  It relies on a patch to
git-diff-tree that has recently gone into the git repository, commit
ID e0c97ca6 (without this it may just sit there doing waiting for
git-diff-tree when looking for the next/previous highlight).

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-30 21:33:07 +10:00
481176f752 Merge branch 'ew/tests'
* ew/tests:
  t6000lib: workaround a possible dash bug
  t5500-fetch-pack: remove local (bashism) usage.
  tests: Remove heredoc usage inside quotes
  t3300-funny-names: shell portability fixes
2006-05-30 01:48:54 -07:00
62b693a070 Merge branch 'master' into next
* master:
  send-email: do not pass bogus address to local sendmail binary
  Add a basic test case for git send-email, and fix some real bugs discovered.
  Fix a bug in email extraction used in git-send-email.
  Add support for --bcc to git-send-email.
  git-send-email: Add References: headers to emails, in addition to In-Reply-To:
  git-clean fails on files beginning with a dash
  git-svn: remove assertion that broke with older versions of svn
  git-svn: t0001: workaround a heredoc bug in old versions of dash
  Documentation: fix a tutorial-2 typo
  Documentation: retitle the git-core tutorial
  documentation: add brief mention of cat-file to tutorial part I
  documentation: mention gitk font adjustment in tutorial
  Fix some documentation typoes
2006-05-30 00:09:59 -07:00
2186d566a6 send-email: do not pass bogus address to local sendmail binary
This makes t9001 test happy.  Also fixes the warning on
uninitialized $references variable again.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-30 00:09:36 -07:00
ce903018f1 Add a basic test case for git send-email, and fix some real bugs discovered.
Signed-off-by: Ryan Anderson <rda@google.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:15:37 -07:00
8baf06a03a Fix a bug in email extraction used in git-send-email.
(Also, kill off an accidentally created warning.)

Signed-off-by: Ryan Anderson <rda@google.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:15:37 -07:00
5806324589 Add support for --bcc to git-send-email.
Signed-off-by: Ryan Anderson <rda@google.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:15:37 -07:00
7ccf79274c git-send-email: Add References: headers to emails, in addition to In-Reply-To:
Signed-off-by: Ryan Anderson <rda@google.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:15:36 -07:00
7484529d7f git-clean fails on files beginning with a dash
Reproducible with:

$ git init-db
$ echo "some text" >-file
$ git clean
Removing -file
rm: invalid option -- l
Try `rm --help' for more information.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:51 -07:00
037b048ece git-svn: remove assertion that broke with older versions of svn
svn < 1.3.x would display changes to keywords lines as modified
if they aren't expanded in the working copy.  We already check
for changes against the git tree here, so checking against the
svn one is probably excessive.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:50 -07:00
3c4c7351c0 git-svn: t0001: workaround a heredoc bug in old versions of dash
The dash installed on my Debian Sarge boxes don't seem to like
<<'' as a heredoc starter.  Recent versions of dash do not need
this fix.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:49 -07:00
a746f688f1 Documentation: fix a tutorial-2 typo
Fix a typo.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:48 -07:00
62109cd3a8 Documentation: retitle the git-core tutorial
Give the git-core tutorial a name that better reflects its intended
audience.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:46 -07:00
38573864f8 documentation: add brief mention of cat-file to tutorial part I
I'd rather avoid git cat-file so early on, but the

	git-cat-file -p old-commit:/path/to/file

trick is too useful....

Also fix a nearby typo while we're at it.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:45 -07:00
2be1bc48ff documentation: mention gitk font adjustment in tutorial
Kind of silly, but the font I get by default in gitk makes it mostly
unusable for me, so this is the first thing I'd want to know about.
(But maybe there's a better suggestion than just Ctrl-='ing until
satisfied.)

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:44 -07:00
7872b18895 Fix some documentation typoes
Fix some typoes in Documentation/everyday.txt

Signed-off-by:  Horst H. von Brand <vonbrand@inf.utfsm.cl>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 23:14:40 -07:00
5029f6458f Merge branch 'jc/lt-tree-n-cache-tree' into next
* jc/lt-tree-n-cache-tree:
  adjust to the rebased series by Linus.
  Remove last vestiges of generic tree_entry_list
  Convert fetch.c: process_tree() to raw tree walker
  Convert "mark_tree_uninteresting()" to raw tree walker
  Remove unused "zeropad" entry from tree_list_entry
  fsck-objects: avoid unnecessary tree_entry_list usage
  Remove "tree->entries" tree-entry list from tree parser
  builtin-read-tree.c: avoid tree_entry_list in prime_cache_tree_rec()
  Switch "read_tree_recursive()" over to tree-walk functionality
  Make "tree_entry" have a SHA1 instead of a union of object pointers
  Make "struct tree" contain the pointer to the tree buffer
  Make git-diff-tree indicate when it flushes
  Remove unnecessary output from t3600-rm.
2006-05-29 22:16:56 -07:00
47df096f25 Merge branch 'jc/lt-tree-n-cache-tree' into lt/tree-2
* jc/lt-tree-n-cache-tree:
  adjust to the rebased series by Linus.
  Remove "tree->entries" tree-entry list from tree parser
  Switch "read_tree_recursive()" over to tree-walk functionality
  Make "tree_entry" have a SHA1 instead of a union of object pointers
  Add raw tree buffer info to "struct tree"

This results as if an "ours" merge absorbed the previous "next"
branch change into the 10-patch series, but it really is a result
of an honest merge.

nothing to commit
2006-05-29 22:13:09 -07:00
e76abd7014 adjust to the rebased series by Linus.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 22:00:21 -07:00
15b5536ee4 Remove last vestiges of generic tree_entry_list
The old tree_entry_list is dead, long live the unified single tree
parser.

Yes, we now still have a compatibility function to create a bogus
tree_entry_list in builtin-read-tree.c, but that is now entirely local
to that very messy piece of code.

I'd love to clean read-tree.c up too, but I'm too scared right now, so
the best I can do is to just contain the damage, and try to make sure
that no new users of the tree_entry_list sprout up by not having it as
an exported interface any more.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:08:37 -07:00
1bc995a392 Convert fetch.c: process_tree() to raw tree walker
This leaves only the horrid code in builtin-read-tree.c using the old
interface. Some day I will gather the strength to tackle that one too.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:08:33 -07:00
f75e53edb3 Convert "mark_tree_uninteresting()" to raw tree walker
Not very many users to go..

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:08:29 -07:00
3bc1eca91e Remove unused "zeropad" entry from tree_list_entry
That was a hack, only needed because 'git fsck-objects' didn't look at
the raw tree format.  Now that fsck traverses the tree itself, we can
drop it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:08:25 -07:00
e9a95bef7f fsck-objects: avoid unnecessary tree_entry_list usage
Prime example of where the raw tree parser is easier for everybody.

[jc: "Aieee" one-liner fix from the list applied. ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:08:21 -07:00
2d9c58c69d Remove "tree->entries" tree-entry list from tree parser
Instead, just use the tree buffer directly, and use the tree-walk
infrastructure to walk the buffers instead of the tree-entry list.

The tree-entry list is inefficient, and generates tons of small
allocations for no good reason. The tree-walk infrastructure is
generally no harder to use than following a linked list, and allows
us to do most tree parsing in-place.

Some programs still use the old tree-entry lists, and are a bit
painful to convert without major surgery. For them we have a helper
function that creates a temporary tree-entry list on demand.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:06:59 -07:00
1ccf5a345a builtin-read-tree.c: avoid tree_entry_list in prime_cache_tree_rec()
Use the raw tree walker instead.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:05:14 -07:00
0790a42a50 Switch "read_tree_recursive()" over to tree-walk functionality
Don't use the tree_entry list any more.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:05:11 -07:00
3a7c352bd0 Make "tree_entry" have a SHA1 instead of a union of object pointers
This is preparatory work for further cleanups, where we try to make
tree_entry look more like the more efficient tree-walk descriptor.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:05:06 -07:00
136f2e548a Make "struct tree" contain the pointer to the tree buffer
This allows us to avoid allocating information for names etc, because
we can just use the information from the tree buffer directly.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:05:02 -07:00
e0c97ca63d Make git-diff-tree indicate when it flushes
There are times when gitk needs to know that the commits it has sent
to git-diff-tree --stdin did not match, and it needs to know in a
timely fashion even if none of them match.  At the moment,
git-diff-tree outputs nothing for non-matching commits, so it is
impossible for gitk to distinguish between git-diff-tree being slow
and git-diff-tree saying no.

This makes git-diff-tree flush its output and echo back the
input line when it is not a valid-looking object name.  Gitk, or
other users of git-diff-tree --stdin, can use a blank line or
any other "marker line" to indicate that git-diff-tree has
processed all the commits on its input up to the echoed back
marker line, and any commits that have not been output do not
match.

[jc: re-done after a couple of back-and-forth discussion on the list.]

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 19:04:19 -07:00
22669a045a Remove unnecessary output from t3600-rm.
Moved the setup commands into test_expect_success blocks so their
output is hidden unless -v is used.  This makes the test suite look
a little cleaner when the rm test-file setup step fails (and was
expected to fail for most cases).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-29 11:31:58 -07:00
164ff275ad gitk: Provide ability to highlight based on relationship to selected commit
This provides a way to highlight commits that are, or are not,
descendents or ancestors of the currently selected commit.  It's
still rough around the edges but seems to be useful even so.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-29 19:50:02 +10:00
52bc0e294c Merge branch 'jc/lt-tree-n-cache-tree' into next
* jc/lt-tree-n-cache-tree:
  Remove "tree->entries" tree-entry list from tree parser
  Switch "read_tree_recursive()" over to tree-walk functionality
  Make "tree_entry" have a SHA1 instead of a union of object pointers
  Add raw tree buffer info to "struct tree"
  Don't use "sscanf()" for tree mode scanning
  git-fetch: avoid using "case ... in (arm)"
2006-05-28 23:05:02 -07:00
cd01d9445d Merge branch 'lt/apply'
* lt/apply:
  apply: force matching at the beginning.
  Add a test-case for git-apply trying to add an ending line
  apply: treat EOF as proper context.
2006-05-28 23:00:50 -07:00
3f69d405d7 Merge branch 'jc/cache-tree'
* jc/cache-tree: (26 commits)
  builtin-rm: squelch compiler warnings.
  git-write-tree writes garbage on sparc64
  Fix crash when reading the empty tree
  fsck-objects: do not segfault on missing tree in cache-tree
  cache-tree: a bit more debugging support.
  read-tree: invalidate cache-tree entry when a new index entry is added.
  Fix test-dump-cache-tree in one-tree disappeared case.
  fsck-objects: mark objects reachable from cache-tree
  cache-tree: replace a sscanf() by two strtol() calls
  cache-tree.c: typefix
  test-dump-cache-tree: validate the cached data as well.
  cache_tree_update: give an option to update cache-tree only.
  read-tree: teach 1-way merege and plain read to prime cache-tree.
  read-tree: teach 1 and 2 way merges about cache-tree.
  update-index: when --unresolve, smudge the relevant cache-tree entries.
  test-dump-cache-tree: report number of subtrees.
  cache-tree: sort the subtree entries.
  Teach fsck-objects about cache-tree.
  index: make the index file format extensible.
  cache-tree: protect against "git prune".
  ...

Conflicts:

	Makefile, builtin.h, git.c: resolved the same way as in next.
2006-05-28 22:57:47 -07:00
0a2586c807 Merge branch 'lt/tree' into jc/lt-tree-n-cache-tree
* lt/tree: (98 commits)
  Remove "tree->entries" tree-entry list from tree parser
  Switch "read_tree_recursive()" over to tree-walk functionality
  Make "tree_entry" have a SHA1 instead of a union of object pointers
  Add raw tree buffer info to "struct tree"
  Don't use "sscanf()" for tree mode scanning
  git-fetch: avoid using "case ... in (arm)"
  mailinfo: skip bogus UNIX From line inside body
  mailinfo: More carefully parse header lines in read_one_header_line()
  Allow in body headers beyond the in body header prefix.
  More accurately detect header lines in read_one_header_line
  In handle_body only read a line if we don't already have one.
  Refactor commit messge handling.
  Move B and Q decoding into check header.
  Make read_one_header_line return a flag not a length.
  Fix memory leak in "git rev-list --objects"
  gitview: Move the console error messages to message dialog
  gitview: Add key binding for F5.
  Let git-clone to pass --template=dir option to git-init-db.
  Make cvsexportcommit create parent directories as needed.
  Document current cvsexportcommit limitations.
  ...

Conflicts:

	Makefile, builtin.h, git.c are trivially resolved.
	builtin-read-tree.c needed adjustment for the tree
	parser change.
2006-05-28 22:47:53 -07:00
7d55561986 Merge branch 'jc/dirwalk-n-cache-tree' into jc/cache-tree
* jc/dirwalk-n-cache-tree: (212 commits)
  builtin-rm: squelch compiler warnings.
  Add builtin "git rm" command
  Move pathspec matching from builtin-add.c into dir.c
  Prevent bogus paths from being added to the index.
  builtin-add: fix unmatched pathspec warnings.
  Remove old "git-add.sh" remnants
  builtin-add: warn on unmatched pathspecs
  Do "git add" as a builtin
  Clean up git-ls-file directory walking library interface
  libify git-ls-files directory traversal
  Add a conversion tool to migrate remote information into the config
  fetch, pull: ask config for remote information
  Fix build procedure for builtin-init-db
  read-tree -m -u: do not overwrite or remove untracked working tree files.
  apply --cached: do not check newly added file in the working tree
  Implement a --dry-run option to git-quiltimport
  Implement git-quiltimport
  Revert "builtin-grep: workaround for non GNU grep."
  builtin-grep: workaround for non GNU grep.
  builtin-grep: workaround for non GNU grep.
  ...
2006-05-28 22:34:34 -07:00
097dc3d8c3 Remove "tree->entries" tree-entry list from tree parser
This finally removes the tree-entry list from "struct tree", since most of
the users can just use the tree-walk infrastructure to walk the raw tree
buffers instead of the tree-entry list.

The tree-entry list is inefficient, and generates tons of small
allocations for no good reason. The tree-walk infrastructure is generally
no harder to use than following a linked list, and allows us to do most
tree parsing in-place.

Some programs still use the old tree-entry lists, and are a bit painful to
convert without major surgery. For them we have a helper function that
creates a temporary tree-entry list on demand. We can convert those too
eventually, but with this they no longer affect any users who don't need
the explicit lists.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 19:40:18 -07:00
2522c13244 Switch "read_tree_recursive()" over to tree-walk functionality
Don't use the tree_entry list, it really had no major reason not to just
walk the raw tree instead.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 19:40:18 -07:00
a755dfe45c Make "tree_entry" have a SHA1 instead of a union of object pointers
This is preparatory work for further cleanups, where we try to make
tree_entry look more like the more efficient tree-walk descriptor.

Instead of having a union of pointers to blob/tree/objects, this just
makes "struct tree_entry" have the raw SHA1, and makes all the users use
that instead (often that implies adding a "lookup_tree(..)" on the sha1,
but sometimes the user just wanted the SHA1 in the first place, and it
just avoids an unnecessary indirection).

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 19:40:18 -07:00
d2eafb7661 Add raw tree buffer info to "struct tree"
This allows us to avoid allocating information for names etc, because
we can just use the information from the tree buffer directly.

We still keep the old "tree_entry_list" in struct tree as well, so old
users aren't affected, apart from the fact that the allocations are
different (if you free a tree entry, you should no longer free the name
allocation for it, since it's allocated as part of "tree->buffer")

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 19:40:18 -07:00
7d65848afd Don't use "sscanf()" for tree mode scanning
Doing an oprofile run on the result of my git rev-list memory leak fixes
and tree parsing cleanups, I was surprised by the third-highest entry
being

	samples  %        image name               app name                 symbol name
	179751    2.7163  libc-2.4.so              libc-2.4.so              _IO_vfscanf@@GLIBC_2.4

where that 2.7% is actually more than 5% of one CPU, because this was run
on a dual CPU setup with the other CPU just being idle.

That seems to all be from the use of 'sscanf(tree, "%o", &mode)' for the
tree buffer parsing.

So do the trivial octal parsing by hand, which also gives us where the
first space in the string is (and thus where the pathname starts) so we
can get rid of the "strchr(tree, ' ')" call too.

This brings the "git rev-list --all --objects" time down from 63 seconds
to 55 seconds on the historical kernel archive for me, so it's quite
noticeable - tree parsing is a lot of what we end up doing when following
all the objects.

[ I also see a 5% speedup on a full "git fsck-objects" on the current
  kernel archive, so that sscanf() really does seem to have hurt our
  performance by a surprising amount ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 19:39:49 -07:00
878ccb2694 git-fetch: avoid using "case ... in (arm)"
NetBSD ash chokes on the optional open parenthesis for case arms.  Inside
$(command substitution), however, bash barfs without.  So adjust things
accordingly.

Originally pointed out by Dennis Stosberg.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 19:24:28 -07:00
47e68cd803 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  git-write-tree writes garbage on sparc64
2006-05-28 13:39:51 -07:00
15cee32e2c Merge branch 'master' into next
* master:
  Fix memory leak in "git rev-list --objects"
  gitview: Move the console error messages to message dialog
  gitview: Add key binding for F5.
  Let git-clone to pass --template=dir option to git-init-db.
  Make cvsexportcommit create parent directories as needed.
  Document current cvsexportcommit limitations.
  Do not call 'cmp' with non-existant -q flag.
  Fix "--abbrev=xyz" for revision listing
  t1002: use -U0 instead of --unified=0
  format-patch: -n and -k are mutually exclusive.
2006-05-28 13:39:45 -07:00
d177e58425 Merge branch 'jc/mailinfo'
* jc/mailinfo:
  mailinfo: skip bogus UNIX From line inside body
2006-05-28 13:39:05 -07:00
51937e533a Merge branch 'eb/mailinfo'
* eb/mailinfo:
  mailinfo: More carefully parse header lines in read_one_header_line()
  Allow in body headers beyond the in body header prefix.
  More accurately detect header lines in read_one_header_line
  In handle_body only read a line if we don't already have one.
  Refactor commit messge handling.
  Move B and Q decoding into check header.
  Make read_one_header_line return a flag not a length.
2006-05-28 13:36:37 -07:00
ac58c7b18e git-write-tree writes garbage on sparc64
In the "next" branch, write_index_ext_header() writes garbage on a
64-bit big-endian machine; the written index file will be unreadable.
I noticed this on NetBSD/sparc64. Reproducible with:

$ git init-db
$ :>file
$ git-update-index --add file
$ git-write-tree
$ git-update-index
error: index uses  extension, which we do not understand
fatal: index file corrupt

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 13:31:50 -07:00
91b452cba9 Fix memory leak in "git rev-list --objects"
Martin Langhoff points out that "git repack -a" ends up using up a lot of
memory for big archives, and that git cvsimport probably should do only
incremental repacks in order to avoid having repacking flush all the
caches.

The big majority of the memory usage of repacking is from git rev-list
tracking all objects, and this patch should go a long way in avoiding the
excessive memory usage: the bulk of it was due to the object names being
leaked from the tree parser.

For the historic Linux kernel archive, this simple patch does:

Before:
	/usr/bin/time git-rev-list --all --objects > /dev/null

	72.45user 0.82system 1:13.55elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+125376minor)pagefaults 0swaps

After:
	/usr/bin/time git-rev-list --all --objects > /dev/null

	75.22user 0.48system 1:16.34elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+43921minor)pagefaults 0swaps

where we do end up wasting a bit of time on some extra strdup()s (which
could be avoided, but that would require tracking where the pathnames came
from), but we avoid a lot of memory usage.

Minor page faults track maximum RSS very closely (each page fault maps in
one page into memory), so the reduction from 125376 page faults to 43921
means a rough reduction of VM footprint from almost half a gigabyte to
about a third of that. Those numbers were also double-checked by looking
at "top" while the process was running.

(Side note: at least part of the remaining VM footprint is the mapping of
the 177MB pack-file, so the remaining memory use is at least partly "well
behaved" from a project caching perspective).

For the current git archive itself, the memory usage for a "--all
--objects" rev-list invocation dropped from 7128 pages to 2318 (27MB to
9MB), so the reduction seems to hold for much smaller projects too.

For regular "git-rev-list" usage (ie without the "--objects" flag) this
patch has no impact.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 13:27:51 -07:00
756944350d gitview: Move the console error messages to message dialog
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 10:53:08 -07:00
034016391c gitview: Add key binding for F5.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 10:52:38 -07:00
a57c8bac00 Let git-clone to pass --template=dir option to git-init-db.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 10:14:38 -07:00
3f0f756b83 Make cvsexportcommit create parent directories as needed.
This is a quick port of my initial patch for 1.0.7, that I had forgotten to
post.  Possibly needs some testing before applying to master.

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 09:46:57 -07:00
0d71b31a5e Document current cvsexportcommit limitations.
Since there is no bugtracker that I know of, let's just use the scripts
themselves to document their limitations.

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 09:46:50 -07:00
ff4a9ceb97 Do not call 'cmp' with non-existant -q flag.
I cannot find when that flag was removed if it ever existed, I can find
nothing about it in the ChangeLog and NEWS file of GNU diff.  The current
flag is -s aka --quiet aka --silent, so let's use -s, assuming it is a
portable flag.  Feel free to lart me with a POSIX bible if needed.

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 09:46:07 -07:00
508d9e372e Fix "--abbrev=xyz" for revision listing
The revision argument parsing was happily parsing "--abbrev", but it
didn't parse "--abbrev=<n>".

Which was hidden by the fact that the diff options _would_ parse
--abbrev=<n>, so it would actually silently parse it, it just
wouldn't use it for the same things that a plain "--abbrev" was
used for.

Which seems a bit insane.

With this patch, if you do "git log --abbrev=10" it will abbreviate the
merge parent commit ID's to ten hex characters, which was probably what
you expected.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 09:45:16 -07:00
c928c67d67 t1002: use -U0 instead of --unified=0
Using "-U0" is definitely more portable than using "--unified=0",
so we should do that regardless.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 09:43:18 -07:00
63b398a428 format-patch: -n and -k are mutually exclusive.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-28 09:23:29 -07:00
2a0a1398ff Merge branch 'master' into next
* master:
  Call builtin ls-tree in git-cat-file -p
  built-in format-patch: various fixups.
  Add instructions to commit template.
2006-05-26 16:36:20 -07:00
b931aa5a48 Call builtin ls-tree in git-cat-file -p
Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-26 11:36:56 -07:00
add5c8a562 built-in format-patch: various fixups.
- The --start-number handling introduced breakage in the normal
   code path.  It started numbering at 0 when not --numbered,
   for example.

 - When generating one file per patch, we needlessly added an
   extra blank line in front for second and subsequent files.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-26 11:30:49 -07:00
e54be9e30f gitk: show_error fix
Bug noted by Junio C Hamano: show_error can be passed "." (root
window) as its $w argument, but appending ".m" and ".ok" results in
creating "..m" and "..ok" as window paths, which were invalid.
This fixes it in a slightly different way from Junio's patch, though.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-26 22:34:30 +10:00
b5e096337c [PATCH] gitk: start-up bugfix
The code to extract a message part from the error message was
not passing the error message to [string range], and resulted
in the show_error not getting called.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-26 22:25:26 +10:00
8974c6f93e [PATCH] gitk: Replace "git-" commands with "git "
git-* commands work only if gitexecdir is in PATH.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-26 22:25:26 +10:00
5864c08f89 gitk: Fix bug in highlight stuff when no line is selected
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-26 22:22:48 +10:00
88a1531435 Add instructions to commit template.
New users can be irritated by the git status text in their editor.
Let's give them a short help.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-26 01:55:01 -07:00
3c38f60c33 Merge branch 'eb/mailinfo' into next
* eb/mailinfo:
  mailinfo: More carefully parse header lines in read_one_header_line()
2006-05-26 00:51:05 -07:00
3208ec9abd Merge branch 'ew/tests' into next
* ew/tests:
  t6000lib: workaround a possible dash bug
  t5500-fetch-pack: remove local (bashism) usage.
  tests: Remove heredoc usage inside quotes
  t3300-funny-names: shell portability fixes
  git-format-patch --start-number <n>
  Don't write directly to a make target ($@).
  bogus "fatal: Not a git repository"
  Documentation/Makefile: remove extra /
  cvsimport: avoid "use" with :tag
2006-05-26 00:51:01 -07:00
ef29c11702 mailinfo: More carefully parse header lines in read_one_header_line()
We exited prematurely from header parsing loop when the header
field did not have a space after the colon but we insisted on
it, and we got the check wrong because we forgot that we strip
the trailing whitespace before we do the check.

The space after the colon is not even required by RFC2822, so
stop requiring it.  While we are at it, the header line is
specified to be more strict than "anything with a colon in it"
(there must be one or more characters before the colon, and they
must not be controls, SP or non US-ASCII), so implement that
check as well, lest we mistakenly think something like:

	Bogus not a header line: this is not.

as a header line.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-26 00:49:36 -07:00
933e4f090d t6000lib: workaround a possible dash bug
pdksh doesn't need this patch, of course bash works fine since
that what most users use.

Normally, 'var=val command' seems to work fine with dash, but
perhaps there's something weird going on with "$@".  dash is
pretty widespread, so it'll be good to support this even though
it does seem like a bug in dash.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 23:53:31 -07:00
1010437d51 t5500-fetch-pack: remove local (bashism) usage.
None of the variables seem to conflict, so local was unnecessary.

Also replaced ${var:pos:len} with the sed equivalent.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 23:53:31 -07:00
c7053aa88f tests: Remove heredoc usage inside quotes
The use of heredoc inside quoted strings doesn't seem to be
supported by dash.  pdksh seems to handle it fine, however.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 23:53:31 -07:00
003d6ddaf4 t3300-funny-names: shell portability fixes
echo isn't remotely standardized for handling backslashes,
so cat + heredoc seems better

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 23:53:31 -07:00
fa0f02dfa1 git-format-patch --start-number <n>
Since the "a..b c..d" syntax is interpreted as "b ^a d ^c" as other
range-ish commands, if you want to format a..b and then c..d and end
up with files consecutively numbered, the second run needs to be able
to tell the command what number to start from.

This does not imply --numbered (which gives [PATCH n/m] to the subject).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 23:19:35 -07:00
fc36f6a6c9 Don't write directly to a make target ($@).
Otherwise, if make is suspended, or killed with prejudice, or if the
system crashes, you could be left with an up-to-date, yet corrupt,
generated file.

I left off the `clean' addition, because I believe "make clean" should
not remove wildcard patterns like "*+", on the off-chance that someone
uses names like that for files they care about.  Besides, in practice,
those temporary files are left behind so rarely that they're not a bother,
and they're removed again as part of the next build.

[jc: sign-off?]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 22:57:06 -07:00
4d599e6bb4 bogus "fatal: Not a git repository"
I was just testing that "git ls-remote" change by Junio, and when you're
not in a git repository, it gives this totally bogus warning. The _target_
obviously has to be a git repository, but there's no reason why you'd have
to be in a local git repo when doing an ls-remote.

The reason is commit 73136b2e8a by Dscho: it
adds calls to git-repo-config in git-parse-remote.sh to get the remote
shorthands etc.

Now, either we should just hide and ignore the error from git-repo-config
(probably bad, because some errors _are_ valid - like git-repo-config
failing due to bad syntax in the config file), or we should just make
git-repo-config quietly handle the case of not being in a git repository.

This does the latter: just quietly accepting (and doing nothing - trying
to set a value will result in the lock-file failing) our lot in life
sounds better than dying with a bogus error message.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Acked-By: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 22:55:24 -07:00
c53603249c Documentation/Makefile: remove extra /
As both DESTDIR and the prefix are supposed to be absolute pathnames
they can simply be concatenated without an extra / (like in the main Makefile).
The extra slash may even break installation on Windows.

[jc: adjusted an earlier workaround for this problem in the dist-doc
 target in the main Makefile as well. ]

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 22:48:45 -07:00
60f7a7dc49 gitk: Move "pickaxe" find function to highlight facility
This removes the "Files" and "Pickaxe" parts of the "Find" function,
so Find is now just about searching the commit data.  We now highlight
the commits that match the Find string (without having to press Find),
and have a drop-down menu for selecting whether the git-diff-tree based
highlighting is done on paths or on adding/removing a given string.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-26 10:43:47 +10:00
1902c2705e gitk: Improve the text window search function
This makes it work a bit more smoothly, and adds a reverse-search
function, for which I stole the ^R binding from the find function.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-25 21:25:13 +10:00
e49289dfb7 cvsimport: avoid "use" with :tag
Avoid "use POSIX qw(strftime dup2 :errno_h)"; it was reported
that a Perl installations on Mandrake 9.1 did not like it, even
though it understood "use POSIX qw(:errno_h)".  Funny.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-25 00:18:42 -07:00
f579d3c2b8 Merge branch 'sp/reflog' into next
* sp/reflog:
  Test that git-branch -l works.
  Verify git-commit provides a reflog message.
2006-05-24 22:32:44 -07:00
84138845c5 Merge branch 'jc/fetchupload' into next
* jc/fetchupload:
  fetch-pack: give up after getting too many "ack continue"
  cat-file: document -p option
  Built git-upload-tar should be ignored.
  ls-remote: fix rsync:// to report HEAD
2006-05-24 22:32:38 -07:00
f061e5fdd6 fetch-pack: give up after getting too many "ack continue"
If your repository have more roots than the remote repository
you ask an object for, the remote upload-pack keeps responding
"ack continue" until it fills up its received-have buffer
(currently 256 entries).  Usually this is not a problem because
the requester stops traversing the ancestry chain from the commit
it gets "ack continue" for, but this mechanism does not work as
a roadblock when it traverses down the path to the root the
other side does not have.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 22:30:56 -07:00
ed90cbf5f6 cat-file: document -p option
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 22:29:23 -07:00
d7fb7a373a Test that git-branch -l works.
If the user supplies -l to git-branch when creating a new branch
then the new branch's log should be created automatically and the
branch creation should be logged in that log.

Further if a branch is being deleted and it had a log then also
verify that the log was deleted.

Test git-checkout -b foo -l for creating a new branch foo with a
log and checking out that branch.

Fixed git-checkout -b foo -l as the branch variable name was
incorrect in the script.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 22:26:47 -07:00
9c7466fa24 Verify git-commit provides a reflog message.
The reflog message from git-commit should include the first line
of the commit message as supplied by the user.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 22:25:49 -07:00
4acdeafe5e Built git-upload-tar should be ignored.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 22:14:29 -07:00
e686eba41f ls-remote: fix rsync:// to report HEAD
This prevented recent git-clone from checking out the working
tree files in the cloned repository.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 21:36:14 -07:00
4feb5e8372 Merge branch 'sp/reflog' into next
* sp/reflog:
  fetch.c: remove an unused variable and dead code.
2006-05-24 16:51:09 -07:00
a5c8a98ca7 Merge branch 'master' into sp/reflog
* master: (90 commits)
  fetch.c: remove an unused variable and dead code.
  Clean up sha1 file writing
  Builtin git-cat-file
  builtin format-patch: squelch content-type for 7-bit ASCII
  CMIT_FMT_EMAIL: Q-encode Subject: and display-name part of From: fields.
  add more informative error messages to git-mktag
  remove the artificial restriction tagsize < 8kb
  git-rebase: use canonical A..B syntax to format-patch
  git-format-patch: now built-in.
  fmt-patch: Support --attach
  fmt-patch: understand old <his> notation
  Teach fmt-patch about --keep-subject
  Teach fmt-patch about --numbered
  fmt-patch: implement -o <dir>
  fmt-patch: output file names to stdout
  Teach fmt-patch to write individual files.
  built-in tar-tree and remote tar-tree
  Builtin git-diff-files, git-diff-index, git-diff-stages, and git-diff-tree.
  Builtin git-show-branch.
  Builtin git-apply.
  ...
2006-05-24 16:49:24 -07:00
84c667ff97 fetch.c: remove an unused variable and dead code.
Funnily enough, this variable was never assigned ever since it
was introduced, and has been protecting some code that has never
been executed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 16:42:38 -07:00
63bccad38a Merge branch 'lt/apply' into next
* lt/apply:
  Clean up sha1 file writing
  Builtin git-cat-file
  apply: force matching at the beginning.
  Add a test-case for git-apply trying to add an ending line
  apply: treat EOF as proper context.
2006-05-24 14:11:08 -07:00
4868f3729a Merge branch 'master' into lt/apply
* master: (40 commits)
  Clean up sha1 file writing
  Builtin git-cat-file
  builtin format-patch: squelch content-type for 7-bit ASCII
  CMIT_FMT_EMAIL: Q-encode Subject: and display-name part of From: fields.
  add more informative error messages to git-mktag
  remove the artificial restriction tagsize < 8kb
  git-rebase: use canonical A..B syntax to format-patch
  git-format-patch: now built-in.
  fmt-patch: Support --attach
  fmt-patch: understand old <his> notation
  Teach fmt-patch about --keep-subject
  Teach fmt-patch about --numbered
  fmt-patch: implement -o <dir>
  fmt-patch: output file names to stdout
  Teach fmt-patch to write individual files.
  Use RFC2822 dates from "git fmt-patch".
  git-fmt-patch: thinkofix to show [PATCH] properly.
  rename internal format-patch wip
  Minor tweak on subject line in --pretty=email
  Tentative built-in format-patch.
  ...
2006-05-24 14:08:30 -07:00
4d548150ac Clean up sha1 file writing
This cleans up and future-proofs the sha1 file writing in sha1_file.c.

In particular, instead of doing a simple "write()" call and just verifying
that it succeeds (or - as in one place - just assuming it does), it uses
"write_buffer()" to write data to the file descriptor while correctly
checking for partial writes, EINTR etc.

It also splits up write_sha1_to_fd() to be a lot more readable: if we need
to re-create the compressed object, we do so in a separate helper
function, making the logic a whole lot more modular and obvious.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 13:36:13 -07:00
f81daefe56 Builtin git-cat-file
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 13:35:35 -07:00
65aadb92a1 apply: force matching at the beginning.
When there is no leading context, the patch must match at the
beginning of preimage; otherwise there is a "patch adds these
lines while the other lines were added to the original file"
conflict.

This is the opposite of match_end fix earlier in this series.
Unlike matching at the end case, we can additionally check the
preimage line number recorded in the patch, so the change is not
symmetrical with the earlier one.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 13:23:31 -07:00
d48f716861 Merge branch 'jc/fmt-patch'
* jc/fmt-patch:
  builtin format-patch: squelch content-type for 7-bit ASCII
  CMIT_FMT_EMAIL: Q-encode Subject: and display-name part of From: fields.
2006-05-24 12:21:17 -07:00
a861b58bbf Merge branch 'be/tag'
* be/tag:
  add more informative error messages to git-mktag
  remove the artificial restriction tagsize < 8kb
2006-05-24 12:20:48 -07:00
73f0a1577b Merge branch 'js/fmt-patch'
This makes "git format-patch" a built-in.

* js/fmt-patch:
  git-rebase: use canonical A..B syntax to format-patch
  git-format-patch: now built-in.
  fmt-patch: Support --attach
  fmt-patch: understand old <his> notation
  Teach fmt-patch about --keep-subject
  Teach fmt-patch about --numbered
  fmt-patch: implement -o <dir>
  fmt-patch: output file names to stdout
  Teach fmt-patch to write individual files.
  Use RFC2822 dates from "git fmt-patch".
  git-fmt-patch: thinkofix to show [PATCH] properly.
  rename internal format-patch wip
  Minor tweak on subject line in --pretty=email
  Tentative built-in format-patch.
2006-05-24 12:19:47 -07:00
f2054be4c4 Merge branch 'jc/builtin-n-tar-tree'
This pulls in "make many commands built-in" branches.

* jc/builtin-n-tar-tree:
  built-in tar-tree and remote tar-tree
  Builtin git-diff-files, git-diff-index, git-diff-stages, and git-diff-tree.
  Builtin git-show-branch.
  Builtin git-apply.
  Builtin git-commit-tree.
  Builtin git-read-tree.
  Builtin git-tar-tree.
  Builtin git-ls-tree.
  Builtin git-ls-files.
2006-05-24 11:24:50 -07:00
2464294498 Merge branch 'jc/fetch-sorted'
* jc/fetch-sorted:
  fetch-pack: output refs in the order they were given on the command line.
2006-05-24 11:04:55 -07:00
376bb3a352 Merge branch 'lt/dirwalk'
This makes 'git add' and 'git rm' built-ins.

* lt/dirwalk:
  Add builtin "git rm" command
  Move pathspec matching from builtin-add.c into dir.c
  Prevent bogus paths from being added to the index.
  builtin-add: fix unmatched pathspec warnings.
  Remove old "git-add.sh" remnants
  builtin-add: warn on unmatched pathspecs
  Do "git add" as a builtin
  Clean up git-ls-file directory walking library interface
  libify git-ls-files directory traversal
2006-05-24 11:04:16 -07:00
f54c76f161 Merge branch 'master' into next
* master:
  --summary output should print immediately after stats.
  git-svn: ignore expansion of svn:keywords
  git-svn: starting a 1.1.0-pre development version
  cvsimport: set up commit environment in perl instead of using env
2006-05-24 03:32:31 -07:00
cc189c2ca2 Add a test-case for git-apply trying to add an ending line
git-apply adding an ending line doesn't seem to fail if the ending line is
already present in the patched file.

Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-24 00:19:20 -07:00
fad70686b2 --summary output should print immediately after stats.
Currently the summary is displayed after the patch.  Fix this so
that the output order is stat-summary-patch.  As a consequence of
the way this is coded, the --summary option will only actually
display summary data if combined with either the --stat or
--patch-with-stat option.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 23:45:37 -07:00
1bf1a859ae apply: treat EOF as proper context.
Catalin noticed that we do not treat end-of-file condition shown
in the patch text as the patch context.  This causes a patch
that appends at the end of the file to cleanly apply even if
something else has been appended to the file.  If this happened
in the middle, we would refuse by saying that the file has
conflicting modifications.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 21:45:09 -07:00
36f5b1f0c8 git-svn: ignore expansion of svn:keywords
Unlike my earlier test patch, this also checks svn:eol-style and
makes sure it's applied to working copy updates.  This is
definitely more correct than my original attempt at killing
keyword expansions, but I still haven't tested it enough to
know.  Feedback would be much appreciated.

Also changed assert_svn_wc_clean() to only work on the svn
working copy.  This requires a separate call to assert_tree() to
check wc integrity against git in preparation for another change
I'm planning.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 21:37:30 -07:00
304dac1548 git-svn: starting a 1.1.0-pre development version
Some not-very-well-tested changes coming...

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 21:37:23 -07:00
3ea06f9f7e gitk: First cut at a search function in the patch/file display window
This does incremental highlighting of matches to the search string
but doesn't do true incremental search a la emacs.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-24 10:16:03 +10:00
62bf0d9629 cvsimport: set up commit environment in perl instead of using env
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 16:43:12 -07:00
17cf39294a Merge branch 'master' into next
* master:
  cvsimport: do not barf on creation of an empty file.
2006-05-23 16:31:05 -07:00
61efa5e300 cvsimport: do not barf on creation of an empty file.
When the server says "created this file whose length is empty",
we mistakenly said "oops, the server did not say a sensible
thing".  Fix it.

Spotted and fixed by Linus, acked by Martin.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 16:30:39 -07:00
dcaad49c92 Merge branch 'sp/reflog' into next
* sp/reflog:
  Enable ref log creation in git checkout -b.
  Create/delete branch ref logs.
  Include ref log detail in commit, reset, etc.
  Change order of -m option to update-ref.
  Correct force_write bug in refs.c
  Change 'master@noon' syntax to 'master@{noon}'.
  Log ref updates made by fetch.
  Force writing ref if it doesn't exist.
  Added logs/ directory to repository layout.
  General ref log reading improvements.
  Fix ref log parsing so it works properly.
  Support 'master@2 hours ago' syntax
  Log ref updates to logs/refs/<ref>
  Convert update-ref to use ref_lock API.
  Improve abstraction of ref lock/write.
2006-05-23 15:07:47 -07:00
33b292610d Merge branch 'eb/mailinfo' into next
* eb/mailinfo:
  Allow in body headers beyond the in body header prefix.
  More accurately detect header lines in read_one_header_line
  In handle_body only read a line if we don't already have one.
  Refactor commit messge handling.
  Move B and Q decoding into check header.
  Make read_one_header_line return a flag not a length.
2006-05-23 14:57:00 -07:00
ae51cb04bc Merge branch 'be/tag' into next
* be/tag:
  add more informative error messages to git-mktag
  remove the artificial restriction tagsize < 8kb
2006-05-23 14:53:17 -07:00
e96b6c4bf6 Merge branch 'jc/builtin-n-tar-tree' into next
* jc/builtin-n-tar-tree:
  Builtin git-diff-files, git-diff-index, git-diff-stages, and git-diff-tree.
  Builtin git-show-branch.
  Builtin git-apply.
  Builtin git-commit-tree.
  Builtin git-read-tree.
  Builtin git-tar-tree.
  Builtin git-ls-tree.
  Builtin git-ls-files.
2006-05-23 14:52:45 -07:00
1af0d11283 Merge branch 'jc/tartree' into jc/builtin-n-tar-tree
* jc/tartree:
  built-in tar-tree and remote tar-tree
2006-05-23 14:44:31 -07:00
2dec02b1ec Allow in body headers beyond the in body header prefix.
- handle_from is fixed to not mangle it's input line.

- Then handle_inbody_header is allowed to look in
  the body of a commit message for additional headers
  that we haven't already seen.

This allows patches with all of the right information in
unfortunate places to be imported.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 14:11:03 -07:00
f30b20282b More accurately detect header lines in read_one_header_line
Only count lines of the form '^.*: ' and '^From ' as email
header lines.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 14:08:32 -07:00
1f36bee67e In handle_body only read a line if we don't already have one.
This prepares for detecting non-email patches that don't have
mail headers.  In which case we have already read the first
line so handle_body should not ignore it.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 14:07:42 -07:00
8b4525fb3c Refactor commit messge handling.
- Move handle_info into main so it is called once
  after everything has been parsed.  This allows the removal
  of a static variable and removes two duplicate calls.

- Move parsing of inbody headers into handle_commit.
  This means we parse the in-body headers after we have decoded
  the character set, and it removes code duplication between
  handle_multipart_one_part and handle_body.

- Change the flag indicating that we have seen an in body
  prefix header into another bit in seen.
  This is a little more general and allows the possibility of parsing
  in body headers after the body message has begun.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 14:04:47 -07:00
3350453014 Move B and Q decoding into check header.
B and Q decoding is not appropriate for in body headers, so move
it up to where we explicitly know we have a real email header.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 14:01:59 -07:00
f8128cfb8d Make read_one_header_line return a flag not a length.
Currently we only use the return value from read_one_header line
to tell if the line we have read is a header or not.  So make
it a flag.  This paves the way for better email detection.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 14:00:15 -07:00
cfba045930 add more informative error messages to git-mktag
Signed-off-by: Björn Engelmann <BjEngelmann@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:38:29 -07:00
e7332f96b3 remove the artificial restriction tagsize < 8kb
Signed-off-by: Björn Engelmann <BjEngelmann@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:38:29 -07:00
e8cc9cd98e Builtin git-diff-files, git-diff-index, git-diff-stages, and git-diff-tree.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:13 -07:00
51ce34b992 Builtin git-show-branch.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:13 -07:00
ac6245e31a Builtin git-apply.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:13 -07:00
6d96ac18e5 Builtin git-commit-tree.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:12 -07:00
d147e501f3 Builtin git-read-tree.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:12 -07:00
56d1398ad3 Builtin git-tar-tree.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:12 -07:00
aae01bda7f Builtin git-ls-tree.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:12 -07:00
0864f26421 Builtin git-ls-files.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 13:11:12 -07:00
95f5bddcd2 Merge branch 'jc/dirwalk-n-cache-tree' into next
* jc/dirwalk-n-cache-tree:
  builtin-rm: squelch compiler warnings.
2006-05-23 01:31:52 -07:00
3fb3cc69af builtin-rm: squelch compiler warnings.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 01:31:38 -07:00
646881a156 Merge branch 'master' into next
* master:
  Add git-quiltimport to .gitignore.
  cvsimport: introduce _fetchfile() method and used a 1M buffer to read()
  cvsimport: cleanup commit function
  cvsimport: use git-update-index --index-info
  git status: skip empty directories, and add -u to show all untracked files
  cvsimport: repack every kilo-commits.
  cvsimport: introduce -L<imit> option to workaround memory leaks
2006-05-23 01:26:34 -07:00
405053d2d9 Add git-quiltimport to .gitignore.
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 01:26:21 -07:00
55cad84299 cvsimport: introduce _fetchfile() method and used a 1M buffer to read()
File retrieval from the socket is now moved to _fetchfile() and we now
cap reads at 1MB. This should limit the memory growth of the cvsimport
process.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 01:16:08 -07:00
e73aefe4fd cvsimport: cleanup commit function
This change attempts to clean up the commit function to make it a bit
easier to read (or at least the first half of it). It also improves
robustness and performance. Specifically:
  - report get_headref errors on opening ref unless the error is ENOENT
  - use regex to check for sha1 instead of length
  - use lexically scoped filehandles which get cleaned up automagically
  - check for error on both 'print' and 'close' (since output is buffered)
  - avoid "fork, do some perl, then exec" in commit(). It's not necessary,
    and we probably end up COW'ing parts of the perl process. Plus the code
    is much smaller because we can use open2()
  - avoid calling strftime over and over (mainly a readability cleanup)

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 00:50:50 -07:00
6a1871e174 cvsimport: use git-update-index --index-info
This should reduce the number of git-update-index forks required per
commit. We now do adds/removes in one call, and we are no longer forced to
deal with argv limitations.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 00:41:39 -07:00
443f8338b9 git status: skip empty directories, and add -u to show all untracked files
By default, we use --others --directory to show uninteresting
directories (to get user's attention) without their contents (to
unclutter output).  Showing empty directories do not make sense,
so pass --no-empty-directory when we do so.

Giving -u (or --untracked) disables this uncluttering to let the
user get all untracked files.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 00:36:51 -07:00
4adcea995e cvsimport: repack every kilo-commits.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Acked-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 00:31:36 -07:00
06918348de cvsimport: introduce -L<imit> option to workaround memory leaks
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-23 00:29:35 -07:00
4d8df3feb8 Merge branch 'se/http' into next
* se/http:
  Remove possible segfault in http-fetch.
  Install git builtins into gitexecdir rather than bindir.
  Change GIT-VERSION-GEN to call git commands with "git" not "git-".
  cvsimport: replace anonymous sub ref with a normal sub
  cvsimport: minor fixups
  Problem: 'trap...exit' causes error message when /bin/sh is ash.
  Avoid segfault in diff --stat rename output.
  Tutorial #2: broken link fix.
  git help: remove whatchanged from list of common commands
2006-05-22 18:54:19 -07:00
22f7c8cc91 Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  builtin format-patch: squelch content-type for 7-bit ASCII
  CMIT_FMT_EMAIL: Q-encode Subject: and display-name part of From: fields.
2006-05-22 18:54:10 -07:00
07001f95a6 Remove possible segfault in http-fetch.
Free the curl string lists after running http_cleanup to
avoid an occasional segfault in the curl library.  Seems
to only occur if the website returns a 405 error.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:52:58 -07:00
7f7e6eacf9 Install git builtins into gitexecdir rather than bindir.
Moving "git-cmd" commands out of the path and into a special
git exec path, should include the builtins.

[jc: fixed the case where bindir == gitexecdir - ln -f fails
 with a complaint that src and dst are the same, likewise for
 the fallback cp.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:52:19 -07:00
1100ac81a9 Change GIT-VERSION-GEN to call git commands with "git" not "git-".
GIT-VERSION-GEN can incorrectly return a default version of
"v1.3.GIT" because it tries to execute git commands using the
"git-cmd" format that expects all git commands to be in the $PATH.
Convert these to  "git cmd" format so that a proper answer is
returned even when the git commands have been moved out of the
$PATH and into a $gitexecdir.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:20:46 -07:00
c4b16f8d77 cvsimport: replace anonymous sub ref with a normal sub
commit() does not need to be an anonymous subreference. Keep it simple.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:16:44 -07:00
f396f01f11 cvsimport: minor fixups
Cleanup @skipped after it's used. Close a fhandle.
Removing suspects one at a time.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:12:27 -07:00
f803eec51b Problem: 'trap...exit' causes error message when /bin/sh is ash.
Problem: 'trap...exit' causes error message when /bin/sh is ash.
Fix: Change 'trap...exit' to 'trap...0' like in other scripts.

Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:11:52 -07:00
e3008464e7 Avoid segfault in diff --stat rename output.
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 18:00:38 -07:00
884e3134a0 Tutorial #2: broken link fix.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 15:34:40 -07:00
5126f35a54 git help: remove whatchanged from list of common commands
whatchanged is replaced by git log now.

Signed-off-by: Martin Waitz
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 13:42:58 -07:00
0c1d1ae43b Merge branch 'jc/fetch-sorted' into next
* jc/fetch-sorted:
  fetch-pack: output refs in the order they were given on the command line.
2006-05-22 05:32:53 -07:00
9546010b7b fetch-pack: output refs in the order they were given on the command line.
Currently, fetched refs are output in the order the remote side
happened to send them.  This changes the order to match the
order of refs that were given on the command line.  To the
existing core callers (git-fetch and git-clone) this does not
make any difference, but for other Porcelain use, it would be
more intuitive.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 05:32:38 -07:00
9e4f7d9a5d v266 2006-05-22 14:31:09 +02:00
00cd07943a remove Christian's email address 2006-05-22 14:30:47 +02:00
b05b52027c Merge branch 'master' into next
* master:
  diff: minor option combination fix.
2006-05-22 00:33:34 -07:00
5e363541d0 diff: minor option combination fix.
output_format == DIFFSTAT and with_stat == true does not make sense, and
the way the code is structured it causes trouble.  Avoid it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-22 00:31:02 -07:00
c831da6647 builtin format-patch: squelch content-type for 7-bit ASCII
When --attach is not used, usually we do not say Content-Type:
and fluff, but if the commit message is not 7-bit ASCII, mark
it as "text/plain; charset=UTF-8".  This unclutters output
somewhat.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 23:55:00 -07:00
cdd406e389 CMIT_FMT_EMAIL: Q-encode Subject: and display-name part of From: fields.
By convention, the commit message and the author/committer names
in the commit objects are UTF-8 encoded.  When formatting for
e-mails, Q-encode them according to RFC 2047.

While we are at it, generate the content-type and
content-transfer-encoding headers as well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 21:39:20 -07:00
7b8e4ab07c Merge branch 'jc/mailinfo' into next
* jc/mailinfo:
  mailinfo: skip bogus UNIX From line inside body
  tutorial-2: typofix in examples.
  tutorial: add discussion of index file, object database
  tutorial: expanded discussion of commit history
  tutorial: replace "whatchanged" by "log"
  NO_INET_NTOP and compat/inet_ntop.c for some systems (e.g. old Cygwin).
  remove superflous "const"
  checkdiff_consume: strtol parameter fix.
  Elaborate on why ':' is a bad idea in a ref name.
  Reference git-check-ref-format in git-branch.
2006-05-21 17:37:54 -07:00
81c5cf7865 mailinfo: skip bogus UNIX From line inside body
Sometimes people just include the whole format-patch output in
the commit e-mail.  Detect it and skip the bogus ">From " line.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 17:37:46 -07:00
d5e3d60c20 tutorial-2: typofix in examples.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 17:37:25 -07:00
e31952da5c tutorial: add discussion of index file, object database
Add a sequel to tutorial.txt which discusses the index file and
the object database.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 17:15:43 -07:00
f1fe3846e4 tutorial: expanded discussion of commit history
Expand the history-browsing section of the tutorial a bit, in part to
address Junio's suggestion that we mention "git grep" and Linus's
complaint that people are missing the flexibility of the commandline
interfaces for selecting commits.

This reads a little more like a collection of examples than a
"tutorial", but maybe that's what people need at this point.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 17:15:40 -07:00
67e6e5c4e7 tutorial: replace "whatchanged" by "log"
Junio suggested changing references to git-whatchanged to git-log.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 17:15:19 -07:00
6ba68ab288 NO_INET_NTOP and compat/inet_ntop.c for some systems (e.g. old Cygwin).
For systems which lack inet_ntop(), this adds compat/inet_ntop.c,
and related build constant, NO_INET_NTOP. Older Cygwin(s) lack
inet_ntop().

Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 16:44:36 -07:00
fbd01abf50 remove superflous "const"
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 16:40:45 -07:00
292f4128b8 Merge branch 'js/fmt-patch' into next
* js/fmt-patch:
  git-rebase: use canonical A..B syntax to format-patch
2006-05-21 03:16:51 -07:00
efbff23609 git-rebase: use canonical A..B syntax to format-patch
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 03:16:38 -07:00
9e848163ed checkdiff_consume: strtol parameter fix.
The second parameter is not the end of string input; it is
the optional return value to retrieve where the parser stopped.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 03:01:59 -07:00
f6ef6b8523 Merge branch 'js/fmt-patch' into next
* js/fmt-patch:
  git-format-patch: now built-in.
  fmt-patch: Support --attach
  diff family: add --check option
  Document that "git add" only adds non-ignored files.
2006-05-21 02:59:51 -07:00
685637381a git-format-patch: now built-in.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 02:48:21 -07:00
87a56cd3b1 Elaborate on why ':' is a bad idea in a ref name.
With the new cat-file syntax of 'v1.3.3:refs.c' we should mention
it as part of the reason why ':' is not permitted in a ref name.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 02:07:43 -07:00
2b1f4247ab Reference git-check-ref-format in git-branch.
Its nice to have git-check-ref-format actually get mentioned in
git-branch's documentation as the syntax of a ref name must conform
to what is described in git-check-ref-format.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 02:05:41 -07:00
698ce6f87e fmt-patch: Support --attach
This patch touches a couple of files, because it adds options to print a
custom text just after the subject of a commit, and just after the
diffstat.

[jc: made "many dashes" used as the boundary leader into a single
 variable, to reduce the possibility of later tweaks to miscount the
 number of dashes to break it.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 02:03:09 -07:00
328b710d80 Merge branch 'master' into js/fmt-patch
* master: (119 commits)
  diff family: add --check option
  Document that "git add" only adds non-ignored files.
  Add a conversion tool to migrate remote information into the config
  fetch, pull: ask config for remote information
  Fix build procedure for builtin-init-db
  read-tree -m -u: do not overwrite or remove untracked working tree files.
  apply --cached: do not check newly added file in the working tree
  Implement a --dry-run option to git-quiltimport
  Implement git-quiltimport
  Revert "builtin-grep: workaround for non GNU grep."
  builtin-grep: workaround for non GNU grep.
  builtin-grep: workaround for non GNU grep.
  git-am: use apply --cached
  apply --cached: apply a patch without using working tree.
  apply --numstat: show new name, not old name.
  Documentation/Makefile: create tarballs for the man pages and html files
  Allow pickaxe and diff-filter options to be used by git log.
  Libify the index refresh logic
  Builtin git-init-db
  Remove unnecessary local in get_ref_sha1.
  ...
2006-05-21 01:34:54 -07:00
8824689884 diff family: add --check option
Actually, it is a diff option now, so you can say

	git diff --check

to ask if what you are about to commit is a good patch.

[jc: this also would work for fmt-patch, but the point is that
 the check is done before making a commit.  format-patch is run
 from an already created commit, and that is too late to catch
 whitespace damaged change.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-21 01:16:09 -07:00
845ae27bf8 Document that "git add" only adds non-ignored files.
Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-20 18:22:11 -07:00
45a9d5054d gitk: Highlight paths of interest in tree view as well
With this, when the file list window is in tree view mode, we highlight
the paths of interest.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-20 22:56:27 +10:00
63b7919121 gitk: Highlight entries in the file list as well
This applies a bold highlight to entries in the file list pane in the
bottom right corner when it is displaying the list of changed files.
This doesn't yet highlight file list entries when it is in tree view
mode.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-20 21:31:52 +10:00
f1b8629453 [PATCH] gitk: Display commit messages with word wrap
Some people put very long strings into commit messages, which then
become invisible in gitk (word wrapping in the commit details window is
turned off, and there is no horizontal scroll bar).  Enabling word wrap
for just the commit message looks much better.

Wrapping is controlled by the "wrapcomment" option in ~/.gitk.  By
default this option is set to "none", which disables wrapping; setting
it to "word" enables word wrap for commit messages.

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-20 20:15:28 +10:00
7f2d5cb531 Merge branch 'jc/dirwalk-n-cache-tree' into next
* jc/dirwalk-n-cache-tree:

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-20 01:55:25 -07:00
93872e0700 Merge branch 'lt/dirwalk' into jc/dirwalk-n-cache-tree
This commit is what this branch is all about.  It records the
evil merge needed to adjust built-in git-add and git-rm for
the cache-tree extension.

* lt/dirwalk:
  Add builtin "git rm" command
  Move pathspec matching from builtin-add.c into dir.c
  Prevent bogus paths from being added to the index.
  builtin-add: fix unmatched pathspec warnings.
  Remove old "git-add.sh" remnants
  builtin-add: warn on unmatched pathspecs
  Do "git add" as a builtin
  Clean up git-ls-file directory walking library interface
  libify git-ls-files directory traversal

Conflicts:

	Makefile
	builtin.h
	git.c
	update-index.c
2006-05-20 01:52:19 -07:00
283c8eef6c Merge branch 'jc/cache-tree' into jc/dirwalk-n-cache-tree
* jc/cache-tree: (24 commits)
  Fix crash when reading the empty tree
  fsck-objects: do not segfault on missing tree in cache-tree
  cache-tree: a bit more debugging support.
  read-tree: invalidate cache-tree entry when a new index entry is added.
  Fix test-dump-cache-tree in one-tree disappeared case.
  fsck-objects: mark objects reachable from cache-tree
  cache-tree: replace a sscanf() by two strtol() calls
  cache-tree.c: typefix
  test-dump-cache-tree: validate the cached data as well.
  cache_tree_update: give an option to update cache-tree only.
  read-tree: teach 1-way merege and plain read to prime cache-tree.
  read-tree: teach 1 and 2 way merges about cache-tree.
  update-index: when --unresolve, smudge the relevant cache-tree entries.
  test-dump-cache-tree: report number of subtrees.
  cache-tree: sort the subtree entries.
  Teach fsck-objects about cache-tree.
  index: make the index file format extensible.
  cache-tree: protect against "git prune".
  Add test-dump-cache-tree
  Use cache-tree in update-index.
  ...
2006-05-20 00:56:11 -07:00
5b1bb3653d Merge branch 'jc/tartree' into next
* jc/tartree:
  built-in tar-tree and remote tar-tree
2006-05-19 18:15:34 -07:00
ae514b4c5b Merge branch 'master' into next
* master:
  Fix build procedure for builtin-init-db
  Allow pickaxe and diff-filter options to be used by git log.
  Libify the index refresh logic
  Builtin git-init-db
2006-05-19 18:06:08 -07:00
217542640e built-in tar-tree and remote tar-tree
This makes tar-tree a built-in.  As an added bonus, you can now
say:

	git tar-tree --remote=remote-repository <ent> [<base>]

This does not work with git-daemon yet, but should work with
localhost and git over ssh transports.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 17:48:34 -07:00
288c038450 Merge branch 'js/fetchconfig'
* js/fetchconfig:
  Add a conversion tool to migrate remote information into the config
  fetch, pull: ask config for remote information
2006-05-19 17:44:07 -07:00
bf78d1a6cb Merge branch 'lt/dirwalk' into next
* lt/dirwalk:
  Add builtin "git rm" command
  Move pathspec matching from builtin-add.c into dir.c
2006-05-19 17:30:34 -07:00
d9b814cc97 Add builtin "git rm" command
This changes semantics very subtly, because it adds a new atomicity
guarantee.

In particular, if you "git rm" several files, it will now do all or
nothing. The old shell-script really looped over the removed files one by
one, and would basically randomly fail in the middle if "-f" was used and
one of the files didn't exist in the working directory.

This C builtin one will not re-write the index after each remove, but
instead remove all files at once. However, that means that if "-f" is used
(to also force removal of the file from the working directory), and some
files have already been removed from the workspace, it won't stop in the
middle in some half-way state like the old one did.

So what happens is that if the _first_ file fails to be removed with "-f",
we abort the whole "git rm". But once we've started removing, we don't
leave anything half done. If some of the other files don't exist, we'll
just ignore errors of removal from the working tree.

This is only an issue with "-f", of course.

I think the new behaviour is strictly an improvement, but perhaps more
importantly, it is _different_. As a special case, the semantics are
identical for the single-file case (which is the only one our test-suite
seems to test).

The other question is what to do with leading directories. The old "git
rm" script didn't do anything, which is somewhat inconsistent. This one
will actually clean up directories that have become empty as a result of
removing the last file, but maybe we want to have a flag to decide the
behaviour?

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 17:28:33 -07:00
7c4f59d181 Fix build procedure for builtin-init-db
c3c8835fbb broke the default template
location which is in builtin-init-db.o, by not supplying the
compilation-time constant to the right build commands.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 17:23:07 -07:00
0081e36c9d Merge branch 'jc/read-tree-safety'
* jc/read-tree-safety:
  read-tree -m -u: do not overwrite or remove untracked working tree files.
2006-05-19 17:02:22 -07:00
edd5cc2428 Merge branch 'jc/apply'
* jc/apply:
  apply --cached: do not check newly added file in the working tree
2006-05-19 16:59:29 -07:00
6d80f3ce78 Merge branch 'master' into new 2006-05-20 09:59:10 +10:00
e72ee5ebc8 gitk: Fix bug where page-up/down wouldn't always work properly
If the user pressed page up or page down and the new page wasn't
already drawn, we failed to select the line we wanted in the new
page.  This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-20 09:58:49 +10:00
667661d46e Merge branch 'eb/quilt'
* eb/quilt:
  Implement a --dry-run option to git-quiltimport
  Implement git-quiltimport
2006-05-19 16:57:11 -07:00
12bb2035e9 Merge branch 'jc/grep'
* jc/grep:
  Revert "builtin-grep: workaround for non GNU grep."
  builtin-grep: workaround for non GNU grep.
2006-05-19 16:55:33 -07:00
908c35850a gitk: Make a row of controls for controlling highlighting
Now there is a bar across the middle (just below the bar containing
the sha1 ID, find string etc.) which controls highlighting.  There are
three ways to highlight: the user can highlight commits affecting
a list of paths, commits in a view, or commits where the author or
committer matches any of a list of strings (case-insensitive).  The
elements of the list of paths and list of names are delimited by
whitespace with shell quoting rules.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-20 09:38:11 +10:00
9463ed0d73 Merge branch 'lt/grep'
* lt/grep:
  builtin-grep: workaround for non GNU grep.
  git-am: use apply --cached
  apply --cached: apply a patch without using working tree.
  apply --numstat: show new name, not old name.
2006-05-19 16:26:45 -07:00
3532998f40 Merge branch 'ts/doctar'
* ts/doctar:
  Documentation/Makefile: create tarballs for the man pages and html files
2006-05-19 16:26:01 -07:00
582af68815 Allow pickaxe and diff-filter options to be used by git log.
Handle the -S option when passed to git log such that only the
appropriate commits are displayed.  Also per Junio's comments, do
the same for "--diff-filter", so that it too can be used as an option
to git log.  By default no patch or diff information is displayed.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 16:24:51 -07:00
3c6a370b0e Move pathspec matching from builtin-add.c into dir.c
I'll use it for builtin-rm.c too.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 16:14:50 -07:00
405e5b2fe0 Libify the index refresh logic
This cleans up and libifies the "git update-index --[really-]refresh"
functionality. This will be eventually required for eventually doing the
"commit" and "status" commands as built-ins.

It really just moves "refresh_index()" from update-index.c to
read-cache.c, but it also has to change the calling convention so that the
function uses a "unsigned int flags" argument instead of various static
flags variables for passing down the information about whether to be quiet
or not, and allow unmerged entries etc.

That actually cleans up update-index.c too, since it turns out that all
those flags were really specific to that one function of the index update,
so they shouldn't have had file-scope visibility even before.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:59:18 -07:00
c3c8835fbb Builtin git-init-db
Basically this just renames init-db.c to builtin-init-db.c and makes
some strings const.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:31:20 -07:00
6858d49492 Merge part of 'js/fmt-patch' for RFC2822 dates into 'sp/reflog'
An earlier patch from Shawn Pearce dependes on a change that is
only in "next".  I do not want to make this series hostage to
the yet-to-graduate js/fmt-patch branch, but let's try fixing it
by merging the early parts of the branch to see what happens.

Right now, 'sp/reflog' will not be in "next" for now, so I won't
have to regret this -- if this merge causes problem down the road
merging I can always rebuild the topic branch ;-).
2006-05-19 15:25:57 -07:00
969d326d6b Enable ref log creation in git checkout -b.
Switch git checkout -b to use git-update-ref rather than echo and
a shell I/O redirection.  This is more in line with typical GIT
commands and allows -b to be logged according to the normal ref
logging rules.

Added -l option to allow users to create the ref log at the same
time as creating a branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:03:39 -07:00
3a4b3f269c Create/delete branch ref logs.
When crating a new branch offer '-l' as a way for the user to
quickly enable ref logging for the new branch.

When deleting a branch also delete its ref log.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:03:24 -07:00
67644a4d77 Include ref log detail in commit, reset, etc.
When updating a ref at the direction of the user include a reason why
head was changed as part of the ref log (assuming it was enabled).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:03:21 -07:00
7792cc2fa1 Change order of -m option to update-ref.
The actual position doesn't matter but most people prefer to see
options appear before the arguments.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:03:10 -07:00
8fe92775f3 Correct force_write bug in refs.c
My earlier attempt at forcing a write for non-existant refs worked;
it forced a write for pretty much all refs.  This corrects the
condition to only force a write for refs which don't exist yet.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:02:59 -07:00
cce91a2cae Change 'master@noon' syntax to 'master@{noon}'.
Its ambiguous to parse "master@2006-05-17 18:30:foo" when foo is
meant as a file name and ":30" is meant as 30 minutes past 6 pm.
Therefore all date specifications in a sha1 expression must now
appear within brackets and the ':' splitter used for the path name
in a sha1 expression ignores ':' appearing within brackets.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:02:55 -07:00
d0740d92be Log ref updates made by fetch.
If a ref is changed by http-fetch, local-fetch or ssh-fetch
record the change and the remote URL/name in the log for the ref.
This requires loading the config file to check logAllRefUpdates.

Also fixed a bug in the ref lock generation; the log file name was
not being produced right due to a bad prefix length.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:02:52 -07:00
732232a123 Force writing ref if it doesn't exist.
Normally we try to skip writing a ref if its value hasn't changed
but in the special case that the ref doesn't exist but the new
value is going to be 0{40} then force writing the ref anyway.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:02:43 -07:00
c22a7f0fb9 Added logs/ directory to repository layout.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:02:38 -07:00
e52290428b General ref log reading improvements.
Corrected the log starting time displayed in the error message
(as it was always showing the epoch due to a bad input to strtoul).

Improved the log parser so we only scan backwards towards the
'\n' from the end of the prior log; during this scan the last '>'
is remembered to improve performance (rather than scanning forward
to it).

If the log record matched is the last log record in the file only
use its new sha1 value if the date matches exactly; otherwise we
leave the passed in sha1 alone as it already contains the current
value of the ref.  This way lookups of dates later than the log
end to stick with the current ref value in case the ref was updated
without logging.

If it looks like someone changed the ref without logging it and we
are going to return the sha1 which should have been valid during
the missing period then warn the user that there might be log data
missing and thus their query result may not be accurate.  The check
isn't perfect as its just based on comparing the old and new sha1
values between the two log records but its better than not checking
at all.

Implemented test cases based on git-rev-parse for most of the
boundary conditions.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-19 15:02:32 -07:00
8090c08e1e Merge early part of 'sp/reflog' branch 2006-05-19 09:10:38 -07:00
7723522a13 Merge branch 'eb/quilt' into next
* eb/quilt:
  Implement a --dry-run option to git-quiltimport
  Implement git-quiltimport
2006-05-18 22:56:43 -07:00
d3bd4ee1a5 Implement a --dry-run option to git-quiltimport
Since large quilt trees like -mm can easily have patches
without clear authorship information, add a --dry-run
option to make the problem patches easy to find.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 22:55:57 -07:00
d3d8f361a8 Implement git-quiltimport
Importing a quilt patch series into git is not very difficult
but parsing the patch descriptions and all of the other
minutia take a bit of effort to get right, so this automates it.

Since git and quilt complement each other it makes sense
to make it easy to go back and forth between the two.

If a patch is encountered that it cannot derive the author
from the user is asked.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 22:55:57 -07:00
2c57ebc223 Merge branch 'ts/doctar' into next
* ts/doctar:
  Documentation/Makefile: create tarballs for the man pages and html files
  SubmittingPatches: The download location of External Editor has moved
  Make git-check-format-ref a builtin.
  Make "git rev-list" be a builtin
  builtin-diff: do not say files are renamed when blob and file are given
  Provide a way to flush git-diff-tree's output
2006-05-18 22:08:41 -07:00
c7b345b075 Merge branch 'lt/dirwalk' into next
* lt/dirwalk:
  Prevent bogus paths from being added to the index.
2006-05-18 20:16:03 -07:00
52db0495dc Documentation/Makefile: create tarballs for the man pages and html files
[jc: rewrote by stealing from what I run to update html and
 man branches automatically]

Signed-off-by: Tilman Sauerbeck <tilman@code-monkey.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 20:15:45 -07:00
ff62b7f378 SubmittingPatches: The download location of External Editor has moved
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 20:14:28 -07:00
9370bae2ce Make git-check-format-ref a builtin.
Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 15:51:38 -07:00
5fb61b8dcf Make "git rev-list" be a builtin
This was surprisingly easy. The diff is truly minimal: rename "main()" to
"cmd_rev_list()" in rev-list.c, and rename the whole file to reflect its
new built-in status.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 15:46:11 -07:00
065e0b126f builtin-diff: do not say files are renamed when blob and file are given
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 14:35:37 -07:00
8dcf39c46e Prevent bogus paths from being added to the index.
With this one, it's now a fatal error to try to add a pathname
that cannot be added with "git add", i.e.

	[torvalds@g5 git]$ git add .git/config
	fatal: unable to add .git/config to index

and

	[torvalds@g5 git]$ git add foo/../bar
	fatal: unable to add foo/../bar to index

instead of the old "Ignoring path xyz" warning that would end up
silently succeeding on any other paths.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 12:07:31 -07:00
fad6008385 Merge branch 'lt/dirwalk' into next
* lt/dirwalk:
  builtin-add: fix unmatched pathspec warnings.
2006-05-18 01:47:13 -07:00
e8f990b4e4 builtin-add: fix unmatched pathspec warnings.
"git add Documentation/" when Documentation directory exists
does not barf (as it should not), but "git add ." barfed when it
did not add anything.  This was because we checked for the path
prefix ("Documentation/" in the former case, and an empty string
in the latter case) for existence, and lstat("", &st) would say
"Huh?".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 01:46:57 -07:00
70f75cc96a Provide a way to flush git-diff-tree's output
Gitk wants to use git-diff-tree as a filter to tell it which ids from
a given list affect a set of files or directories.  We don't want to
fork and exec a new git-diff-tree process for each batch of ids, since
there could be a lot of relatively small batches.  For example, a
batch could contain as many ids as fit in gitk's headline display
window, i.e. 20 or so, and we would be processing a new batch every
time the user scrolls that window.

The --stdin flag to git-diff-tree is suitable for this, but the main
difficulty is that the output of git-diff-tree gets buffered and
doesn't get sent until the buffer is full.

This provides a way to get git-diff-tree to flush its output buffers.
If a blank line is supplied on git-diff-tree's standard input, it will
flush its output buffers and then accept further input.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-18 00:25:50 -07:00
eab864a2c4 Merge branch 'master' into next
* master:
  git-cvsimport: Handle "Removed" from pserver
2006-05-17 23:37:51 -07:00
18b01f4ff6 Merge branch 'maint'
* maint:
  git-cvsimport: Handle "Removed" from pserver
2006-05-17 22:33:06 -07:00
be0c7e0697 git-cvsimport: Handle "Removed" from pserver
Sometimes the pserver says "Removed" instead of "Remove-entry".

Signed-off-by: Elrond <elrond+kernel.org@samba-tng.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 22:32:16 -07:00
9c0f482361 Merge branch 'lt/dirwalk' into next
* lt/dirwalk:
  Remove old "git-add.sh" remnants
2006-05-17 22:27:58 -07:00
c699f9b924 Remove old "git-add.sh" remnants
Repeat after me: "It's now a built-in"

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 22:27:42 -07:00
70e34b2dc8 Fix ref log parsing so it works properly.
The log parser was only ever matching the last log record due to
calling strtoul on "> 1136091609" rather than " 1136091609".  Also
once a match for '@' has been found after the name of the ref there
is no point in looking for another '@' within the remaining text.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 17:36:36 -07:00
d556fae2c0 Support 'master@2 hours ago' syntax
Extended sha1 expressions may now include date specifications
which indicate a point in time within the local repository's
history.  If the ref indicated to the left of '@' has a log in
$GIT_DIR/logs/<ref> then the value of the ref at the time indicated
by the specification is obtained from the ref's log.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 17:36:36 -07:00
6de08ae688 Log ref updates to logs/refs/<ref>
If config parameter core.logAllRefUpdates is true or the log
file already exists then append a line to ".git/logs/refs/<ref>"
whenever git-update-ref <ref> is executed.  Each log line contains
the following information:

  oldsha1 <SP> newsha1 <SP> committer <LF>

where committer is the current user, date, time and timezone in
the standard GIT ident format.  If the caller is unable to append
to the log file then git-update-ref will fail without updating <ref>.

An optional message may be included in the log line with the -m flag.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 17:36:36 -07:00
5b16b09021 Convert update-ref to use ref_lock API.
This conversion also adds the '-m' switch to update-ref allowing
the caller to record why the ref is changing.  At present this is
merely copied down into the ref_lock API.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 17:36:36 -07:00
4bd18c43d9 Improve abstraction of ref lock/write.
Created 'struct ref_lock' to contain the data necessary to perform
a ref update.  This change improves writing a ref as the file names
are generated only once (rather than twice) and supports following
symrefs (up to the maximum depth).  Further the ref_lock structure
provides room to extend the update API with ref logging.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 17:36:36 -07:00
78bc2e1552 Merge branch 'sp/reflog' into next
* sp/reflog:
  Remove unnecessary local in get_ref_sha1.
2006-05-17 17:34:01 -07:00
70e1a880a3 Remove unnecessary local in get_ref_sha1.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 17:33:52 -07:00
b312cc82b4 Merge branch 'jc/apply' into next
* jc/apply:
  apply --cached: do not check newly added file in the working tree
2006-05-17 16:56:20 -07:00
d91d4c2c50 apply --cached: do not check newly added file in the working tree
The --cached mode does not deal with the working tree, so we
should not check it with lstat.  An earlier code omitted the
call to lstat but forgot to omit the check for the errno.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 16:56:13 -07:00
22b49b7fb9 Merge branch 'jc/read-tree-safety' into next
* jc/read-tree-safety:
  read-tree -m -u: do not overwrite or remove untracked working tree files.
2006-05-17 15:54:39 -07:00
c7e3a75121 Merge branch 'lt/grep' into next
* lt/grep:
  builtin-grep: workaround for non GNU grep.
2006-05-17 15:52:16 -07:00
39be926436 Merge branch 'jc/grep' into next
* jc/grep:
  Revert "builtin-grep: workaround for non GNU grep."
2006-05-17 15:52:03 -07:00
bbb66c6061 builtin-grep: workaround for non GNU grep.
Of course, it still ignores the fact that not all grep's support some of
the flags like -F/-L/-A/-C etc, but for those cases, the external grep
itself will happily just say "unrecognized option -F" or similar.

So with this change, "git grep" should handle all the flags the native
grep handles, which is really quite fine. We don't _need_ to expose
anything more, and if you do want our extensions, you can get them with
"--uncached" and an up-to-date index.

No configuration necessary, and we automatically take advantage of any
native grep we have, if possible.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 15:51:38 -07:00
e9ce27543d Merge branch 'ew/pretty-fmt'
* ew/pretty-fmt:
  commit: allow --pretty= args to be abbreviated
2006-05-17 15:49:23 -07:00
53684bba49 Merge branch 'jc/apply'
* jc/apply:
  git-am: use apply --cached
  apply --cached: apply a patch without using working tree.
  apply --numstat: show new name, not old name.
2006-05-17 15:47:33 -07:00
ae12e59a8c Merge branch 'lt/dirwalk' into next
* lt/dirwalk:
  builtin-add: warn on unmatched pathspecs
  Do "git add" as a builtin
  Clean up git-ls-file directory walking library interface
  libify git-ls-files directory traversal

Not a conflict, but builtin-add needed to be adjusted to properly
invalidate the cache_tree entry.
2006-05-17 15:39:38 -07:00
f25933987f builtin-add: warn on unmatched pathspecs
This is in the same spirit as what bba319b5 and 45e48120 tried
to do to help users.  A command such as "git add Documentaiton"
with misspelled pathspecs would give a friendly reminder with
this.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 15:27:18 -07:00
0d78153952 Do "git add" as a builtin
First try. Let's see how well this works.

In many ways, the hard parts of "git commit" are not so different from
this, and a builtin commit would share a lot of the code, I think.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 11:52:40 -07:00
e78503db16 Revert "builtin-grep: workaround for non GNU grep."
This reverts 518920b764 commit.
Linus has a more portable alternative.
2006-05-17 11:42:14 -07:00
d882e1ac94 Merge branch 'jc/gitlink' into next
* jc/gitlink:
  read-tree: reorganize bind_merge code.
2006-05-17 03:16:50 -07:00
d6970e42a1 read-tree: reorganize bind_merge code.
This does not change the logic but moves the order of checks
around so that merging of read-tree safety code would become
easier.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 03:16:27 -07:00
aedb8995f8 Merge branch 'ew/pretty-fmt' into next
* ew/pretty-fmt:
  commit: allow --pretty= args to be abbreviated

Conflicts:

	commit.c - adjust to --pretty=email
2006-05-17 03:04:14 -07:00
fa09339509 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: workaround for non GNU grep.
2006-05-17 02:59:46 -07:00
6cdfd17974 commit: allow --pretty= args to be abbreviated
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 02:57:57 -07:00
518920b764 builtin-grep: workaround for non GNU grep.
Some implementations do not know what to do with -H; define
NO_H_OPTION_IN_GREP when you build git if your grep lacks -H.

Most of the time, it can be worked around by prepending
/dev/null to the argument list, but that causes -L and -c to
slightly misbehave (they both expose /dev/null is given), so
when these options are given, do not run external grep that does
not understand -H.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 02:48:13 -07:00
b4189aa848 Clean up git-ls-file directory walking library interface
This moves the code to add the per-directory ignore files for the base
directory into the library routine.

That not only allows us to turn the function push_exclude_per_directory()
static again, it also simplifies the library interface a lot (the caller
no longer needs to worry about any of the per-directory exclude files at
all).

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 01:56:55 -07:00
453ec4bdf4 libify git-ls-files directory traversal
This moves the core directory traversal and filename exclusion logic
into the general git library, making it available for other users
directly.

If we ever want to do "git commit" or "git add" as a built-in (and we
do), we want to be able to handle most of git-ls-files as a library.

NOTE! Not all of git-ls-files is libified by this.  The index matching
and pathspec prefix calculation is still in ls-files.c, but this is a
big part of it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 01:56:40 -07:00
fcc387db9b read-tree -m -u: do not overwrite or remove untracked working tree files.
When a merge results in a creation of a path that did not exist
in HEAD, and if you already have that path on the working tree,
because the index has not been told about the working tree file,
read-tree happily removes it.  The issue was brought up by Santi
Béjar on the list.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17 01:52:48 -07:00
8a24f2fae0 Merge branch 'master' into next
* master:
  Remove old "git-grep.sh" remnants
  merge-base: Clarify the comments on post processing.
  Update the documentation for git-merge-base
2006-05-16 17:21:35 -07:00
63dffdf03d Remove old "git-grep.sh" remnants
It's built-in now.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-16 17:21:21 -07:00
5c87a8c560 Merge branch 'maint'
* maint:
  merge-base: Clarify the comments on post processing.
  Update the documentation for git-merge-base
2006-05-16 17:21:02 -07:00
0fa6417c49 Merge branch 'np/pack'
* np/pack:
  improve depth heuristic for maximum delta size
  pack-object: slightly more efficient
  simple euristic for further free packing improvements
2006-05-16 17:20:24 -07:00
c82a22c39c merge-base: Clarify the comments on post processing.
The comment fooled myself believing that we still had an
unsolved horizon effect.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-16 17:18:22 -07:00
00dd7422db Merge branch 'np/pack' into next
* np/pack:
  improve depth heuristic for maximum delta size
2006-05-16 14:50:26 -07:00
c3b06a69ff improve depth heuristic for maximum delta size
This provides a linear decrement on the penalty related to delta depth
instead of being an 1/x function.  With this another 5% reduction is
observed on packs for both the GIT repo and the Linux kernel repo, as
well as fixing a pack size regression in another sample repo I have.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-16 13:35:46 -07:00
94cdb38258 Merge branch 'se/tag'
* se/tag:
  Strip useless "tags/" prefix from git-tag -l output
2006-05-15 23:43:27 -07:00
3aece89fa2 Merge branch 'se/rev-parse'
* se/rev-parse:
  Add "--branches", "--tags" and "--remotes" options to git-rev-parse.
2006-05-15 23:43:23 -07:00
638684824c Merge branch 'se/diff'
* se/diff:
  Convert some "apply --summary" users to "diff --summary".
  Add "--summary" option to git diff.
2006-05-15 23:42:37 -07:00
3b4fd63f72 Merge branch 'se/rebase'
* se/rebase:
  Make git rebase interactive help match documentation.
2006-05-15 23:35:24 -07:00
2aa839614e Update the documentation for git-merge-base
Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 23:19:46 -07:00
70bde2bc31 Merge branch 'jc/diff' into next
* jc/diff:
  builtin-diff: fix comparison between two blobs.
2006-05-15 19:06:06 -07:00
e4e23f3a1c builtin-diff: fix comparison between two blobs.
The code forgot that setup_revisions() leaves parsed object
names in reverse in the list.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 19:05:50 -07:00
35702a983e Merge branch 'master' into next
* master:
  Fix silly typo in new builtin grep
  Fix pack-index issue on 64-bit platforms a bit more portably.
  Install git-send-email by default
  Fix compilation on newer NetBSD systems
2006-05-15 18:26:34 -07:00
8701ea0f62 Merge branch 'lt/oneway'
* lt/oneway:
  read-tree --reset -u fix.
  read-tree -u one-way merge fix to check out locally modified paths.
  Simplify "git reset --hard"
  Allow one-way tree merge to remove old files
2006-05-15 18:15:26 -07:00
63166cd64f Merge branch 'ew/send-email'
* ew/send-email:
  send-email: quiet some warnings, reject invalid addresses
  send-email: allow sendmail binary to be used instead of SMTP
2006-05-15 18:15:03 -07:00
3adac0afe2 Merge branch 'lt/config'
* lt/config:
2006-05-15 18:12:57 -07:00
efca578eec Merge branch 'jc/grep'
* jc/grep: (22 commits)
  Fix silly typo in new builtin grep
  builtin-grep: unparse more command line options.
  builtin-grep: use external grep when we can take advantage of it
  builtin-grep: -F (--fixed-strings)
  builtin-grep: -w fix
  builtin-grep: typofix
  builtin-grep: tighten argument parsing.
  builtin-grep: documentation
  Teach -f <file> option to builtin-grep.
  builtin-grep: -L (--files-without-match).
  builtin-grep: binary files -a and -I
  builtin-grep: terminate correctly at EOF
  builtin-grep: tighten path wildcard vs tree traversal.
  builtin-grep: support -w (--word-regexp).
  builtin-grep: support -c (--count).
  builtin-grep: allow more than one patterns.
  builtin-grep: allow -<n> and -[ABC]<n> notation for context lines.
  builtin-grep: printf %.*s length is int, not ptrdiff_t.
  builtin-grep: do not use setup_revisions()
  builtin-grep: support '-l' option.
  ...
2006-05-15 18:12:06 -07:00
05f743f328 Merge branch 'lt/diff'
* lt/diff:
  git diff: support "-U" and "--unified" options properly
2006-05-15 18:09:15 -07:00
f66475199c Fix silly typo in new builtin grep
The "-F" flag apparently got mis-translated due to some over-eager
copy-paste work into a duplicate "-H" when using the external grep.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 18:06:18 -07:00
4cb0e688d8 Merge branch 'jc/apply' into next
* jc/apply:
  git-am: use apply --cached
  apply --cached: apply a patch without using working tree.
2006-05-15 17:58:02 -07:00
b7627278e2 git-am: use apply --cached
Now 'git apply' can apply patch without working tree, preparation
of pristine preimage and postimage trees that are done when falling
back on 3-way merge by "git am" can do so without temporary files.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 17:57:01 -07:00
04e4888e5a apply --cached: apply a patch without using working tree.
A new flag "--cached" takes the cached data, applies the patch
and stores the result in the index, without using the working
tree.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 17:56:53 -07:00
baee9207b9 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: unparse more command line options.
2006-05-15 13:51:35 -07:00
440f869d65 Merge branch 'ew/send-email' into next
* ew/send-email:
  send-email: quiet some warnings, reject invalid addresses
  send-email: allow sendmail binary to be used instead of SMTP
2006-05-15 13:51:23 -07:00
8dd84b0169 Merge branch 'np/pack' into next
* np/pack:
  pack-object: slightly more efficient
  simple euristic for further free packing improvements
2006-05-15 13:51:09 -07:00
f6fb133b84 Merge branch 'lt/oneway' into next
* lt/oneway:
  read-tree --reset -u fix.
2006-05-15 13:51:07 -07:00
d55aaefa3e Merge branch 'fix'
* fix:
  Fix pack-index issue on 64-bit platforms a bit more portably.
  Install git-send-email by default
  Fix compilation on newer NetBSD systems
  git config syntax updates
  Another config file parsing fix.
  checkout: use --aggressive when running a 3-way merge (-m).
2006-05-15 13:48:22 -07:00
ffa0a7ab36 builtin-grep: unparse more command line options.
The earlier one to use external grep missed some often used options.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 13:28:01 -07:00
1b9bc5a7b7 Fix pack-index issue on 64-bit platforms a bit more portably.
Apparently <stdint.h> is not enough for uint32_t on OpenBSD; use
"unsigned int" -- hopefully that would stay 32-bit on every
platform we care about, at least until we update the pack-index
file format.

Our sha1 routines optimized for architectures use uint32_t and
expects '#include <stdint.h>' to be enough, so OpenBSD on arm or
ppc might have similar issues down the road, I dunno.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 13:01:37 -07:00
f3dd5eae58 Install git-send-email by default
After 567ffeb772 and
4bc87a28be, git-send-email no
longer requires any non-standard Perl modules, so there's no
reason to special-case it.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 13:00:28 -07:00
e88856b485 Fix compilation on newer NetBSD systems
NetBSD >=2.0 has iconv() in libc.  A libiconv is not required and
does not exist.

See: http://netbsd.gw.com/cgi-bin/man-cgi?iconv+3+NetBSD-2.0

[jc: with a bit of simplification later discussed on the list.]

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 13:00:01 -07:00
ff45715ce5 pack-object: slightly more efficient
Avoid creating a delta index for objects with maximum depth since they
are not going to be used as delta base anyway.  This also reduce peak
memory usage slightly as the current object's delta index is not useful
until the next object in the loop is considered for deltification. This
saves a bit more than 1% on CPU usage.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 12:32:13 -07:00
4e8da19581 simple euristic for further free packing improvements
Given that the early eviction of objects with maximum delta depth
may exhibit bad packing on its own, why not considering a bias against
deep base objects in try_delta() to mitigate that bad behavior.

This patch adjust the MAX_size allowed for a delta based on the depth of
the base object as well as enabling the early eviction of max depth
objects from the object window.  When used separately, those two things
produce slightly better and much worse results respectively.  But their
combined effect is a surprising significant packing improvement.

With this really simple patch the GIT repo gets nearly 15% smaller, and
the Linux kernel repo about 5% smaller, with no significantly measurable
CPU usage difference.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 12:31:21 -07:00
6d6776cb49 read-tree --reset -u fix.
The previous commit makes -u to mean "I do want to remove the
local changes, just update it from the read tree" only for
one-way merge.  It makes sense to have it depend on the
"--reset" flag instead.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 12:23:04 -07:00
db3106b274 send-email: quiet some warnings, reject invalid addresses
I'm not sure why we never actually rejected invalid addresses in
the first place.  We just seemed to be using our email validity
checkers to kill duplicates.

Now we just drop invalid email addresses completely and warn
the user about it.

Since we support local sendmail, we'll also accept username-only
addresses.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 12:14:22 -07:00
aca7ad7628 send-email: allow sendmail binary to be used instead of SMTP
This should make local mailing possible for machines without
a connection to an SMTP server.

It'll default to using /usr/sbin/sendmail or /usr/lib/sendmail
if no SMTP server is specified (the default).  If it can't find
either of those paths, it'll fall back to connecting to an SMTP
server on localhost.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 12:13:57 -07:00
cee1b9549b Merge branch 'se/tag' into next
* se/tag:
  Strip useless "tags/" prefix from git-tag -l output
2006-05-15 00:55:31 -07:00
e6ebb8a3fb Strip useless "tags/" prefix from git-tag -l output 2006-05-15 00:54:31 -07:00
a5954eccdd Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: use external grep when we can take advantage of it
2006-05-15 00:52:20 -07:00
64c6f100c4 Merge branch 'jc/apply' into next
* jc/apply:
  apply --numstat: show new name, not old name.
  Ensure author & committer before asking for commit message.
  Install git-send-email by default
  send-email: address expansion for common mailers
  diffstat rename squashing fix.
2006-05-15 00:52:20 -07:00
49e3343c9f apply --numstat: show new name, not old name.
Somehow --stat showed the new name but --numstat showed the old
name for renamed/copied paths.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 00:51:51 -07:00
de1d4fa2a1 Merge branch 'fix'
* fix:
  Ensure author & committer before asking for commit message.
2006-05-15 00:51:37 -07:00
c8df633b4e Merge branch 'fix' into maint
* fix:
  Ensure author & committer before asking for commit message.
2006-05-15 00:49:25 -07:00
e8efc9036f Merge branch 'lt/oneway' into next
* lt/oneway:
  read-tree -u one-way merge fix to check out locally modified paths.
2006-05-15 00:48:00 -07:00
613f02739a read-tree -u one-way merge fix to check out locally modified paths.
The "-u" flag means "update the working tree files", but to
other types of merges, it also implies "I want to keep my local
changes" -- because they prevent local changes from getting lost
by using verify_uptodate.  The one-way merge is different from
other merges in that its purpose is opposite of doing something
else while keeping unrelated local changes.  The point of
one-way merge is to nuke local changes.  So while it feels
somewhat wrong that this actively loses local changes, it is the
right thing to do.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15 00:46:57 -07:00
15739c89fb Install git-send-email by default
After 567ffeb772 and
4bc87a28be, git-send-email no
longer requires any non-standard Perl modules, so there's no
reason to special-case it.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 22:37:00 -07:00
994d6c66d3 send-email: address expansion for common mailers
mutt, gnus, pine, mailrc formats should be supported.

Testing and feedback for correctness and completeness of all formats
and support for additional formats would be good.

Nested expansions are also supported.

More than one alias file to be used.

All alias file formats must still of be the same type, though.

Two git repo-config keys are required for this
(as suggested by Ryan Anderson):

    sendemail.aliasesfile = <filename of aliases file>
    sendemail.aliasfiletype = (mutt|gnus|pine|mailrc)

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Acked-by: Ryan Anderson <ryan@michonline.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 22:36:27 -07:00
1e2398d7fa builtin-grep: use external grep when we can take advantage of it
It's not perfect, but it gets the "git grep some-random-string" down to
the good old half-a-second range for the kernel.

It should convert more of the argument flags for "grep", that should be
trivial to expand (I did a few just as an example). It should also bother
to try to return the right "hit" value (which it doesn't, right now - the
code is kind of there, but I didn't actually bother to do it _right_).

Also, right now it _just_ limits by number of arguments, but it should
also strictly speaking limit by total argument size (ie add up the length
of the filenames, and do the "exec_grep()" flush call if it's bigger than
some random value like 32kB).

But I think that it's _conceptually_ doing all the right things, and it
seems to work. So maybe somebody else can do some of the final polish.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 22:33:24 -07:00
cc908b82a4 diffstat rename squashing fix.
When renaming leading/a/filename to leading/b/filename (and
"filename" is sufficiently long), we tried to squash the rename
to "leading/{a => b}/filename".  However, when "/a" or "/b" part
is empty, we underflowed and tried to print a substring of
length -1.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 22:07:28 -07:00
5fd51c77fa Merge branch 'se/diff' into next
* se/diff:
  Convert some "apply --summary" users to "diff --summary".
  Add "--summary" option to git diff.
2006-05-14 17:12:37 -07:00
af3d7a6a72 Merge branch 'se/rebase' into next
* se/rebase:
  Make git rebase interactive help match documentation.
2006-05-14 17:02:30 -07:00
a3fc9db449 Merge branch 'se/rev-parse' into next
* se/rev-parse:
  Add "--branches", "--tags" and "--remotes" options to git-rev-parse.
2006-05-14 16:58:59 -07:00
5708a6666d Merge branch 'lt/oneway' into next
* lt/oneway:
  Simplify "git reset --hard"
  Allow one-way tree merge to remove old files
2006-05-14 16:58:44 -07:00
b093448910 gitk: Fix display of "(...)" for parents/children we haven't drawn
In the commit details window, we were displaying "(...)" for the
headlines of parents and children that haven't been drawn, without
making any attempt to get those headlines.  This adds a call to
getcommit to commit_descriptor so we get those headlines.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-15 09:56:08 +10:00
c68998f5b5 Simplify "git reset --hard"
Now that the one-way merge strategy does the right thing wrt files that do
not exist in the result, just remove all the random crud we did in "git
reset" to do this all by hand.

Instead, just pass in "-u" to git-read-tree when we do a hard reset, and
depend on git-read-tree to update the working tree appropriately.

This basically means that git reset turns into

	# Always update the HEAD ref
	git update-ref HEAD "$rev"

	case "--soft"
		# do nothing to index/working tree
	case "--hard"
		# read index _and_ update working tree
		git-read-tree --reset -u "$rev"
	case "--mixed"
		# update just index, report on working tree differences
		git-read-tree --reset "$rev"
		git-update-index --refresh

which is what it was always semantically doing, it just did it in a
rather strange way because it was written to not expect git-read-tree to
do anything to the working tree.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:48:33 -07:00
76b99b8161 Allow one-way tree merge to remove old files
For some random reason (probably just because nobody noticed), the one-way
merge strategy didn't mark deleted files as deleted, so if you used

	git-read-tree -m -u <newtree>

it would update the files that got changed in the index, but it would not
delete the files that got deleted.

This should fix it, and I can't imagine that anybody depends on the old
strange "update only existing files" behaviour.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:48:23 -07:00
c621197a20 Merge branch 'lt/diff' into next
* lt/diff:
  git diff: support "-U" and "--unified" options properly
  include header to define uint32_t, necessary on Mac OS X
2006-05-14 16:39:14 -07:00
9d76812b42 Convert some "apply --summary" users to "diff --summary".
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:29:20 -07:00
4bbd261bbd Add "--summary" option to git diff.
Remove the need to pipe git diff through git apply to
get the extended headers summary.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:28:45 -07:00
cc120056a8 Make git rebase interactive help match documentation.
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:28:32 -07:00
ec4e69c06a Ensure author & committer before asking for commit message.
It's better to find out you need to fix your author and
committer information before you enter a long commit message.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:27:03 -07:00
ee1e5412a7 git diff: support "-U" and "--unified" options properly
We used to parse "-U" and "--unified" as part of the GIT_DIFF_OPTS
environment variable, but strangely enough we would _not_ parse them as
part of the normal diff command line (where we only accepted "-u").

This adds parsing of -U and --unified, both with an optional numeric
argument. So now you can just say

	git diff --unified=5

to get a unified diff with a five-line context, instead of having to do
something silly like

	GIT_DIFF_OPTS="--unified=5" git diff -u

(that silly format does continue to still work, of course).

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:26:27 -07:00
a62be77f5e Add "--branches", "--tags" and "--remotes" options to git-rev-parse.
"git branch" uses "rev-parse --all" and becomes much too slow when
there are many tags (it scans all refs).  Use the new "--branches"
option of rev-parse to speed things up.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:21:02 -07:00
975bf9cf5a Merge branch 'fix'
* fix:
  include header to define uint32_t, necessary on Mac OS X
2006-05-14 16:20:15 -07:00
3f22deb7f5 Merge branch 'fix' into maint
* fix:
  include header to define uint32_t, necessary on Mac OS X
2006-05-14 16:20:09 -07:00
d9635e9c53 include header to define uint32_t, necessary on Mac OS X
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14 16:19:52 -07:00
5f7f211a54 Merge branch 'ml/cvs'
* ml/cvs:
  Change to allow subdir updates from Eclipse
  Many fixes for most operations in Eclipse.
  Added logged warnings for CVS error returns
  cvsserver: use git-rev-list instead of git-log
  git-cvsexportcommit: Add -f(orce) and -m(essage prefix) flags, small cleanups.
2006-05-14 00:42:16 -07:00
3a3e89b897 Merge branch 'fix'
* fix:
  Fix git-pack-objects for 64-bit platforms
2006-05-13 22:24:18 -07:00
ea892b27b1 Merge branch 'lt/config' into next
* lt/config:
  git config syntax updates
  Another config file parsing fix.
  checkout: use --aggressive when running a 3-way merge (-m).
  Fix git-pack-objects for 64-bit platforms
  fix diff-delta bad memory access
2006-05-13 18:49:54 -07:00
8d48ad62a9 Merge branch 'lt/fix-config' into lt/config
* lt/fix-config:
  git config syntax updates
  Another config file parsing fix.
  checkout: use --aggressive when running a 3-way merge (-m).
  Fix git-pack-objects for 64-bit platforms

with manual adjustment of t/t1300 for "git repo-config --list" option.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-13 14:11:43 -07:00
d14f776402 git config syntax updates
This updates the hierarchical section name syntax to

	[section<space>+"<randomstring>"]

where the only rule for "randomstring" is that it can't contain a newline,
and if you really want to insert a double-quote, you do it with \".

It turns that into the section name "secion.randomstring".  The
"section" part is still case insensitive, but the "randomstring"
part is case sensitive.

So you could use this for things like

	[email "torvalds@osdl.org"]
		name = Linus Torvalds

if you wanted to do the "email->name" conversion as part of the config
file format (I'm not claiming that is sensible, I'm just giving it as an
insane example). That would show up as the association

	email.torvalds@osdl.org.name -> Linus Torvalds

which is easy to parse (the "." in the email _looks_ ambiguous, but it
isn't: you know that there will always be a single key-name, so you find
the key name with "strrchr(name, '.')" and things are entirely
unambiguous).

Repo-config is updated to be able to parse the new format, and also
write things out in the new format.

[jc: rolled two patches from Linus and one fix-up from Sean into one,
 with additional adjustments for t/t1300 test to check the case
 insensitiveness of section base and variable and case sensitiveness
 of the extended section part.  Then stripped some part off to make
 the result applicable to the stale 1.3.X series that does not have
 recent enhancements. ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-13 14:00:16 -07:00
bdf0ef0824 Another config file parsing fix.
If the variable we need to store should go into a section
that currently only has a single variable (not matching
the one we're trying to insert), we will already be into
the next section before we notice we've bypassed the correct
location to insert the variable.

To handle this case we store the current location as soon
as we find a variable matching the section of our new
variable.

This breakage was brought up by Linus.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-13 14:00:16 -07:00
618faa1dc7 checkout: use --aggressive when running a 3-way merge (-m).
After doing an in-index 3-way merge, we always do the stock
"merge-index merge-one-file" without doing anything fancy;
use of --aggressive helps performance quite a bit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-13 14:00:15 -07:00
66561f5a77 Fix git-pack-objects for 64-bit platforms
The offset of an object in the pack is recorded as a 4-byte integer
in the index file.  When reading the offset from the mmap'ed index
in prepare_pack_revindex(), the address is dereferenced as a long*.
This works fine as long as the long type is four bytes wide.  On
NetBSD/sparc64, however, a long is 8 bytes wide and so dereferencing
the offset produces garbage.

[jc: taking suggestion by Linus to use uint32_t]

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-13 10:43:16 -07:00
639ca54972 fix diff-delta bad memory access
It cannot be assumed that the given buffer will never be moved when
shrinking the allocated memory size with realloc().  So let's ignore
that optimization for now.

This patch makes Electric Fence happy on Linux.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Acked-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-10 10:53:59 -07:00
7278a29a27 Merge branch 'master' into next
* master:
  checkout: use --aggressive when running a 3-way merge (-m).
  revert/cherry-pick: use aggressive merge.
  read-cache.c: use xcalloc() not calloc()
  apply: fix infinite loop with multiple patches with --index
2006-05-09 19:32:08 -07:00
f7a3276bab Merge branch 'fix'
* fix:
  checkout: use --aggressive when running a 3-way merge (-m).
  revert/cherry-pick: use aggressive merge.
2006-05-09 19:24:16 -07:00
8d7a397aab checkout: use --aggressive when running a 3-way merge (-m).
After doing an in-index 3-way merge, we always do the stock
"merge-index merge-one-file" without doing anything fancy;
use of --aggressive helps performance quite a bit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 19:23:23 -07:00
d1802851b0 revert/cherry-pick: use aggressive merge.
After doing an in-index 3-way merge, we always do the stock
"merge-index merge-one-file" without doing anything fancy;
use of --aggressive helps performance quite a bit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 19:22:25 -07:00
dab809862f Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: -F (--fixed-strings)
  builtin-grep: -w fix
  builtin-grep: typofix
2006-05-09 18:29:55 -07:00
07ea91d84f builtin-grep: -F (--fixed-strings)
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 18:29:35 -07:00
02ab1c490d builtin-grep: -w fix
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 18:27:56 -07:00
c39c4f4746 builtin-grep: typofix
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 18:15:21 -07:00
8c2462dc5b Merge branch 'jc/clean'
* jc/clean:
  Teach git-clean optional <paths>... parameters.
2006-05-09 16:52:54 -07:00
2c49009dbe Merge branch 'mw/alternates'
* mw/alternates:
  clone: don't clone the info/alternates file
  test case for transitive info/alternates
  Transitively read alternatives
2006-05-09 16:45:45 -07:00
b9895c0688 Merge branch 'jc/xsha1'
* jc/xsha1:
  get_sha1() - fix infinite loop on nonexistent stage.
  get_sha1(): :path and :[0-3]:path to extract from index.
2006-05-09 16:44:59 -07:00
143f4d94c6 Merge branch 'jc/again'
* jc/again:
  Fix users of prefix_path() to free() only when necessary
  update-index --again: take optional pathspecs
  update-index --again
2006-05-09 16:40:53 -07:00
4edd44725c Merge branch 'np/delta'
* np/delta:
  improve diff-delta with sparse and/or repetitive data
  tiny optimization to diff-delta
  replace adler32 with Rabin's polynomial in diff-delta
  use delta index data when finding best delta matches
  split the diff-delta interface
2006-05-09 16:40:28 -07:00
2fc240a7b2 Merge branch 'jc/bindiff'
* jc/bindiff:
  improve base85 generated assembly code
  binary diff and apply: testsuite.
  binary diff: further updates.
  binary patch.
2006-05-09 14:16:56 -07:00
016cd9f665 Merge branch 'fix'
* fix:
  read-cache.c: use xcalloc() not calloc()
  apply: fix infinite loop with multiple patches with --index
2006-05-09 13:54:42 -07:00
07c747ee18 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: tighten argument parsing.
2006-05-09 13:05:53 -07:00
adcb913c77 Merge branch 'ml/cvs' into next
* ml/cvs:
  Change to allow subdir updates from Eclipse
  Many fixes for most operations in Eclipse.
  Added logged warnings for CVS error returns
  cvsserver: use git-rev-list instead of git-log
  git-cvsexportcommit: Add -f(orce) and -m(essage prefix) flags, small cleanups.
2006-05-09 13:05:48 -07:00
5c222ce2c4 Merge branch 'tojunio' of http://locke.catalyst.net.nz/git/git-martinlanghoff into ml/cvs
* 'tojunio' of http://locke.catalyst.net.nz/git/git-martinlanghoff:
  Change to allow subdir updates from Eclipse
  Many fixes for most operations in Eclipse.
  Added logged warnings for CVS error returns
  cvsserver: use git-rev-list instead of git-log
  git-cvsexportcommit: Add -f(orce) and -m(essage prefix) flags, small cleanups.
2006-05-09 12:25:21 -07:00
28cc4ab422 read-cache.c: use xcalloc() not calloc()
Elsewhere we use xcalloc(); we should consistently do so.

Signed-off-by: Yakov Lerner <iler.ml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 06:28:59 -07:00
dbd0f7d322 apply: fix infinite loop with multiple patches with --index
When multiple patches are passed to git-apply, it will attempt
to open multiple file descriptors to an index, which means
multiple entries will be in the circular cache_file_list.

This change makes git-apply only open the index once and
write the index at exit.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-09 01:29:38 -07:00
5acd64edec builtin-grep: tighten argument parsing.
I mistyped

	git grep next -e '"^@"' '*.c'

and got many hits that contain "next" without complaint.
Obviously what I meant to say was:

	git grep -e '"^@"' next -- '*.c'

This tightens the argument parsing rule a bit:

 - All "grep" parameters should come first;

 - If there is no -e nor -f to specify pattern, the first non
   option string is the parameter;

 - After that, zero or more revs can follow.

 - An optional '--' can be present, and is skipped.

 - All the rest are pathspecs.  If '--' was not there, they must
   be paths that exist in the working tree.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 23:55:47 -07:00
bd8e265d67 Merge branch 'jc/clean' into next
* jc/clean:
  Teach git-clean optional <paths>... parameters.
  Separate object name errors from usage errors
  Documentation: {caret} fixes (git-rev-list.txt)
  Fix "git diff --stat" with long filenames
  Fix repo-config set-multivar error return path.
2006-05-08 16:43:23 -07:00
dd1139a94c Merge branch 'jc/bindiff' into next
* jc/bindiff:
  improve base85 generated assembly code
2006-05-08 16:42:12 -07:00
7dd0d0bf52 Merge branch 'jc/xsha1' into next
* jc/xsha1:
  get_sha1() - fix infinite loop on nonexistent stage.
2006-05-08 16:41:15 -07:00
4ca72f20c3 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: documentation
  Teach -f <file> option to builtin-grep.
2006-05-08 16:41:10 -07:00
393e3b1910 Teach git-clean optional <paths>... parameters.
When optional paths arguments are given, git-clean passes them
to underlying git-ls-files; with this, you can say:

	git clean 'temp-*'

to clean only the garbage files whose names begin with 'temp-'.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Pavel Roskin <proski@gnu.org>
2006-05-08 16:40:45 -07:00
45f75a0167 Merge branch 'fix'
* fix:
  Separate object name errors from usage errors
  Documentation: {caret} fixes (git-rev-list.txt)
  Fix "git diff --stat" with long filenames
  Fix repo-config set-multivar error return path.
2006-05-08 16:40:23 -07:00
31fff305bc Separate object name errors from usage errors
Separate object name errors from usage errors.

Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 16:25:33 -07:00
e7cef45fbc get_sha1() - fix infinite loop on nonexistent stage.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 15:44:06 -07:00
afb4ff2069 Documentation: {caret} fixes (git-rev-list.txt)
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 13:46:53 -07:00
1c57119c70 builtin-grep: documentation
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 13:28:49 -07:00
aa8c79ad03 Teach -f <file> option to builtin-grep.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 13:28:27 -07:00
addaacab07 improve base85 generated assembly code
This code is arguably pretty hot, if you use binary patches of course.
This patch helps gcc generate both smaller and faster code especially in
the error free path.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 11:05:01 -07:00
5d6a9f45e1 Fix "git diff --stat" with long filenames
When we cut off the front of a filename to make it fit on the line, we add
a "..." in front. However, the way the "git diff" code was written, we
will never reset the prefix back to the empty string, so every single
filename afterwards will have the "..." prefix, whether appropriate or
not.

You can see this with "git diff v2.6.16.." on the current kernel tree,
since there are filenames with long names that changed there:

 [ snip snip ]
 Documentation/filesystems/vfs.txt                  |  229
 .../firmware_class/firmware_sample_driver.c        |    3
 .../firmware_sample_firmware_class.c               |    1
 ...Documentation/fujitsu/frv/kernel-ABI.txt           |  192
 ...Documentation/hwmon/w83627hf                       |    4
 [ snip snip ]

notice how the two Documentation/firmware** filenames caused the "..." to
be added, but then the later filenames don't want it, and it also screws
up the alignment of the line numbering afterwards.

Trivially fixed by moving the declaration (and initial setting) of the
"prefix" variable into the for-loop where it is used.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08 10:54:30 -07:00
f8ba655ee4 Fix repo-config set-multivar error return path.
This hopefully fixes the problem an earlier commit 5d8ee9ceb attemted
to fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 21:27:30 -07:00
b0121fb3f2 Merge branch 'jc/gitlink' into next
* jc/gitlink:
  write-tree: --prefix=<path>
  read-tree: --prefix=<path>/ option.
2006-05-07 16:17:43 -07:00
7f498065e9 Merge branch 'mw/alternates' into next
* mw/alternates:
  clone: don't clone the info/alternates file
  test case for transitive info/alternates
  Transitively read alternatives
  repack: honor -d even when no new pack was created
  clone: keep --reference even with -l -s
  repo-config: document what value_regexp does a bit more clearly.
  Release config lock if the regex is invalid
  core-tutorial.txt: escape asterisk
  Sparse fix for builtin-diff
  Fix users of prefix_path() to free() only when necessary
2006-05-07 16:06:45 -07:00
2c4c17fbb9 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  Fix crash when reading the empty tree
2006-05-07 16:06:44 -07:00
0438402271 clone: don't clone the info/alternates file
Now that the cloned alternates file is parsed, too we don't need to
copy it into our new repository, we just reference it.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:41:35 -07:00
dd05ea1799 test case for transitive info/alternates
Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:41:35 -07:00
c2f493a4ae Transitively read alternatives
When adding an alternate object store then add entries from its
info/alternates files, too.
Relative entries are only allowed in the current repository.
Loops and duplicate alternates through multiple repositories are ignored.
Just to be sure that nothing breaks it is not allow to build deep
nesting levels using info/alternates.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:41:35 -07:00
82000d7464 Change to allow subdir updates from Eclipse
(Now you can rightclick any directory and select team-update/team-commit) and it should work
2006-05-08 10:38:31 +12:00
fd60acaced Merge branch 'fix'
* fix:
  repack: honor -d even when no new pack was created
  clone: keep --reference even with -l -s
  repo-config: document what value_regexp does a bit more clearly.
  Release config lock if the regex is invalid
  core-tutorial.txt: escape asterisk
2006-05-07 15:36:39 -07:00
d92f1dc63f Sparse fix for builtin-diff
You gotta love sparse:

builtin-diff.c:88:4: error: Just how const do you want this type to be?

Signed-off-by: Peter Hagervall <hager@cs.umu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:36:10 -07:00
178613c737 repack: honor -d even when no new pack was created
If all objects are reachable via an alternate object store then we
still have to remove all obsolete local packs.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:35:50 -07:00
cf9dc65368 clone: keep --reference even with -l -s
Both -l -s and --reference update objects/info/alternates and used
to write over each other.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:33:43 -07:00
7d90095abe Many fixes for most operations in Eclipse.
* Implemented global -n option
* Implemented "Questionable"
* Fixed Directory method, I _believe_ it's now correct in both cmdline and Eclipse.
* Directory method Now looks for localdir of "." and compares the repo dir, uses THIS as a basis for all directory level calculations.
* Added extra parameter to filenamesplit() to force stripping of "prepended" directory name. This ensures commits/updates etc work from any directory in the source tree.
* Modified argsfromdir() so it is "always" called. This means that when the client specifies a directory, the method can detect this and behave accordingly (this is currently only implemented for the '.' directory)
* Fixed "commit" method to correctly work from in a subdir
2006-05-08 10:33:36 +12:00
6fe31e2e4c repo-config: document what value_regexp does a bit more clearly.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:32:51 -07:00
5d8ee9ceb8 Release config lock if the regex is invalid
Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 15:31:06 -07:00
568907f520 Added logged warnings for CVS error returns 2006-05-08 10:10:48 +12:00
50c08d4872 Merge with git://kernel.org/pub/scm/git/git.git 2006-05-08 10:03:37 +12:00
245f1029d6 core-tutorial.txt: escape asterisk
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 13:55:36 -07:00
b6c4a480b3 Fix crash when reading the empty tree
cvsimport needs to call git-read-tree without arguments to create an empty
tree.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07 13:54:46 -07:00
c2b9e6994d Merge branch 'js/fmt-patch' into next
* js/fmt-patch:
  fmt-patch: understand old <his> notation
  t1300-repo-config: two new config parsing tests.
  Another config file parsing fix.
2006-05-06 21:47:22 -07:00
e04156a437 Merge branch 'jc/reupdate' into next
* jc/reupdate:
  Fix users of prefix_path() to free() only when necessary
2006-05-06 21:47:07 -07:00
0cc9e70c4c Fix users of prefix_path() to free() only when necessary
Unfortunately, prefix_path() sometimes returns a newly xmalloc()ed buffer,
and in other cases it returns a substring!

For example, when calling

	git update-index ./hello.txt

prefix_path() returns "hello.txt", but does not allocate a new buffer. The
original code only checked if the result of prefix_path() was different from
what was passed in, and thusly trigger a segmentation fault.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-06 21:36:24 -07:00
be65e7d9fb Fix users of prefix_path() to free() only when necessary
Unfortunately, prefix_path() sometimes returns a newly xmalloc()ed buffer,
and in other cases it returns a substring!

For example, when calling

	git update-index ./hello.txt

prefix_path() returns "hello.txt", but does not allocate a new buffer. The
original code only checked if the result of prefix_path() was different from
what was passed in, and thusly trigger a segmentation fault.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-06 21:34:32 -07:00
e686eb9870 fmt-patch: understand old <his> notation
When calling "git fmt-patch HEAD~5", you now get the same as if you would
have said "git fmt-patch HEAD~5..". This makes it easier for my fingers
which are so used to the old syntax.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-06 14:43:33 -07:00
c66b6c067e Merge branch 'master' into js/fmt-patch
* master: (109 commits)
  t1300-repo-config: two new config parsing tests.
  Another config file parsing fix.
  update-index: plug memory leak from prefix_path()
  checkout-index: plug memory leak from prefix_path()
  update-index --unresolve: work from a subdirectory.
  pack-object: squelch eye-candy on non-tty
  core.prefersymlinkrefs: use symlinks for .git/HEAD
  repo-config: trim white-space before comment
  Fix for config file section parsing.
  Clarify git-cherry documentation.
  Update git-unpack-objects documentation.
  Fix up docs where "--" isn't displayed correctly.
  Several trivial documentation touch ups.
  git-svn 1.0.0
  git-svn: documentation updates
  delta: stricter constness
  Makefile: do not link rev-list any specially.
  builtin-push: --all and --tags _are_ explicit refspecs
  builtin-log/whatchanged/show: make them official.
  show-branch: omit uninteresting merges.
  ...
2006-05-06 14:42:59 -07:00
bd886fd3ea t1300-repo-config: two new config parsing tests.
- correctly insert a new variable into a section that only
  contains a single (different) variable.

- correctly insert a new section that matches the initial
  substring of an existing section.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-06 14:03:13 -07:00
6f81bf16a9 Another config file parsing fix.
If the variable we need to store should go into a section
that currently only has a single variable (not matching
the one we're trying to insert), we will already be into
the next section before we notice we've bypassed the correct
location to insert the variable.

To handle this case we store the current location as soon
as we find a variable matching the section of our new
variable.

This breakage was brought up by Linus.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-06 14:03:09 -07:00
aadc81c13b Merge branch 'jc/reupdate' into next
* jc/reupdate:
  update-index --again: take optional pathspecs
  update-index --again
  update-index: plug memory leak from prefix_path()
  checkout-index: plug memory leak from prefix_path()
  update-index --unresolve: work from a subdirectory.
2006-05-06 00:20:54 -07:00
7bb0d900d7 Merge branch 'jc/bindiff' into next
* jc/bindiff:
  binary diff and apply: testsuite.
2006-05-06 00:20:45 -07:00
42d0ee8302 binary diff and apply: testsuite.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-06 00:15:54 -07:00
22293b9c41 update-index --again: take optional pathspecs
When pathspecs are given, update-index --again further limits
the set of paths to be updated to those that match them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 23:11:29 -07:00
83e77a25dc update-index --again
After running 'git-update-index' for some paths, you may want to
do the update on the same set of paths again.

The new flag --again checks the paths whose index entries are
are different from the HEAD commit and updates them from the
working tree contents.

This was brought up by Carl Worth on #git.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 22:57:27 -07:00
fb69a760cc update-index: plug memory leak from prefix_path()
prefix_path() sometimes allocates new memory and returns it, and
other times returns the incoming path argument intact.  The
callers need to be a bit careful not to leak memory.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 22:53:56 -07:00
dc46da2286 checkout-index: plug memory leak from prefix_path()
prefix_path() sometimes allocates new memory and returns it, and
other times returns the incoming path argument intact.  The
callers need to be a bit careful not to leak memory.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 22:40:45 -07:00
09895c1fa0 update-index --unresolve: work from a subdirectory.
It completely forgot to take the prefix into account, so you
had to feed the full path even when you start from a
subdirectory, which was nonsensical.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 17:50:06 -07:00
2749fa7771 Merge branch 'jc/bindiff' into next
* jc/bindiff:
  binary diff: further updates.
  binary patch.
  pack-object: squelch eye-candy on non-tty
  core.prefersymlinkrefs: use symlinks for .git/HEAD
  repo-config: trim white-space before comment
  Fix for config file section parsing.
  Clarify git-cherry documentation.
  Update git-unpack-objects documentation.
  Fix up docs where "--" isn't displayed correctly.
  Several trivial documentation touch ups.
  git-svn 1.0.0
  git-svn: documentation updates
  delta: stricter constness
  Makefile: do not link rev-list any specially.
  builtin-push: --all and --tags _are_ explicit refspecs
2006-05-05 15:36:04 -07:00
0660626caf binary diff: further updates.
This updates the user interface and generated diff data format.

 * "diff --binary" is used to signal that we want an e-mailable
   binary patch.  It implies --full-index and -p.

 * "apply --allow-binary-replacement" acquired a short synonym
   "apply --binary".

 * After the "GIT binary patch\n" header line there is a token
   to record which binary patch mechanism was used, so that we
   can extend it later.  Currently there are two mechanisms
   defined: "literal" and "delta".  The former records the
   deflated postimage and the latter records the deflated delta
   from the preimage to postimage.

   For purely implementation convenience, I added the deflated
   length after these "literal/delta" tokens (otherwise the
   decoding side needs to guess and reallocate the buffer while
   inflating).  Improvement patches are very welcomed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 15:24:32 -07:00
051308f6e9 binary patch.
This adds "binary patch" to the diff output and teaches apply
what to do with them.

On the diff generation side, traditionally, we said "Binary
files differ\n" without giving anything other than the preimage
and postimage object name on the index line.  This was good
enough for applying a patch generated from your own repository
(very useful while rebasing), because the postimage would be
available in such a case.  However, this was not useful when the
recipient of such a patch via e-mail were to apply it, even if
the preimage was available.

This patch allows the diff to generate "binary" patch when
operating under --full-index option.  The binary patch follows
the usual extended git diff headers, and looks like this:

	"GIT binary patch\n"
	<length byte><data>"\n"
	...
	"\n"

Each line is prefixed with a "length-byte", whose value is upper
or lowercase alphabet that encodes number of bytes that the data
on the line decodes to (1..52 -- 'A' means 1, 'B' means 2, ...,
'Z' means 26, 'a' means 27, ...).  <data> is 1 or more groups of
5-byte sequence, each of which encodes up to 4 bytes in base85
encoding.  Because 52 / 4 * 5 = 65 and we have the length byte,
an output line is capped to 66 characters.  The payload is the
same diff-delta as we use in the packfiles.

On the consumption side, git-apply now can decode and apply the
binary patch when --allow-binary-replacement is given, the diff
was generated with --full-index, and the receiving repository
has the preimage blob, which is the same condition as it always
required when accepting an "Binary files differ\n" patch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 15:24:32 -07:00
86118bcb46 pack-object: squelch eye-candy on non-tty
One of my post-update scripts runs a git-fetch into a separate
repository and sends the results back to me (2>&1); I end up
getting this in the mail:

    Generating pack...
    Done counting 180 objects.
    Result has 131 objects.
    Deltifying 131 objects.
       0% (0/131) done^M   1% (2/131) done^M...

This defaults not to do the progress report when not on a tty.

You could give --progress to force the progress report, but
let's not bother even documenting it nor mentioning it in the
usage string.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 15:24:12 -07:00
a814deca8b Merge branch 'js/fmt-patch' into next
* js/fmt-patch:
  Teach fmt-patch about --keep-subject
  Teach fmt-patch about --numbered
  fmt-patch: implement -o <dir>
  fmt-patch: output file names to stdout
  Teach fmt-patch to write individual files.
2006-05-05 14:54:43 -07:00
188a634fec Merge branch 'fix'
* fix:
  core.prefersymlinkrefs: use symlinks for .git/HEAD
  repo-config: trim white-space before comment
  Fix for config file section parsing.
2006-05-05 14:49:49 -07:00
e388c73825 core.prefersymlinkrefs: use symlinks for .git/HEAD
When inspecting a project whose build infrastructure used to
assume that .git/HEAD is a symlink ref, core.prefersymlinkrefs
in the config file of such a project would help to bisect its
history.

Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from 9f0bb90d16 commit)
2006-05-05 14:37:08 -07:00
7ebdba6142 repo-config: trim white-space before comment
Earlier, calling

	git-repo-config core.hello

on a .git/config like this:

	[core]
		hello = world ; a comment

would yield "world " (i.e. with a trailing space).

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from c1aee1fd8d commit)
2006-05-05 14:34:47 -07:00
93ddef3e2d Fix for config file section parsing.
Currently, if the target key has a section that matches
the initial substring of another section we mistakenly
believe we've found the correct section.  To avoid this
problem, ensure that the section lengths are identical
before comparison.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:33:58 -07:00
81ae43cdc4 Clarify git-cherry documentation.
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:23:08 -07:00
ae0b219c8e Update git-unpack-objects documentation.
Document that git-unpack-objects will not produce any
results when used on a pack that exists in a repository;
move it first.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:22:32 -07:00
e994004f93 Fix up docs where "--" isn't displayed correctly.
A bare "--" doesn't show up in man or html pages correctly
as two individual dashes unless backslashed as \--
in the asciidoc source.  Note, no backslash is needed
inside a literal block.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:21:52 -07:00
2b5f3ed316 Several trivial documentation touch ups.
Move incorrect asciidoc level 2 titles back to level 1.

  Show output of git-name-rev in man page example.

  Reword sentences that begin with a period (.) in asciidoc
  numbered lists to work around conversion to man page bug.

  Mention that git-repack now calls git-prune-packed
  when the -d option is passed to it.

  [imap] section headers in the config file example need to be
  contained in a literal block.  imap.pass is the proper config
  file variable to use, not imap.password.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:21:18 -07:00
88521450fc git-svn 1.0.0
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:19:11 -07:00
81c5a0e6e5 git-svn: documentation updates
* Clarify that 'init' requires an argument
* Remove instances of 'SVN_URL' in the manpage, it's not an
  environment variable.
* Refer to 'Additional Fetch Arguments' when documenting 'fetch'
* document --authors-file / -A option

Thanks to Pavel Roskin and Seth Falcon for bringing these issues
to my attention.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:18:41 -07:00
8ac80a5701 Teach fmt-patch about --keep-subject
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:11:59 -07:00
596524b33d Teach fmt-patch about --numbered
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:11:57 -07:00
2448482b3d fmt-patch: implement -o <dir>
I had to move the command line parsing around a little; setup_revisions()
could mistaken <dir> for a valid ref.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 14:11:55 -07:00
81f3a188a3 fmt-patch: output file names to stdout
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 13:56:01 -07:00
0377db77da Teach fmt-patch to write individual files.
When called with "--stdout", it still writes to standard output.

Notable differences to git-format-patch:

	- since fmt-patch uses the standardized logging machinery, it is
	  no longer "From nobody", but "From <commit_sha1>",

	- the empty lines before and after the "---" just before the
	  diffstat are no longer there,

	- git-format-patch outputs the commit_sha1 just before the first
	  diff, which fmt-patch does not,

	- the file names are no longer output to stdout, but to stderr
	  (since stdout is freopen()ed all the time), and

	- "git fmt-patch HEAD^" does not work as expected: it outputs
	  *all* commits reachable from HEAD^!

The last one is possibly a showstopper. At least I used to call that
command quite often...

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 13:55:45 -07:00
ac4c758adc delta: stricter constness
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-05 02:50:11 -07:00
fb335158d5 Makefile: do not link rev-list any specially.
We used to depend on bignum from openssl for rev-list to compute
merge-order, but there is no reason to use different build
recipe from other programs anymore.  Just build it with git-%$X
rule like everybody else.

Noticed by Alexey Dobriyan.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-04 17:38:41 -07:00
5edbcd8d77 builtin-push: --all and --tags _are_ explicit refspecs
... so do not get refspecs from remotes/* or the config if one of them
was specified.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-04 17:28:14 -07:00
25a9ff836f Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  fsck-objects: do not segfault on missing tree in cache-tree
2006-05-04 00:17:28 -07:00
f8098a3329 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: -L (--files-without-match).
  builtin-grep: binary files -a and -I
  builtin-grep: terminate correctly at EOF
2006-05-04 00:15:23 -07:00
4cc0b8a41b Merge branch 'js/fetchconfig' into next
* js/fetchconfig:
  Add a conversion tool to migrate remote information into the config
  fetch, pull: ask config for remote information
  Add a few more words to the glossary.
  Added definitions for a few words:
  Alphabetize the glossary.
  sha1_to_hex() usage cleanup
2006-05-04 00:14:56 -07:00
a4a6e4ab32 Add a conversion tool to migrate remote information into the config
Use this tool to rewrite the .git/remotes/* files into the config.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-04 00:07:06 -07:00
73136b2e8a fetch, pull: ask config for remote information
Now you can say

    [remote.junio]
        url = git://git.kernel.org/pub/scm/git/git.git
        fetch = next:next

    in your .git/config.

[jc: fixed up the log message that still said "pull" ]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-04 00:07:06 -07:00
5892fc6504 Merge branch 'jc/logs'
* jc/logs:
  builtin-log/whatchanged/show: make them official.
2006-05-04 00:04:32 -07:00
476d239804 Merge branch 'jc/show-branch-dense'
* jc/show-branch-dense:
  show-branch: omit uninteresting merges.
2006-05-03 23:58:35 -07:00
df71b4f7f9 Merge branch 'jc/symref'
* jc/symref:
  core.prefersymlinkrefs: use symlinks for .git/HEAD
2006-05-03 23:54:55 -07:00
230f544e87 Merge branch 'jc/diff'
* jc/diff:
  builtin-diff: call it "git-diff", really.
  builtin-diff.c: die() formatting type fix.
  built-in diff: assorted updates.
  built-in diff.
2006-05-03 23:54:34 -07:00
6b16250a45 Merge branch 'js/repoconfig'
* js/repoconfig:
  repo-config: deconvolute logics
  repo-config: readability fixups.
  repo-config: support --get-regexp
2006-05-03 23:41:28 -07:00
d820f91871 Merge branch 'jc/count'
* jc/count:
  builtin-count-objects: open packs when running -v
  builtin-count-objects: make it official.
  built-in count-objects.
2006-05-03 23:40:39 -07:00
5dfde87156 Merge branch 'js/remoteconfig'
* js/remoteconfig:
  Revert "fetch, pull: ask config for remote information"
  fetch, pull: ask config for remote information
  builtin-push: also ask config for remote information
  builtin-push: make it official.
  Fix builtin-push to honor Push: lines in remotes file.
  builtin-push: resurrect parsing of Push: lines
  git builtin "push"
2006-05-03 23:28:09 -07:00
dd371b49f9 Merge branch 'maint'
* maint:
  Add a few more words to the glossary.
  Added definitions for a few words:
  Alphabetize the glossary.
2006-05-03 23:00:02 -07:00
7abd7117ec Add a few more words to the glossary.
Clean up a few entries and fix typos.

    bare repository
    cherry-picking
    hook
    topic branch

[jc: removing questionable "symbolic ref -- see 'ref'" for now.]

Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 22:59:30 -07:00
9290cd58c3 Added definitions for a few words:
fast forward
    pickaxe
    refspec
    tracking branch

Wild hack allows "link:git-" prefix to reference commands too.

Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 22:31:50 -07:00
aa9b1573a5 Alphabetize the glossary.
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 22:31:43 -07:00
dcb3450fd8 sha1_to_hex() usage cleanup
Somebody on the #git channel complained that the sha1_to_hex() thing uses
a static buffer which caused an error message to show the same hex output
twice instead of showing two different ones.

That's pretty easily rectified by making it uses a simple LRU of a few
buffers, which also allows some other users (that were aware of the buffer
re-use) to be written in a more straightforward manner.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 22:06:45 -07:00
e23d2d6b76 builtin-grep: -L (--files-without-match).
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 21:46:29 -07:00
6d60bbefdc fsck-objects: do not segfault on missing tree in cache-tree
Even if trees are missing in cache-tree, we should continue and
check the rest of the object database.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 21:17:45 -07:00
b8d0f5a003 builtin-grep: binary files -a and -I
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 21:05:29 -07:00
7ed36f56e3 builtin-grep: terminate correctly at EOF
It barfed and segfaulted with an incomplete line.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 21:03:25 -07:00
e33b1dfe28 Merge branch 'master' into next
* master:
  fix various typos in documentation
  blame: Fix path pruning
  cvsserver: use git-rev-list instead of git-log
  Fix "git-log --parents" breakage post v1.3.0
  add documentation for update-index --unresolve
2006-05-03 17:18:21 -07:00
73aeee6847 Merge branch 'js/repoconfig' into next
* js/repoconfig:
  repo-config: deconvolute logics
2006-05-03 17:15:47 -07:00
935e714204 Merge branch 'fix'
* fix:
  fix various typos in documentation
2006-05-03 17:15:06 -07:00
899707dac0 blame: Fix path pruning
This makes git-blame useable again, it has been totally broken for
some time on larger repositories.

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 17:09:36 -07:00
095acb8a2a cvsserver: use git-rev-list instead of git-log
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 16:32:28 -07:00
8f5ff31f8e repo-config: deconvolute logics
It was rightly noticed that the logic is quite convoluted. Fix that.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 16:26:29 -07:00
7873d984cf Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  cache-tree: a bit more debugging support.
  read-tree: invalidate cache-tree entry when a new index entry is added.
  Fix test-dump-cache-tree in one-tree disappeared case.
2006-05-03 16:17:33 -07:00
00703e6d68 cache-tree: a bit more debugging support.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 16:10:45 -07:00
c2b9ae4330 read-tree: invalidate cache-tree entry when a new index entry is added.
When doing two-way merge, we failed to invalidate the directory
that a new entry is added (we correctly did so for modified and
deleted entries).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 16:07:02 -07:00
a248c9614f cvsserver: use git-rev-list instead of git-log
On 5/4/06, Linus Torvalds <torvalds@osdl.org> wrote:
> No it wasn't. "git log --parents" was definitely supposed to still work.
>
> That said, I suspect a git-cvsserver kind of usage is better off using
> "git-rev-list --parents HEAD" instead, which didn't break in the first
> place.
2006-05-04 10:51:46 +12:00
a84faf7770 Fix test-dump-cache-tree in one-tree disappeared case.
When reconstructing an invalidated subtree for reference purposes by
test-dump-cache-tree, we did not handle the case where we shouldn't
have a cached and invalidated subtree in the result, leading to an
unneeded die().

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 15:33:32 -07:00
c8c893c62b Fix "git-log --parents" breakage post v1.3.0
Post 1.3.0 "git log" forgets to list parent commits on the first line
when --parents is given.  git-cvsserver relied on it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 14:19:02 -07:00
060729dd7e add documentation for update-index --unresolve
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 14:19:01 -07:00
de5f2bf361 fix various typos in documentation
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03 14:08:41 -07:00
24e12579fc Merge with git://kernel.org/pub/scm/git/git.git 2006-05-03 22:27:33 +12:00
86c2f32b19 Merge branch 'jc/count' into next
* jc/count:
  builtin-count-objects: open packs when running -v
2006-05-02 23:03:52 -07:00
80fe7d2b54 builtin-count-objects: open packs when running -v
Otherwise we would report absolutely no objects in a fully
packed repository.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 23:03:15 -07:00
fd9088a8c7 Merge branch 'jc/symref' into next
* jc/symref:
  core.prefersymlinkrefs: use symlinks for .git/HEAD
2006-05-02 22:04:34 -07:00
e0d7d6402d Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: tighten path wildcard vs tree traversal.
2006-05-02 22:04:16 -07:00
9f6532dd65 Merge branch 'np/delta' into next
* np/delta:
  improve diff-delta with sparse and/or repetitive data
  tiny optimization to diff-delta
2006-05-02 21:56:29 -07:00
9d275ed3e3 Merge branch 'js/repoconfig' into next
* js/repoconfig:
  repo-config: readability fixups.
  repo-config: support --get-regexp
  gitk: Allow view to specify arbitrary arguments to git-rev-list
  gitk: Fix file list display when files are renamed
  gitk: Basic support for highlighting one view within another
  gitk: Add a tree-browsing mode
  gitk: Use a text widget for the file list
  gitk: add menu item for editing the current view
  gitk: Implement "permanent" views (stored in ~/.gitk)
  gitk: Use git-rev-parse only to identify file/dir names on cmd line
  gitk: Remember the view in the history list
  gitk: Don't reread git-rev-list output from scratch on view switch
  gitk: Fix various bugs in the view support
  gitk: Make File->Update work properly again
  gitk: Implement multiple views
  [PATCH] gitk: Add a visual tag for remote refs
2006-05-02 21:33:40 -07:00
06a9f92035 improve diff-delta with sparse and/or repetitive data
It is useless to preserve multiple hash entries for consecutive blocks
with the same hash.  Keeping only the first one will allow for matching
the longest string of identical bytes while subsequent blocks will only
allow for shorter matches.  The backward matching code will match the
end of it as necessary.

This improves both performances (no repeated string compare with long
successions of identical bytes, or even small group of bytes), as well
as compression (less likely to need random hash bucket entry culling),
especially with sparse files.

With well behaved data sets this patch doesn't change much.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 21:32:39 -07:00
2d08e5dd73 tiny optimization to diff-delta
This is my assembly freak side looking at generated code again.  And
since create_delta() is certainly pretty high on the radar every bits
count.  In this case shorter code is generated if hash_mask is not
copied to a local variable.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 21:32:32 -07:00
e098c6f82a repo-config: readability fixups.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 21:06:56 -07:00
9f0bb90d16 core.prefersymlinkrefs: use symlinks for .git/HEAD
When inspecting a project whose build infrastructure used to
assume that .git/HEAD is a symlink ref, core.prefersymlinkrefs
in the config file of such a project would help to bisect its
history.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 20:09:56 -07:00
2fa9a0fb31 repo-config: support --get-regexp
With --get-regexp, output all key/value pairs where the key matches a
regexp. Example:

	git-repo-config --get-regexp remote.*.url

will output something like

	remote.junio.url git://git.kernel.org/pub/scm/git/git.git
	remote.gitk.url git://git.kernel.org/pub/scm/gitk/gitk.git

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 20:09:54 -07:00
3d990f110c Merge git://git.kernel.org/pub/scm/gitk/gitk
* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Allow view to specify arbitrary arguments to git-rev-list
  gitk: Fix file list display when files are renamed
  gitk: Basic support for highlighting one view within another
  gitk: Add a tree-browsing mode
  gitk: Use a text widget for the file list
  gitk: add menu item for editing the current view
  gitk: Implement "permanent" views (stored in ~/.gitk)
  gitk: Use git-rev-parse only to identify file/dir names on cmd line
  gitk: Remember the view in the history list
  gitk: Don't reread git-rev-list output from scratch on view switch
  gitk: Fix various bugs in the view support
  gitk: Make File->Update work properly again
  gitk: Implement multiple views
  [PATCH] gitk: Add a visual tag for remote refs
2006-05-02 20:07:14 -07:00
1e3d90e013 builtin-grep: tighten path wildcard vs tree traversal.
The earlier code descended into Documentation/technical when
given "Documentation/how*" as the pattern, which was too loose.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 17:30:07 -07:00
098dd8a34b gitk: Allow view to specify arbitrary arguments to git-rev-list
The list of arguments to git-rev-list, including arguments that
select the range of commits, is now a part of the view specification.
If any arguments are given to gitk, they become part of the
"Command line" view, and the non-file arguments become the default
for any new views created.

Getting an error from git-rev-list is no longer fatal; instead the
error window pops up, and when you press OK, the main window just
shows "No commits selected".

The git-rev-list arguments are entered in an entry widget in the
view editor window using shell quoting conventions, not Tcl quoting
conventions.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-03 09:32:53 +10:00
6a40327d24 Merge branch 'master' into next
* master:
  git-send-email: fix version string to be valid perl
  Give the user a hint for how to continue in the case that git-am fails because it requires user intervention
  repo-config: trim white-space before comment
  repo-config: fix segfault with no argument.
2006-05-02 16:22:11 -07:00
fc71b89fb6 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: support -w (--word-regexp).
  builtin-grep: support -c (--count).
  builtin-grep: allow more than one patterns.
  builtin-grep: allow -<n> and -[ABC]<n> notation for context lines.
2006-05-02 16:15:29 -07:00
7839a25eab builtin-grep: support -w (--word-regexp).
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 16:08:57 -07:00
2c866cf1c2 builtin-grep: support -c (--count).
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 15:46:32 -07:00
f9b9faf6f8 builtin-grep: allow more than one patterns.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 15:45:48 -07:00
f462ebb48b builtin-grep: allow -<n> and -[ABC]<n> notation for context lines.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 15:17:05 -07:00
782b3b6aaf Merge branch 'fix'
* fix:
  git-send-email: fix version string to be valid perl
  Give the user a hint for how to continue in the case that git-am fails because it requires user intervention
2006-05-02 15:05:34 -07:00
e923effb43 git-send-email: fix version string to be valid perl
This makes git-send-email easier to develop and debug, skipping the need
to `make git-send-email` every time.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 14:59:58 -07:00
ec4b93ee75 Merge branch 'js/remoteconfig' into next
* js/remoteconfig:
  Revert "fetch, pull: ask config for remote information"
2006-05-02 14:17:39 -07:00
c9889e4085 Revert "fetch, pull: ask config for remote information"
This reverts 5a223a0d43 commit.
I asked Johannes to roll an updated version, so let's wait for it.
2006-05-02 14:16:46 -07:00
c1aee1fd8d repo-config: trim white-space before comment
Earlier, calling

	git-repo-config core.hello

on a .git/config like this:

	[core]
		hello = world ; a comment

would yield "world " (i.e. with a trailing space).

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 13:23:48 -07:00
cfa24e184a repo-config: fix segfault with no argument.
An earlier addition of --list feature was carelessly done and
caused an invalid access to argv[1] when it was not given.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 12:54:12 -07:00
ced9456a27 Give the user a hint for how to continue in the case that git-am fails because it requires user intervention
Give the user a hint for how to continue in the case that git-am fails
because it requires user intervention.

Signed-off-by: Robert Shearman <rob@codeweaves.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 12:42:12 -07:00
89b11d3ba5 gitk: Fix file list display when files are renamed
The conversion of the file list to use a text widget assumed incorrectly
that the list of files from git-diff-tree -r would correspond 1-1 with
the diff sections in the output of git-diff-tree -r -p -C, which is
not true when renames are detected.  This fixes it by keeping the
elements in the difffilestart list in the order they appear in the
file list window.

Since this means that the elements of difffilestart are no longer
necessarily in ascending order, it's somewhat hard to do the dynamic
highlighting in the file list as the diff window is scrolled, so I
have taken that out for now.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-02 19:55:31 +10:00
5d028406e5 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: printf %.*s length is int, not ptrdiff_t.
2006-05-02 01:28:39 -07:00
a24f1e254e builtin-grep: printf %.*s length is int, not ptrdiff_t.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 01:28:02 -07:00
a93829ab35 Merge branch 'js/remoteconfig' into next
* js/remoteconfig:
  fetch, pull: ask config for remote information
  builtin-push: also ask config for remote information
2006-05-02 01:04:14 -07:00
5a223a0d43 fetch, pull: ask config for remote information
Now you can say

[remote.junio]
	url = git://git.kernel.org/pub/scm/git/git.git
	pull = next:next

in your .git/config.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 01:03:25 -07:00
97d4df0b29 builtin-push: also ask config for remote information
Now you can store your remote information in the config file like this:

[remote.upstream]
	url = me@company.com:the-project
	push = master:iceballs

[jc: fixed up to adjust a different fix for Push: lines earlier.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-02 01:03:02 -07:00
71c1783c23 Merge branch 'lt/push' into next
* lt/push:
  builtin-push: make it official.
2006-05-01 23:41:57 -07:00
54eb2d3ff9 builtin-push: make it official.
Remove the shell script version, and hardlink the git binary to it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 23:40:37 -07:00
302f57f13f Merge branch 'jc/show-branch-dense' into next
* jc/show-branch-dense:
  show-branch: omit uninteresting merges.
2006-05-01 23:37:47 -07:00
c24fe420d3 show-branch: omit uninteresting merges.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 23:19:13 -07:00
a9fb582323 Merge branch 'jc/count' into next
* jc/count:
  builtin-count-objects: make it official.
2006-05-01 23:18:09 -07:00
064c5bceee Merge branch 'jc/logs' into next
* jc/logs:
  builtin-log/whatchanged/show: make them official.
2006-05-01 23:16:35 -07:00
7b763f7c65 builtin-log/whatchanged/show: make them official.
Remove the shell script version, and hardlink the git binary to
them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 23:15:09 -07:00
200f5dffc2 Merge branch 'jc/diff' into next
* jc/diff:
  builtin-diff: call it "git-diff", really.
2006-05-01 23:09:15 -07:00
8ab99476ec builtin-diff: call it "git-diff", really.
Call it "git diff" not "git diffn", remove the shell script
version, and hardlink the git binary to it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 23:07:28 -07:00
468eb79ed4 builtin-count-objects: make it official.
Remove the shell-script version, make the hardlink from the git
binary, and update the documentation to describe a new option.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 23:06:06 -07:00
746437d534 Merge branch 'jc/xsha1-2'
* jc/xsha1-2:
  Extended SHA1 -- "rev^@" syntax to mean "all parents"
2006-05-01 22:55:40 -07:00
cbd800ba79 Merge branch 'jc/pack' 2006-05-01 22:54:22 -07:00
95a31cc5b3 Merge branch 'jc/pathcheck'
* jc/pathcheck:
  revision parsing: make "rev -- paths" checks stronger.
2006-05-01 22:51:27 -07:00
50cbebf78d Merge branch 'nh/fetch-http'
* nh/fetch-http:
  git-fetch: resolve remote symrefs for HTTP transport
2006-05-01 22:42:01 -07:00
dd097fcd4d Merge branch 'se/rebase'
* se/rebase:
  Add --continue and --abort options to git-rebase.
2006-05-01 22:39:57 -07:00
6bd20358a9 write-tree: --prefix=<path>
The "bind" commit can express an aggregation of multiple
projects into a single commit.

In such an organization, there would be one project, root of
whose tree object is at the same level of the root of the
aggregated projects, and other projects have their toplevel in
separate subdirectories.  Let's call that root level project the
"primary project", and call other ones just "subprojects".

You would first read-tree the primary project, and then graft
the subprojects under their appropriate location using read-tree
--prefix=<subdir>/ repeatedly.

To write out a tree object from such an index for a subproject,
write-tree --prefix=<subdir>/ is used.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 22:29:16 -07:00
f4c6f2d328 read-tree: --prefix=<path>/ option.
With "--prefix=<path>/" option, read-tree keeps the current
index contents, and reads the contents of named tree-ish under
directory at `<prefix>`.  The original index file cannot have
anything at the path `<prefix>` itself, and have nothing in
`<prefix>/` directory.  This can be used to graft an
independent tree into a subdirectory of the current index.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 22:29:16 -07:00
f5196dbb25 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  fsck-objects: mark objects reachable from cache-tree
  cache-tree: replace a sscanf() by two strtol() calls
2006-05-01 22:28:33 -07:00
cdc08b33ef fsck-objects: mark objects reachable from cache-tree
When fsck-objects scanned cache-tree, it forgot to mark the
trees it found reachable and in use.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 22:15:54 -07:00
0111ea38cb cache-tree: replace a sscanf() by two strtol() calls
On one of my systems, sscanf() first calls strlen() on the buffer. But
this buffer is not terminated by NUL. So git crashed.

strtol() does not share that problem, as it stops reading after the
first non-digit.

[jc: original patch was wrong and did not read the cache-tree
 structure correctly; this has been fixed up and tested minimally
 with fsck-objects. ]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 22:14:03 -07:00
da7c24dd9c gitk: Basic support for highlighting one view within another
With this, one view can be used as a highlight for another, so that
the commits that are in the highlight view are displayed in bold.
This required some fairly major changes to how the list of ids,
parents, children, and id to row mapping were stored for each view.
We can now be reading in several views at once; for all except the
current view, we just update the displayorder and the lists of parents
and children for the view.

This also creates a little bit of infrastructure for handling the
watch cursor.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-02 11:15:29 +10:00
f476ce2061 Merge branch 'jc/grep' into next
* jc/grep:
  builtin-grep: do not use setup_revisions()
  builtin-grep: support '-l' option.
  builtin-grep: wildcard pathspec fixes
2006-05-01 16:27:07 -07:00
1362671f6a builtin-grep: do not use setup_revisions()
Grep may want to grok multiple revisions, but it does not make
much sense to walk revisions while doing so.  This stops calling
the code to parse parameters for the revision walker.  The
parameter parsing for the optional "-e" option becomes a lot
simpler with it as well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 15:58:29 -07:00
df0e7aa864 builtin-grep: support '-l' option.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 12:40:17 -07:00
e0eb889f8e builtin-grep: wildcard pathspec fixes
This tweaks the pathspec wildcard used in builtin-grep to match
that of ls-files.  With this:

	git grep -e DEBUG -- '*/Kconfig*'

would work like the shell script version, and you could even do:

	git grep -e DEBUG --cached -- '*/Kconfig*' ;# from index
	git grep -e DEBUG v2.6.12 -- '*/Kconfig*' ;# from rev

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 12:31:04 -07:00
9318ec234b Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Use RFC2822 dates from "git fmt-patch".
2006-05-01 01:55:02 -07:00
18667f67e0 Merge branch 'jc/xsha1' into next
* jc/xsha1:
  get_sha1(): :path and :[0-3]:path to extract from index.
2006-05-01 01:54:53 -07:00
83262ec139 Merge branch 'jc/xsha1-2' into next
* jc/xsha1-2:
  Extended SHA1 -- "rev^@" syntax to mean "all parents"
2006-05-01 01:54:27 -07:00
afbe700e43 Merge branch 'jc/grep' into next
* jc/grep:
  built-in "git grep"
2006-05-01 01:54:02 -07:00
2a38704323 Use RFC2822 dates from "git fmt-patch".
Still Work-in-progress git fmt-patch (should it be known as
format-patch-ng?) is matched with the fix made by Huw Davies
in 262a6ef76a commit to use
RFC2822 date format.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 01:44:33 -07:00
5010cb5fcc built-in "git grep"
This attempts to set up built-in "git grep" to further reduce
our dependence on the shell, while at the same time optionally
allowing to run grep against object database.  You could do
funky things like these:

	git grep --cached -e pattern	;# grep from index
	git grep -e pattern master	;# or in a rev
	git grep -e pattern master next ;# or in multiple revs
	git grep -e pattern pu^@	;# even like this with an
					;# extension from another topic ;-)
	git grep -e pattern master..next ;# or even from rev ranges
	git grep -e pattern master~20:Documentation
					;# or an arbitrary tree
	git grep -e pattern next:git-commit.sh
        				;# or an arbitrary blob

Right now, it does not understand and/or obey many options grep
should accept, and the pattern must be given with -e option due
to the way the parameter parser is structured, both of which
obviously need to be fixed for usability.

But this is going in the right direction.  The shell script
version is one of the worst Portability offender in the git
barebone Porcelainish; it uses xargs -0 to pass paths around and
shell arrays to sift flags and parameters.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01 01:26:46 -07:00
8872653e5a v265 2006-05-01 03:40:54 +02:00
281bf0cf4e handle utf8 characters from /etc/passwd 2006-05-01 03:40:22 +02:00
73b0e5af9d get_sha1(): :path and :[0-3]:path to extract from index.
Earlier patch to say <ent>:<path> by Linus was very useful, and
this extends the same idea to the current index.  An sha1
expression :<path> extracts the object name for the named path
from the current index.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 17:55:34 -07:00
ea4a19e172 Extended SHA1 -- "rev^@" syntax to mean "all parents"
A short-hand "rev^@" is understood to be "all parents of the
named commit" with this patch.  So you can do

	git show v1.0.0^@

to view the parents of a merge commit,

	gitk ^v1.0.0^@ v1.0.4

to view the log between two revs (including the bottom one), and

	git diff --cc v1.1.0 v1.0.0^@

to inspect what got changed from the merge parents of v1.0.0 to v1.1.0.

This might be just my shiny new toy that is not very useful in
practice.  I needed it to do the multi-tree diff on Len's
infamous 12-way Octopus; typing "diff --cc funmerge funmerge^1
funmerge^2 funmerge^3 ..." was too painful.

[jc: taking suggestions from Linus and Johannes to match expectations
from shell users who are used to see $@ or $* either of which makes
sense.  I tend to write "$@" more often so...]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 17:55:33 -07:00
f8b28a4078 gitk: Add a tree-browsing mode
You can now select whether you want to see the patch for a commit
or the whole tree.  If you select the tree, gitk will now display
the commit message plus the contents of one file in the bottom-left
pane, when you click on the name of the file in the bottom-right pane.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-05-01 09:50:57 +10:00
d23358fb93 Merge branch 'lt/push' into next
* lt/push:
  Fix builtin-push to honor Push: lines in remotes file.
  builtin-push: resurrect parsing of Push: lines
2006-04-30 16:20:18 -07:00
7aaf83dafb Fix builtin-push to honor Push: lines in remotes file.
[jc: originally from Johannes Schindelin, but reworked to lift a
 hard limit of Push: lines]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 16:03:27 -07:00
5c477b9725 builtin-push: resurrect parsing of Push: lines
The C'ification of push left these behind.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 15:42:09 -07:00
e660e3997f Merge with git://kernel.org/pub/scm/git/git.git 2006-05-01 10:20:56 +12:00
88a3d24831 Merge branch 'jc/diff' into next
* jc/diff:
  builtin-diff.c: die() formatting type fix.
2006-04-30 01:01:24 -07:00
6b401891a2 Merge branch 'lt/push' into next
* lt/push:
  git builtin "push"
  git-format-patch: Use rfc2822 compliant date.
2006-04-30 01:00:55 -07:00
755225de6c git builtin "push"
This adds a builtin "push" command, which is largely just a C'ification of
the "git-push.sh" script.

Now, the reason I did it as a built-in is partly because it's yet another
step on relying less on shell, but it's actually mostly because I've
wanted to be able to push to _multiple_ repositories, and the most obvious
and simplest interface for that would seem be to just have a "remotes"
file that has multiple URL entries.

(For "pull", having multiple entries should either just select the first
one, or you could fall back on the others on failure - your choice).

And quite frankly, it just became too damn messy to do that in shell.
Besides, we actually have a fair amount of infrastructure in C, so it just
wasn't that hard to do.

Of course, this is almost totally untested. It probably doesn't work for
anything but the one trial I threw at it. "Simple" doesn't necessarily
mean "obviously correct".

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 00:59:18 -07:00
66ae0c7702 Merge branch 'fix'
* fix:
  git-format-patch: Use rfc2822 compliant date.
2006-04-30 00:59:10 -07:00
262a6ef76a git-format-patch: Use rfc2822 compliant date.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 00:32:25 -07:00
334b506a34 builtin-diff.c: die() formatting type fix.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-30 00:26:41 -07:00
a0c5081a78 Merge branch 'jc/diff' into next
* jc/diff:
  built-in diff: assorted updates.
  built-in diff.
2006-04-29 01:33:16 -07:00
0fe7c1de16 built-in diff: assorted updates.
"git diff(n)" without --base, --ours, etc. defaults to --cc,
which usually is the same as -p unless you are in the middle of
a conflicted merge, just like the shell script version.

"git diff(n) blobA blobB path" complains and dies.

"git diff(n) tree0 tree1 tree2...treeN" does combined diff that
shows a merge of tree1..treeN to result in tree0.

Giving "-c" option to any command that defaults to "--cc" turns
off dense-combined flag.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-29 01:32:53 -07:00
65056021f2 built-in diff.
This starts to replace the shell script version of "git diff".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-28 23:20:52 -07:00
4623d43de5 Merge branch 'np/delta' into next
* np/delta:
  replace adler32 with Rabin's polynomial in diff-delta
2006-04-28 22:42:41 -07:00
3dc5a9e4cd replace adler32 with Rabin's polynomial in diff-delta
This brings another small repacking speedup for sensibly the same pack
size.  On the Linux kernel repo, git-repack -a -f is 3.7% faster for a
0.4% larger pack.

Credits to Geert Bosch who brought the Rabin's polynomial idea to my
attention.

This also eliminate the issue of adler32() reading past the data buffer,
as noticed by Johannes Schindelin.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-28 22:41:31 -07:00
1d19b324fb Merge branch 'master' into next
* master:
  Fix trivial typo in git-log man page.
  Properly render asciidoc "callouts" in git man pages.
  Fix up remaining man pages that use asciidoc "callouts".
  Update the git-branch man page to include the "-r" option,
  annotate: display usage information if no filename was given
  annotate: fix warning about uninitialized scalar
  git-am --resolved: more usable error message.
2006-04-28 19:30:41 -07:00
89719209f4 Merge branch 'fix'
* fix:
  Fix trivial typo in git-log man page.
  Properly render asciidoc "callouts" in git man pages.
  Fix up remaining man pages that use asciidoc "callouts".
  Update the git-branch man page to include the "-r" option,
  annotate: display usage information if no filename was given
  annotate: fix warning about uninitialized scalar
  git-am --resolved: more usable error message.
2006-04-28 16:57:32 -07:00
aa6bf0eb64 Fix trivial typo in git-log man page.
Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
2006-04-28 14:31:53 -07:00
776e994af5 Properly render asciidoc "callouts" in git man pages.
Adds an xsl fragment to render docbook callouts when
converting to man page format.  Update the Makefile
to have "xmlto" use it when generating man pages.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
2006-04-28 14:31:51 -07:00
48aeecdcc1 Fix up remaining man pages that use asciidoc "callouts".
Unfortunately docbook does not allow a callout to be
referenced from inside a callout list description.
Rewrite one paragraph in git-reset man page to work
around this limitation.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
2006-04-28 14:31:36 -07:00
2eaf273d51 Update the git-branch man page to include the "-r" option,
and fix up asciidoc "callouts"

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
2006-04-28 14:31:18 -07:00
fe77bb1a02 annotate: display usage information if no filename was given
Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
2006-04-28 14:29:04 -07:00
d0ad165366 annotate: fix warning about uninitialized scalar
Use of uninitialized value in scalar chomp at
./git-annotate.perl line 212, <$kid> chunk 4.

Signed-off-by: Matthias Kestenholz <matthias@spinlock.ch>
2006-04-28 14:28:28 -07:00
c1d1128bef git-am --resolved: more usable error message.
After doing the hard work of hand resolving the conflicts in the
working tree, if the user forgets to run update-index to mark
the paths that have been resolved, the command gave an
unfriendly "fatal: git-write-tree: not able to write tree" error
message.  Catch the situation early and give more meaningful
message and suggestion.

Noticed and suggested by Len Brown.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-28 02:32:44 -07:00
1c57f53582 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  cache-tree.c: typefix
2006-04-28 01:36:52 -07:00
7bc70a590d cache-tree.c: typefix
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 22:48:27 -07:00
ac92095ff2 Merge branch 'jc/count' into next
* jc/count:
  built-in count-objects.
  pack-objects: update size heuristucs.
  verify-pack: check integrity in a saner order.
2006-04-27 21:38:43 -07:00
c74320872b built-in count-objects.
Also it learned to do -v (verbose) to report:

	- number of loose objects
	- disk occupied by loose objects
	- number of objects in local packs
	- number of loose objects that are also in pack
	- unrecognised garbage in .git/objects/??/.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 21:35:27 -07:00
9a8b6a0a9d pack-objects: update size heuristucs.
We used to omit delta base candidates that is much bigger than
the target, but delta size does not grow when we delete more, so
that was not a very good heuristics.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 19:31:46 -07:00
67f15c0220 Merge branch 'np/delta' into next
* np/delta:
  use delta index data when finding best delta matches
2006-04-27 18:10:09 -07:00
fbc0f28a8d Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  test-dump-cache-tree: validate the cached data as well.
  cache_tree_update: give an option to update cache-tree only.
2006-04-27 16:25:32 -07:00
d2cb7c6e93 test-dump-cache-tree: validate the cached data as well.
While dumping the cached data, try recomputing everything from
scratch to make sure things match.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 16:22:45 -07:00
2956dd3bd7 cache_tree_update: give an option to update cache-tree only.
When the extra "dryrun" parameter is true, cache_tree_update()
recomputes the invalid entry but does not actually creates
new tree object.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 16:21:54 -07:00
bd346f105d Merge branch 'fix'
* fix:
  verify-pack: check integrity in a saner order.
2006-04-27 15:42:32 -07:00
55e1805dff verify-pack: check integrity in a saner order.
Check internal integrity to report corrupt pack or idx, and
then check cross-integrity between idx and pack.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 15:42:17 -07:00
c9a11205f7 Merge branch 'jc/pathcheck' into next
* jc/pathcheck:
  revision parsing: make "rev -- paths" checks stronger.
2006-04-27 12:51:08 -07:00
bc4d7269f9 Fix mismerged update-index from jc/cache-tree branch.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 12:50:01 -07:00
b8c59e6ad3 Retire rabinpoly fingerprinting code
For now let's retire this and reintroduce it as part of the updated
pack-objects series from Geert when it is ready.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 12:48:26 -07:00
e431e4cd7d Merge branch 'master' into next
* master:
  Fix "git help -a" terminal autosizing
  diff-index: fix compilation warnings.
2006-04-27 12:25:18 -07:00
e5de2c5e30 Merge branch 'pb/config'
* pb/config:
  git-cvsserver: typofixes
  Deprecate usage of git-var -l for getting config vars list
  git-repo-config --list support
2006-04-27 12:23:01 -07:00
bd4bd2261b Merge branch 'jc/diffstat'
* jc/diffstat:
  diff --stat: show complete rewrites consistently.
2006-04-27 11:58:33 -07:00
83aa18eade Fix "git help -a" terminal autosizing
When I split out the builtin commands into their own files, I left the
include of <sys/ioctl.h> in git.c rather than moving it to the file that
needed it (builtin-help.c).

Nobody seems to have noticed, because everything still worked, but because
the TIOCGWINSZ macro was now no longer defined when compiling the
"term_columns()" function, it would no longer automatically notice the
terminal size unless your system used the ancient "COLUMNS" environment
variable approach.

Trivially fixed by just moving the header include to the file that
actually needs it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 11:45:39 -07:00
7fcceed7a0 gitk: Use a text widget for the file list
This lets us do things like highlighting all the entries for which
the corresponding part of the diff is at least partly visible in the
commit/patch display window, and in future it will let us display
the file list in a hierarchical form rather than as a flat file list.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-27 19:21:49 +10:00
61678d87c2 diff-index: fix compilation warnings.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 01:59:00 -07:00
70b1fb23e2 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  read-tree: teach 1-way merege and plain read to prime cache-tree.
  read-tree: teach 1 and 2 way merges about cache-tree.
  update-index: when --unresolve, smudge the relevant cache-tree entries.
2006-04-27 01:37:03 -07:00
7927a55d5b read-tree: teach 1-way merege and plain read to prime cache-tree.
This teaches read-tree to fully populate valid cache-tree when
reading a tree from scratch, or reading a single tree into an
existing index, reusing only the cached stat information (i.e.
one-way merge).  We have already taught update-index about cache-tree,
so "git checkout" followed by updates to a few path followed by
a "git commit" would become very efficient.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 01:33:07 -07:00
b34c39cf31 read-tree: teach 1 and 2 way merges about cache-tree.
This teaches one-way and two-way "read-tree -m" (and its special
form, "read-tree --reset" as well) not to discard cache-tree but
invalidate only the changed parts of the tree.  When switching
between related branches, this helps the eventual commit
(i.e. write-tree) by keeping cache-tree valid as much as
possible.

This does not prime cache-tree yet, but we ought to be able to
do that for no-merge (i.e. reading from a tree object) case and,
and also perhaps 1 way merge case.

With this patch applied, switching between the tip of Linux 2.6
kernel tree and a branch that touches one path (fs/ext3/Makefile)
from it invalidates only 3 paths out of 1201 cache-tree entries
in the index, and subsequent write-tree takes about a half as
much time as before.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27 00:34:12 -07:00
497c32136f update-index: when --unresolve, smudge the relevant cache-tree entries.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 22:05:05 -07:00
f6c7081aa9 use delta index data when finding best delta matches
This patch allows for computing the delta index for each base object
only once and reuse it when trying to find the best delta match.

This should set the mark and pave the way for possibly better delta
generator algorithms.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 21:23:03 -07:00
9ed2574798 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  t0000-basic: more commit-tree tests.
2006-04-26 18:48:53 -07:00
e7afa1115b Merge branch 'master' into jc/cache-tree
* master:
  t0000-basic: more commit-tree tests.
  commit-tree.c: check_valid() microoptimization.
  Fix filename verification when in a subdirectory
  rebase: typofix.
  socksetup: don't return on set_reuse_addr() error
2006-04-26 18:32:45 -07:00
9af0b8dbe2 t0000-basic: more commit-tree tests.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 18:25:15 -07:00
3b24343a87 Merge branch 'se/rebase' into next
* se/rebase:
  Add --continue and --abort options to git-rebase.
2006-04-26 17:24:15 -07:00
f996fbf8a0 Merge branch 'nh/fetch-http' into next
* nh/fetch-http:
  git-fetch: resolve remote symrefs for HTTP transport
  commit-tree.c: check_valid() microoptimization.
  Fix filename verification when in a subdirectory
  rebase: typofix.
  socksetup: don't return on set_reuse_addr() error
2006-04-26 17:23:51 -07:00
093b068891 git-fetch: resolve remote symrefs for HTTP transport
git-fetch validates that a remote ref resolves to a SHA1 prior to calling
git-http-fetch.  This adds support for resolving a few levels of symrefs
to get to the SHA1.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 17:16:11 -07:00
031321c654 Add --continue and --abort options to git-rebase.
git rebase [--onto <newbase>] <upstream> [<branch>]
  git rebase --continue
  git rebase --abort

Add "--continue" to restart the rebase process after
manually resolving conflicts.  The user is warned if
there are still differences between the index and the
working files.

Add "--abort" to restore the original branch, and
remove the .dotest working files.

Some minor additions to the git-rebase documentation.

[jc: fix that applies to the maintenance track has been dealt
 with separately.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 17:10:33 -07:00
ea92f41ff9 revision parsing: make "rev -- paths" checks stronger.
If you don't have a "--" marker, then:

 - all of the arguments we are going to assume are pathspecs
   must exist in the working tree.

 - none of the arguments we parsed as revisions could be
   interpreted as a filename.

so that there really isn't any possibility of confusion in case
somebody does have a revision that looks like a pathname too.

The former rule has been in effect; this implements the latter.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 17:08:44 -07:00
69bcc43eca Merge branch 'fix'
* fix:
  commit-tree.c: check_valid() microoptimization.
  Fix filename verification when in a subdirectory
  rebase: typofix.
  socksetup: don't return on set_reuse_addr() error
2006-04-26 17:08:00 -07:00
5981e09999 commit-tree.c: check_valid() microoptimization.
There is no point reading the whole object just to make sure it exists and
it is of the expected type.  We added sha1_object_info() for such need
after this code was written, so use it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 16:55:25 -07:00
e23d0b4a4a Fix filename verification when in a subdirectory
When we are in a subdirectory of a git archive, we need to take the prefix
of that subdirectory into accoung when we verify filename arguments.

Noted by Matthias Lederhofer

This also uses the improved error reporting for all the other git commands
that use the revision parsing interfaces, not just git-rev-parse. Also, it
makes the error reporting for mixed filenames and argument flags clearer
(you cannot put flags after the start of the pathname list).

[jc: with fix to a trivial typo noticed by Timo Hirvonen]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 12:16:21 -07:00
b176e6ba5b rebase: typofix.
Noticed by Sean.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 12:16:19 -07:00
7608d4bf97 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  commit-tree: allow generic object name for the tree as well.
  Makefile: remove and create xdiff library from scratch.
  t0000-basic: Add ls-tree recursive test back.
2006-04-26 03:39:01 -07:00
b8ed7f0f40 Merge branch 'master' into jc/cache-tree
* master:
  commit-tree: allow generic object name for the tree as well.
  Makefile: remove and create xdiff library from scratch.
  t0000-basic: Add ls-tree recursive test back.
  Libified diff-index: backward compatibility fix.
  Libify diff-index.
  Libify diff-files.
  Makefile: remove and create libgit.a from scratch.
  Document the configuration file
  Document git-var -l listing also configuration variables
  rev-parse: better error message for ambiguous arguments
  make update-index --chmod work with multiple files and --stdin
  socksetup: don't return on set_reuse_addr() error
  Fix "git show --stat"
  git-update-index --unresolve
  Add git-unresolve <paths>...
  Add colordiff for git to contrib/colordiff.
  gitk: Let git-rev-list do the argument list parsing
2006-04-26 03:29:09 -07:00
3496277a56 commit-tree: allow generic object name for the tree as well.
We use get_sha1() for -p (parent) objects, but still used
get_sha1_hex() for the tree.  Just to be consistent, allow
extended SHA1 expression for the tree object name.

Note that this is not to encourage funky things like this:

	git-commit-tree HEAD^{tree} -p HEAD

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 03:18:51 -07:00
2d86d2c6fc Makefile: remove and create xdiff library from scratch.
... in the same spirit as 71459c193d.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 03:12:58 -07:00
fdeb6bf55b t0000-basic: Add ls-tree recursive test back.
When we updated ls-tree recursive output to omit the tree nodes,
246cc52f38 adjusted the old test
so that we do not expect to see trees in its output.  Later,
with 0f8f45cb4a, we added back the
ability to show both with -t option, but we forgot to update the
test as well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-26 02:27:59 -07:00
adac865fc3 Merge branch 'pb/config' into next
* pb/config:
  git-cvsserver: typofixes
2006-04-26 00:00:49 -07:00
5348b6e7f4 git-cvsserver: typofixes
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-25 23:59:28 -07:00
9849efb321 Merge branch 'jc/diffstat' into next
* jc/diffstat:
  diff --stat: show complete rewrites consistently.
  Makefile: remove and create libgit.a from scratch.
2006-04-25 23:50:48 -07:00
710158e3ca diff --stat: show complete rewrites consistently.
The patch format shows complete rewrite as deletion of all old lines
followed by addition of all new lines.  Count lines consistenly with
that when doing diffstat.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-25 23:40:09 -07:00
cb303a949f Merge branch 'new' 2006-04-26 16:32:59 +10:00
e9b5b75ca8 Merge branch 'jc/diff'
* jc/diff:
  Libified diff-index: backward compatibility fix.
  Libify diff-index.
  Libify diff-files.
2006-04-25 23:12:21 -07:00
71459c193d Makefile: remove and create libgit.a from scratch.
Foolishly I renamed diff.o around which caused an old diff.o
taken out of libgit.a and got linked into resulting binary and
exhibited mysterious breakage for many people.  This borrows
from the kernel Makefile (scripts/Makefile.build) to first remove
the target and then recreate.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-25 23:11:17 -07:00
a77ada62a1 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  test-dump-cache-tree: report number of subtrees.
  cache-tree: sort the subtree entries.
  Teach fsck-objects about cache-tree.
2006-04-25 22:51:01 -07:00
0f8820528e test-dump-cache-tree: report number of subtrees.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-25 17:40:24 -07:00
61fa30972c cache-tree: sort the subtree entries.
Not that this makes practical performance difference; the kernel tree
for example has 200 or so directories that have subdirectory, and the
largest ones have 57 of them (fs and drivers).  With a test to apply
600 patches with git-apply and git-write-tree, this did not make more
than one per-cent of a difference, but it is a good cleanup.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-25 17:40:02 -07:00
992793c832 git-cvsexportcommit: Add -f(orce) and -m(essage prefix) flags, small cleanups. 2006-04-26 12:26:16 +12:00
53dc3f3e80 Teach fsck-objects about cache-tree.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-25 16:37:08 -07:00
a970fcf249 [PATCH] gitk: Add a visual tag for remote refs
This patch partly changes the background color for remote refs.
It makes it easy to quickly distinguish remote refs from local
developer branches.

I ignore remote HEADs, as these really should be drawn as
aliases to other heads. But there is no simple way to
detect that HEADs really are aliases for other refs via
"git-ls-remote".

Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-25 22:44:47 +10:00
d16c0812a9 gitk: add menu item for editing the current view
This allows the user to change the name of the view, whether it is
permanent, and the list of files/directories for the view.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-25 21:21:10 +10:00
a90a6d249b gitk: Implement "permanent" views (stored in ~/.gitk)
With this the user can now mark a view as "permanent" and it will
appear in the list every time gitk is started (until it is deleted).
Also tidied up the view definition window, and changed the view
menu to use radiobuttons for the view selections so there is some
feedback as to which is the current view.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-25 17:12:46 +10:00
4c2608923f Merge branch 'pb/config' into next
* pb/config:
  Deprecate usage of git-var -l for getting config vars list
  git-repo-config --list support
2006-04-24 22:31:19 -07:00
5a6a8c0e01 Merge branch 'np/delta' into next
* np/delta:
  split the diff-delta interface
  Document the configuration file
  Document git-var -l listing also configuration variables
  rev-parse: better error message for ambiguous arguments
2006-04-24 22:31:15 -07:00
e1cbc46d12 Deprecate usage of git-var -l for getting config vars list
This has been an unfortunate sideway in the git API evolution.
We use git-repo-config for all the other .git/config interaction
so let's also use git-repo-config -l for the variable listing.

Signed-off-by: Petr Baudis <pasky@suse.cz>
2006-04-24 22:29:36 -07:00
de791f15a1 git-repo-config --list support
This adds git-repo-config --list (or git-repo-config -l) support,
similar to what git-var -l does now (to be phased out so that we
have a single sane interface to the config file instead of fragmented
and confused API).

Signed-off-by: Petr Baudis <pasky@suse.cz>
2006-04-24 22:29:33 -07:00
08abe669c0 split the diff-delta interface
This patch splits the diff-delta interface into index creation and delta
generation.  A wrapper is provided to preserve the diff-delta() call.

This will allow for an optimization in pack-objects.c where the source
object could be fixed and a full window of objects tentatively tried
against
that same source object without recomputing the source index each time.

This patch only restructure things, plus a couple cleanups for good
measure. There is no performance change yet.

Signed-off-by: Nicolas Pitre <nico@cam.org>
2006-04-24 22:27:33 -07:00
36932eab77 Merge branch 'fix'
* fix:
  Document the configuration file
  Document git-var -l listing also configuration variables
  rev-parse: better error message for ambiguous arguments
2006-04-24 22:26:57 -07:00
dc844aaad8 Merge branch 'jc/cache-tree' into next
* jc/cache-tree:
  index: make the index file format extensible.
  cache-tree: protect against "git prune".
  Add test-dump-cache-tree
2006-04-24 21:28:07 -07:00
bad68ec924 index: make the index file format extensible.
... and move the cache-tree data into it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-24 21:24:13 -07:00
dd0c34c46b cache-tree: protect against "git prune".
We reused the cache-tree data without verifying the tree object
still exists.  Recompute in cache_tree_update() an otherwise
valid cache-tree entry when the tree object disappeared.

This is not usually a problem, but theoretically without this
fix things can break when the user does something like this:

	- read-index from a side branch
	- write-tree the result
	- remove the side branch with "git branch -D"
	- remove the unreachable objects with "git prune"
	- write-tree what is in the index.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-24 15:12:42 -07:00
3fdce210ee Merge branch 'master' into next
* master:
  gitk: Let git-rev-list do the argument list parsing
2006-04-24 02:18:33 -07:00
be02b3c53e Merge branch 'ar/chmod-series'
* ar/chmod-series:
  make update-index --chmod work with multiple files and --stdin
2006-04-24 02:08:35 -07:00
c6df547a41 Merge branch 'sh/daemon'
* sh/daemon:
  socksetup: don't return on set_reuse_addr() error
2006-04-24 02:08:28 -07:00
2effe71b7c Merge branch 'jc/cc-stat'
* jc/cc-stat:
  Fix "git show --stat"
2006-04-24 02:06:40 -07:00
cdb63506a0 Merge branch 'jc/unresolve'
* jc/unresolve:
  git-update-index --unresolve
  Add git-unresolve <paths>...
2006-04-24 02:05:55 -07:00
3a403e49b9 Merge branch 'jc/color'
* jc/color:
  Add colordiff for git to contrib/colordiff.
2006-04-24 02:05:07 -07:00
a549e11cc2 Merge git://git.kernel.org/pub/scm/gitk/gitk
* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Let git-rev-list do the argument list parsing
2006-04-24 01:39:01 -07:00
5b5e4d6487 Merge part of 'jc/cache-tree' 2006-04-24 00:33:28 -07:00
17448209f5 Add test-dump-cache-tree
This was useful in diagnosing the corrupt index.aux format
problem.  But do not bother building or installing it by
default.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-24 00:26:31 -07:00
a6e5642f39 Use cache-tree in update-index.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-24 00:26:31 -07:00
03ac6e6465 Invalidate cache-tree entries for touched paths in git-apply.
This updates git-apply to maintain cache-tree information.  With
this and the previous write-tree patch, repeated "apply --index"
followed by "write-tree" on a huge tree will hopefully become
faster.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 20:19:17 -07:00
a52139b47e Update write-tree to use cache-tree.
The updated write-tree reads from $GIT_DIR/index.aux to pick up
subtree objects information, updates the cache-tree with the
index, and updates index.aux file after writing a tree out of
the index file.

Until update-index and other programs that modify the index are
updated to maintain index.aux file, the index.aux file written
by the last write-tree will become stale immediately after they
update the index, which will result in the whole tree
recomputation just like the original write-tree.

The idea is to convert those commands to invalidate cache-tree
whenever they touch the index entries, and write updated
index.aux out.  After the index is updated with them, write-tree
will be able to reuse the parts of the cache-tree that have not
been touched.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 20:18:57 -07:00
749864627c Add cache-tree.
The cache_tree data structure is to cache tree object names that
would result from the current index file.

The idea is to have an optional file to record each tree object
name that corresponds to a directory path in the cache when we
run write_cache(), and read it back when we run read_cache().
During various index manupulations, we selectively invalidate
the parts so that the next write-tree can bypass regenerating
tree objects for unchanged parts of the directory hierarchy.

We could perhaps make the cache-tree data an optional part of
the index file, but that would involve the index format updates,
so unless we need it for performance reasons, the current plan
is to use a separate file, $GIT_DIR/index.aux to store this
information and link it with the index file with the checksum
that is already used for index file integrity check.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 20:18:16 -07:00
8b7257514b Merge branch 'ar/chmod-series' into next
* ar/chmod-series:
  make update-index --chmod work with multiple files and --stdin
2006-04-23 17:00:31 -07:00
1af1c2b63d read-cache/write-cache: optionally return cache checksum SHA1.
read_cache_1() and write_cache_1() takes an extra parameter
*sha1 that returns the checksum of the index file when non-NULL.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 16:57:40 -07:00
f3a2469b25 Merge branch 'master' into new 2006-04-23 22:47:07 +10:00
a8aaf19c41 gitk: Use git-rev-parse only to identify file/dir names on cmd line
This uses git-rev-parse --no-revs --no-flags to give us just the
file and directory names on the command line, so that we can create
the "Command line" view if any were specified.  All other arguments
just get passed to git-rev-list (without a pass through git-rev-parse).

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-23 22:45:55 +10:00
61e56c8823 gitk: Let git-rev-list do the argument list parsing
This is a fix for a problem reported by Jim Radford where an argument
list somewhere overflows on repositories with lots of tags.  In fact
it's now unnecessary to use git-rev-parse since git-rev-list can take
all the arguments that git-rev-parse can.  This is inspired by but not
the same as the solutions suggested by Jim Radford and Linus Torvalds.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-23 18:00:24 +10:00
227bdb186f make update-index --chmod work with multiple files and --stdin
The patch makes "--chmod=-x" and "--chmod=+x" act like "--add"
and "--remove" to affect the behaviour of the command for the
rest of the path parameters, not just the following one.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 00:47:03 -07:00
623ac4c896 Merge branch 'jc/diff' into next
* jc/diff:
  Libified diff-index: backward compatibility fix.
2006-04-22 04:04:46 -07:00
5c21ac0e7c Libified diff-index: backward compatibility fix.
"diff-index -m" does not mean "do not ignore merges", but means
"pretend missing files match the index".

The previous round tried to address this, but failed because
setup_revisions() ate "-m" flag before the caller had a chance
to intervene.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 04:03:32 -07:00
0bc6c14058 Merge branch 'jc/diff' into next
* jc/diff:
  Libify diff-index.
  Libify diff-files.
2006-04-22 03:07:08 -07:00
f1f114d080 Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  git-fmt-patch: thinkofix to show [PATCH] properly.
2006-04-22 03:06:58 -07:00
53f420ef00 git-fmt-patch: thinkofix to show [PATCH] properly.
Updating "subject" variable without changing the hardcoded
number of bytes to memcpy from it would not help much.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 03:06:13 -07:00
e09ad6e1e3 Libify diff-index.
The second installment to libify diff brothers.  The pathname
arguments are checked more strictly than before because we now
use the revision.c::setup_revisions() infrastructure.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 02:43:00 -07:00
6973dcaee7 Libify diff-files.
This is the first installment to libify diff brothers.

The updated diff-files uses revision.c::setup_revisions()
infrastructure to parse its command line arguments, which means
the pathname arguments are checked more strictly than before.
The tests are adjusted to separate possibly missing paths from
the rest of arguments with double-dashes, to show the kosher
way.

As Linus pointed out, renaming diff.c to diff-lib.c was simply
stupid, so I am renaming it back.  The new diff-lib.c is to
contain pieces extracted from diff brothers.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 02:37:45 -07:00
1cc4764bc1 Merge branch 'jc/cc-stat' into next
* jc/cc-stat:
  Fix "git show --stat"
2006-04-22 01:46:29 -07:00
076d1d6adc Merge branch 'jc/color' into next
* jc/color:
  Add colordiff for git to contrib/colordiff.
  Makefile: dependency for builtin-help.o
2006-04-21 22:25:16 -07:00
96ab4f4e7a Fix "git show --stat"
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 22:24:34 -07:00
96afa0764e Add colordiff for git to contrib/colordiff.
I hacked it up to teach it the git extended diff headers, made
it not to read the whole patch in the array.

Also, the original program, when arguments are given, ran "diff"
with the given arguments and showed the output from it.  Of
course, I changed it to run "git diff" ;-).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 22:24:30 -07:00
e64961b057 Merge branch 'jc/diff'
* jc/diff:
  diff --stat: do not drop rename information.
2006-04-21 22:03:07 -07:00
08df61713c Makefile: dependency for builtin-help.o
builtin-help.c wants to include common-cmds.h which is a
generated file.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 21:56:31 -07:00
6082c4433b Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Split up builtin commands into separate files from git.c
  git-log produces no output
2006-04-21 13:32:58 -07:00
91efcf6065 Merge branch 'master' into jc/fmt-patch
* master:
  Split up builtin commands into separate files from git.c
  git-log produces no output
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
  git-commit --amend: two fixes.
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  get_sha1() shorthands for blob/tree objects
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
  diff: move diff.c to diff-lib.c to make room.
  git log: don't do merge diffs by default
  Allow "git repack" users to specify repacking window/depth
  Document git-clone --reference
  Fix filename scaling for binary files
  Fix uninteresting tags in new revision parsing

Conflicts:

    Adjusted the addition of fmt-patch to match the recent split
    from git.c to builtin.log.c.
2006-04-21 13:25:47 -07:00
70827b15bf Split up builtin commands into separate files from git.c
Right now it split it into "builtin-log.c" for log-related commands
("log", "show" and "whatchanged"), and "builtin-help.c" for the
informational commands (usage printing and "help" and "version").

This just makes things easier to read, I find.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 13:14:41 -07:00
285755127a Merge branch 'fix'
* fix:
  git-log produces no output
2006-04-21 13:14:30 -07:00
d1e36c796d Merge branch 'master' into next
* master:
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
2006-04-21 00:45:55 -07:00
3c144afe50 Merge branch 'fix'
* fix:
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
2006-04-21 00:45:40 -07:00
2516dae2f6 gitk: Remember the view in the history list
When moving backwards or forwards through the history list, this
automatically switches the view so that each point that we jump to
is shown in the same view that it was originally displayed in.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-21 10:35:31 +10:00
3155ef8a4a Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  rename internal format-patch wip
2006-04-20 12:45:16 -07:00
43885c2a55 rename internal format-patch wip
Otherwise "git format-patch" would invoke unfinished internal one that
does only --stdout

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-20 12:45:02 -07:00
56c155aa9f Merge branch 'master' into next
* master:
  git-commit --amend: two fixes.
2006-04-20 02:53:03 -07:00
0080f50eb3 Merge branch 'fix'
* fix:
  git-commit --amend: two fixes.
2006-04-20 02:52:04 -07:00
adeb25cf04 Stop carrying Geert's similarity estimator.
I tried the code with pack-objects.c::try_delta(), and was
somewhat dissapointed.  The current type-path based heuristics
already limits the delta attempts to similar objects anyway, so
it is not a good place to apply it.

The Net never forgets, so we can resurrect it if we wanted to
later.
2006-04-20 00:37:08 -07:00
f31613d45a Merge branch 'jc/unresolve' into next
* jc/unresolve:
  git-update-index --unresolve
2006-04-19 23:52:30 -07:00
2bd452d3b9 git-update-index --unresolve
Retire git-unresolve and make it into "git-update-index --unresolve".
It processes all paths that follow.

During a merge, you would mark a path that is dealt with with:

	$ git update-index hello

and you would "undo" it with:

	$ git update-index --unresolve hello

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 23:52:05 -07:00
c95fa67fd8 Merge branch 'jc/diff' into next
* jc/diff:
  diff --stat: do not drop rename information.
2006-04-19 23:22:40 -07:00
44aad15f0d diff --stat: do not drop rename information.
When a verbatim rename or copy is detected, we did not show
anything on the "diff --stat" for the filepair.  This makes it
to show the rename information.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 23:22:19 -07:00
55436162c7 Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Minor tweak on subject line in --pretty=email
2006-04-19 20:04:09 -07:00
60571f75ab Merge branch 'jc/unresolve' into next
* jc/unresolve:
  Add git-unresolve <paths>...
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
  diff: move diff.c to diff-lib.c to make room.
  git log: don't do merge diffs by default
  Allow "git repack" users to specify repacking window/depth
2006-04-19 16:12:57 -07:00
ec167793d8 Add git-unresolve <paths>...
This is an attempt to address the issue raised on #git channel
recently by Carl Worth.

After a conflicted automerge, "git diff" shows a combined diff
to give you how the tentative automerge result differs from
what came from each branch.  During a complex merge, it is
tempting to be able to resolve a few paths at a time, mark
them "I've dealt with them" with git-update-index to unclutter
the next "git diff" output, and keep going.  However, when the
final result does not compile or otherwise found to be a
mismerge, the workflow to fix the mismerged paths suddenly
changes to "git diff HEAD -- path" (to get a diff from our
HEAD before merging) and "git diff MERGE_HEAD -- path" (to get
a diff from theirs), and it cannot show the combined anymore.

With git-unresolve <paths>..., the versions from our branch and
their branch for specified blobs are placed in stage #2 and
stage #3, without touching the working tree files.  This gives
you the combined diff back for easier review, along with
"diff --ours" and "diff --theirs".

One thing it does not do is to place the base in stage #1; this
means "diff --base" would behave differently between the run
immediately after a conflicted three-way merge, and the run
after an update-index by mistake followed by a git-unresolve.

We could theoretically run merge-base between HEAD and
MERGE_HEAD to find which tree to place in stage #1, but
reviewing "diff --base" is not that useful so....

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 16:12:41 -07:00
a4d0cced53 Merge branch 'lt/xsha1'
* lt/xsha1:
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  get_sha1() shorthands for blob/tree objects
2006-04-19 15:57:45 -07:00
b8950769b8 Merge branch 'maint'
* maint:
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
2006-04-19 15:41:55 -07:00
ba580aeafb diff: move diff.c to diff-lib.c to make room.
Now I am not doing any real "git-diff in C" yet, but this would
help before doing so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 15:38:14 -07:00
4c4b158b8f Minor tweak on subject line in --pretty=email
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 15:16:08 -07:00
4dcff634e6 get_tree_entry(): make it available from tree-walk
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 14:05:47 -07:00
f3ab49db1b sha1_name.c: no need to include diff.h; tree-walk.h will do.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 11:56:53 -07:00
041a7308de sha1_name.c: prepare to make get_tree_entry() reusable from others.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 11:56:07 -07:00
1aec7917dc git log: don't do merge diffs by default
I personally prefer "ignore_merges" to be on by default, because quite
often the merge diff is distracting and not interesting. That's true both
with "-p" and with "--stat" output.

If you want output from merges, you can trivially use the "-m", "-c" or
"--cc" flags to tell that you're interested in merges, which also tells
the diff generator what kind of diff to do (for --stat, any of the three
will do, of course, but they differ for plain patches or for
--patch-with-stat).

This trivial patch just removes the two lines that tells "git log" not to
ignore merges. It will still show the commit log message, of course, due
to the "always_show_header" part.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 11:09:22 -07:00
ccb365047a Allow "git repack" users to specify repacking window/depth
.. but don't even bother documenting it. I don't think any normal person
is supposed to ever really care, but it simplifies testing when you want
to use the "git repack" wrapper rather than forcing you to use the core
programs (which already do support the window/depth arguments, of course).

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 10:31:23 -07:00
2c4a03290b Merge branch 'master' into next
* master:
  Document git-clone --reference
  Fix filename scaling for binary files
2006-04-19 02:25:36 -07:00
85e6326cc3 Merge branch 'fix'
* fix:
  Document git-clone --reference
  Fix filename scaling for binary files
2006-04-19 02:25:29 -07:00
7de4473f6a Merge branch 'lt/xsha1' into next
* lt/xsha1:
  get_sha1() shorthands for blob/tree objects
  Fix uninteresting tags in new revision parsing
2006-04-18 22:02:04 -07:00
5119602a99 get_sha1() shorthands for blob/tree objects
This is a fairly straightforward patch to allow "get_sha1()" to also have
shorthands for tree and blob objects.

The syntax is very simple and intuitive: you can specify a tree or a blob
by simply specifying <revision>:<path>, and get_sha1() will do the SHA1
lookup from the tree for you.

You can currently do it with "git ls-tree <rev> <path>" and parsing the
output, but that's actually pretty awkward.

With this, you can do something like

	git cat-file blob v1.2.4:Makefile

to get the contents of "Makefile" at revision v1.2.4.

Now, this isn't necessarily something you really need all that often, but
the concept itself is actually pretty powerful. We could, for example,
allow things like

	git diff v0.99.6:git-commit-script..v1.3.0:git-commit.sh

to see the difference between two arbitrary files in two arbitrary
revisions. To do that, the only thing we'd have to do is to make
git-diff-tree accept two blobs to diff, in addition to the two trees it
now expects.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-18 21:52:41 -07:00
4262c1b0c3 Fix uninteresting tags in new revision parsing
When I unified the revision argument parsing, I introduced a simple bug
wrt tags that had been marked uninteresting. When it was preparing for the
revision walk, it would mark all the parent commits of an uninteresting
tag correctly uninteresting, but it would forget about the commit itself.

This means that when I just did my 2.6.17-rc2 release, and my scripts
generated the log for "v2.6.17-rc1..v2.6.17-rc2", everything was fine,
except the commit pointed to by 2.6.17-rc1 (which shouldn't have been
there) was included. Even though it should obviously have been marked as
being uninteresting.

Not a huge deal, and the fix is trivial.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-18 21:08:06 -07:00
6625864c8c Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Tentative built-in format-patch.
2006-04-18 16:45:55 -07:00
3eefc18917 Tentative built-in format-patch.
This only does --stdout right now.  To write into separate files
with pretty-printed filenames like the real thing does, it needs
a bit mroe work.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-18 16:45:27 -07:00
4935e0553f Merge branch 'sh/daemon' into next
* sh/daemon:
  socksetup: don't return on set_reuse_addr() error
2006-04-18 14:41:57 -07:00
0032d548db socksetup: don't return on set_reuse_addr() error
The set_reuse_addr() error case was the only error case in
socklist() where we returned rather than continued.  Not sure
why.  Either we must free the socklist, or continue.  This patch
continues on error.

Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-18 14:39:28 -07:00
24735cfc50 Merge branch 'jc/pager-cat'
* jc/pager-cat:
  Do not fork PAGER=cat
2006-04-18 13:57:30 -07:00
34e98ea564 Merge branch 'lt/logopt'
* lt/logopt:
  Fix "git log --stat": make sure to set recursive with --stat.
  combine-diff: show diffstat with the first parent.
  git.c: LOGSIZE is unused after log printing cleanup.
  Log message printout cleanups (#3): fix --pretty=oneline
  Log message printout cleanups (#2)
  Log message printout cleanups
  rev-list --header: output format fix
  Fixes for option parsing
  log/whatchanged/show - log formatting cleanup.
  Simplify common default options setup for built-in log family.
  Tentative built-in "git show"
  Built-in git-whatchanged.
  rev-list option parser fix.
  Split init_revisions() out of setup_revisions()
  Fix up rev-list option parsing.
  Fix up default abbrev in setup_revisions() argument parser.
  Common option parsing for "git log --diff" and friends
2006-04-18 13:56:36 -07:00
d3d9681a0f Merge branch 'master' into next
* master:
  GIT 1.3.0
  Add git-annotate(1) and git-blame(1)
  diff --stat: make sure to set recursive.
  git-svnimport symlink support
2006-04-18 13:52:46 -07:00
524765efa5 Merge branch 'lt/logopt' into next
* lt/logopt:
  Fix "git log --stat": make sure to set recursive with --stat.
2006-04-18 13:18:21 -07:00
3a624b346d Fix "git log --stat": make sure to set recursive with --stat.
Just like "patch" format always needs recursive, "diffstat"
format does not make sense without setting recursive.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-18 11:43:09 -07:00
80608a61f0 Merge branch 'lt/logopt' into next
* lt/logopt:
  combine-diff: show diffstat with the first parent.
  git.c: LOGSIZE is unused after log printing cleanup.
  Log message printout cleanups (#3): fix --pretty=oneline
  Log message printout cleanups (#2)
  Log message printout cleanups
  rev-list --header: output format fix
2006-04-17 23:15:41 -07:00
e5de825fda Merge branch 'master' into next
* master:
  packed_object_info_detail(): check for corrupt packfile.
  cleanups: remove unused variable from exec_cmd.c
  cleanups: prevent leak of two strduped strings in config.c
  cleanups: Remove impossible case in quote.c
  cleanups: Remove unused vars from combine-diff.c
  cleanups: Fix potential bugs in connect.c
  Allow empty lines in info/grafts
2006-04-17 23:15:20 -07:00
965f803c32 combine-diff: show diffstat with the first parent.
Asking for stat (either with --stat or --patch-with-stat) gives
you diffstat for the first parent, even under combine-diff.

While the combined patch is useful to highlight the complexity
and interaction of the parts touched by all branches when
reviewing a merge commit, diffstat is a tool to assess the
extent of damage the merge brings in, and showing stat with the
first parent is more sensible than clever per-parent diffstat.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-17 22:53:03 -07:00
b073f26b25 git.c: LOGSIZE is unused after log printing cleanup.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-17 21:47:35 -07:00
a4d34e2db5 Log message printout cleanups (#3): fix --pretty=oneline
This option is very special, since pretty_print_commit() will _remove_
the newline at the end of it, so we want to have an extra separator
between the things.

I added a honking big comment this time, so that (a) I don't forget this
_again_ (I broke "oneline" several times during this printout cleanup),
and so that people can understand _why_ the code does what it does.

Now, arguably the alternate fix is to always have the '\n' at the end in
pretty-print-commit, but git-rev-list depends on the current behaviour
(but we could have git-rev-list remove it, whatever).

With the big comment, the code hopefully doesn't get broken again. And now
things like

	git log --pretty=oneline --cc --patch-with-stat

works (even if that is admittedly a totally insane combination: if you
want the patch, having the "oneline" log format is just crazy, but hey,
it _works_. Even insane people are people).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-17 21:44:33 -07:00
eab144ac49 Log message printout cleanups (#2)
Here's a further patch on top of the previous one with cosmetic
improvements (no "real" code changes, just trivial updates):

 - it gets the "---" before a diffstat right, including for the combined
   merge case. Righ now the logic is that we always use "---" when we have
   a diffstat, and an empty line otherwise. That's how I visually prefer
   it, but hey, it can be tweaked later.

 - I made "diff --cc/combined" add the "---/+++" header lines too. The
   thing won't be mistaken for a valid diff, since the "@@" lines have too
   many "@" characters (three or more), but it just makes it visually
   match a real diff, which at least to me makes a big difference in
   readability. Without them, it just looks very "wrong".

   I guess I should have taken the filename from each individual entry
   (and had one "---" file per parent), but I didn't even bother to try to
   see how that works, so this was the simple thing.

With this, doing a

	git log --cc --patch-with-stat

looks quite readable, I think. The only nagging issue - as far as I'm
concerned - is that diffstats for merges are pretty questionable the way
they are done now. I suspect it would be better to just have the _first_
diffstat, and always make the merge diffstat be the one for "result
against first parent".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-17 21:43:15 -07:00
9153983310 Log message printout cleanups
On Sun, 16 Apr 2006, Junio C Hamano wrote:
>
> In the mid-term, I am hoping we can drop the generate_header()
> callchain _and_ the custom code that formats commit log in-core,
> found in cmd_log_wc().

Ok, this was nastier than expected, just because the dependencies between
the different log-printing stuff were absolutely _everywhere_, but here's
a patch that does exactly that.

The patch is not very easy to read, and the "--patch-with-stat" thing is
still broken (it does not call the "show_log()" thing properly for
merges). That's not a new bug. In the new world order it _should_ do
something like

	if (rev->logopt)
		show_log(rev, rev->logopt, "---\n");

but it doesn't. I haven't looked at the --with-stat logic, so I left it
alone.

That said, this patch removes more lines than it adds, and in particular,
the "cmd_log_wc()" loop is now a very clean:

	while ((commit = get_revision(rev)) != NULL) {
		log_tree_commit(rev, commit);
		free(commit->buffer);
		commit->buffer = NULL;
	}

so it doesn't get much prettier than this. All the complexity is entirely
hidden in log-tree.c, and any code that needs to flush the log literally
just needs to do the "if (rev->logopt) show_log(...)" incantation.

I had to make the combined_diff() logic take a "struct rev_info" instead
of just a "struct diff_options", but that part is pretty clean.

This does change "git whatchanged" from using "diff-tree" as the commit
descriptor to "commit", and I changed one of the tests to reflect that new
reality. Otherwise everything still passes, and my other tests look fine
too.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-17 15:18:25 -07:00
db89665fbf rev-list --header: output format fix
Initial fix prepared by Johannes, but I did it slightly differently.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-17 12:42:36 -07:00
9893e3eb92 Merge branch 'jc/boundary' into next
* jc/boundary:
  rev-list --boundary: show boundary commits even when limited otherwise.
  Makefile fixups.
  gitk: Fix bug caused by missing commitlisted elements
2006-04-16 22:07:28 -07:00
ca9de6cadf Try using Geert similarity code in pack-objects.
It appears the fingerprinting itself is too expensive to be worth doing
for this purpose.  A failed experiment.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 22:03:01 -07:00
9a305b67f8 Geert's similarity
Define a function to compute similarity score 0.0<=score<=1.0

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 21:21:46 -07:00
878bd08d9a Merge branch 'master' into next
* master:
  reading $GIT_DIR/info/graft - skip comments correctly.
2006-04-16 17:03:13 -07:00
6adfbe9b27 Merge branch 'lt/logopt' into next
* lt/logopt:
  Fixes for option parsing
2006-04-16 17:02:52 -07:00
22626ef4fd gitk: Don't reread git-rev-list output from scratch on view switch
Previously, if we switched away from a view before we had finished
reading the git-rev-list output for it and laying out the graph, we
would discard the partially-laid-out graph and reread it from
scratch if we switched back to the view.  With this, we preserve the
state of the partially-laid-out graph in viewdata($view) and restore
it if we switch back.  The pipe to git-rev-list remains open but we
just don't read from it any more until we switch back to that view.

This also makes linesegends a list rather than an array, which turns
out to be slightly faster, as well as being easier to save and restore.

The `update' menu item now kills the git-rev-list process if there is
one still running when we do the update.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-17 09:56:02 +10:00
78fff6ebba Fixes for option parsing
Make sure "git show" always show the header, regardless of whether there
is a diff or not.

Also, make sure "always_show_header" actually works, since generate_header
only tested it in one out of three return paths.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 15:34:37 -07:00
d2b9b5f5bb Merge branch 'lt/logopt' into next
* lt/logopt:
  log/whatchanged/show - log formatting cleanup.
  Simplify common default options setup for built-in log family.
2006-04-16 03:39:00 -07:00
cb8f64b4e3 log/whatchanged/show - log formatting cleanup.
This moves the decision to print the log message, while diff
options are in effect, to log-tree.  It gives behaviour closer
to the traditional one.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 03:35:38 -07:00
d4ed9793fd Simplify common default options setup for built-in log family.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 02:42:00 -07:00
b2934926dd Merge branch 'master' into lt/logopt
* master:
  pager: do not fork a pager if PAGER is set to empty.
  diff-options: add --patch-with-stat
  diff-files --stat: do not dump core with unmerged index.
  Support "git cmd --help" syntax
  diff --stat: do not do its own three-dashes.
  diff-tree: typefix.
  GIT v1.3.0-rc4
  xdiff: post-process hunks to make them consistent.
2006-04-16 02:31:11 -07:00
e4284db2c5 Merge branch 'jc/pager-cat' into next
* jc/pager-cat:
  Do not fork PAGER=cat
  pager: do not fork a pager if PAGER is set to empty.
2006-04-16 01:49:13 -07:00
caef71a535 Do not fork PAGER=cat
Unless the user has a nonstandard "cat" command that does not
meow like a cat, this should not break anything and would save an
extra pipe.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 01:46:08 -07:00
43f934aa90 Merge branch 'lt/logopt' into next
* lt/logopt:
  Tentative built-in "git show"
  Built-in git-whatchanged.
  rev-list option parser fix.
  Split init_revisions() out of setup_revisions()
2006-04-16 01:02:33 -07:00
ba1d45051e Tentative built-in "git show"
This uses the "--no-walk" flag that I never actually implemented (but I'm
sure I mentioned it) to make "git show" be essentially the same thing as
"git whatchanged --no-walk".

It just refuses to add more interesting parents to the revision walking
history, so you don't actually get any history, you just get the commit
you asked for.

I was going to add "--no-walk" as a real argument flag to git-rev-list
too, but I'm not sure anybody actually needs it. Although it might be
useful for porcelain, so I left the door open.

[jc: ported to the unified option structure by Linus]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 00:13:38 -07:00
5b84f4d87a Built-in git-whatchanged.
Split internal "git log" into reusable piece and add "git
whatchanged".  This is based on the option parsing unification
work Linus did.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-16 00:07:41 -07:00
7594c4b2d7 rev-list option parser fix.
The big option parser unification broke rev-list the big way;
this makes it use options from the parsed revs structure.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 23:48:27 -07:00
6b9c58f466 Split init_revisions() out of setup_revisions()
Merging all three option parsers related to whatchanged is
unarguably the right thing, but the fallout was too big to scare
me away.  Let's try it once again, but once step at time.

This splits out init_revisions() call from setup_revisions(), so
that the callers can set different defaults to match the
traditional benaviour.

The rev-list command is still broken in a big way, which is the
topic of next step.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 23:46:36 -07:00
07512ea820 Merge branch 'js/diffstat' into next
* js/diffstat:
  diff-options: add --patch-with-stat
  diff-files --stat: do not dump core with unmerged index.
  Support "git cmd --help" syntax
  diff --stat: do not do its own three-dashes.
2006-04-15 19:35:55 -07:00
6db4ac3453 Merge branch 'lt/show' into next
* lt/show:
  Tentative built-in "git show"
2006-04-15 19:31:45 -07:00
c5ccd8be43 Tentative built-in "git show"
This uses the "--no-walk" flag that I never actually implemented (but I'm
sure I mentioned it) to make "git show" be essentially the same thing as
"git whatchanged --no-walk".

It just refuses to add more interesting parents to the revision walking
history, so you don't actually get any history, you just get the commit
you asked for.

I was going to add "--no-walk" as a real argument flag to git-rev-list
too, but I'm not sure anybody actually needs it. Although it might be
useful for porcelain, so I left the door open.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 18:17:15 -07:00
9626cb2e62 Merge branch 'jc/logopt' into next
* jc/logopt: (37 commits)
  1fc70b6
  Author: Junio C Hamano <junkio@cox.net>
  Date:   Sat Apr 15 04:15:07 2006 -0700
  
      Built-in git-whatchanged
      
      Now "git log" is in reusable shape, add "git whatchanged" which
      essentially is a synonym with different default for people whose
      fingers are already trained.
      
      There is a subtle difference from the shell-script version; the
      first line of each entry is now "commit <object name>", instead
      of "diff-tree <object name> (from <object name>)."  I suspect
      that showing the parent name that way is useful, so this may be
      something we would want to fix (the user can say --pretty=raw to
      get that information but that is a bit ugly).
      
      Signed-off-by: Junio C Hamano <junkio@cox.net>
  
  :100644 100644 22fec3d... 939a34c... M	git.c
  ...
2006-04-15 04:22:08 -07:00
1fc70b60bf Built-in git-whatchanged
Now "git log" is in reusable shape, add "git whatchanged" which
essentially is a synonym with different default for people whose
fingers are already trained.

There is a subtle difference from the shell-script version; the
first line of each entry is now "commit <object name>", instead
of "diff-tree <object name> (from <object name>)."  I suspect
that showing the parent name that way is useful, so this may be
something we would want to fix (the user can say --pretty=raw to
get that information but that is a bit ugly).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 04:21:19 -07:00
d2e38d3bc3 whatchanged options parser fix.
We need to have two sets of diff_options structure and abbrev
settings, but there is no point having two separate commit
format setting.  Fix the confusion.

Also properly initialize the command options structure.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 04:03:48 -07:00
0d53adf15b Merge branch 'jc/logopt' into next
* jc/logopt:
  Extract "log [diff options]" parser out.
  diff-tree: typefix.
2006-04-15 03:24:54 -07:00
f4235f8b2e Extract "log [diff options]" parser out.
Merging of the log-tree-opt structure with rev-info structure
did not work out very well and it broke things that did not want
diff options and/or rev options.

This is an alternative approach to define a combined interface
that can be used by commands that wants both.  The use of it is
opt-in to reduce the risk of breaking existing programs.

We might want to slurp "setup_revisions() places things in
pending objects list" part from Linus's earlier attempt.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 03:24:33 -07:00
fb8e008219 Merge branch 'jc/simpack' into next
* jc/simpack:
  Clean-up Geert's similarity fingerprint code.
2006-04-15 02:12:14 -07:00
fd2bbdd238 Clean-up Geert's similarity fingerprint code.
This splits Geert's similarity fingerprint code into main
program and fingerprinting function.  The next step would be to
try using this in pack-objects.c::try_delta() -- which would be
a good evaluation.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 02:11:52 -07:00
5d27a7d58c Merge branch 'jc/logopt' into next
* jc/logopt:
  Revert all the rev-list option parsing changes.
2006-04-15 01:59:49 -07:00
183df63940 Revert all the rev-list option parsing changes.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-15 01:59:40 -07:00
5957f043d3 Merge branch 'master' into next
* master:
  GIT v1.3.0-rc4
2006-04-14 23:21:48 -07:00
300dd93306 Merge branch 'lt/logopt' into next
* lt/logopt:
  Fix up rev-list option parsing.
  Fix up default abbrev in setup_revisions() argument parser.
  Common option parsing for "git log --diff" and friends
2006-04-14 22:44:12 -07:00
8c1f0b44c5 Fix up rev-list option parsing.
rev-list does not take diff options, so barf after seeing some.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-14 22:43:34 -07:00
8e8f998739 Fix up default abbrev in setup_revisions() argument parser.
The default abbreviation precision should be DEFAULT_ABBREV as before.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-14 22:42:31 -07:00
cd2bdc5309 Common option parsing for "git log --diff" and friends
This basically does a few things that are sadly somewhat interdependent,
and nontrivial to split out

 - get rid of "struct log_tree_opt"

   The fields in "log_tree_opt" are moved into "struct rev_info", and all
   users of log_tree_opt are changed to use the rev_info struct instead.

 - add the parsing for the log_tree_opt arguments to "setup_revision()"

 - make setup_revision set a flag (revs->diff) if the diff-related
   arguments were used. This allows "git log" to decide whether it wants
   to show diffs or not.

 - make setup_revision() also initialize the diffopt part of rev_info
   (which we had from before, but we just didn't initialize it)

 - make setup_revision() do all the "finishing touches" on it all (it will
   do the proper flag combination logic, and call "diff_setup_done()")

Now, that was the easy and straightforward part.

The slightly more involved part is that some of the programs that want to
use the new-and-improved rev_info parsing don't actually want _commits_,
they may want tree'ish arguments instead. That meant that I had to change
setup_revision() to parse the arguments not into the "revs->commits" list,
but into the "revs->pending_objects" list.

Then, when we do "prepare_revision_walk()", we walk that list, and create
the sorted commit list from there.

This actually cleaned some stuff up, but it's the less obvious part of the
patch, and re-organized the "revision.c" logic somewhat. It actually paves
the way for splitting argument parsing _entirely_ out of "revision.c",
since now the argument parsing really is totally independent of the commit
walking: that didn't use to be true, since there was lots of overlap with
get_commit_reference() handling etc, now the _only_ overlap is the shared
(and trivial) "add_pending_object()" thing.

However, I didn't do that file split, just because I wanted the diff
itself to be smaller, and show the actual changes more clearly. If this
gets accepted, I'll do further cleanups then - that includes the file
split, but also using the new infrastructure to do a nicer "git diff" etc.

Even in this form, it actually ends up removing more lines than it adds.

It's nice to note how simple and straightforward this makes the built-in
"git log" command, even though it continues to support all the diff flags
too. It doesn't get much simpler that this.

I think this is worth merging soonish, because it does allow for future
cleanup and even more sharing of code. However, it obviously touches
"revision.c", which is subtle. I've tested that it passes all the tests we
have, and it passes my "looks sane" detector, but somebody else should
also give it a good look-over.

[jc: squashed the original and three "oops this too" updates, with
 another fix-up.]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-14 21:56:55 -07:00
7bfd678d21 Merge branch 'jc/bottomless' into next
* jc/bottomless:
  rev-list --bisect: limit list before bisecting.
  Clean up trailing whitespace when pretty-printing commits
  "git cmd -h" for shell scripts.
  git-log <diff-options> <paths> documentation
  Retire git-log.sh (take #4)
  stripspace: incomplete line fix (take #2)
2006-04-14 21:56:37 -07:00
8a642a798f Merge branch 'jc/fix5500' into next
* jc/fix5500:
  t5500: test fix
2006-04-14 00:28:52 -07:00
4d2909e123 Merge branch 'js/diffstat' into next
* js/diffstat:
  diff --stat: no need to ask funcnames nor context.
2006-04-14 00:28:42 -07:00
9306ee06aa Merge branch 'master' into next
* master:
  Fix-up previous expr changes.
2006-04-13 19:05:51 -07:00
ce032c5f9e Merge branch 'js/diffstat' into next
* js/diffstat:
  diff-options: add --stat (take 2)
  diff-options: add --stat (take 2)
2006-04-13 16:50:48 -07:00
fdedbcfb0d gitk: Fix various bugs in the view support
- don't re-read refs when switching views, it's too slow; just do
  it if the user did File->Update
- make the view menu use the uifont
- if we have a graph line selected, unselect it before changing the view
- if a row is selected and appears in the new view, but we have to
  read in the new view, select that row when we come across it
- if no row was previously selected, or if we don't find the previously
  selected row in the new view, select the first row

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-06 21:22:52 +10:00
f916ee427f Merge branch 'master' into new 2006-04-06 10:22:18 +10:00
d94f8cd6ad gitk: Make File->Update work properly again
If a view is selected it will now just update that view.

Also fixed a few other things - if you switch away from a view while
gitk is still reading it in, then switch back, gitk will re-read it
from scratch.  We now re-read the references when switching views.
If something was selected before a view change, and we need to read
in the new view, we now select the previously-selected commit when
we come across it.

Fixed a bug in setting of rowrangelist plus a couple of other minor
things.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-06 10:18:23 +10:00
50b44eceed gitk: Implement multiple views
With this, gitk can know about the graphs for multiple sets of files
and directories of interest.  Each set of files/dirs and its graph is
called a "view".  There is always the "All files" view, which is the
complete graph showing all commits.  If files or dirs are specified
on the command line, a "Command line" view is automatically created.
Users can create new views and switch between them, and can delete
any view except the "All files" view.

This required a bit of reengineering.  In particular, some more things
that were arrays have now become lists.  The idrowranges array is still
used while the graph is being laid out, but for rows that have been laid
out we use the rowrangelist list instead.  The cornercrossings and
crossings arrays no longer exist, and instead we compute the crossings
when needed (in assigncolor).

Still to be done: make the back/forward buttons switch views as necessary;
make the updatecommits function work right; preserve the selection if
possible when the new view has to be read in; fix the case when the user
switches away from the current view while we are still reading it in
and laying it out; further optimizations.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-04 10:16:22 +10:00
2326acfa95 v264 2006-01-17 03:50:44 +01:00
2c5c008b46 fix: Use of uninitialized value
The subroutine did not check the case where HEAD does not verify.

Patch from Junio C Hamano <junkio@cox.net>
2006-01-17 03:50:20 +01:00
f76ddc2015 v263 2006-01-09 13:14:00 +01:00
df2c37a5a1 allow working in repositories with textual symref HEAD 2006-01-09 13:13:39 +01:00
d3a6fd9486 resolve textual hashes when looking up "refs"
Thanks to Jon Nelson for the patch.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-22 22:58:29 +01:00
212848746e v262 2005-12-19 04:09:32 +01:00
8240accb65 define default colors
Thanks to Kir Kolyshkin for pointing it out.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-19 04:09:02 +01:00
fdeb2fb616 v261 2005-12-07 16:33:08 +01:00
c2488d064b fix leading whitespace in commit text
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-07 16:32:51 +01:00
edde3735d0 more tags
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-07 16:10:01 +01:00
4e8c09a331 v260 2005-12-07 10:51:59 +01:00
4df1191071 attach tag to the link
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-07 10:51:42 +01:00
70dd8acb9a v259 2005-12-07 10:13:19 +01:00
045e531a8f show multiple tags
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-07 10:12:55 +01:00
4cdd1f9031 v258 2005-12-07 09:47:34 +01:00
6a928415e2 show tags in lists
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-12-07 09:44:06 +01:00
94140c7ab0 v257 2005-11-24 19:44:28 +01:00
f5ac835a58 fix "rename" output
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-11-24 19:43:53 +01:00
e7e470c9b8 v256 2005-11-24 18:14:44 +01:00
ae78620525 fix quoted filename lookup
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-11-24 18:14:25 +01:00
6dc05fa749 v255 2005-11-24 17:30:38 +01:00
3957fa1779 v254 2005-11-24 17:15:30 +01:00
232ff5536c allow utf8 characters in url parameter escape
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-11-24 16:56:55 +01:00
e13dd505c5 v253 2005-11-23 18:00:34 +01:00
8f1deb5f53 set logo output to raw mode 2005-11-23 16:02:13 +01:00
7597763d5b add broken latin encoding to test file 2005-11-23 15:16:49 +01:00
2fe8f1c04a add ut8 test file
It contains Märchen. (\xc3a4)
2005-11-23 15:09:59 +01:00
10bb903660 fix utf8 decoding
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-11-23 04:26:40 +01:00
5b7a14fb4d v252 2005-11-20 02:13:08 +01:00
440c8a2ad0 fix another typo
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-11-20 02:12:45 +01:00
d81caf21e9 v251 2005-11-20 02:03:29 +01:00
afeaa5d8da add missing esc() rename
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-11-20 02:03:09 +01:00
b8470d86e5 v250 2005-11-19 17:56:29 +01:00
40c138134f replace invalid utf8 sequences by UTF-8 REPLACEMENT CHARACTER (efbfbd)
I still strongly disagree with the git maintainers not to hint people,
to use the only sane default encoding for a distributed project,
which is utf8. I'm tired of hearing filesystem development arguments.
Git is a software offered to merge forth and back across the world
and not to provide a content neutral filesystem.
Btw: I have nothing against the ability to run git in a closed environment,
with a different encoding, that's fine, sure. But that is obviously not
the case for the projects on kernel.org. It's about sane defaults,
nothing else.

You have to make decisions guy, as always in life. The problems to
allow random encoded garbage in commit messages _without_ storing
the encoding, just makes zero sense. Eighter you introduce a per-commit
encoding field, if you insist on this craziness, or you define a default
encoding. Everything else is just lazy and does not solve any problem,
besides that you can claim now, that you are not responsible for the mess
in the repository.

Gitweb shows several commits at once, you allow various encodings committed
to the same repository, without any hint what that garbage from the
individual commits is encoded with. No idea why you don't get
the problem - it's unsolvable. If you merge different peoples work, you
have to speak a common language!

Kay Sievers <kay.sievers@vrfy.org>
2005-11-19 17:41:29 +01:00
a9e60b7d09 escape ' ' with '+' in url's 2005-11-14 15:15:12 +01:00
7f2a645e4f v249 2005-11-14 06:12:33 +01:00
182167100f make ' ' and '+' in filenames some kind of working 2005-11-14 06:10:07 +01:00
353347b0b8 escape '+' and ' ' in url's 2005-11-14 05:47:18 +01:00
85852d44e4 update the test files to have a diff 2005-11-14 05:45:31 +01:00
cc3245b651 add test files 2005-11-14 05:43:02 +01:00
5b6dcc3fde v248 2005-10-19 03:24:27 +02:00
11044297b2 add Expires: +1d header to commit and commitdiff pages
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-10-19 03:18:45 +02:00
9312944d35 provide filename for "save as" in plaintext views
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-10-17 03:27:54 +02:00
0c3eb45fa4 v247 2005-10-04 01:13:22 +02:00
d8f1c5c2f3 rename "branches" to "heads"
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-10-04 01:12:47 +02:00
972062bbb8 v246 2005-09-20 10:25:01 +02:00
c39e47d98a start searching at the current $hash value
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-09-17 03:00:21 +02:00
bd4d3c92d7 v245
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-09-13 02:22:51 +02:00
25f422fb87 switch to git-rev-list for commit reading
This way we don't need to parse the "grafts".

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-09-13 02:21:59 +02:00
55d0b8e4f7 v244
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-09-06 23:26:57 +02:00
324d7cca68 fix typo in link parameter of git_commit
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-09-06 23:26:10 +02:00
f912756146 translate reference into hash while reading a commit 2005-09-04 01:37:25 +02:00
86f5b8a098 v243
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-09-03 14:51:13 +02:00
c91da262b3 common input validation to allow passing of textual hash id's 2005-09-03 14:50:33 +02:00
76a8323ac7 v242
fix typo

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-31 04:11:33 +02:00
48c771f4a7 v241
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-31 03:54:45 +02:00
c24fd7b7cc Show tooltips (like this one :)) containing full titles for truncated commit titles in the summary and shortlog views.
Thanks for the patch to:
  Timo Hirvonen <tihirvon at gmail.com>
2005-08-31 03:47:13 +02:00
a48e11ca90 don't chop_str if adding ... is longer than the original
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-31 03:25:29 +02:00
e00c9e18a7 Add <author> and <guid> to RSS feed
From http://blogs.law.harvard.edu/tech/rss
  author - Email address of the author of the item.
  guid   - A string that uniquely identifies the item.

Signed-off-by: Yasushi SHOJI <yashi@atmark-techno.com>
2005-08-18 18:24:28 +02:00
53b89d8ddb fix search parsing, later git does not print a trailing space 2005-08-12 22:12:58 +02:00
d8d17b5deb make index page sorting more visible and increase RSS item count
The RSS feed now shows 30 items + all items more recent than 48 hours
but not more than 150. Let's see how that works...
2005-08-12 21:43:32 +02:00
f7ab660c15 allow sorting of index page by project path, owner and age 2005-08-10 03:53:09 +02:00
e4669df9a6 Make the tag view look like commit header. 2005-08-08 00:02:39 +02:00
f5dfb3f6a6 add README
Two files are better than one. :)
2005-08-07 22:39:58 +02:00
d263a6bd45 v236 2005-08-07 20:29:03 +02:00
d8a20ba9bc v235 2005-08-07 20:28:53 +02:00
f49201a995 v234 2005-08-07 20:28:42 +02:00
f6375b2452 v233 2005-08-07 20:28:33 +02:00
1b1cd42182 v232 2005-08-07 20:28:01 +02:00
d05c19eeb2 v229 2005-08-07 20:27:49 +02:00
4fac5294de v227 2005-08-07 20:27:38 +02:00
71be1e7948 v225 2005-08-07 20:27:27 +02:00
c994d620cc v220 2005-08-07 20:27:18 +02:00
ea4a6df408 v206 2005-08-07 20:26:49 +02:00
dcea8d0b84 v205 2005-08-07 20:26:38 +02:00
198066916a v203 2005-08-07 20:26:27 +02:00
1f22c26777 v165 2005-08-07 20:26:12 +02:00
2bf7a52c61 v164 2005-08-07 20:26:03 +02:00
7ab0d2b646 v163 2005-08-07 20:25:54 +02:00
bddec01de1 v160 2005-08-07 20:25:42 +02:00
10dba28d74 v157 2005-08-07 20:25:27 +02:00
a4d26ef062 v154 2005-08-07 20:24:51 +02:00
fa378499c7 v152 2005-08-07 20:24:43 +02:00
0db37973ed v150 2005-08-07 20:24:35 +02:00
440c60068b v149 2005-08-07 20:24:01 +02:00
7403d50bd2 v148 2005-08-07 20:23:49 +02:00
e925f38c2d v145 2005-08-07 20:23:35 +02:00
9ea82aa8e0 v143 2005-08-07 20:23:24 +02:00
ede5e1009e v142 2005-08-07 20:23:12 +02:00
8ab1da2c4f v136 2005-08-07 20:22:53 +02:00
c07ad4b971 v133 2005-08-07 20:22:44 +02:00
42f7eb94a0 v125 2005-08-07 20:21:46 +02:00
eb28240b64 v121 2005-08-07 20:21:34 +02:00
09bd789841 v118 2005-08-07 20:21:23 +02:00
b87d78d60c v107 2005-08-07 20:21:04 +02:00
2735983d79 v089 2005-08-07 20:20:20 +02:00
034df39ef7 v088 2005-08-07 20:20:07 +02:00
6191f8e1dd v085 2005-08-07 20:19:56 +02:00
2bb7c6d417 v082 2005-08-07 20:19:45 +02:00
927dcec480 v080 2005-08-07 20:18:44 +02:00
334538f11d v078 2005-08-07 20:18:30 +02:00
d63577da05 v077 2005-08-07 20:18:13 +02:00
1207151d40 v073 2005-08-07 20:18:01 +02:00
820e4f6b6b v071 2005-08-07 20:17:50 +02:00
9cd3d98873 v070 2005-08-07 20:17:42 +02:00
664f4cc5eb v064 2005-08-07 20:17:19 +02:00
b51103f3cd v063 2005-08-07 20:17:09 +02:00
2ae100df54 v062 2005-08-07 20:17:00 +02:00
d51e902a09 v057 2005-08-07 20:16:07 +02:00
061cc7cdcf v056 2005-08-07 20:15:57 +02:00
a59d4afd69 v055 2005-08-07 20:15:44 +02:00
2ad9331e15 v053
rename gitweb.pl to gitweb.cgi
2005-08-07 20:14:48 +02:00
185f09e5ba v049 2005-08-07 20:13:11 +02:00
ff7669a5b9 v048 2005-08-07 20:13:02 +02:00
fbb592a91e v043 2005-08-07 20:12:11 +02:00
991910a9ff v042 2005-08-07 20:09:33 +02:00
86eed32d36 v041 2005-08-07 20:08:29 +02:00
54b0a43c3f v041 2005-08-07 20:08:03 +02:00
022be3d0f1 v035 2005-08-07 20:06:09 +02:00
d767d59c8a v031 2005-08-07 20:05:55 +02:00
8ed23e1bfb v027 2005-08-07 20:05:44 +02:00
959c6a1efc v026 2005-08-07 20:05:32 +02:00
3e029299d8 v025 2005-08-07 20:05:15 +02:00
3f714537ae v021 2005-08-07 20:03:52 +02:00
703ac7102f v021 2005-08-07 20:03:14 +02:00
12a88f2f03 v021 2005-08-07 20:02:47 +02:00
e334d18cfd v021 2005-08-07 20:02:33 +02:00
a7e09a96a8 v020 2005-08-07 20:00:05 +02:00
1b1433800e v016 2005-08-07 19:59:41 +02:00
44ad2978e6 v014 2005-08-07 19:59:24 +02:00
52ccdd4092 v006 2005-08-07 19:58:12 +02:00
823d5dc81f v005 2005-08-07 19:57:58 +02:00
22fafb99e3 v004 2005-08-07 19:56:59 +02:00
adf3ee8e48 v003 2005-08-07 19:56:44 +02:00
c068cff1f9 v003 2005-08-07 19:56:10 +02:00
b531daf3a1 v002 2005-08-07 19:55:05 +02:00
e0389bd7f2 v001 2005-08-07 19:54:31 +02:00
ecb378f5b5 v000 2005-08-07 19:53:54 +02:00
4c02e3c56f v000 2005-08-07 19:52:52 +02:00
161332a521 first working version 2005-08-07 19:49:46 +02:00
521 changed files with 38487 additions and 10317 deletions

13
.gitignore vendored
View File

@ -1,3 +1,4 @@
GIT-CFLAGS
GIT-VERSION-FILE
git
git-add
@ -17,7 +18,6 @@ git-cherry
git-cherry-pick
git-clean
git-clone
git-clone-pack
git-commit
git-commit-tree
git-convert-objects
@ -46,6 +46,7 @@ git-http-push
git-imap-send
git-index-pack
git-init-db
git-instaweb
git-local-fetch
git-log
git-lost-found
@ -77,6 +78,7 @@ git-prune
git-prune-packed
git-pull
git-push
git-quiltimport
git-read-tree
git-rebase
git-receive-pack
@ -105,6 +107,7 @@ git-ssh-push
git-ssh-upload
git-status
git-stripspace
git-svn
git-svnimport
git-symbolic-ref
git-tag
@ -115,6 +118,7 @@ git-update-index
git-update-ref
git-update-server-info
git-upload-pack
git-upload-tar
git-var
git-verify-pack
git-verify-tag
@ -123,6 +127,7 @@ git-write-tree
git-core-*/?*
test-date
test-delta
test-dump-cache-tree
common-cmds.h
*.tar.gz
*.dsc
@ -132,4 +137,10 @@ git-core.spec
*.[ao]
*.py[co]
config.mak
autom4te.cache
config.log
config.status
config.mak.in
config.mak.autogen
configure
git-blame

View File

@ -7,6 +7,7 @@ MAN7_TXT=git.txt
DOC_HTML=$(patsubst %.txt,%.html,$(MAN1_TXT) $(MAN7_TXT))
ARTICLES = tutorial
ARTICLES += tutorial-2
ARTICLES += core-tutorial
ARTICLES += cvs-migration
ARTICLES += diffcore
@ -24,10 +25,10 @@ DOC_MAN1=$(patsubst %.txt,%.1,$(MAN1_TXT))
DOC_MAN7=$(patsubst %.txt,%.7,$(MAN7_TXT))
prefix?=$(HOME)
bin=$(prefix)/bin
mandir=$(prefix)/man
man1=$(mandir)/man1
man7=$(mandir)/man7
bindir?=$(prefix)/bin
mandir?=$(prefix)/man
man1dir=$(mandir)/man1
man7dir=$(mandir)/man7
# DESTDIR=
INSTALL?=install
@ -45,15 +46,16 @@ all: html man
html: $(DOC_HTML)
$(DOC_HTML) $(DOC_MAN1) $(DOC_MAN7): asciidoc.conf
man: man1 man7
man1: $(DOC_MAN1)
man7: $(DOC_MAN7)
install: man
$(INSTALL) -d -m755 $(DESTDIR)/$(man1) $(DESTDIR)/$(man7)
$(INSTALL) $(DOC_MAN1) $(DESTDIR)/$(man1)
$(INSTALL) $(DOC_MAN7) $(DESTDIR)/$(man7)
$(INSTALL) -d -m755 $(DESTDIR)$(man1dir) $(DESTDIR)$(man7dir)
$(INSTALL) $(DOC_MAN1) $(DESTDIR)$(man1dir)
$(INSTALL) $(DOC_MAN7) $(DESTDIR)$(man7dir)
#
@ -79,7 +81,7 @@ clean:
asciidoc -b xhtml11 -d manpage -f asciidoc.conf $<
%.1 %.7 : %.xml
xmlto man $<
xmlto -m callouts.xsl man $<
%.xml : %.txt
asciidoc -b docbook -d manpage -f asciidoc.conf $<

View File

@ -49,7 +49,7 @@ People on the git mailing list need to be able to read and
comment on the changes you are submitting. It is important for
a developer to be able to "quote" your changes, using standard
e-mail tools, so that they may comment on specific portions of
your code. For this reason, all patches should be submited
your code. For this reason, all patches should be submitted
"inline". WARNING: Be wary of your MUAs word-wrap
corrupting your patch. Do not cut-n-paste your patch; you can
lose tabs that way if you are not careful.
@ -266,8 +266,8 @@ This recipe appears to work with the current [*1*] Thunderbird from Suse.
The following Thunderbird extensions are needed:
AboutConfig 0.5
http://aboutconfig.mozdev.org/
External Editor 0.5.4
http://extensionroom.mozdev.org/more-info/exteditor
External Editor 0.7.2
http://globs.org/articles.php?lng=en&pg=8
1) Prepare the patch as a text file using your method of choice.

View File

@ -9,6 +9,8 @@
[attributes]
caret=^
startsb=&#91;
endsb=&#93;
ifdef::backend-docbook[]
[gitlink-inlinemacro]

View File

@ -0,0 +1,16 @@
<!-- callout.xsl: converts asciidoc callouts to man page format -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="co">
<xsl:value-of select="concat('\fB(',substring-after(@id,'-'),')\fR')"/>
</xsl:template>
<xsl:template match="calloutlist">
<xsl:text>.sp&#10;</xsl:text>
<xsl:apply-templates/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="callout">
<xsl:value-of select="concat('\fB',substring-after(@arearefs,'-'),'. \fR')"/>
<xsl:apply-templates/>
<xsl:text>.br&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

View File

@ -2,15 +2,15 @@ CONFIGURATION FILE
------------------
The git configuration file contains a number of variables that affect
the git commands behaviour. They can be used by both the git plumbing
and the porcelains. The variables are divided to sections, where
the git command's behavior. They can be used by both the git plumbing
and the porcelains. The variables are divided into sections, where
in the fully qualified variable name the variable itself is the last
dot-separated segment and the section name is everything before the last
dot. The variable names are case-insensitive and only alphanumeric
characters are allowed. Some variables may appear multiple times.
The syntax is fairly flexible and permissive; whitespaces are mostly
ignored. The '#' and ';' characters begin commends to the end of line,
ignored. The '#' and ';' characters begin comments to the end of line,
blank lines are ignored, lines containing strings enclosed in square
brackets start sections and all the other lines are recognized
as setting variables, in the form 'name = value'. If there is no equal
@ -35,8 +35,8 @@ Variables
~~~~~~~~~
Note that this list is non-comprehensive and not necessarily complete.
For command-specific variables, you will find more detailed description
in the appropriate manual page. You will find description of non-core
For command-specific variables, you will find a more detailed description
in the appropriate manual page. You will find a description of non-core
porcelain configuration variables in the respective porcelain documentation.
core.fileMode::
@ -52,10 +52,10 @@ core.gitProxy::
on hostnames ending with the specified domain string. This variable
may be set multiple times and is matched in the given order;
the first match wins.
Can be overriden by the 'GIT_PROXY_COMMAND' environment variable
(which always applies universally, without the special "for"
handling).
+
Can be overridden by the 'GIT_PROXY_COMMAND' environment variable
(which always applies universally, without the special "for"
handling).
core.ignoreStat::
The working copy files are assumed to stay unchanged until you
@ -64,31 +64,90 @@ core.ignoreStat::
slow, such as Microsoft Windows. See gitlink:git-update-index[1].
False by default.
core.onlyUseSymrefs::
Always use the "symref" format instead of symbolic links for HEAD
and other symbolic reference files. True by default.
core.preferSymlinkRefs::
Instead of the default "symref" format for HEAD
and other symbolic reference files, use symbolic links.
This is sometimes needed to work with old scripts that
expect HEAD to be a symbolic link.
core.logAllRefUpdates::
If true, `git-update-ref` will append a line to
"$GIT_DIR/logs/<ref>" listing the new SHA1 and the date/time
of the update. If the file does not exist it will be
created automatically. This information can be used to
determine what commit was the tip of a branch "2 days ago".
This value is false by default (no logging).
core.repositoryFormatVersion::
Internal variable identifying the repository format and layout
version.
core.sharedRepository::
If true, the repository is made shareable between several users
in a group (making sure all the files and objects are group-writable).
See gitlink:git-init-db[1]. False by default.
When 'group' (or 'true'), the repository is made shareable between
several users in a group (making sure all the files and objects are
group-writable). When 'all' (or 'world' or 'everybody'), the
repository will be readable by all users, additionally to being
group-shareable. When 'umask' (or 'false'), git will use permissions
reported by umask(2). See gitlink:git-init-db[1]. False by default.
core.warnAmbiguousRefs::
If true, git will warn you if the ref name you passed it is ambiguous
and might match multiple refs in the .git/refs/ tree. True by default.
core.compression::
An integer -1..9, indicating the compression level for objects that
are not in a pack file. -1 is the zlib and git default. 0 means no
compression, and 1..9 are various speed/size tradeoffs, 9 being
slowest.
core.legacyheaders::
A boolean which enables the legacy object header format in case
you want to interoperate with old clients accessing the object
database directly (where the "http://" and "rsync://" protocols
count as direct access).
alias.*::
Command aliases for the gitlink:git[1] command wrapper - e.g.
after defining "alias.last = cat-file commit HEAD", the invocation
"git last" is equivalent to "git cat-file commit HEAD". To avoid
confusion and troubles with script usage, aliases that
hide existing git commands are ignored. Arguments are split by
spaces, the usual shell quoting and escaping is supported.
quote pair and a backslash can be used to quote them.
apply.whitespace::
Tells `git-apply` how to handle whitespaces, in the same way
as the '--whitespace' option. See gitlink:git-apply[1].
pager.color::
A boolean to enable/disable colored output when the pager is in
use (default is true).
diff.color::
When true (or `always`), always use colors in patch.
When false (or `never`), never. When set to `auto`, use
colors only when the output is to the terminal.
diff.color.<slot>::
Use customized color for diff colorization. `<slot>`
specifies which part of the patch to use the specified
color, and is one of `plain` (context text), `meta`
(metainformation), `frag` (hunk header), `old` (removed
lines), or `new` (added lines). The value for these
configuration variables can be one of: `normal`, `bold`,
`dim`, `ul`, `blink`, `reverse`, `reset`, `black`,
`red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, or
`white`.
diff.renameLimit::
The number of files to consider when performing the copy/rename
detection; equivalent to the git diff option '-l'.
diff.renames::
Tells git to detect renames. If set to any boolean value, it
will enable basic rename detection. If set to "copies" or
"copy", it will detect copies, as well.
format.headers::
Additional email headers to include in a patch to be submitted
by mail. See gitlink:git-format-patch[1].
@ -103,37 +162,37 @@ gitcvs.logfile::
http.sslVerify::
Whether to verify the SSL certificate when fetching or pushing
over HTTPS. Can be overriden by the 'GIT_SSL_NO_VERIFY' environment
over HTTPS. Can be overridden by the 'GIT_SSL_NO_VERIFY' environment
variable.
http.sslCert::
File containing the SSL certificate when fetching or pushing
over HTTPS. Can be overriden by the 'GIT_SSL_CERT' environment
over HTTPS. Can be overridden by the 'GIT_SSL_CERT' environment
variable.
http.sslKey::
File containing the SSL private key when fetching or pushing
over HTTPS. Can be overriden by the 'GIT_SSL_KEY' environment
over HTTPS. Can be overridden by the 'GIT_SSL_KEY' environment
variable.
http.sslCAInfo::
File containing the certificates to verify the peer with when
fetching or pushing over HTTPS. Can be overriden by the
fetching or pushing over HTTPS. Can be overridden by the
'GIT_SSL_CAINFO' environment variable.
http.sslCAPath::
Path containing files with the CA certificates to verify the peer
with when fetching or pushing over HTTPS. Can be overriden
with when fetching or pushing over HTTPS. Can be overridden
by the 'GIT_SSL_CAPATH' environment variable.
http.maxRequests::
How many HTTP requests to launch in parallel. Can be overriden
How many HTTP requests to launch in parallel. Can be overridden
by the 'GIT_HTTP_MAX_REQUESTS' environment variable. Default is 5.
http.lowSpeedLimit, http.lowSpeedTime::
If the HTTP transfer speed is less than 'http.lowSpeedLimit'
for longer than 'http.lowSpeedTime' seconds, the transfer is aborted.
Can be overriden by the 'GIT_HTTP_LOW_SPEED_LIMIT' and
Can be overridden by the 'GIT_HTTP_LOW_SPEED_LIMIT' and
'GIT_HTTP_LOW_SPEED_TIME' environment variables.
i18n.commitEncoding::
@ -147,6 +206,10 @@ merge.summary::
Whether to include summaries of merged commits in newly created
merge commit messages. False by default.
pack.window::
The size of the window used by gitlink:git-pack-objects[1] when no
window size is given on the command line. Defaults to 10.
pull.octopus::
The default merge strategy to use when pulling multiple branches
at once.
@ -162,14 +225,25 @@ showbranch.default::
The default set of branches for gitlink:git-show-branch[1].
See gitlink:git-show-branch[1].
tar.umask::
By default, gitlink:git-tar-tree[1] sets file and directories modes
to 0666 or 0777. While this is both useful and acceptable for projects
such as the Linux Kernel, it might be excessive for other projects.
With this variable, it becomes possible to tell
gitlink:git-tar-tree[1] to apply a specific umask to the modes above.
The special value "user" indicates that the user's current umask will
be used. This should be enough for most projects, as it will lead to
the same permissions as gitlink:git-checkout[1] would use. The default
value remains 0, which means world read-write.
user.email::
Your email address to be recorded in any newly created commits.
Can be overriden by the 'GIT_AUTHOR_EMAIL' and 'GIT_COMMITTER_EMAIL'
Can be overridden by the 'GIT_AUTHOR_EMAIL' and 'GIT_COMMITTER_EMAIL'
environment variables. See gitlink:git-commit-tree[1].
user.name::
Your full name to be recorded in any newly created commits.
Can be overriden by the 'GIT_AUTHOR_NAME' and 'GIT_COMMITTER_NAME'
Can be overridden by the 'GIT_AUTHOR_NAME' and 'GIT_COMMITTER_NAME'
environment variables. See gitlink:git-commit-tree[1].
whatchanged.difftree::

View File

@ -1,5 +1,5 @@
A short git tutorial
====================
A git core tutorial for developers
==================================
Introduction
------------
@ -184,7 +184,7 @@ $ git-cat-file -t 557db03de997c86a4a028e1ebd3a1ceb225be238
----------------
where the `-t` tells `git-cat-file` to tell you what the "type" of the
object is. git will tell you that you have a "blob" object (ie just a
object is. git will tell you that you have a "blob" object (i.e., just a
regular file), and you can see the contents with
----------------
@ -619,7 +619,7 @@ $ git tag -s <tagname>
----------------
which will sign the current `HEAD` (but you can also give it another
argument that specifies the thing to tag, ie you could have tagged the
argument that specifies the thing to tag, i.e., you could have tagged the
current `mybranch` point by using `git tag <tagname> mybranch`).
You normally only do signed tags for major releases or things
@ -971,7 +971,7 @@ $ git show-branch --topo-order master mybranch
The first two lines indicate that it is showing the two branches
and the first line of the commit log message from their
top-of-the-tree commits, you are currently on `master` branch
(notice the asterisk `*` character), and the first column for
(notice the asterisk `\*` character), and the first column for
the later output lines is used to show commits contained in the
`master` branch, and the second column for the `mybranch`
branch. Three commits are shown along with their log messages.
@ -1097,7 +1097,7 @@ commit object by downloading from `repo.git/objects/xx/xxx\...`
using the object name of that commit object. Then it reads the
commit object to find out its parent commits and the associate
tree object; it repeats this process until it gets all the
necessary objects. Because of this behaviour, they are
necessary objects. Because of this behavior, they are
sometimes also called 'commit walkers'.
+
The 'commit walkers' are sometimes also called 'dumb

View File

@ -1,7 +1,7 @@
git for CVS users
=================
So you're a CVS user. That's ok, it's a treatable condition. The job of
So you're a CVS user. That's OK, it's a treatable condition. The job of
this document is to put you on the road to recovery, by helping you
convert an existing cvs repository to git, and by showing you how to use a
git repository in a cvs-like fashion.
@ -93,7 +93,7 @@ machine where the repository is hosted. If you don't want to give them a
full shell on the machine, there is a restricted shell which only allows
users to do git pushes and pulls; see gitlink:git-shell[1].
Put all the committers should in the same group, and make the repository
Put all the committers in the same group, and make the repository
writable by that group:
------------------------------------------------
@ -106,7 +106,7 @@ Make sure committers have a umask of at most 027, so that the directories
they create are writable and searchable by other group members.
Suppose this repository is now set up in /pub/repo.git on the host
foo.com. Then as an individual commiter you can clone the shared
foo.com. Then as an individual committer you can clone the shared
repository:
------------------------------------------------
@ -159,7 +159,7 @@ other than `master`.
[NOTE]
============
Because of this behaviour, if the shared repository and the developer's
Because of this behavior, if the shared repository and the developer's
repository both have branches named `origin`, then a push like the above
attempts to update the `origin` branch in the shared repository from the
developer's `origin` branch. The results may be unexpected, so it's

View File

@ -4,14 +4,21 @@
-u::
Synonym for "-p".
--raw::
Generate the raw format.
--patch-with-raw::
Generate patch but keep also the default raw diff output.
Synonym for "-p --raw".
--stat::
Generate a diffstat instead of a patch.
Generate a diffstat.
--summary::
Output a condensed summary of extended header information
such as creations, renames and mode changes.
--patch-with-stat::
Generate patch and prepend its diffstat.
Synonym for "-p --stat".
-z::
\0 line termination on output
@ -22,10 +29,25 @@
--name-status::
Show only names and status of changed files.
--color::
Show colored diff.
--no-color::
Turn off colored diff, even when the configuration file
gives the default to color output.
--no-renames::
Turn off rename detection, even when the configuration
file gives the default to do so.
--full-index::
Instead of the first handful characters, show full
object name of pre- and post-image blob on the "index"
line when generating a patch format output.
line when generating a patch format output.
--binary::
In addition to --full-index, output "binary diff" that
can be applied with "git apply".
--abbrev[=<n>]::
Instead of showing the full 40-byte hexadecimal object
@ -90,5 +112,11 @@
Swap two inputs; that is, show differences from index or
on-disk file to tree contents.
--text::
Treat all files as text.
-a::
Shorthand for "--text".
For more detailed explanation on these common options, see also
link:diffcore.html[diffcore documentation].

View File

@ -45,7 +45,7 @@ Everybody uses these commands to feed and care git repositories.
* gitlink:git-fsck-objects[1] to validate the repository.
* gitlink:git-prune[1] to garbage collect crufts in the
* gitlink:git-prune[1] to garbage collect cruft in the
repository.
* gitlink:git-repack[1] to pack loose objects for efficiency.
@ -61,32 +61,32 @@ $ git prune
$ git count-objects <2>
$ git repack <3>
$ git prune <4>
------------
+
<1> running without "--full" is usually cheap and assures the
repository health reasonably well.
<2> check how many loose objects there are and how much
diskspace is wasted by not repacking.
disk space is wasted by not repacking.
<3> without "-a" repacks incrementally. repacking every 4-5MB
of loose objects accumulation may be a good rule of thumb.
<4> after repack, prune removes the duplicate loose objects.
------------
Repack a small project into single pack.::
+
------------
$ git repack -a -d <1>
$ git prune
------------
+
<1> pack all the objects reachable from the refs into one pack
and remove unneeded other packs
------------
Individual Developer (Standalone)[[Individual Developer (Standalone)]]
----------------------------------------------------------------------
A standalone individual developer does not exchange patches with
other poeple, and works alone in a single repository, using the
other people, and works alone in a single repository, using the
following commands.
* gitlink:git-show-branch[1] to see where you are.
@ -129,10 +129,10 @@ $ git-init-db
$ git add . <1>
$ git commit -m 'import of frotz source tree.'
$ git tag v2.43 <2>
------------
+
<1> add everything under the current directory.
<2> make a lightweight, unannotated tag.
------------
Create a topic branch and develop.::
+
@ -153,7 +153,8 @@ $ git checkout master <9>
$ git pull . alsa-audio <10>
$ git log --since='3 days ago' <11>
$ git log v2.43.. curses/ <12>
------------
+
<1> create a new topic branch.
<2> revert your botched changes in "curses/ux_audio_oss.c".
<3> you need to tell git if you added a new file; removal and
@ -170,7 +171,6 @@ you originally wrote.
combined and include --max-count=10 (show 10 commits), --until='2005-12-10'.
<12> view only the changes that touch what's in curses/
directory, since v2.43 tag.
------------
Individual Developer (Participant)[[Individual Developer (Participant)]]
@ -208,7 +208,8 @@ $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL <5>
$ git reset --hard ORIG_HEAD <6>
$ git prune <7>
$ git fetch --tags <8>
------------
+
<1> repeat as needed.
<2> extract patches from your branch for e-mail submission.
<3> "pull" fetches from "origin" by default and merges into the
@ -221,7 +222,6 @@ area we are interested in.
<7> garbage collect leftover objects from reverted pull.
<8> from time to time, obtain official tags from the "origin"
and store them under .git/refs/tags/.
------------
Push into another repository.::
@ -239,7 +239,8 @@ satellite$ git push origin <4>
mothership$ cd frotz
mothership$ git checkout master
mothership$ git pull . satellite <5>
------------
+
<1> mothership machine has a frotz repository under your home
directory; clone from it to start a repository on the satellite
machine.
@ -252,7 +253,6 @@ to local "origin" branch.
mothership machine. You could use this as a back-up method.
<5> on mothership machine, merge the work done on the satellite
machine into the master branch.
------------
Branch off of a specific tag.::
+
@ -262,12 +262,12 @@ $ edit/compile/test; git commit -a
$ git checkout master
$ git format-patch -k -m --stdout v2.6.14..private2.6.14 |
git am -3 -k <2>
------------
+
<1> create a private branch based on a well known (but somewhat behind)
tag.
<2> forward port all changes in private2.6.14 branch to master branch
without a formal "merging".
------------
Integrator[[Integrator]]
@ -317,7 +317,8 @@ $ git tag -s -m 'GIT 0.99.9x' v0.99.9x <10>
$ git fetch ko && git show-branch master maint 'tags/ko-*' <11>
$ git push ko <12>
$ git push ko v0.99.9x <13>
------------
+
<1> see what I was in the middle of doing, if any.
<2> see what topic branches I have and think about how ready
they are.
@ -335,18 +336,22 @@ master, nor exposed as a part of a stable branch.
<11> make sure I did not accidentally rewind master beyond what I
already pushed out. "ko" shorthand points at the repository I have
at kernel.org, and looks like this:
$ cat .git/remotes/ko
URL: kernel.org:/pub/scm/git/git.git
Pull: master:refs/tags/ko-master
Pull: maint:refs/tags/ko-maint
Push: master
Push: +pu
Push: maint
+
------------
$ cat .git/remotes/ko
URL: kernel.org:/pub/scm/git/git.git
Pull: master:refs/tags/ko-master
Pull: maint:refs/tags/ko-maint
Push: master
Push: +pu
Push: maint
------------
+
In the output from "git show-branch", "master" should have
everything "ko-master" has.
<12> push out the bleeding edge.
<13> push the tag out, too.
------------
Repository Administration[[Repository Administration]]
@ -367,17 +372,39 @@ example of managing a shared central repository.
Examples
~~~~~~~~
Run git-daemon to serve /pub/scm from inetd.::
+
------------
$ grep git /etc/inet.conf
$ grep git /etc/inetd.conf
git stream tcp nowait nobody \
/usr/bin/git-daemon git-daemon --inetd --syslog --export-all /pub/scm
------------
+
The actual configuration line should be on one line.
Run git-daemon to serve /pub/scm from xinetd.::
+
------------
$ cat /etc/xinetd.d/git-daemon
# default: off
# description: The git server offers access to git repositories
service git
{
disable = no
type = UNLISTED
port = 9418
socket_type = stream
wait = no
user = nobody
server = /usr/bin/git-daemon
server_args = --inetd --syslog --export-all --base-path=/pub/scm
log_on_failure += USERID
}
------------
+
Check your xinetd(8) documentation and setup, this is from a Fedora system.
Others might be different.
Give push/pull only access to developers.::
+
------------
@ -388,13 +415,13 @@ cindy:x:1002:1002::/home/cindy:/usr/bin/git-shell
david:x:1003:1003::/home/david:/usr/bin/git-shell
$ grep git /etc/shells <2>
/usr/bin/git-shell
------------
+
<1> log-in shell is set to /usr/bin/git-shell, which does not
allow anything but "git push" and "git pull". The users should
get an ssh access to the machine.
<2> in many distributions /etc/shells needs to list what is used
as the login shell.
------------
CVS-style shared repository.::
+
@ -419,7 +446,8 @@ $ cat info/allowed-users <4>
refs/heads/master alice\|cindy
refs/heads/doc-update bob
refs/tags/v[0-9]* david
------------
+
<1> place the developers into the same git group.
<2> and make the shared repository writable by the group.
<3> use update-hook example by Carl from Documentation/howto/
@ -427,7 +455,6 @@ for branch policy control.
<4> alice and cindy can push into master, only bob can push into doc-update.
david is the release manager and is the only person who can
create and push version tags.
------------
HTTP server to support dumb protocol transfer.::
+
@ -435,7 +462,7 @@ HTTP server to support dumb protocol transfer.::
dev$ git update-server-info <1>
dev$ ftp user@isp.example.com <2>
ftp> cp -r .git /home/user/myproject.git
------------
+
<1> make sure your info/refs and objects/info/packs are up-to-date
<2> upload to public HTTP server hosted by your ISP.
------------

View File

@ -14,11 +14,13 @@ DESCRIPTION
A simple wrapper for git-update-index to add files to the index,
for people used to do "cvs add".
It only adds non-ignored files, to add ignored files use
"git update-index --add".
OPTIONS
-------
<file>...::
Files to add to the index.
Files to add to the index (see gitlink:git-ls-files[1]).
-n::
Don't actually add the file(s), just show if they exist.
@ -26,7 +28,7 @@ OPTIONS
-v::
Be verbose.
--::
\--::
This option can be used to separate command-line options from
the list of files, (useful when filenames might be mistaken
for command-line options).
@ -68,6 +70,7 @@ git-add git-*.sh::
See Also
--------
gitlink:git-rm[1]
gitlink:git-ls-files[1]
Author
------

View File

@ -76,7 +76,7 @@ OPTIONS
-C<n>::
Ensure at least <n> lines of surrounding context match before
and after each change. When fewer lines of surrounding
context exist they all most match. By default no context is
context exist they all must match. By default no context is
ever ignored.
--apply::
@ -113,7 +113,7 @@ OPTIONS
When `git-apply` is used for statistics and not applying a
patch, it defaults to `nowarn`.
You can use different `<option>` to control this
behaviour:
behavior:
+
* `nowarn` turns off the trailing whitespace warning.
* `warn` outputs warnings for a few such errors, but applies the

View File

@ -16,11 +16,14 @@ which introduced the line. Start annotation from the given revision.
OPTIONS
-------
-c, --compability::
-c, --compatibility::
Use the same output mode as git-annotate (Default: off).
-l, --long::
Show long rev (Defaults off).
Show long rev (Default: off).
-t, --time::
Show raw timestamp (Default: off).
-S, --rev-file <revs-file>::
Use revs from revs-file instead of calling git-rev-list.

View File

@ -3,22 +3,28 @@ git-branch(1)
NAME
----
git-branch - Create a new branch, or remove an old one
git-branch - List, create, or delete branches.
SYNOPSIS
--------
[verse]
'git-branch' [[-f] <branchname> [<start-point>]]
'git-branch' (-d | -D) <branchname>
'git-branch' [-r]
'git-branch' [-l] [-f] <branchname> [<start-point>]
'git-branch' (-d | -D) <branchname>...
DESCRIPTION
-----------
If no argument is provided, show available branches and mark current
branch with star. Otherwise, create a new branch of name <branchname>.
If a starting point is also specified, that will be where the branch is
created, otherwise it will be created at the current HEAD.
With no arguments given (or just `-r`) a list of available branches
will be shown, the current branch will be highlighted with an asterisk.
With a `-d` or `-D` option, `<branchname>` will be deleted.
In its second form, a new branch named <branchname> will be created.
It will start out with a head equal to the one given as <start-point>.
If no <start-point> is given, the branch will be created with a head
equal to that of the currently checked out branch.
With a `-d` or `-D` option, `<branchname>` will be deleted. You may
specify more than one branch for deletion. If the branch currently
has a ref log then the ref log will also be deleted.
OPTIONS
@ -29,41 +35,65 @@ OPTIONS
-D::
Delete a branch irrespective of its index status.
-l::
Create the branch's ref log. This activates recording of
all changes to made the branch ref, enabling use of date
based sha1 expressions such as "<branchname>@{yesterday}".
-f::
Force a reset of <branchname> to <start-point> (or current head).
Force the creation of a new branch even if it means deleting
a branch that already exists with the same name.
-r::
List only the "remote" branches.
<branchname>::
The name of the branch to create or delete.
The new branch name must pass all checks defined by
gitlink:git-check-ref-format[1]. Some of these checks
may restrict the characters allowed in a branch name.
<start-point>::
Where to create the branch; defaults to HEAD. This
option has no meaning with -d and -D.
The new branch will be created with a HEAD equal to this. It may
be given as a branch name, a commit-id, or a tag. If this option
is omitted, the current branch is assumed.
Examples
~~~~~~~~
--------
Start development off of a known tag::
+
------------
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
$ cd my2.6
$ git branch my2.6.14 v2.6.14 <1>
$ git branch my2.6.14 v2.6.14 <1>
$ git checkout my2.6.14
<1> These two steps are the same as "checkout -b my2.6.14 v2.6.14".
------------
+
<1> This step and the next one could be combined into a single step with
"checkout -b my2.6.14 v2.6.14".
Delete unneeded branch::
+
------------
$ git clone git://git.kernel.org/.../git.git my.git
$ cd my.git
$ git branch -D todo <1>
$ git branch -D todo <1>
------------
+
<1> delete todo branch even if the "master" branch does not have all
commits from todo branch.
------------
Notes
-----
If you are creating a branch that you want to immediately checkout, it's
easier to use the git checkout command with its `-b` option to create
a branch and check it out with a single command.
Author
------

View File

@ -8,12 +8,12 @@ git-cat-file - Provide content or type information for repository objects
SYNOPSIS
--------
'git-cat-file' [-t | -s | -e | <type>] <object>
'git-cat-file' [-t | -s | -e | -p | <type>] <object>
DESCRIPTION
-----------
Provides content or type of objects in the repository. The type
is required unless '-t' is used to find the object type,
is required unless '-t' or '-p' is used to find the object type,
or '-s' is used to find the object size.
OPTIONS
@ -33,6 +33,9 @@ OPTIONS
Suppress all output; instead exit with zero status if <object>
exists and is a valid object.
-p::
Pretty-print the contents of <object> based on its type.
<type>::
Typically this matches the real type of <object> but asking
for a type that can trivially be dereferenced from the given
@ -49,6 +52,8 @@ If '-s' is specified, the size of the <object> in bytes.
If '-e' is specified, no output.
If '-p' is specified, the contents of <object> are pretty-printed.
Otherwise the raw (though uncompressed) contents of the <object> will
be returned.

View File

@ -19,8 +19,9 @@ branch head is stored under `$GIT_DIR/refs/heads` directory, and
a tag is stored under `$GIT_DIR/refs/tags` directory. git
imposes the following rules on how refs are named:
. It could be named hierarchically (i.e. separated with slash
`/`), but each of its component cannot begin with a dot `.`;
. It can include slash `/` for hierarchical (directory)
grouping, but no slash-separated component can begin with a
dot `.`;
. It cannot have two consecutive dots `..` anywhere;
@ -45,6 +46,8 @@ refname expressions (see gitlink:git-rev-parse[1]). Namely:
. colon `:` is used as in `srcref:dstref` to mean "use srcref\'s
value and store it in dstref" in fetch and push operations.
It may also be used to select a specific object such as with
gitlink:git-cat-file[1] "git-cat-file blob v1.3.3:refs.c".
GIT

View File

@ -63,7 +63,7 @@ OPTIONS
Only meaningful with `--stdin`; paths are separated with
NUL character instead of LF.
--::
\--::
Do not interpret any more arguments as options.
The order of the flags used to matter, but not anymore.

View File

@ -8,7 +8,7 @@ git-checkout - Checkout and switch to a branch
SYNOPSIS
--------
[verse]
'git-checkout' [-f] [-b <new_branch>] [-m] [<branch>]
'git-checkout' [-f] [-b <new_branch> [-l]] [-m] [<branch>]
'git-checkout' [-m] [<branch>] <paths>...
DESCRIPTION
@ -35,7 +35,15 @@ OPTIONS
Force a re-read of everything.
-b::
Create a new branch and start it at <branch>.
Create a new branch named <new_branch> and start it at
<branch>. The new branch name must pass all checks defined
by gitlink:git-check-ref-format[1]. Some of these checks
may restrict the characters allowed in a branch name.
-l::
Create the new branch's ref log. This activates recording of
all changes to made the branch ref, enabling use of date
based sha1 expressions such as "<branchname>@{yesterday}".
-m::
If you have local modifications to one or more files that
@ -66,19 +74,19 @@ the `Makefile` to two revisions back, deletes hello.c by
mistake, and gets it back from the index.
+
------------
$ git checkout master <1>
$ git checkout master~2 Makefile <2>
$ git checkout master <1>
$ git checkout master~2 Makefile <2>
$ rm -f hello.c
$ git checkout hello.c <3>
<1> switch branch
<2> take out a file out of other commit
<3> or "git checkout -- hello.c", as in the next example.
$ git checkout hello.c <3>
------------
+
If you have an unfortunate branch that is named `hello.c`, the
last step above would be confused as an instruction to switch to
that branch. You should instead write:
<1> switch branch
<2> take out a file out of other commit
<3> restore hello.c from HEAD of current branch
+
If you have an unfortunate branch that is named `hello.c`, this
step would be confused as an instruction to switch to that branch.
You should instead write:
+
------------
$ git checkout -- hello.c

View File

@ -11,11 +11,20 @@ SYNOPSIS
DESCRIPTION
-----------
Each commit between the fork-point and <head> is examined, and compared against
the change each commit between the fork-point and <upstream> introduces.
Commits already included in upstream are prefixed with '-' (meaning "drop from
my local pull"), while commits missing from upstream are prefixed with '+'
(meaning "add to the updated upstream").
The changeset (or "diff") of each commit between the fork-point and <head>
is compared against each commit between the fork-point and <upstream>.
Every commit with a changeset that doesn't exist in the other branch
has its id (sha1) reported, prefixed by a symbol. Those existing only
in the <upstream> branch are prefixed with a minus (-) sign, and those
that only exist in the <head> branch are prefixed with a plus (+) symbol.
Because git-cherry compares the changeset rather than the commit id
(sha1), you can use git-cherry to find out if a commit you made locally
has been applied <upstream> under a different commit id. For example,
this will happen if you're feeding patches <upstream> via email rather
than pushing or pulling commits directly.
OPTIONS
-------

View File

@ -8,7 +8,7 @@ git-clean - Remove untracked files from the working tree
SYNOPSIS
--------
[verse]
'git-clean' [-d] [-n] [-q] [-x | -X]
'git-clean' [-d] [-n] [-q] [-x | -X] [--] <paths>...
DESCRIPTION
-----------
@ -16,6 +16,9 @@ Removes files unknown to git. This allows to clean the working tree
from files that are not under version control. If the '-x' option is
specified, ignored files are also removed, allowing to remove all
build products.
When optional `<paths>...` arguments are given, the paths
affected are further limited to those that match them.
OPTIONS
-------

View File

@ -1,64 +0,0 @@
git-clone-pack(1)
=================
NAME
----
git-clone-pack - Clones a repository by receiving packed objects
SYNOPSIS
--------
'git-clone-pack' [--exec=<git-upload-pack>] [<host>:]<directory> [<head>...]
DESCRIPTION
-----------
Clones a repository into the current repository by invoking
'git-upload-pack', possibly on the remote host via ssh, in
the named repository, and stores the sent pack in the local
repository.
OPTIONS
-------
--exec=<git-upload-pack>::
Use this to specify the path to 'git-upload-pack' on the
remote side, if it is not found on your $PATH.
Installations of sshd ignore the user's environment
setup scripts for login shells (e.g. .bash_profile) and
your privately installed git may not be found on the system
default $PATH. Another workaround suggested is to set
up your $PATH in ".bashrc", but this flag is for people
who do not want to pay the overhead for non-interactive
shells by having a lean .bashrc file (they set most of
the things up in .bash_profile).
<host>::
A remote host that houses the repository. When this
part is specified, 'git-upload-pack' is invoked via
ssh.
<directory>::
The repository to sync from.
<head>...::
The heads to update. This is relative to $GIT_DIR
(e.g. "HEAD", "refs/heads/master"). When unspecified,
all heads are updated to match the remote repository.
+
Usually all the refs from existing repository are stored
under the same name in the new repository. Giving explicit
<head> arguments instead writes the object names and refs to
the standard output, just like get-fetch-pack does.
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
Documentation
--------------
Documentation by Junio C Hamano.
GIT
---
Part of the gitlink:git[7] suite

View File

@ -9,9 +9,9 @@ git-clone - Clones a repository
SYNOPSIS
--------
[verse]
'git-clone' [-l [-s]] [-q] [-n] [--bare] [-o <name>] [-u <upload-pack>]
[--reference <repository>]
<repository> [<directory>]
'git-clone' [--template=<template_directory>] [-l [-s]] [-q] [-n] [--bare]
[-o <name>] [-u <upload-pack>] [--reference <repository>]
[--use-separate-remote] <repository> [<directory>]
DESCRIPTION
-----------
@ -62,7 +62,7 @@ OPTIONS
--quiet::
-q::
Operate quietly. This flag is passed to "rsync" and
"git-clone-pack" commands when given.
"git-fetch-pack" commands when given.
-n::
No checkout of HEAD is performed after the clone is complete.
@ -73,7 +73,7 @@ OPTIONS
files in `<directory>/.git`, make the `<directory>`
itself the `$GIT_DIR`. This implies `-n` option. When
this option is used, neither the `origin` branch nor the
default `remotes/origin` file is created.
default `remotes/origin` file is created.
-o <name>::
Instead of using the branch name 'origin' to keep track
@ -85,23 +85,33 @@ OPTIONS
--upload-pack <upload-pack>::
-u <upload-pack>::
When given, and the repository to clone from is handled
by 'git-clone-pack', '--exec=<upload-pack>' is passed to
by 'git-fetch-pack', '--exec=<upload-pack>' is passed to
the command to specify non-default path for the command
run on the other end.
--template=<template_directory>::
Specify the directory from which templates will be used;
if unset the templates are taken from the installation
defined default, typically `/usr/share/git-core/templates`.
--use-separate-remote::
Save remotes heads under `$GIT_DIR/remotes/origin/` instead
of `$GIT_DIR/refs/heads/`. Only the master branch is saved
in the latter.
<repository>::
The (possibly remote) repository to clone from. It can
be any URL git-fetch supports.
<directory>::
The name of a new directory to clone into. The "humanish"
The name of a new directory to clone into. The "humanish"
part of the source repository is used if no directory is
explicitly given ("repo" for "/path/to/repo.git" and "foo"
for "host.xz:foo/.git"). Cloning into an existing directory
is not allowed.
Examples
~~~~~~~~
--------
Clone from upstream::
+

View File

@ -15,9 +15,9 @@ SYNOPSIS
DESCRIPTION
-----------
Updates the index file for given paths, or all modified files if
'-a' is specified, and makes a commit object. The command
VISUAL and EDITOR environment variables to edit the commit log
message.
'-a' is specified, and makes a commit object. The command specified
by either the VISUAL or EDITOR environment variables are used to edit
the commit log message.
Several environment variable are used during commits. They are
documented in gitlink:git-commit-tree[1].
@ -98,7 +98,7 @@ but can be used to amend a merge commit.
Instead of committing only the files specified on the
command line, update them in the index file and then
commit the whole index. This is the traditional
behaviour.
behavior.
-o|--only::
Commit only the files specified on the command line.
@ -106,7 +106,7 @@ but can be used to amend a merge commit.
index and the latest commit does not match on the
specified paths to avoid confusion.
--::
\--::
Do not interpret any more arguments as options.
<file>...::

View File

@ -7,13 +7,23 @@ git-count-objects - Reports on unpacked objects
SYNOPSIS
--------
'git-count-objects'
'git-count-objects' [-v]
DESCRIPTION
-----------
This counts the number of unpacked object files and disk space consumed by
them, to help you decide when it is a good time to repack.
OPTIONS
-------
-v::
In addition to the number of loose objects and disk
space consumed, it reports the number of in-pack
objects, and number of objects that can be removed by
running `git-prune-packed`.
Author
------
Written by Junio C Hamano <junkio@cox.net>

View File

@ -8,7 +8,7 @@ git-cvsexportcommit - Export a commit to a CVS checkout
SYNOPSIS
--------
'git-cvsexportcommmit' [-h] [-v] [-c] [-p] [PARENTCOMMIT] COMMITID
'git-cvsexportcommit' [-h] [-v] [-c] [-p] [-a] [-f] [-m msgprefix] [PARENTCOMMIT] COMMITID
DESCRIPTION
@ -36,9 +36,20 @@ OPTIONS
commit if any hunks fail to apply or there were other problems.
-p::
Be pedantic (paranoid) when applying patches. Invokes patch with
Be pedantic (paranoid) when applying patches. Invokes patch with
--fuzz=0
-a::
Add authorship information. Adds Author line, and Committer (if
different from Author) to the message.
-f::
Force the merge even if the files are not up to date.
-m::
Prepend the commit message with the provided prefix.
Useful for patch series and the like.
-v::
Verbose.

View File

@ -116,7 +116,7 @@ file each time git-cvsimport is run.
+
It is not recommended to use this feature if you intend to
export changes back to CVS again later with
git-link[1]::git-cvsexportcommit.
gitlink:git-cvsexportcommit[1].
OUTPUT
------

View File

@ -36,49 +36,62 @@ INSTALLATION
1. If you are going to offer anonymous CVS access via pserver, add a line in
/etc/inetd.conf like
+
--
------
cvspserver stream tcp nowait nobody git-cvsserver pserver
Note: In some cases, you need to pass the 'pserver' argument twice for
git-cvsserver to see it. So the line would look like
------
Note: In some cases, you need to pass the 'pserver' argument twice for
git-cvsserver to see it. So the line would look like
------
cvspserver stream tcp nowait nobody git-cvsserver pserver pserver
No special setup is needed for SSH access, other than having GIT tools
in the PATH. If you have clients that do not accept the CVS_SERVER
env variable, you can rename git-cvsserver to cvs.
------
No special setup is needed for SSH access, other than having GIT tools
in the PATH. If you have clients that do not accept the CVS_SERVER
env variable, you can rename git-cvsserver to cvs.
--
2. For each repo that you want accessible from CVS you need to edit config in
the repo and add the following section.
+
--
------
[gitcvs]
enabled=1
# optional for debugging
logfile=/path/to/logfile
Note: you need to ensure each user that is going to invoke git-cvsserver has
write access to the log file and to the git repository. When offering anon
access via pserver, this means that the nobody user should have write access
to at least the sqlite database at the root of the repository.
------
Note: you need to ensure each user that is going to invoke git-cvsserver has
write access to the log file and to the git repository. When offering anon
access via pserver, this means that the nobody user should have write access
to at least the sqlite database at the root of the repository.
--
3. On the client machine you need to set the following variables.
CVSROOT should be set as per normal, but the directory should point at the
appropriate git repo. For example:
+
--
For SSH access, CVS_SERVER should be set to git-cvsserver
For SSH access, CVS_SERVER should be set to git-cvsserver
Example:
Example:
------
export CVSROOT=:ext:user@server:/var/git/project.git
export CVS_SERVER=git-cvsserver
------
--
4. For SSH clients that will make commits, make sure their .bashrc file
sets the GIT_AUTHOR and GIT_COMMITTER variables.
5. Clients should now be able to check out the project. Use the CVS 'module'
name to indicate what GIT 'head' you want to check out. Example:
+
------
cvs co -d project-master master
------
Eclipse CVS Client Notes
------------------------
@ -94,7 +107,7 @@ To get a checkout with the Eclipse CVS client:
4. Pick 'HEAD' when it asks what branch/tag to check out. Untick the
"launch commit wizard" to avoid committing the .project file.
Protocol notes: If you are using anonymous acces via pserver, just select that.
Protocol notes: If you are using anonymous access via pserver, just select that.
Those using SSH access should choose the 'ext' protocol, and configure 'ext'
access on the Preferences->Team->CVS->ExtConnection pane. Set CVS_SERVER to
'git-cvsserver'. Not that password support is not good when using 'ext',

View File

@ -11,7 +11,7 @@ SYNOPSIS
'git-daemon' [--verbose] [--syslog] [--inetd | --port=n] [--export-all]
[--timeout=n] [--init-timeout=n] [--strict-paths]
[--base-path=path] [--user-path | --user-path=path]
[directory...]
[--reuseaddr] [--detach] [--pid-file=file] [directory...]
DESCRIPTION
-----------
@ -20,7 +20,7 @@ aka 9418. It waits for a connection, and will just execute "git-upload-pack"
when it gets one.
It's careful in that there's a magic request-line that gives the command and
what directory to upload, and it verifies that the directory is ok.
what directory to upload, and it verifies that the directory is OK.
It verifies that the directory has the magic file "git-daemon-export-ok", and
it will refuse to export any git directory that hasn't explicitly been marked
@ -28,7 +28,7 @@ for export this way (unless the '--export-all' parameter is specified). If you
pass some directory paths as 'git-daemon' arguments, you can further restrict
the offers to a whitelist comprising of those.
This is ideally suited for read-only updates, ie pulling from git repositories.
This is ideally suited for read-only updates, i.e., pulling from git repositories.
OPTIONS
-------
@ -82,6 +82,17 @@ OPTIONS
--verbose::
Log details about the incoming connections and requested files.
--reuseaddr::
Use SO_REUSEADDR when binding the listening socket.
This allows the server to restart without waiting for
old connections to time out.
--detach::
Detach from the shell. Implies --syslog.
--pid-file=file::
Save the process id in 'file'.
<directory>::
A directory to add to the whitelist of allowed directories. Unless
--strict-paths is specified this will also include subdirectories

View File

@ -21,7 +21,7 @@ object name of the commit.
OPTIONS
-------
<committish>::
The object name of the comittish.
The object name of the committish.
--all::
Instead of using only the annotated tags, use any ref

View File

@ -37,7 +37,7 @@ omit diff output for unmerged entries and just show "Unmerged".
commit with these flags.
-q::
Remain silent even on nonexisting files
Remain silent even on nonexistent files
Output format
-------------

View File

@ -101,7 +101,7 @@ have not actually done a "git-update-index" on it yet - there is no
torvalds@ppc970:~/v2.6/linux> git-diff-index HEAD
*100644->100664 blob 7476bb......->000000...... kernel/sched.c
ie it shows that the tree has changed, and that `kernel/sched.c` has is
i.e., it shows that the tree has changed, and that `kernel/sched.c` has is
not up-to-date and may contain new stuff. The all-zero sha1 means that to
get the real diff, you need to look at the object in the working directory
directly rather than do an object-to-object diff.

View File

@ -32,7 +32,7 @@ include::diff-options.txt[]
<path>...::
If provided, the results are limited to a subset of files
matching one of these prefix strings.
ie file matches `/^<pattern1>|<pattern2>|.../`
i.e., file matches `/^<pattern1>|<pattern2>|.../`
Note that this parameter does not provide any wildcard or regexp
features.
@ -54,7 +54,7 @@ include::diff-options.txt[]
+
When a single commit is given on one line of such input, it compares
the commit with its parents. The following flags further affects its
behaviour. This does not apply to the case where two <tree-ish>
behavior. This does not apply to the case where two <tree-ish>
separated with a single space are given.
-m::
@ -92,7 +92,7 @@ separated with a single space are given.
Furthermore, it lists only files which were modified
from all parents.
-cc::
--cc::
This flag changes the way a merge commit patch is displayed,
in a similar way to the '-c' option. It implies the '-c'
and '-p' options and further compresses the patch output

View File

@ -8,24 +8,24 @@ git-diff - Show changes between commits, commit and working tree, etc
SYNOPSIS
--------
'git-diff' [ --diff-options ] <ent>{0,2} [<path>...]
'git-diff' [ --diff-options ] <tree-ish>{0,2} [<path>...]
DESCRIPTION
-----------
Show changes between two ents, an ent and the working tree, an
ent and the index file, or the index file and the working tree.
Show changes between two trees, a tree and the working tree, a
tree and the index file, or the index file and the working tree.
The combination of what is compared with what is determined by
the number of ents given to the command.
the number of trees given to the command.
* When no <ent> is given, the working tree and the index
file is compared, using `git-diff-files`.
* When no <tree-ish> is given, the working tree and the index
file are compared, using `git-diff-files`.
* When one <ent> is given, the working tree and the named
tree is compared, using `git-diff-index`. The option
* When one <tree-ish> is given, the working tree and the named
tree are compared, using `git-diff-index`. The option
`--cached` can be given to compare the index file and
the named tree.
* When two <ent>s are given, these two trees are compared
* When two <tree-ish>s are given, these two trees are compared
using `git-diff-tree`.
OPTIONS
@ -46,60 +46,60 @@ EXAMPLES
Various ways to check your working tree::
+
------------
$ git diff <1>
$ git diff --cached <2>
$ git diff HEAD <3>
$ git diff <1>
$ git diff --cached <2>
$ git diff HEAD <3>
------------
+
<1> changes in the working tree since your last git-update-index.
<2> changes between the index and your last commit; what you
would be committing if you run "git commit" without "-a" option.
<3> changes in the working tree since your last commit; what you
would be committing if you run "git commit -a"
------------
Comparing with arbitrary commits::
+
------------
$ git diff test <1>
$ git diff HEAD -- ./test <2>
$ git diff HEAD^ HEAD <3>
$ git diff test <1>
$ git diff HEAD -- ./test <2>
$ git diff HEAD^ HEAD <3>
------------
+
<1> instead of using the tip of the current branch, compare with the
tip of "test" branch.
<2> instead of comparing with the tip of "test" branch, compare with
the tip of the current branch, but limit the comparison to the
file "test".
<3> compare the version before the last commit and the last commit.
------------
Limiting the diff output::
+
------------
$ git diff --diff-filter=MRC <1>
$ git diff --name-status -r <2>
$ git diff arch/i386 include/asm-i386 <3>
$ git diff --diff-filter=MRC <1>
$ git diff --name-status -r <2>
$ git diff arch/i386 include/asm-i386 <3>
------------
+
<1> show only modification, rename and copy, but not addition
nor deletion.
<2> show only names and the nature of change, but not actual
diff output. --name-status disables usual patch generation
which in turn also disables recursive behaviour, so without -r
which in turn also disables recursive behavior, so without -r
you would only see the directory name if there is a change in a
file in a subdirectory.
<3> limit diff output to named subtrees.
------------
Munging the diff output::
+
------------
$ git diff --find-copies-harder -B -C <1>
$ git diff -R <2>
$ git diff --find-copies-harder -B -C <1>
$ git diff -R <2>
------------
+
<1> spend extra cycles to find renames, copies and complete
rewrites (very expensive).
<2> output diff in reverse.
------------
Author

View File

@ -9,27 +9,37 @@ git-format-patch - Prepare patches for e-mail submission
SYNOPSIS
--------
[verse]
'git-format-patch' [-n | -k] [-o <dir> | --stdout] [--attach] [-s] [-c]
[--diff-options] <his> [<mine>]
'git-format-patch' [-n | -k] [-o <dir> | --stdout] [--attach] [--thread]
[-s | --signoff] [--diff-options] [--start-number <n>]
[--in-reply-to=Message-Id]
<since>[..<until>]
DESCRIPTION
-----------
Prepare each commit with its patch since <mine> head forked from
<his> head, one file per patch formatted to resemble UNIX mailbox
format, for e-mail submission or use with gitlink:git-am[1].
Prepare each commit between <since> and <until> with its patch in
one file per commit, formatted to resemble UNIX mailbox format.
If ..<until> is not specified, the head of the current working
tree is implied.
The output of this command is convenient for e-mail submission or
for use with gitlink:git-am[1].
Each output file is numbered sequentially from 1, and uses the
first line of the commit message (massaged for pathname safety)
as the filename.
first line of the commit message (massaged for pathname safety) as
the filename. The names of the output files are printed to standard
output, unless the --stdout option is specified.
When -o is specified, output files are created in <dir>; otherwise
they are created in the current working directory. This option
is ignored if --stdout is specified.
If -o is specified, output files are created in <dir>. Otherwise
they are created in the current working directory.
When -n is specified, instead of "[PATCH] Subject", the first
line is formatted as "[PATCH N/M] Subject", unless you have only
one patch.
If -n is specified, instead of "[PATCH] Subject", the first line
is formatted as "[PATCH n/m] Subject".
If given --thread, git-format-patch will generate In-Reply-To and
References headers to make the second and subsequent patch mails appear
as replies to the first mail; this also generates a Message-Id header to
reference.
OPTIONS
-------
@ -40,6 +50,9 @@ OPTIONS
-n|--numbered::
Name output in '[PATCH n/m]' format.
--start-number <n>::
Start numbering the patches at <n> instead of 1.
-k|--keep-subject::
Do not strip/add '[PATCH]' from the first line of the
commit log message.
@ -48,21 +61,22 @@ OPTIONS
Add `Signed-off-by:` line to the commit message, using
the committer identity of yourself.
-c|--check::
Display suspicious lines in the patch. The definition
of 'suspicious lines' is currently the lines that has
trailing whitespaces, and the lines whose indentation
has a SP character immediately followed by a TAB
character.
--stdout::
This flag generates the mbox formatted output to the
standard output, instead of saving them into a file per
patch and implies --mbox.
Print all commits to the standard output in mbox format,
instead of creating a file for each one.
--attach::
Create attachments instead of inlining patches.
--thread::
Add In-Reply-To and References headers to make the second and
subsequent mails appear as replies to the first. Also generates
the Message-Id header to reference.
--in-reply-to=Message-Id::
Make the first mail (or all the mails with --no-thread) appear as a
reply to the given Message-Id, which avoids breaking threads to
provide a new patch series.
CONFIGURATION
-------------
@ -82,18 +96,18 @@ git-format-patch -k --stdout R1..R2 | git-am -3 -k::
cherry-pick them.
git-format-patch origin::
Extract commits the current branch accumulated since it
pulled from origin the last time in a patch form for
e-mail submission.
Extract all commits which are in the current branch but
not in the origin branch. For each commit a separate file
is created in the current directory.
git-format-patch -M -B origin::
The same as the previous one, except detect and handle
renames and complete rewrites intelligently to produce
renaming patch. A renaming patch reduces the amount of
text output, and generally makes it easier to review
it. Note that the "patch" program does not understand
renaming patch well, so use it only when you know the
recipient uses git to apply your patch.
The same as the previous one. Additionally, it detects
and handles renames and complete rewrites intelligently to
produce a renaming patch. A renaming patch reduces the
amount of text output, and generally makes it easier to
review it. Note that the "patch" program does not
understand renaming patches, so use it only when you know
the recipient uses git to apply your patch.
See Also

View File

@ -71,7 +71,7 @@ sorted properly etc), but on the whole if "git-fsck-objects" is happy, you
do have a valid tree.
Any corrupt objects you will have to find in backups or other archives
(ie you can just remove them and do an "rsync" with some other site in
(i.e., you can just remove them and do an "rsync" with some other site in
the hopes that somebody else has the object you have corrupted).
Of course, "valid tree" doesn't mean that it wasn't generated by some

View File

@ -8,43 +8,101 @@ git-grep - Print lines matching a pattern
SYNOPSIS
--------
'git-grep' [<option>...] [-e] <pattern> [--] [<path>...]
[verse]
'git-grep' [--cached]
[-a | --text] [-I] [-i | --ignore-case] [-w | --word-regexp]
[-v | --invert-match]
[-E | --extended-regexp] [-G | --basic-regexp] [-F | --fixed-strings]
[-n] [-l | --files-with-matches] [-L | --files-without-match]
[-c | --count]
[-A <post-context>] [-B <pre-context>] [-C <context>]
[-f <file>] [-e] <pattern> [--and|--or|--not|(|)|-e <pattern>...]
[<tree>...]
[--] [<path>...]
DESCRIPTION
-----------
Searches list of files `git-ls-files` produces for lines
containing a match to the given pattern.
Look for specified patterns in the working tree files, blobs
registered in the index file, or given tree objects.
OPTIONS
-------
`--`::
--cached::
Instead of searching in the working tree files, check
the blobs registered in the index file.
-a | --text::
Process binary files as if they were text.
-i | --ignore-case::
Ignore case differences between the patterns and the
files.
-w | --word-regexp::
Match the pattern only at word boundary (either begin at the
beginning of a line, or preceded by a non-word character; end at
the end of a line or followed by a non-word character).
-v | --invert-match::
Select non-matching lines.
-E | --extended-regexp | -G | --basic-regexp::
Use POSIX extended/basic regexp for patterns. Default
is to use basic regexp.
-n::
Prefix the line number to matching lines.
-l | --files-with-matches | -L | --files-without-match::
Instead of showing every matched line, show only the
names of files that contain (or do not contain) matches.
-c | --count::
Instead of showing every matched line, show the number of
lines that match.
-[ABC] <context>::
Show `context` trailing (`A` -- after), or leading (`B`
-- before), or both (`C` -- context) lines, and place a
line containing `--` between contiguous groups of
matches.
-f <file>::
Read patterns from <file>, one per line.
-e::
The next parameter is the pattern. This option has to be
used for patterns starting with - and should be used in
scripts passing user input to grep. Multiple patterns are
combined by 'or'.
--and | --or | --not | ( | )::
Specify how multiple patterns are combined using boolean
expressions. `--or` is the default operator. `--and` has
higher precedence than `--or`. `-e` has to be used for all
patterns.
`<tree>...`::
Search blobs in the trees for specified patterns.
\--::
Signals the end of options; the rest of the parameters
are <path> limiters.
<option>...::
Either an option to pass to `grep` or `git-ls-files`.
+
The following are the specific `git-ls-files` options
that may be given: `-o`, `--cached`, `--deleted`, `--others`,
`--killed`, `--ignored`, `--modified`, `--exclude=\*`,
`--exclude-from=\*`, and `--exclude-per-directory=\*`.
+
All other options will be passed to `grep`.
<pattern>::
The pattern to look for. The first non option is taken
as the pattern; if your pattern begins with a dash, use
`-e <pattern>`.
<path>...::
Optional paths to limit the set of files to be searched;
passed to `git-ls-files`.
Example
-------
git grep -e \'#define\' --and \( -e MAX_PATH -e PATH_MAX \)::
Looks for a line that has `#define` and either `MAX_PATH` or
`PATH_MAX`.
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
Originally written by Linus Torvalds <torvalds@osdl.org>, later
revamped by Junio C Hamano.
Documentation
--------------

View File

@ -8,7 +8,7 @@ git-http-fetch - downloads a remote git repository via HTTP
SYNOPSIS
--------
'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] <commit> <url>
'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] [--stdin] <commit> <url>
DESCRIPTION
-----------
@ -33,6 +33,12 @@ commit-id::
Writes the commit-id into the filename under $GIT_DIR/refs/<filename> on
the local end after the transfer is complete.
--stdin::
Instead of a commit id on the commandline (which is not expected in this
case), 'git-http-fetch' expects lines on stdin in the format
<commit-id>['\t'<filename-as-in--w>]
Author
------
Written by Linus Torvalds <torvalds@osdl.org>

View File

@ -29,6 +29,7 @@ CONFIGURATION
git-imap-send requires the following values in the repository
configuration file (shown with examples):
..........................
[imap]
Folder = "INBOX.Drafts"
@ -38,8 +39,9 @@ configuration file (shown with examples):
[imap]
Host = imap.server.com
User = bob
Password = pwd
Pass = pwd
Port = 143
..........................
BUGS

View File

@ -8,33 +8,57 @@ git-init-db - Creates an empty git repository
SYNOPSIS
--------
'git-init-db' [--template=<template_directory>] [--shared]
'git-init-db' [--template=<template_directory>] [--shared[=<permissions>]]
OPTIONS
-------
--template=<template_directory>::
Provide the directory from which templates will be used.
The default template directory is `/usr/share/git-core/templates`.
--shared::
Specify that the git repository is to be shared amongst several users.
--
--template=<template_directory>::
Provide the directory from which templates will be used. The default template
directory is `/usr/share/git-core/templates`.
When specified, `<template_directory>` is used as the source of the template
files rather than the default. The template files include some directory
structure, some suggested "exclude patterns", and copies of non-executing
"hook" files. The suggested patterns and hook files are all modifiable and
extensible.
--shared[={false|true|umask|group|all|world|everybody}]::
Specify that the git repository is to be shared amongst several users. This
allows users belonging to the same group to push into that
repository. When specified, the config variable "core.sharedRepository" is
set so that files and directories under `$GIT_DIR` are created with the
requested permissions. When not specified, git will use permissions reported
by umask(2).
The option can have the following values, defaulting to 'group' if no value
is given:
- 'umask' (or 'false'): Use permissions reported by umask(2). The default,
when `--shared` is not specified.
- 'group' (or 'true'): Make the repository group-writable, (and g+sx, since
the git group may be not the primary group of all users).
- 'all' (or 'world' or 'everybody'): Same as 'group', but make the repository
readable by all users.
--
DESCRIPTION
-----------
This command creates an empty git repository - basically a `.git` directory
with subdirectories for `objects`, `refs/heads`, `refs/tags`, and
templated files.
template files.
An initial `HEAD` file that references the HEAD of the master branch
is also created.
If `--template=<template_directory>` is specified, `<template_directory>`
is used as the source of the template files rather than the default.
The template files include some directory structure, some suggested
"exclude patterns", and copies of non-executing "hook" files. The
suggested patterns and hook files are all modifiable and extensible.
If the `$GIT_DIR` environment variable is set then it specifies a path
to use instead of `./.git` for the base of the repository.
@ -42,11 +66,6 @@ If the object storage directory is specified via the `$GIT_OBJECT_DIRECTORY`
environment variable then the sha1 directories are created underneath -
otherwise the default `$GIT_DIR/objects` directory is used.
A shared repository allows users belonging to the same group to push into that
repository. When specifying `--shared` the config variable "core.sharedRepository"
is set to 'true' so that directories under `$GIT_DIR` are made group writable
(and g+sx, since the git group may be not the primary group of all users).
Running `git-init-db` in an existing repository is safe. It will not overwrite
things that are already there. The primary reason for rerunning `git-init-db`
is to pick up newly added templates.
@ -60,12 +79,12 @@ Start a new git repository for an existing code base::
+
----------------
$ cd /path/to/my/codebase
$ git-init-db <1>
$ git-add . <2>
$ git-init-db <1>
$ git-add . <2>
----------------
+
<1> prepare /path/to/my/codebase/.git directory
<2> add all existing file to the index
----------------
Author

View File

@ -0,0 +1,84 @@
git-instaweb(1)
===============
NAME
----
git-instaweb - instantly browse your working repository in gitweb
SYNOPSIS
--------
'git-instaweb' [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]
'git-instaweb' [--start] [--stop] [--restart]
DESCRIPTION
-----------
A simple script to setup gitweb and a web server for browsing the local
repository.
OPTIONS
-------
-l|--local::
Only bind the web server to the local IP (127.0.0.1).
-d|--httpd::
The HTTP daemon command-line that will be executed.
Command-line options may be specified here, and the
configuration file will be added at the end of the command-line.
Currently, lighttpd and apache2 are the only supported servers.
(Default: lighttpd)
-m|--module-path::
The module path (only needed if httpd is Apache).
(Default: /usr/lib/apache2/modules)
-p|--port::
The port number to bind the httpd to. (Default: 1234)
-b|--browser::
The web browser command-line to execute to view the gitweb page.
If blank, the URL of the gitweb instance will be printed to
stdout. (Default: 'firefox')
--start::
Start the httpd instance and exit. This does not generate
any of the configuration files for spawning a new instance.
--stop::
Stop the httpd instance and exit. This does not generate
any of the configuration files for spawning a new instance,
nor does it close the browser.
--restart::
Restart the httpd instance and exit. This does not generate
any of the configuration files for spawning a new instance.
CONFIGURATION
-------------
You may specify configuration in your .git/config
-----------------------------------------------------------------------
[instaweb]
local = true
httpd = apache2 -f
port = 4321
browser = konqueror
modulepath = /usr/lib/apache2/modules
-----------------------------------------------------------------------
Author
------
Written by Eric Wong <normalperson@yhbt.net>
Documentation
--------------
Documentation by Eric Wong <normalperson@yhbt.net>.
GIT
---
Part of the gitlink:git[7] suite

View File

@ -29,6 +29,12 @@ OPTIONS
Writes the commit-id into the filename under $GIT_DIR/refs/<filename> on
the local end after the transfer is complete.
--stdin::
Instead of a commit id on the commandline (which is not expected in this
case), 'git-local-fetch' expects lines on stdin in the format
<commit-id>['\t'<filename-as-in--w>]
Author
------
Written by Junio C Hamano <junkio@cox.net>

View File

@ -14,13 +14,12 @@ DESCRIPTION
-----------
Shows the commit logs.
The command takes options applicable to the gitlink::git-rev-list[1]
The command takes options applicable to the gitlink:git-rev-list[1]
command to control what is shown and how, and options applicable to
the gitlink::git-diff-tree[1] commands to control how the change
the gitlink:git-diff-tree[1] commands to control how the change
each commit introduces are shown.
This manual page describes only the most frequently used
options.
This manual page describes only the most frequently used options.
OPTIONS
@ -52,7 +51,7 @@ git log v2.6.12.. include/scsi drivers/scsi::
Show all commits since version 'v2.6.12' that changed any file
in the include/scsi or drivers/scsi subdirectories
git log --since="2 weeks ago" -- gitk::
git log --since="2 weeks ago" \-- gitk::
Show the changes during the last two weeks to the file 'gitk'.
The "--" is necessary to avoid confusion with the *branch* named

View File

@ -106,7 +106,7 @@ OPTIONS
lines, show only handful hexdigits prefix.
Non default number of digits can be specified with --abbrev=<n>.
--::
\--::
Do not interpret any more arguments as options.
<file>::
@ -195,8 +195,7 @@ An exclude pattern is of the following format:
- if it does not contain a slash '/', it is a shell glob
pattern and used to match against the filename without
leading directories (i.e. the same way as the current
implementation).
leading directories.
- otherwise, it is a shell glob pattern, suitable for
consumption by fnmatch(3) with FNM_PATHNAME flag. I.e. a
@ -208,7 +207,7 @@ An exclude pattern is of the following format:
An example:
--------------------------------------------------------------
$ cat .git/ignore
$ cat .git/info/exclude
# ignore objects and archives, anywhere in the tree.
*.[oa]
$ cat Documentation/.gitignore
@ -218,10 +217,23 @@ An example:
!foo.html
$ git-ls-files --ignored \
--exclude='Documentation/*.[0-9]' \
--exclude-from=.git/ignore \
--exclude-from=.git/info/exclude \
--exclude-per-directory=.gitignore
--------------------------------------------------------------
Another example:
--------------------------------------------------------------
$ cat .gitignore
vmlinux*
$ ls arch/foo/kernel/vm*
arch/foo/kernel/vmlinux.lds.S
$ echo '!/vmlinux*' >arch/foo/kernel/.gitignore
--------------------------------------------------------------
The second .gitignore keeps `arch/foo/kernel/vmlinux.lds.S` file
from getting ignored.
See Also
--------

View File

@ -8,9 +8,10 @@ git-ls-tree - Lists the contents of a tree object
SYNOPSIS
--------
[verse]
'git-ls-tree' [-d] [-r] [-t] [-z]
[--name-only] [--name-status] [--full-name] [--abbrev=[<n>]]
<tree-ish> [paths...]
[--name-only] [--name-status] [--full-name] [--abbrev=[<n>]]
<tree-ish> [paths...]
DESCRIPTION
-----------
@ -47,6 +48,10 @@ OPTIONS
lines, show only handful hexdigits prefix.
Non default number of digits can be specified with --abbrev=<n>.
--full-name::
Instead of showing the path names relative to the current working
directory, show the full path names.
paths::
When paths are given, show them (note that this isn't really raw
pathnames, but rather a list of patterns to match). Otherwise
@ -72,8 +77,6 @@ Documentation
Documentation by David Greaves, Junio C Hamano and the git-list
<git@vger.kernel.org>.
This manual page is a stub. You can help the git documentation by expanding it.
GIT
---
Part of the gitlink:git[7] suite

View File

@ -25,7 +25,7 @@ OPTIONS
-b::
If any file doesn't begin with a From line, assume it is a
single mail message instead of signalling error.
single mail message instead of signaling error.
-d<prec>::
Instead of the default 4 digits with leading zeros,

View File

@ -8,16 +8,26 @@ git-merge-base - Finds as good a common ancestor as possible for a merge
SYNOPSIS
--------
'git-merge-base' <commit> <commit>
'git-merge-base' [--all] <commit> <commit>
DESCRIPTION
-----------
"git-merge-base" finds as good a common ancestor as possible. Given a
selection of equally good common ancestors it should not be relied on
to decide in any particular way.
"git-merge-base" finds as good a common ancestor as possible between
the two commits. That is, given two commits A and B 'git-merge-base A
B' will output a commit which is reachable from both A and B through
the parent relationship.
Given a selection of equally good common ancestors it should not be
relied on to decide in any particular way.
The "git-merge-base" algorithm is still in flux - use the source...
OPTIONS
-------
--all::
Output all common ancestors for the two commits instead of
just one.
Author
------

View File

@ -8,7 +8,7 @@ git-merge-index - Runs a merge for files needing merging
SYNOPSIS
--------
'git-merge-index' [-o] [-q] <merge-program> (-a | -- | <file>\*)
'git-merge-index' [-o] [-q] <merge-program> (-a | \-- | <file>\*)
DESCRIPTION
-----------
@ -19,7 +19,7 @@ files are passed as arguments 5, 6 and 7.
OPTIONS
-------
--::
\--::
Do not interpret any more arguments as options.
-a::
@ -69,7 +69,7 @@ or
fatal: merge program failed
where the latter example shows how "git-merge-index" will stop trying to
merge once anything has returned an error (ie "cat" returned an error
merge once anything has returned an error (i.e., "cat" returned an error
for the AA file, because it didn't exist in the original, and thus
"git-merge-index" didn't even try to merge the MM thing).

View File

@ -83,7 +83,7 @@ your local modifications interfere with the merge, again, it
stops before touching anything.
So in the above two "failed merge" case, you do not have to
worry about lossage of data --- you simply were not ready to do
worry about loss of data --- you simply were not ready to do
a merge, so no merge happened at all. You may want to finish
whatever you were in the middle of doing, and retry the same
pull after you are done and ready.

View File

@ -8,7 +8,7 @@ git-name-rev - Find symbolic names for given revs
SYNOPSIS
--------
'git-name-rev' [--tags] ( --all | --stdin | <commitish>... )
'git-name-rev' [--tags] ( --all | --stdin | <committish>... )
DESCRIPTION
-----------
@ -26,14 +26,14 @@ OPTIONS
List all commits reachable from all refs
--stdin::
Read from stdin, append "(<rev_name>)" to all sha1's of name'able
Read from stdin, append "(<rev_name>)" to all sha1's of nameable
commits, and pass to stdout
EXAMPLE
-------
Given a commit, find out where it is relative to the local refs. Say somebody
wrote you about that phantastic commit 33db5f4d9027a10e477ccf054b2c1ab94f74c85a.
wrote you about that fantastic commit 33db5f4d9027a10e477ccf054b2c1ab94f74c85a.
Of course, you look into the commit, but that only tells you what happened, but
not the context.
@ -41,6 +41,7 @@ Enter git-name-rev:
------------
% git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99^0~940
------------
Now you are wiser, because you know that it happened 940 revisions before v0.99.

View File

@ -0,0 +1,168 @@
git-p4import(1)
===============
NAME
----
git-p4import - Import a Perforce repository into git
SYNOPSIS
--------
`git-p4import` [-q|-v] [--notags] [--authors <file>] [-t <timezone>] <//p4repo/path> <branch>
`git-p4import` --stitch <//p4repo/path>
`git-p4import`
DESCRIPTION
-----------
Import a Perforce repository into an existing git repository. When
a <//p4repo/path> and <branch> are specified a new branch with the
given name will be created and the initial import will begin.
Once the initial import is complete you can do an incremental import
of new commits from the Perforce repository. You do this by checking
out the appropriate git branch and then running `git-p4import` without
any options.
The standard p4 client is used to communicate with the Perforce
repository; it must be configured correctly in order for `git-p4import`
to operate (see below).
OPTIONS
-------
-q::
Do not display any progress information.
-v::
Give extra progress information.
\--authors::
Specify an authors file containing a mapping of Perforce user
ids to full names and email addresses (see Notes below).
\--notags::
Do not create a tag for each imported commit.
\--stitch::
Import the contents of the given perforce branch into the
currently checked out git branch.
\--log::
Store debugging information in the specified file.
-t::
Specify that the remote repository is in the specified timezone.
Timezone must be in the format "US/Pacific" or "Europe/London"
etc. You only need to specify this once, it will be saved in
the git config file for the repository.
<//p4repo/path>::
The Perforce path that will be imported into the specified branch.
<branch>::
The new branch that will be created to hold the Perforce imports.
P4 Client
---------
You must make the `p4` client command available in your $PATH and
configure it to communicate with the target Perforce repository.
Typically this means you must set the "$P4PORT" and "$P4CLIENT"
environment variables.
You must also configure a `p4` client "view" which maps the Perforce
branch into the top level of your git repository, for example:
------------
Client: myhost
Root: /home/sean/import
Options: noallwrite clobber nocompress unlocked modtime rmdir
View:
//public/jam/... //myhost/jam/...
------------
With the above `p4` client setup, you could import the "jam"
perforce branch into a branch named "jammy", like so:
------------
$ mkdir -p /home/sean/import/jam
$ cd /home/sean/import/jam
$ git init-db
$ git p4import //public/jam jammy
------------
Multiple Branches
-----------------
Note that by creating multiple "views" you can use `git-p4import`
to import additional branches into the same git repository.
However, the `p4` client has a limitation in that it silently
ignores all but the last "view" that maps into the same local
directory. So the following will *not* work:
------------
View:
//public/jam/... //myhost/jam/...
//public/other/... //myhost/jam/...
//public/guest/... //myhost/jam/...
------------
If you want more than one Perforce branch to be imported into the
same directory you must employ a workaround. A simple option is
to adjust your `p4` client before each import to only include a
single view.
Another option is to create multiple symlinks locally which all
point to the same directory in your git repository and then use
one per "view" instead of listing the actual directory.
Tags
----
A git tag of the form p4/xx is created for every change imported from
the Perforce repository where xx is the Perforce changeset number.
Therefore after the import you can use git to access any commit by its
Perforce number, e.g. git show p4/327.
The tag associated with the HEAD commit is also how `git-p4import`
determines if there are new changes to incrementally import from the
Perforce repository.
If you import from a repository with many thousands of changes
you will have an equal number of p4/xxxx git tags. Git tags can
be expensive in terms of disk space and repository operations.
If you don't need to perform further incremental imports, you
may delete the tags.
Notes
-----
You can interrupt the import (e.g. ctrl-c) at any time and restart it
without worry.
Author information is automatically determined by querying the
Perforce "users" table using the id associated with each change.
However, if you want to manually supply these mappings you can do
so with the "--authors" option. It accepts a file containing a list
of mappings with each line containing one mapping in the format:
------------
perforce_id = Full Name <email@address.com>
------------
Author
------
Written by Sean Estabrooks <seanlkml@sympatico.ca>
GIT
---
Part of the gitlink:git[7] suite

View File

@ -29,7 +29,7 @@ OPTIONS
--all::
Processes all packs. Any filenames on the commandline are ignored.
Processes all packs. Any filenames on the command line are ignored.
--alt-odb::
Don't require objects present in packs from alternate object

View File

@ -13,7 +13,7 @@ DESCRIPTION
-----------
A "patch ID" is nothing but a SHA1 of the diff associated with a patch, with
whitespace and line numbers ignored. As such, it's "reasonably stable", but at
the same time also reasonably unique, ie two patches that have the same "patch
the same time also reasonably unique, i.e., two patches that have the same "patch
ID" are almost guaranteed to be the same thing.
IOW, you can use this thing to look for likely duplicate commits.

View File

@ -28,7 +28,7 @@ OPTIONS
Do not remove anything; just report what it would
remove.
--::
\--::
Do not interpret any more arguments as options.
<head>...::

View File

@ -8,7 +8,7 @@ git-push - Update remote refs along with associated objects
SYNOPSIS
--------
'git-push' [--all] [--tags] [--force] <repository> <refspec>...
'git-push' [--all] [--tags] [-f | --force] <repository> <refspec>...
DESCRIPTION
-----------
@ -67,7 +67,7 @@ Some short-cut notations are also supported.
-f, \--force::
Usually, the command refuses to update a remote ref that is
not a descendent of the local ref used to overwrite it.
not a descendant of the local ref used to overwrite it.
This flag disables the check. This can cause the
remote repository to lose commits; use it with care.

View File

@ -0,0 +1,61 @@
git-quiltimport(1)
================
NAME
----
git-quiltimport - Applies a quilt patchset onto the current branch
SYNOPSIS
--------
[verse]
'git-quiltimport' [--dry-run] [--author <author>] [--patches <dir>]
DESCRIPTION
-----------
Applies a quilt patchset onto the current git branch, preserving
the patch boundaries, patch order, and patch descriptions present
in the quilt patchset.
For each patch the code attempts to extract the author from the
patch description. If that fails it falls back to the author
specified with --author. If the --author flag was not given
the patch description is displayed and the user is asked to
interactively enter the author of the patch.
If a subject is not found in the patch description the patch name is
preserved as the 1 line subject in the git description.
OPTIONS
-------
--dry-run::
Walk through the patches in the series and warn
if we cannot find all of the necessary information to commit
a patch. At the time of this writing only missing author
information is warned about.
--author Author Name <Author Email>::
The author name and email address to use when no author
information can be found in the patch description.
--patches <dir>::
The directory to find the quilt patches and the
quilt series file.
The default for the patch directory is patches
or the value of the $QUILT_PATCHES environment
variable.
Author
------
Written by Eric Biederman <ebiederm@lnxi.com>
Documentation
--------------
Documentation by Eric Biederman <ebiederm@lnxi.com>
GIT
---
Part of the gitlink:git[7] suite

View File

@ -8,7 +8,7 @@ git-read-tree - Reads tree information into the index
SYNOPSIS
--------
'git-read-tree' (<tree-ish> | [[-m [--aggressive]| --reset] [-u | -i]] <tree-ish1> [<tree-ish2> [<tree-ish3>]])
'git-read-tree' (<tree-ish> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] <tree-ish1> [<tree-ish2> [<tree-ish3>]])
DESCRIPTION
@ -63,6 +63,15 @@ OPTIONS
* when both sides adds a path identically. The resolution
is to add that path.
--prefix=<prefix>/::
Keep the current index contents, and read the contents
of named tree-ish under directory at `<prefix>`. The
original index file cannot have anything at the path
`<prefix>` itself, and have nothing in `<prefix>/`
directory. Note that the `<prefix>/` value must end
with a slash.
<tree-ish#>::
The id of the tree object(s) to be read/merged.
@ -205,7 +214,7 @@ The `git-write-tree` command refuses to write a nonsensical tree, and it
will complain about unmerged entries if it sees a single entry that is not
stage 0.
Ok, this all sounds like a collection of totally nonsensical rules,
OK, this all sounds like a collection of totally nonsensical rules,
but it's actually exactly what you want in order to do a fast
merge. The different stages represent the "result tree" (stage 0, aka
"merged"), the original tree (stage 1, aka "orig"), and the two trees
@ -226,7 +235,7 @@ populated. Here is an outline of how the algorithm works:
- the index file saves and restores with all this information, so you
can merge things incrementally, but as long as it has entries in
stages 1/2/3 (ie "unmerged entries") you can't write the result. So
stages 1/2/3 (i.e., "unmerged entries") you can't write the result. So
now the merge algorithm ends up being really simple:
* you walk the index in order, and ignore all entries of stage 0,
@ -257,7 +266,7 @@ file that does not match stage 2.
This is done to prevent you from losing your work-in-progress
changes, and mixing your random changes in an unrelated merge
commit. To illustrate, suppose you start from what has been
commited last to your repository:
committed last to your repository:
----------------
$ JC=`git-rev-parse --verify "HEAD^0"`

View File

@ -3,38 +3,53 @@ git-rebase(1)
NAME
----
git-rebase - Rebase local commits to new upstream head
git-rebase - Rebase local commits to a new head
SYNOPSIS
--------
'git-rebase' [--onto <newbase>] <upstream> [<branch>]
'git-rebase' [--merge] [--onto <newbase>] <upstream> [<branch>]
'git-rebase' --continue | --skip | --abort
DESCRIPTION
-----------
git-rebase applies to <upstream> (or optionally to <newbase>) commits
from <branch> that do not appear in <upstream>. When <branch> is not
specified it defaults to the current branch (HEAD).
git-rebase replaces <branch> with a new branch of the same name. When
the --onto option is provided the new branch starts out with a HEAD equal
to <newbase>, otherwise it is equal to <upstream>. It then attempts to
create a new commit for each commit from the original <branch> that does
not exist in the <upstream> branch.
When git-rebase is complete, <branch> will be updated to point to the
newly created line of commit objects, so the previous line will not be
accessible unless there are other references to it already.
It is possible that a merge failure will prevent this process from being
completely automatic. You will have to resolve any such merge failure
and run `git rebase --continue`. Another option is to bypass the commit
that caused the merge failure with `git rebase --skip`. To restore the
original <branch> and remove the .dotest working files, use the command
`git rebase --abort` instead.
Note that if <branch> is not specified on the command line, the currently
checked out branch is used.
Assume the following history exists and the current branch is "topic":
------------
A---B---C topic
/
D---E---F---G master
------------
From this point, the result of either of the following commands:
git-rebase master
git-rebase master topic
would be:
------------
A'--B'--C' topic
/
D---E---F---G master
------------
While, starting from the same point, the result of either of the following
commands:
@ -44,21 +59,33 @@ commands:
would be:
------------
A'--B'--C' topic
/
D---E---F---G master
------------
In case of conflict, git-rebase will stop at the first problematic commit
and leave conflict markers in the tree. After resolving the conflict manually
and updating the index with the desired resolution, you can continue the
rebasing process with
and leave conflict markers in the tree. You can use git diff to locate
the markers (<<<<<<) and make edits to resolve the conflict. For each
file you edit, you need to tell git that the conflict has been resolved,
typically this would be done with
git update-index <filename>
After resolving the conflict manually and updating the index with the
desired resolution, you can continue the rebasing process with
git rebase --continue
git am --resolved --3way
Alternatively, you can undo the git-rebase with
git reset --hard ORIG_HEAD
rm -r .dotest
git rebase --abort
OPTIONS
-------
@ -73,6 +100,45 @@ OPTIONS
<branch>::
Working branch; defaults to HEAD.
--continue::
Restart the rebasing process after having resolved a merge conflict.
--abort::
Restore the original branch and abort the rebase operation.
--skip::
Restart the rebasing process by skipping the current patch.
--merge::
Use merging strategies to rebase. When the recursive (default) merge
strategy is used, this allows rebase to be aware of renames on the
upstream side.
-s <strategy>, \--strategy=<strategy>::
Use the given merge strategy; can be supplied more than
once to specify them in the order they should be tried.
If there is no `-s` option, a built-in list of strategies
is used instead (`git-merge-recursive` when merging a single
head, `git-merge-octopus` otherwise). This implies --merge.
include::merge-strategies.txt[]
NOTES
-----
When you rebase a branch, you are changing its history in a way that
will cause problems for anyone who already has a copy of the branch
in their repository and tries to pull updates from you. You should
understand the implications of using 'git rebase' on a repository that
you share.
When the git rebase command is run, it will first execute a "pre-rebase"
hook if one exists. You can use this hook to do sanity checks and
reject the rebase if it isn't appropriate. Please see the template
pre-rebase hook script for an example.
You must be in the top directory of your project to start (or continue)
a rebase. Upon completion, <branch> will be the current branch.
Author
------
Written by Junio C Hamano <junkio@cox.net>

View File

@ -18,8 +18,7 @@ information fed from the remote end.
This command is usually not invoked directly by the end user.
The UI for the protocol is on the 'git-send-pack' side, and the
program pair is meant to be used to push updates to remote
repository. For pull operations, see 'git-fetch-pack' and
'git-clone-pack'.
repository. For pull operations, see 'git-fetch-pack'.
The command allows for creation and fast forwarding of sha1 refs
(heads/tags) on the remote end (strictly speaking, it is the

View File

@ -38,6 +38,7 @@ OPTIONS
-d::
After packing, if the newly created packs make some
existing packs redundant, remove the redundant packs.
Also runs gitlink:git-prune-packed[1].
-l::
Pass the `--local` option to `git pack-objects`, see

View File

@ -15,6 +15,7 @@ SYNOPSIS
'git-repo-config' [type] --get-all name [value_regex]
'git-repo-config' [type] --unset name [value_regex]
'git-repo-config' [type] --unset-all name [value_regex]
'git-repo-config' -l | --list
DESCRIPTION
-----------
@ -22,10 +23,11 @@ You can query/set/replace/unset options with this command. The name is
actually the section and the key separated by a dot, and the value will be
escaped.
If you want to set/unset an option which can occur on multiple lines, you
should provide a POSIX regex for the value. If you want to handle the lines
*not* matching the regex, just prepend a single exclamation mark in front
(see EXAMPLES).
If you want to set/unset an option which can occur on multiple
lines, a POSIX regexp `value_regex` needs to be given. Only the
existing values that match the regexp are updated or unset. If
you want to handle the lines that do *not* match the regex, just
prepend a single exclamation mark in front (see EXAMPLES).
The type specifier can be either '--int' or '--bool', which will make
'git-repo-config' ensure that the variable(s) are of the given type and
@ -33,10 +35,10 @@ convert the value to the canonical form (simple decimal number for int,
a "true" or "false" string for bool). If no type specifier is passed,
no checks or transformations are performed on the value.
This command will fail if
This command will fail if:
. .git/config is invalid,
. .git/config can not be written to,
. The .git/config file is invalid,
. Can not write to .git/config,
. no section was provided,
. the section or key is invalid,
. you try to unset an option which does not exist, or
@ -47,8 +49,8 @@ OPTIONS
-------
--replace-all::
Default behaviour is to replace at most one line. This replaces
all lines matching the key (and optionally the value_regex)
Default behavior is to replace at most one line. This replaces
all lines matching the key (and optionally the value_regex).
--get::
Get the value for a given key (optionally filtered by a regex
@ -58,12 +60,30 @@ OPTIONS
Like get, but does not fail if the number of values for the key
is not exactly one.
--get-regexp::
Like --get-all, but interprets the name as a regular expression.
--unset::
Remove the line matching the key from .git/config.
--unset-all::
Remove all matching lines from .git/config.
-l, --list::
List all variables set in .git/config.
ENVIRONMENT
-----------
GIT_CONFIG::
Take the configuration from the given file instead of .git/config.
GIT_CONFIG_LOCAL::
Currently the same as $GIT_CONFIG; when Git will support global
configuration files, this will cause it to take the configuration
from the global configuration file in addition to the given file.
EXAMPLE
-------
@ -99,8 +119,8 @@ you can set the filemode to true with
% git repo-config core.filemode true
------------
The hypothetic proxy command entries actually have a postfix to discern
to what URL they apply. Here is how to change the entry for kernel.org
The hypothetical proxy command entries actually have a postfix to discern
what URL they apply to. Here is how to change the entry for kernel.org
to "ssh".
------------

View File

@ -24,7 +24,7 @@ gitlink:git-revert[1] is your friend.
OPTIONS
-------
--mixed::
Resets the index but not the working tree (ie, the changed files
Resets the index but not the working tree (i.e., the changed files
are preserved but not marked for commit) and reports what has not
been updated. This is the default action.
@ -43,16 +43,17 @@ OPTIONS
Commit to make the current HEAD.
Examples
~~~~~~~~
--------
Undo a commit and redo::
+
------------
$ git commit ...
$ git reset --soft HEAD^ <1>
$ edit <2>
$ git commit -a -c ORIG_HEAD <3>
$ git reset --soft HEAD^ <1>
$ edit <2>
$ git commit -a -c ORIG_HEAD <3>
------------
+
<1> This is most often done when you remembered what you
just committed is incomplete, or you misspelled your commit
message, or both. Leaves working tree as it was before "reset".
@ -60,43 +61,43 @@ message, or both. Leaves working tree as it was before "reset".
<3> "reset" copies the old head to .git/ORIG_HEAD; redo the
commit by starting with its log message. If you do not need to
edit the message further, you can give -C option instead.
------------
Undo commits permanently::
+
------------
$ git commit ...
$ git reset --hard HEAD~3 <1>
$ git reset --hard HEAD~3 <1>
------------
+
<1> The last three commits (HEAD, HEAD^, and HEAD~2) were bad
and you do not want to ever see them again. Do *not* do this if
you have already given these commits to somebody else.
------------
Undo a commit, making it a topic branch::
+
------------
$ git branch topic/wip <1>
$ git reset --hard HEAD~3 <2>
$ git checkout topic/wip <3>
$ git branch topic/wip <1>
$ git reset --hard HEAD~3 <2>
$ git checkout topic/wip <3>
------------
+
<1> You have made some commits, but realize they were premature
to be in the "master" branch. You want to continue polishing
them in a topic branch, so create "topic/wip" branch off of the
current HEAD.
<2> Rewind the master branch to get rid of those three commits.
<3> Switch to "topic/wip" branch and keep working.
------------
Undo update-index::
+
------------
$ edit <1>
$ edit <1>
$ git-update-index frotz.c filfre.c
$ mailx <2>
$ git reset <3>
$ git pull git://info.example.com/ nitfol <4>
$ mailx <2>
$ git reset <3>
$ git pull git://info.example.com/ nitfol <4>
------------
+
<1> you are happily working on something, and find the changes
in these files are in good order. You do not want to see them
when you run "git diff", because you plan to work on other files
@ -109,12 +110,11 @@ index changes for these two files. Your changes in working tree
remain there.
<4> then you can pull and merge, leaving frotz.c and filfre.c
changes still in the working tree.
------------
Undo a merge or pull::
+
------------
$ git pull <1>
$ git pull <1>
Trying really trivial in-index merge...
fatal: Merge requires file-level merging
Nope.
@ -122,20 +122,19 @@ Nope.
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed/prevented; fix up by hand
$ git reset --hard <2>
$ git reset --hard <2>
$ git pull . topic/branch <3>
Updating from 41223... to 13134...
Fast forward
$ git reset --hard ORIG_HEAD <4>
------------
+
<1> try to update from the upstream resulted in a lot of
conflicts; you were not ready to spend a lot of time merging
right now, so you decide to do that later.
<2> "pull" has not made merge commit, so "git reset --hard"
which is a synonym for "git reset --hard HEAD" clears the mess
from the index file and the working tree.
$ git pull . topic/branch <3>
Updating from 41223... to 13134...
Fast forward
$ git reset --hard ORIG_HEAD <4>
<3> merge a topic branch into the current branch, which resulted
in a fast forward.
<4> but you decided that the topic branch is not ready for public
@ -143,7 +142,6 @@ consumption yet. "pull" or "merge" always leaves the original
tip of the current branch in ORIG_HEAD, so resetting hard to it
brings your index file and the working tree back to that state,
and resets the tip of the branch to that commit.
------------
Interrupted workflow::
+
@ -155,21 +153,21 @@ need to get to the other branch for a quick bugfix.
------------
$ git checkout feature ;# you were working in "feature" branch and
$ work work work ;# got interrupted
$ git commit -a -m 'snapshot WIP' <1>
$ git commit -a -m 'snapshot WIP' <1>
$ git checkout master
$ fix fix fix
$ git commit ;# commit with real log
$ git checkout feature
$ git reset --soft HEAD^ ;# go back to WIP state <2>
$ git reset <3>
$ git reset --soft HEAD^ ;# go back to WIP state <2>
$ git reset <3>
------------
+
<1> This commit will get blown away so a throw-away log message is OK.
<2> This removes the 'WIP' commit from the commit history, and sets
your working tree to the state just before you made that snapshot.
<3> After <2>, the index file still has all the WIP changes you
committed in <1>. This sets it to the last commit you were
basing the WIP changes on.
------------
<3> At this point the index file still has all the WIP changes you
committed as 'snapshot WIP'. This updates the index to show your
WIP files as uncommitted.
Author
------

View File

@ -15,12 +15,14 @@ SYNOPSIS
[ \--sparse ]
[ \--no-merges ]
[ \--remove-empty ]
[ \--not ]
[ \--all ]
[ \--topo-order ]
[ \--parents ]
[ [\--objects | \--objects-edge] [ \--unpacked ] ]
[ \--pretty | \--header ]
[ \--bisect ]
[ \--merge ]
<commit>... [ \-- <paths>... ]
DESCRIPTION
@ -37,6 +39,14 @@ not in 'baz'".
A special notation <commit1>..<commit2> can be used as a
short-hand for {caret}<commit1> <commit2>.
Another special notation is <commit1>...<commit2> which is useful for
merges. The resulting set of commits is the symmetric difference
between the two operands. The following two commands are equivalent:
------------
$ git-rev-list A B --not $(git-merge-base --all A B)
$ git-rev-list A...B
------------
OPTIONS
-------
@ -47,6 +57,9 @@ OPTIONS
Print the contents of the commit in raw-format; each
record is separated with a NUL character.
--parents::
Print the parents of the commit.
--objects::
Print the object IDs of any object referenced by the listed commits.
'git-rev-list --objects foo ^bar' thus means "send me all object IDs
@ -55,7 +68,7 @@ OPTIONS
--objects-edge::
Similar to `--objects`, but also print the IDs of
excluded commits refixed with a `-` character. This is
excluded commits prefixed with a `-` character. This is
used by `git-pack-objects` to build 'thin' pack, which
records objects in deltified form based on objects
contained in these excluded commits to reduce network
@ -68,9 +81,10 @@ OPTIONS
--bisect::
Limit output to the one commit object which is roughly halfway
between the included and excluded commits. Thus, if 'git-rev-list
--bisect foo ^bar ^baz' outputs 'midpoint', the output
of 'git-rev-list foo ^midpoint' and 'git-rev-list midpoint
^bar ^baz' would be of roughly the same length. Finding the change
--bisect foo {caret}bar {caret}baz' outputs 'midpoint', the output
of 'git-rev-list foo {caret}midpoint' and 'git-rev-list midpoint
{caret}bar {caret}baz' would be of roughly the same length.
Finding the change
which introduces a regression is thus reduced to a binary search:
repeatedly generate and test new 'midpoint's until the commit chain
is of length one.
@ -92,6 +106,14 @@ OPTIONS
--remove-empty::
Stop when a given path disappears from the tree.
--no-merges::
Do not print commits with more than one parent.
--not::
Reverses the meaning of the '{caret}' prefix (or lack
thereof) for all following revision specifiers, up to
the next `--not`.
--all::
Pretend as if all the refs in `$GIT_DIR/refs/` are
listed on the command line as <commit>.
@ -102,6 +124,10 @@ OPTIONS
topological order (i.e. descendant commits are shown
before their parents).
--merge::
After a failed merge, show refs that touch files having a
conflict and don't exist on all heads to merge.
Author
------
Written by Linus Torvalds <torvalds@osdl.org>

View File

@ -13,7 +13,7 @@ SYNOPSIS
DESCRIPTION
-----------
Many git Porcelainish commands take mixture of flags
Many git porcelainish commands take mixture of flags
(i.e. parameters that begin with a dash '-') and parameters
meant for underlying `git-rev-list` command they use internally
and flags and parameters for other commands they use as the
@ -67,6 +67,15 @@ OPTIONS
--all::
Show all refs found in `$GIT_DIR/refs`.
--branches::
Show branch refs found in `$GIT_DIR/refs/heads`.
--tags::
Show tag refs found in `$GIT_DIR/refs/tags`.
--remotes::
Show tag refs found in `$GIT_DIR/refs/remotes`.
--show-prefix::
When the command is invoked from a subdirectory, show the
path of the current directory relative to the top-level
@ -82,7 +91,7 @@ OPTIONS
--short, --short=number::
Instead of outputting the full SHA1 values of object names try to
abbriviate them to a shorter unique name. When no length is specified
abbreviate them to a shorter unique name. When no length is specified
7 is used. The minimum length is 4.
--since=datestring, --after=datestring::
@ -115,6 +124,13 @@ syntax.
happen to have both heads/master and tags/master, you can
explicitly say 'heads/master' to tell git which one you mean.
* A suffix '@' followed by a date specification enclosed in a brace
pair (e.g. '\{yesterday\}', '\{1 month 2 weeks 3 days 1 hour 1
second ago\}' or '\{1979-02-26 18:30:00\}') to specify the value
of the ref at a prior point in time. This suffix may only be
used immediately following a ref name and the ref must have an
existing log ($GIT_DIR/logs/<ref>).
* A suffix '{caret}' to a revision parameter means the first parent of
that commit object. '{caret}<n>' means the <n>th parent (i.e.
'rev{caret}'
@ -140,11 +156,6 @@ syntax.
and dereference the tag recursively until a non-tag object is
found.
'git-rev-parse' also accepts a prefix '{caret}' to revision parameter,
which is passed to 'git-rev-list'. Two revision parameters
concatenated with '..' is a short-hand for writing a range
between them. I.e. 'r1..r2' is equivalent to saying '{caret}r1 r2'
Here is an illustration, by Jon Loeliger. Both node B and C are
a commit parents of commit node A. Parent commits are ordered
left-to-right.
@ -152,9 +163,9 @@ left-to-right.
G H I J
\ / \ /
D E F
\ | /
\ | /
\|/
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
@ -172,6 +183,40 @@ left-to-right.
J = F^2 = B^3^2 = A^^3^2
SPECIFYING RANGES
-----------------
History traversing commands such as `git-log` operate on a set
of commits, not just a single commit. To these commands,
specifying a single revision with the notation described in the
previous section means the set of commits reachable from that
commit, following the commit ancestry chain.
To exclude commits reachable from a commit, a prefix `{caret}`
notation is used. E.g. "`{caret}r1 r2`" means commits reachable
from `r2` but exclude the ones reachable from `r1`.
This set operation appears so often that there is a shorthand
for it. "`r1..r2`" is equivalent to "`{caret}r1 r2`". It is
the difference of two sets (subtract the set of commits
reachable from `r1` from the set of commits reachable from
`r2`).
A similar notation "`r1\...r2`" is called symmetric difference
of `r1` and `r2` and is defined as
"`r1 r2 --not $(git-merge-base --all r1 r2)`".
It it the set of commits that are reachable from either one of
`r1` or `r2` but not from both.
Here are a few examples:
D A B D
D F A B C D F
^A G B D
^A F B C F
G...I C D F G I
^B G I C D F G I
Author
------
Written by Linus Torvalds <torvalds@osdl.org> and

View File

@ -32,7 +32,7 @@ OPTIONS
-v::
Be verbose.
--::
\--::
This option can be used to separate command-line options from
the list of files, (useful when filenames might be mistaken
for command-line options).

View File

@ -24,9 +24,16 @@ OPTIONS
-------
The options available are:
--bcc::
Specify a "Bcc:" value for each email.
The --bcc option must be repeated for each user you want on the bcc list.
--cc::
Specify a starting "Cc:" value for each email.
The --cc option must be repeated for each user you want on the cc list.
--chain-reply-to, --no-chain-reply-to::
If this is set, each email will be sent as a reply to the previous
email sent. If disabled with "--no-chain-reply-to", all emails after
@ -52,7 +59,7 @@ The options available are:
is not set, this will be prompted for.
--no-signed-off-by-cc::
Do not add emails foudn in Signed-off-by: lines to the cc list.
Do not add emails found in Signed-off-by: lines to the cc list.
--quiet::
Make git-send-email less verbose. One line per email should be
@ -76,6 +83,8 @@ The options available are:
Generally, this will be the upstream maintainer of the
project involved.
The --to option must be repeated for each user you want on the to list.
Author
------

View File

@ -53,7 +53,7 @@ Specifying the Refs
There are three ways to specify which refs to update on the
remote end.
With '--all' flag, all refs that exist locally are transfered to
With '--all' flag, all refs that exist locally are transferred to
the remote side. You cannot specify any '<ref>' if you use
this flag.

View File

@ -13,7 +13,7 @@ DESCRIPTION
-----------
Sets up the normal git environment variables and a few helper functions
(currently just "die()"), and returns ok if it all looks like a git archive.
(currently just "die()"), and returns OK if it all looks like a git archive.
So, to make the rest of the git scripts more careful and readable,
use it as follows:

View File

@ -5,7 +5,6 @@ NAME
----
git-shortlog - Summarize 'git log' output
SYNOPSIS
--------
git-log --pretty=short | 'git-shortlog'
@ -13,8 +12,22 @@ git-log --pretty=short | 'git-shortlog'
DESCRIPTION
-----------
Summarizes 'git log' output in a format suitable for inclusion
in release announcements.
in release announcements. Each commit will be grouped by author
the first line of the commit message will be shown.
Additionally, "[PATCH]" will be stripped from the commit description.
FILES
-----
'.mailmap'::
If this file exists, it will be used for mapping author email
addresses to a real author name. One mapping per line, first
the author name followed by the email address enclosed by
'<' and '>'. Use hash '#' for comments. Example:
# Keep alphabetized
Adam Morrow <adam@localhost.localdomain>
Eve Jones <eve@laptop.(none)>
Author
------

View File

@ -52,6 +52,11 @@ OPTIONS
appear in topological order (i.e., descendant commits
are shown before their parents).
--sparse::
By default, the output omits merges that are reachable
from only one tip being shown. This option makes them
visible.
--more=<n>::
Usually the command stops output upon showing the commit
that is the common ancestor of all the branches. This

View File

@ -8,7 +8,7 @@ git-status - Show working tree status
SYNOPSIS
--------
'git-status'
'git-status' <options>...
DESCRIPTION
-----------
@ -23,6 +23,10 @@ If there is no path that is different between the index file and
the current HEAD commit, the command exits with non-zero
status.
The command takes the same set of options as `git-commit`; it
shows what would be committed if the same options are given to
`git-commit`.
OUTPUT
------

View File

@ -36,17 +36,22 @@ COMMANDS
--------
init::
Creates an empty git repository with additional metadata
directories for git-svn. The SVN_URL must be specified
at this point.
directories for git-svn. The Subversion URL must be specified
as a command-line argument.
fetch::
Fetch unfetched revisions from the SVN_URL we are tracking.
refs/heads/remotes/git-svn will be updated to the latest revision.
Fetch unfetched revisions from the Subversion URL we are
tracking. refs/remotes/git-svn will be updated to the
latest revision.
Note: You should never attempt to modify the remotes/git-svn branch
outside of git-svn. Instead, create a branch from remotes/git-svn
and work on that branch. Use the 'commit' command (see below)
to write git commits back to remotes/git-svn.
Note: You should never attempt to modify the remotes/git-svn
branch outside of git-svn. Instead, create a branch from
remotes/git-svn and work on that branch. Use the 'commit'
command (see below) to write git commits back to
remotes/git-svn.
See 'Additional Fetch Arguments' if you are interested in
manually joining branches on commit.
commit::
Commit specified commit or tree objects to SVN. This relies on
@ -62,9 +67,9 @@ rebuild::
tracked with git-svn. Unfortunately, git-clone does not clone
git-svn metadata and the svn working tree that git-svn uses for
its operations. This rebuilds the metadata so git-svn can
resume fetch operations. SVN_URL may be optionally specified if
the directory/repository you're tracking has moved or changed
protocols.
resume fetch operations. A Subversion URL may be optionally
specified at the command-line if the directory/repository you're
tracking has moved or changed protocols.
show-ignore::
Recursively finds and lists the svn:ignore property on
@ -123,6 +128,24 @@ OPTIONS
repo-config key: svn.l
repo-config key: svn.findcopiesharder
-A<filename>::
--authors-file=<filename>::
Syntax is compatible with the files used by git-svnimport and
git-cvsimport:
------------------------------------------------------------------------
loginname = Joe User <user@example.com>
------------------------------------------------------------------------
If this option is specified and git-svn encounters an SVN
committer name that does not exist in the authors-file, git-svn
will abort operation. The user will then have to add the
appropriate entry. Re-running the previous git-svn command
after the authors-file is modified should continue operation.
repo-config key: svn.authors-file
ADVANCED OPTIONS
----------------
-b<refname>::
@ -201,7 +224,7 @@ Merge tracking in Subversion is lacking and doing branched development
with Subversion is cumbersome as a result. git-svn completely forgoes
any automated merge/branch tracking on the Subversion side and leaves it
entirely up to the user on the git side. It's simply not worth it to do
a useful translation when the the original signal is weak.
a useful translation when the original signal is weak.
TRACKING MULTIPLE REPOSITORIES OR BRANCHES
------------------------------------------

View File

@ -8,7 +8,7 @@ git-tar-tree - Creates a tar archive of the files in the named tree
SYNOPSIS
--------
'git-tar-tree' <tree-ish> [ <base> ]
'git-tar-tree' [--remote=<repo>] <tree-ish> [ <base> ]
DESCRIPTION
-----------
@ -23,6 +23,58 @@ commit time as recorded in the referenced commit object is used instead.
Additionally the commit ID is stored in a global extended pax header.
It can be extracted using git-get-tar-commit-id.
OPTIONS
-------
<tree-ish>::
The tree or commit to produce tar archive for. If it is
the object name of a commit object.
<base>::
Leading path to the files in the resulting tar archive.
--remote=<repo>::
Instead of making a tar archive from local repository,
retrieve a tar archive from a remote repository.
CONFIGURATION
-------------
By default, file and directories modes are set to 0666 or 0777. It is
possible to change this by setting the "umask" variable in the
repository configuration as follows :
[tar]
umask = 002 ;# group friendly
The special umask value "user" indicates that the user's current umask
will be used instead. The default value remains 0, which means world
readable/writable files and directories.
EXAMPLES
--------
git tar-tree HEAD junk | (cd /var/tmp/ && tar xf -)::
Create a tar archive that contains the contents of the
latest commit on the current branch, and extracts it in
`/var/tmp/junk` directory.
git tar-tree v1.4.0 git-1.4.0 | gzip >git-1.4.0.tar.gz::
Create a tarball for v1.4.0 release.
git tar-tree v1.4.0{caret}\{tree\} git-1.4.0 | gzip >git-1.4.0.tar.gz::
Create a tarball for v1.4.0 release, but without a
global extended pax header.
git tar-tree --remote=example.com:git.git v1.4.0 >git-1.4.0.tar::
Get a tarball v1.4.0 from example.com.
git tar-tree HEAD:Documentation/ git-docs > git-1.4.0-docs.tar::
Put everything in the current head's Documentation/ directory
into 'git-1.4.0-docs.tar', with the prefix 'git-docs/'.
Author
------

View File

@ -12,7 +12,7 @@ This document presents a brief summary of each tool and the corresponding
link.
Alternative/Augmentative Procelains
Alternative/Augmentative Porcelains
-----------------------------------
- *Cogito* (http://www.kernel.org/pub/software/scm/cogito/)
@ -42,7 +42,7 @@ History Viewers
- *gitk* (shipped with git-core)
gitk is a simple TK GUI for browsing history of GIT repositories easily.
gitk is a simple Tk GUI for browsing history of GIT repositories easily.
- *gitview* (contrib/)

View File

@ -13,9 +13,16 @@ SYNOPSIS
DESCRIPTION
-----------
Reads a packed archive (.pack) from the standard input, and
expands the objects contained in the pack into "one-file
one-object" format in $GIT_OBJECT_DIRECTORY.
Read a packed archive (.pack) from the standard input, expanding
the objects contained within and writing them into the repository in
"loose" (one object per file) format.
Objects that already exist in the repository will *not* be unpacked
from the pack-file. Therefore, nothing will be unpacked if you use
this command on a pack-file that exists within the target repository.
Please see the `git-repack` documentation for options to generate
new packs and replace existing ones.
OPTIONS
-------

View File

@ -10,12 +10,12 @@ SYNOPSIS
--------
[verse]
'git-update-index'
[--add] [--remove | --force-remove] [--replace]
[--refresh [-q] [--unmerged] [--ignore-missing]]
[--add] [--remove | --force-remove] [--replace]
[--refresh] [-q] [--unmerged] [--ignore-missing]
[--cacheinfo <mode> <object> <file>]\*
[--chmod=(+|-)x]
[--assume-unchanged | --no-assume-unchanged]
[--really-refresh]
[--really-refresh] [--unresolve] [--again]
[--info-only] [--index-info]
[-z] [--stdin]
[--verbose]
@ -40,7 +40,7 @@ OPTIONS
--remove::
If a specified file is in the index but is missing then it's
removed.
Default behaviour is to ignore removed file.
Default behavior is to ignore removed file.
--refresh::
Looks at the current index and checks to see if merges or
@ -80,6 +80,14 @@ OPTIONS
filesystem that has very slow lstat(2) system call
(e.g. cifs).
--again::
Runs `git-update-index` itself on the paths whose index
entries are different from those from the `HEAD` commit.
--unresolve::
Restores the 'unmerged' or 'needs updating' state of a
file during a merge if it was cleared by accident.
--info-only::
Do not create objects in the object database for all
<file> arguments that follow this flag; just insert
@ -109,7 +117,7 @@ OPTIONS
Only meaningful with `--stdin`; paths are separated with
NUL character instead of LF.
--::
\--::
Do not interpret any more arguments as options.
<file>::
@ -247,34 +255,33 @@ To update and refresh only the files already checked out:
$ git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
----------------
On an inefficient filesystem with `core.ignorestat` set:
On an inefficient filesystem with `core.ignorestat` set::
+
------------
$ git update-index --really-refresh <1>
$ git update-index --no-assume-unchanged foo.c <2>
$ git diff --name-only <3>
$ git update-index --really-refresh <1>
$ git update-index --no-assume-unchanged foo.c <2>
$ git diff --name-only <3>
$ edit foo.c
$ git diff --name-only <4>
$ git diff --name-only <4>
M foo.c
$ git update-index foo.c <5>
$ git diff --name-only <6>
$ git update-index foo.c <5>
$ git diff --name-only <6>
$ edit foo.c
$ git diff --name-only <7>
$ git update-index --no-assume-unchanged foo.c <8>
$ git diff --name-only <9>
$ git diff --name-only <7>
$ git update-index --no-assume-unchanged foo.c <8>
$ git diff --name-only <9>
M foo.c
<1> forces lstat(2) to set "assume unchanged" bits for paths
that match index.
------------
+
<1> forces lstat(2) to set "assume unchanged" bits for paths that match index.
<2> mark the path to be edited.
<3> this does lstat(2) and finds index matches the path.
<4> this does lstat(2) and finds index does not match the path.
<4> this does lstat(2) and finds index does *not* match the path.
<5> registering the new version to index sets "assume unchanged" bit.
<6> and it is assumed unchanged.
<7> even after you edit it.
<8> you can tell about the change after the fact.
<9> now it checks with lstat(2) and finds it has been changed.
------------
Configuration

View File

@ -7,7 +7,7 @@ git-update-ref - update the object name stored in a ref safely
SYNOPSIS
--------
'git-update-ref' <ref> <newvalue> [<oldvalue>]
'git-update-ref' [-m <reason>] <ref> <newvalue> [<oldvalue>]
DESCRIPTION
-----------
@ -49,6 +49,32 @@ for reading but not for writing (so we'll never write through a
ref symlink to some other tree, if you have copied a whole
archive by creating a symlink tree).
Logging Updates
---------------
If config parameter "core.logAllRefUpdates" is true or the file
"$GIT_DIR/logs/<ref>" exists then `git-update-ref` will append
a line to the log file "$GIT_DIR/logs/<ref>" (dereferencing all
symbolic refs before creating the log name) describing the change
in ref value. Log lines are formatted as:
. oldsha1 SP newsha1 SP committer LF
+
Where "oldsha1" is the 40 character hexadecimal value previously
stored in <ref>, "newsha1" is the 40 character hexadecimal value of
<newvalue> and "committer" is the committer's name, email address
and date in the standard GIT committer ident format.
Optionally with -m:
. oldsha1 SP newsha1 SP committer TAB message LF
+
Where all fields are as described above and "message" is the
value supplied to the -m option.
An update will fail (without changing <ref>) if the current user is
unable to create a new log file, append to the existing log file
or does not have committer information available.
Author
------
Written by Linus Torvalds <torvalds@osdl.org>.

View File

@ -12,7 +12,7 @@ SYNOPSIS
DESCRIPTION
-----------
Invoked by 'git-clone-pack' and/or 'git-fetch-pack', learns what
Invoked by 'git-fetch-pack', learns what
objects the other side is missing, and sends them after packing.
This command is usually not invoked directly by the end user.

View File

@ -0,0 +1,39 @@
git-upload-tar(1)
=================
NAME
----
git-upload-tar - Send tar archive
SYNOPSIS
--------
'git-upload-tar' <directory>
DESCRIPTION
-----------
Invoked by 'git-tar-tree --remote' and sends a generated tar archive
to the other end over the git protocol.
This command is usually not invoked directly by the end user.
The UI for the protocol is on the 'git-tar-tree' side, and the
program pair is meant to be used to get a tar archive from a
remote repository.
OPTIONS
-------
<directory>::
The repository to get a tar archive from.
Author
------
Written by Junio C Hamano <junio@kernel.org>
Documentation
--------------
Documentation by Junio C Hamano.
GIT
---
Part of the gitlink:git[7] suite

View File

@ -19,7 +19,8 @@ OPTIONS
-l::
Cause the logical variables to be listed. In addition, all the
variables of the git configuration file .git/config are listed
as well.
as well. (However, the configuration variables listing functionality
is deprecated in favor of `git-repo-config -l`.)
EXAMPLE
--------

View File

@ -25,7 +25,7 @@ OPTIONS
-v::
After verifying the pack, show list of objects contained
in the pack.
--::
\--::
Do not interpret any more arguments as options.
OUTPUT FORMAT

View File

@ -58,7 +58,7 @@ git-whatchanged -p v2.6.12.. include/scsi drivers/scsi::
Show as patches the commits since version 'v2.6.12' that changed
any file in the include/scsi or drivers/scsi subdirectories
git-whatchanged --since="2 weeks ago" -- gitk::
git-whatchanged --since="2 weeks ago" \-- gitk::
Show the changes during the last two weeks to the file 'gitk'.
The "--" is necessary to avoid confusion with the *branch* named

View File

@ -8,7 +8,7 @@ git-write-tree - Creates a tree object from the current index
SYNOPSIS
--------
'git-write-tree' [--missing-ok]
'git-write-tree' [--missing-ok] [--prefix=<prefix>/]
DESCRIPTION
-----------
@ -30,6 +30,12 @@ OPTIONS
directory exist in the object database. This option disables this
check.
--prefix=<prefix>/::
Writes a tree object that represents a subdirectory
`<prefix>`. This can be used to write the tree object
for a subproject that is in the named subdirectory.
Author
------
Written by Linus Torvalds <torvalds@osdl.org>

View File

@ -8,7 +8,8 @@ git - the stupid content tracker
SYNOPSIS
--------
'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [--help] COMMAND [ARGS]
'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate]
[--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]
DESCRIPTION
-----------
@ -21,6 +22,9 @@ link:everyday.html[Everyday Git] for a useful minimum set of commands, and
"man git-commandname" for documentation of each command. CVS users may
also want to read link:cvs-migration.html[CVS migration].
The COMMAND is either a name of a Git command (see below) or an alias
as defined in the configuration file (see gitlink:git-repo-config[1]).
OPTIONS
-------
--version::
@ -38,6 +42,15 @@ OPTIONS
environment variable. If no path is given 'git' will print
the current setting and then exit.
-p|--paginate::
Pipe all output into 'less' (or if set, $PAGER).
--git-dir=<path>::
Set the path to the repository. This can also be controlled by
setting the GIT_DIR environment variable.
--bare::
Same as --git-dir=`pwd`.
FURTHER DOCUMENTATION
---------------------
@ -189,10 +202,6 @@ the working tree.
Synching repositories
~~~~~~~~~~~~~~~~~~~~~
gitlink:git-clone-pack[1]::
Clones a repository into the current repository (engine
for ssh and local transport).
gitlink:git-fetch-pack[1]::
Updates from a remote repository (engine for ssh and
local transport).
@ -234,9 +243,13 @@ gitlink:git-update-server-info[1]::
clients discover references and packs on it.
gitlink:git-upload-pack[1]::
Invoked by 'git-clone-pack' and 'git-fetch-pack' to push
Invoked by 'git-fetch-pack' to push
what are asked for.
gitlink:git-upload-tar[1]::
Invoked by 'git-tar-tree --remote' to return the tar
archive the other end asked for.
High-level commands (porcelain)
-------------------------------
@ -378,9 +391,15 @@ gitlink:git-merge-one-file[1]::
gitlink:git-prune[1]::
Prunes all unreachable objects from the object database.
gitlink:git-quiltimport[1]::
Applies a quilt patchset onto the current branch.
gitlink:git-relink[1]::
Hardlink common objects in local repositories.
gitlink:git-svn[1]::
Bidirectional operation between a single Subversion branch and git.
gitlink:git-svnimport[1]::
Import a SVN repository into git.
@ -426,6 +445,9 @@ gitlink:git-get-tar-commit-id[1]::
gitlink:git-imap-send[1]::
Dump a mailbox from stdin into an imap folder.
gitlink:git-instaweb[1]::
Instantly browse your working repository in gitweb.
gitlink:git-mailinfo[1]::
Extracts patch and authorship information from a single
e-mail message, optionally transliterating the commit
@ -472,7 +494,7 @@ Configuration Mechanism
Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file
is used to hold per-repository configuration options. It is a
simple text file modelled after `.ini` format familiar to some
simple text file modeled after `.ini` format familiar to some
people. Here is an example:
------------
@ -609,6 +631,13 @@ git Diffs
gitlink:git-diff-files[1];
gitlink:git-diff-tree[1]
other
~~~~~
'GIT_TRACE'::
If this variable is set git will print `trace:` messages on
stderr telling about alias expansion, built-in command
execution and external command execution.
Discussion[[Discussion]]
------------------------
include::README[]

View File

@ -31,7 +31,7 @@ gitk v2.6.12.. include/scsi drivers/scsi::
Show as the changes since version 'v2.6.12' that changed any
file in the include/scsi or drivers/scsi subdirectories
gitk --since="2 weeks ago" -- gitk::
gitk --since="2 weeks ago" \-- gitk::
Show the changes during the last two weeks to the file 'gitk'.
The "--" is necessary to avoid confusion with the *branch* named

View File

@ -1,39 +1,71 @@
object::
The unit of storage in git. It is uniquely identified by
the SHA1 of its contents. Consequently, an object can not
be changed.
alternate object database::
Via the alternates mechanism, a repository can inherit part of its
object database from another object database, which is called
"alternate".
object name::
The unique identifier of an object. The hash of the object's contents
using the Secure Hash Algorithm 1 and usually represented by the 40
character hexadecimal encoding of the hash of the object (possibly
followed by a white space).
SHA1::
Synonym for object name.
object identifier::
Synonym for object name.
hash::
In git's context, synonym to object name.
object database::
Stores a set of "objects", and an individual object is identified
by its object name. The objects usually live in `$GIT_DIR/objects/`.
bare repository::
A bare repository is normally an appropriately named
directory with a `.git` suffix that does not have a
locally checked-out copy of any of the files under revision
control. That is, all of the `git` administrative and
control files that would normally be present in the
hidden `.git` sub-directory are directly present in
the `repository.git` directory instead, and no other files
are present and checked out. Usually publishers of public
repositories make bare repositories available.
blob object::
Untyped object, e.g. the contents of a file.
tree object::
An object containing a list of file names and modes along with refs
to the associated blob and/or tree objects. A tree is equivalent
to a directory.
branch::
A non-cyclical graph of revisions, i.e. the complete history of
a particular revision, which is called the branch head. The
branch heads are stored in `$GIT_DIR/refs/heads/`.
tree::
Either a working tree, or a tree object together with the
dependent blob and tree objects (i.e. a stored representation
of a working tree).
cache::
Obsolete for: index.
chain::
A list of objects, where each object in the list contains a
reference to its successor (for example, the successor of a commit
could be one of its parents).
changeset::
BitKeeper/cvsps speak for "commit". Since git does not store
changes, but states, it really does not make sense to use
the term "changesets" with git.
checkout::
The action of updating the working tree to a revision which was
stored in the object database.
cherry-picking::
In SCM jargon, "cherry pick" means to choose a subset of
changes out of a series of changes (typically commits)
and record them as a new series of changes on top of
different codebase. In GIT, this is performed by
"git cherry-pick" command to extract the change
introduced by an existing commit and to record it based
on the tip of the current branch as a new commit.
clean::
A working tree is clean, if it corresponds to the revision
referenced by the current head. Also see "dirty".
commit::
As a verb: The action of storing the current state of the index in the
object database. The result is a revision.
As a noun: Short hand for commit object.
commit object::
An object which contains the information about a particular
revision, such as parents, committer, author, date and the
tree object which corresponds to the top directory of the
stored revision.
core git::
Fundamental data structures and utilities of git. Exposes only
limited source code management tools.
DAG::
Directed acyclic graph. The commit objects form a directed acyclic
@ -41,6 +73,70 @@ DAG::
objects is acyclic (there is no chain which begins and ends with the
same object).
dircache::
You are *waaaaay* behind.
dirty::
A working tree is said to be dirty if it contains modifications
which have not been committed to the current branch.
directory::
The list you get with "ls" :-)
ent::
Favorite synonym to "tree-ish" by some total geeks. See
`http://en.wikipedia.org/wiki/Ent_(Middle-earth)` for an in-depth
explanation. Avoid this term, not to confuse people.
fast forward::
A fast-forward is a special type of merge where you have
a revision and you are "merging" another branch's changes
that happen to be a descendant of what you have.
In such these cases, you do not make a new merge commit but
instead just update to his revision. This will happen
frequently on a tracking branch of a remote repository.
fetch::
Fetching a branch means to get the branch's head ref from a
remote repository, to find out which objects are missing from
the local object database, and to get them, too.
file system::
Linus Torvalds originally designed git to be a user space file
system, i.e. the infrastructure to hold files and directories.
That ensured the efficiency and speed of git.
git archive::
Synonym for repository (for arch people).
grafts::
Grafts enables two otherwise different lines of development to be
joined together by recording fake ancestry information for commits.
This way you can make git pretend the set of parents a commit
has is different from what was recorded when the commit was created.
Configured via the `.git/info/grafts` file.
hash::
In git's context, synonym to object name.
head::
The top of a branch. It contains a ref to the corresponding
commit object.
head ref::
A ref pointing to a head. Often, this is abbreviated to "head".
Head refs are stored in `$GIT_DIR/refs/heads/`.
hook::
During the normal execution of several git commands,
call-outs are made to optional scripts that allow
a developer to add functionality or checking.
Typically, the hooks allow for a command to be pre-verified
and potentially aborted, and allow for a post-notification
after the operation is done.
The hook scripts are found in the `$GIT_DIR/hooks/` directory,
and are enabled by simply making them executable.
index::
A collection of files with stat information, whose contents are
stored as objects. The index is a stored version of your working
@ -53,92 +149,167 @@ index entry::
yet finished (i.e. if the index contains multiple versions of
that file).
unmerged index:
An index which contains unmerged index entries.
master::
The default development branch. Whenever you create a git
repository, a branch named "master" is created, and becomes
the active branch. In most cases, this contains the local
development, though that is purely conventional and not required.
cache::
Obsolete for: index.
merge::
To merge branches means to try to accumulate the changes since a
common ancestor and apply them to the first branch. An automatic
merge uses heuristics to accomplish that. Evidently, an automatic
merge can fail.
working tree::
The set of files and directories currently being worked on,
i.e. you can work in your working tree without using git at all.
object::
The unit of storage in git. It is uniquely identified by
the SHA1 of its contents. Consequently, an object can not
be changed.
directory::
The list you get with "ls" :-)
object database::
Stores a set of "objects", and an individual object is identified
by its object name. The objects usually live in `$GIT_DIR/objects/`.
revision::
A particular state of files and directories which was stored in
the object database. It is referenced by a commit object.
object identifier::
Synonym for object name.
checkout::
The action of updating the working tree to a revision which was
stored in the object database.
object name::
The unique identifier of an object. The hash of the object's contents
using the Secure Hash Algorithm 1 and usually represented by the 40
character hexadecimal encoding of the hash of the object (possibly
followed by a white space).
commit::
As a verb: The action of storing the current state of the index in the
object database. The result is a revision.
As a noun: Short hand for commit object.
object type:
One of the identifiers "commit","tree","tag" and "blob" describing
the type of an object.
commit object::
An object which contains the information about a particular
revision, such as parents, committer, author, date and the
tree object which corresponds to the top directory of the
stored revision.
octopus::
To merge more than two branches. Also denotes an intelligent
predator.
origin::
The default upstream tracking branch. Most projects have at
least one upstream project which they track. By default
'origin' is used for that purpose. New upstream updates
will be fetched into this branch; you should never commit
to it yourself.
pack::
A set of objects which have been compressed into one file (to save
space or to transmit them efficiently).
pack index::
The list of identifiers, and other information, of the objects in a
pack, to assist in efficiently accessing the contents of a pack.
parent::
A commit object contains a (possibly empty) list of the logical
predecessor(s) in the line of development, i.e. its parents.
changeset::
BitKeeper/cvsps speak for "commit". Since git does not store
changes, but states, it really does not make sense to use
the term "changesets" with git.
pickaxe::
The term pickaxe refers to an option to the diffcore routines
that help select changes that add or delete a given text string.
With the --pickaxe-all option, it can be used to view the
full changeset that introduced or removed, say, a particular
line of text. See gitlink:git-diff[1].
clean::
A working tree is clean, if it corresponds to the revision
referenced by the current head.
plumbing::
Cute name for core git.
dirty::
A working tree is said to be dirty if it contains modifications
which have not been committed to the current branch.
porcelain::
Cute name for programs and program suites depending on core git,
presenting a high level access to core git. Porcelains expose
more of a SCM interface than the plumbing.
head::
The top of a branch. It contains a ref to the corresponding
commit object.
pull::
Pulling a branch means to fetch it and merge it.
branch::
A non-cyclical graph of revisions, i.e. the complete history of
a particular revision, which is called the branch head. The
branch heads are stored in `$GIT_DIR/refs/heads/`.
push::
Pushing a branch means to get the branch's head ref from a remote
repository, find out if it is an ancestor to the branch's local
head ref is a direct, and in that case, putting all objects, which
are reachable from the local head ref, and which are missing from
the remote repository, into the remote object database, and updating
the remote head ref. If the remote head is not an ancestor to the
local head, the push fails.
master::
The default branch. Whenever you create a git repository, a branch
named "master" is created, and becomes the active branch. In most
cases, this contains the local development.
reachable::
An object is reachable from a ref/commit/tree/tag, if there is a
chain leading from the latter to the former.
origin::
The default upstream branch. Most projects have one upstream
project which they track, and by default 'origin' is used for
that purpose. New updates from upstream will be fetched into
this branch; you should never commit to it yourself.
rebase::
To clean a branch by starting from the head of the main line of
development ("master"), and reapply the (possibly cherry-picked)
changes from that branch.
ref::
A 40-byte hex representation of a SHA1 pointing to a particular
object. These may be stored in `$GIT_DIR/refs/`.
A 40-byte hex representation of a SHA1 or a name that denotes
a particular object. These may be stored in `$GIT_DIR/refs/`.
head ref::
A ref pointing to a head. Often, this is abbreviated to "head".
Head refs are stored in `$GIT_DIR/refs/heads/`.
refspec::
A refspec is used by fetch and push to describe the mapping
between remote ref and local ref. They are combined with
a colon in the format <src>:<dst>, preceded by an optional
plus sign, +. For example:
`git fetch $URL refs/heads/master:refs/heads/origin`
means "grab the master branch head from the $URL and store
it as my origin branch head".
And `git push $URL refs/heads/master:refs/heads/to-upstream`
means "publish my master branch head as to-upstream master head
at $URL". See also gitlink:git-push[1]
repository::
A collection of refs together with an object database containing
all objects, which are reachable from the refs, possibly accompanied
by meta data from one or more porcelains. A repository can
share an object database with other repositories.
resolve::
The action of fixing up manually what a failed automatic merge
left behind.
revision::
A particular state of files and directories which was stored in
the object database. It is referenced by a commit object.
rewind::
To throw away part of the development, i.e. to assign the head to
an earlier revision.
SCM::
Source code management (tool).
SHA1::
Synonym for object name.
topic branch::
A regular git branch that is used by a developer to
identify a conceptual line of development. Since branches
are very easy and inexpensive, it is often desirable to
have several small branches that each contain very well
defined concepts or small incremental yet related changes.
tracking branch::
A regular git branch that is used to follow changes from
another repository. A tracking branch should not contain
direct modifications or have local commits made to it.
A tracking branch can usually be identified as the
right-hand-side ref in a Pull: refspec.
tree object::
An object containing a list of file names and modes along with refs
to the associated blob and/or tree objects. A tree is equivalent
to a directory.
tree::
Either a working tree, or a tree object together with the
dependent blob and tree objects (i.e. a stored representation
of a working tree).
tree-ish::
A ref pointing to either a commit object, a tree object, or a
tag object pointing to a tag or commit or tree object.
ent::
Favorite synonym to "tree-ish" by some total geeks. See
`http://en.wikipedia.org/wiki/Ent_(Middle-earth)` for an in-depth
explanation.
tag object::
An object containing a ref pointing to another object, which can
contain a message just like a commit object. It can also
@ -153,101 +324,10 @@ tag::
A tag is most typically used to mark a particular point in the
commit ancestry chain.
merge::
To merge branches means to try to accumulate the changes since a
common ancestor and apply them to the first branch. An automatic
merge uses heuristics to accomplish that. Evidently, an automatic
merge can fail.
unmerged index:
An index which contains unmerged index entries.
octopus::
To merge more than two branches. Also denotes an intelligent
predator.
resolve::
The action of fixing up manually what a failed automatic merge
left behind.
rewind::
To throw away part of the development, i.e. to assign the head to
an earlier revision.
rebase::
To clean a branch by starting from the head of the main line of
development ("master"), and reapply the (possibly cherry-picked)
changes from that branch.
repository::
A collection of refs together with an object database containing
all objects, which are reachable from the refs, possibly accompanied
by meta data from one or more porcelains. A repository can
share an object database with other repositories.
git archive::
Synonym for repository (for arch people).
file system::
Linus Torvalds originally designed git to be a user space file
system, i.e. the infrastructure to hold files and directories.
That ensured the efficiency and speed of git.
alternate object database::
Via the alternates mechanism, a repository can inherit part of its
object database from another object database, which is called
"alternate".
reachable::
An object is reachable from a ref/commit/tree/tag, if there is a
chain leading from the latter to the former.
chain::
A list of objects, where each object in the list contains a
reference to its successor (for example, the successor of a commit
could be one of its parents).
fetch::
Fetching a branch means to get the branch's head ref from a
remote repository, to find out which objects are missing from
the local object database, and to get them, too.
pull::
Pulling a branch means to fetch it and merge it.
push::
Pushing a branch means to get the branch's head ref from a remote
repository, find out if it is an ancestor to the branch's local
head ref is a direct, and in that case, putting all objects, which
are reachable from the local head ref, and which are missing from
the remote repository, into the remote object database, and updating
the remote head ref. If the remote head is not an ancestor to the
local head, the push fails.
pack::
A set of objects which have been compressed into one file (to save
space or to transmit them efficiently).
pack index::
The list of identifiers, and other information, of the objects in a
pack, to assist in efficiently accessing the contents of a pack.
core git::
Fundamental data structures and utilities of git. Exposes only
limited source code management tools.
plumbing::
Cute name for core git.
porcelain::
Cute name for programs and program suites depending on core git,
presenting a high level access to core git. Porcelains expose
more of a SCM interface than the plumbing.
object type:
One of the identifiers "commit","tree","tag" and "blob" describing
the type of an object.
SCM::
Source code management (tool).
dircache::
You are *waaaaay* behind.
working tree::
The set of files and directories currently being worked on,
i.e. you can work in your working tree without using git at all.

View File

@ -100,7 +100,7 @@ update
This hook is invoked by `git-receive-pack` on the remote repository,
which is happens when a `git push` is done on a local repository.
Just before updating the ref on the remote repository, the update hook
is invoked. It's exit status determins the success or failure of
is invoked. Its exit status determines the success or failure of
the ref update.
The hook executes once for each ref to be updated, and takes
@ -151,7 +151,7 @@ so it is a poor place to do log old..new.
The default post-update hook, when enabled, runs
`git-update-server-info` to keep the information used by dumb
transports (eg, http) up-to-date. If you are publishing
transports (e.g., http) up-to-date. If you are publishing
a git repository that is accessible via http, you should
probably enable this hook.

View File

@ -28,7 +28,7 @@ Then do
and at this point "git bisect" will churn for a while, and tell you what
the mid-point between those two commits are, and check that state out as
the head of the bew "bisect" branch.
the head of the new "bisect" branch.
Compile and reboot.

View File

@ -124,7 +124,7 @@ up your changes, along with other changes.
The two commits #2' and #3' in the above picture record the same
changes your e-mail submission for #2 and #3 contained, but
probably with the new sign-off line added by the upsteam
probably with the new sign-off line added by the upstream
maintainer and definitely with different committer and ancestry
information, they are different objects from #2 and #3 commits.

View File

@ -0,0 +1,256 @@
From: Rutger Nijlunsing <rutger@nospam.com>
Subject: Setting up a git repository which can be pushed into and pulled from over HTTP.
Date: Thu, 10 Aug 2006 22:00:26 +0200
Since Apache is one of those packages people like to compile
themselves while others prefer the bureaucrat's dream Debian, it is
impossible to give guidelines which will work for everyone. Just send
some feedback to the mailing list at git@vger.kernel.org to get this
document tailored to your favorite distro.
What's needed:
- Have an Apache web-server
On Debian:
$ apt-get install apache2
To get apache2 by default started,
edit /etc/default/apache2 and set NO_START=0
- can edit the configuration of it.
This could be found under /etc/httpd, or refer to your Apache documentation.
On Debian: this means being able to edit files under /etc/apache2
- can restart it.
'apachectl --graceful' might do. If it doesn't, just stop and
restart apache. Be warning that active connections to your server
might be aborted by this.
On Debian:
$ /etc/init.d/apache2 restart
or
$ /etc/init.d/apache2 force-reload
(which seems to do the same)
This adds symlinks from the /etc/apache2/mods-enabled to
/etc/apache2/mods-available.
- have permissions to chown a directory
- have git installed at the server _and_ client
In effect, this probably means you're going to be root.
Step 1: setup a bare GIT repository
-----------------------------------
At the time of writing, git-http-push cannot remotely create a GIT
repository. So we have to do that at the server side with git. Another
option would be to generate an empty repository at the client and copy
it to the server with WebDAV. But then you're probably the first to
try that out :)
Create the directory under the DocumentRoot of the directories served
by Apache. As an example we take /usr/local/apache2, but try "grep
DocumentRoot /where/ever/httpd.conf" to find your root:
$ cd /usr/local/apache/htdocs
$ mkdir my-new-repo.git
On Debian:
$ cd /var/www
$ mkdir my-new-repo.git
Initialize a bare repository
$ cd my-new-repo.git
$ git --bare init-db
Change the ownership to your web-server's credentials. Use "grep ^User
httpd.conf" and "grep ^Group httpd.conf" to find out:
$ chown -R www.www .
On Debian:
$ chown -R www-data.www-data .
If you do not know which user Apache runs as, you can alternatively do
a "chmod -R a+w .", inspect the files which are created later on, and
set the permissions appropriately.
Restart apache2, and check whether http://server/my-new-repo.git gives
a directory listing. If not, check whether apache started up
successfully.
Step 2: enable DAV on this repository
-------------------------------------
First make sure the dav_module is loaded. For this, insert in httpd.conf:
LoadModule dav_module libexec/httpd/libdav.so
AddModule mod_dav.c
Also make sure that this line exists which is the file used for
locking DAV operations:
DAVLockDB "/usr/local/apache2/temp/DAV.lock"
On Debian these steps can be performed with:
Enable the dav and dav_fs modules of apache:
$ a2enmod dav_fs
(just to be sure. dav_fs might be unneeded, I don't know)
$ a2enmod dav
The DAV lock is located in /etc/apache2/mods-available/dav_fs.conf:
DAVLockDB /var/lock/apache2/DAVLock
Of course, it can point somewhere else, but the string is actually just a
prefix in some Apache configurations, and therefore the _directory_ has to
be writable by the user Apache runs as.
Then, add something like this to your httpd.conf
<Location /my-new-repo.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /usr/local/apache2/conf/passwd.git
Require valid-user
</Location>
On Debian:
Create (or add to) /etc/apache2/conf.d/git.conf :
<Location /my-new-repo.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /etc/apache2/passwd.git
Require valid-user
</Location>
Debian automatically reads all files under /etc/apach2/conf.d.
The password file can be somewhere else, but it has to be readable by
Apache and preferably not readable by the world.
Create this file by
$ htpasswd -c /usr/local/apache2/conf/passwd.git <user>
On Debian:
$ htpasswd -c /etc/apache2/passwd.git <user>
You will be asked a password, and the file is created. Subsequent calls
to htpasswd should omit the '-c' option, since you want to append to the
existing file.
You need to restart Apache.
Now go to http://<username>@<servername>/my-new-repo.git in your
browser to check whether it asks for a password and accepts the right
password.
On Debian:
To test the WebDAV part, do:
$ apt-get install litmus
$ litmus http://<servername>/my-new-repo.git <username> <password>
Most tests should pass.
A command line tool to test WebDAV is cadaver.
If you're into Windows, from XP onwards Internet Explorer supports
WebDAV. For this, do Internet Explorer -> Open Location ->
http://<servername>/my-new-repo.git [x] Open as webfolder -> login .
Step 3: setup the client
------------------------
Make sure that you have HTTP support, i.e. your git was built with curl.
The easiest way to check is to look for the executable 'git-http-push'.
Then, add the following to your $HOME/.netrc (you can do without, but will be
asked to input your password a _lot_ of times):
machine <servername>
login <username>
password <password>
...and set permissions:
chmod 600 ~/.netrc
If you want to access the web-server by its IP, you have to type that in,
instead of the server name.
To check whether all is OK, do:
curl --netrc --location -v http://<username>@<servername>/my-new-repo.git/
...this should give a directory listing in HTML of /var/www/my-new-repo.git .
Now, add the remote in your existing repository which contains the project
you want to export:
$ git-repo-config remote.upload.url \
http://<username>@<servername>/my-new-repo.git/
It is important to put the last '/'; Without it, the server will send
a redirect which git-http-push does not (yet) understand, and git-http-push
will repeat the request infinitely.
Step 4: make the initial push
-----------------------------
From your client repository, do
$ git push upload master
This pushes branch 'master' (which is assumed to be the branch you
want to export) to repository called 'upload', which we previously
defined with git-repo-config.
Troubleshooting:
----------------
If git-http-push says
Error: no DAV locking support on remote repo http://...
then it means the web-server did not accept your authentication. Make sure
that the user name and password matches in httpd.conf, .netrc and the URL
you are uploading to.
If git-http-push shows you an error (22/502) when trying to MOVE a blob,
it means that your web-server somehow does not recognize its name in the
request; This can happen when you start Apache, but then disable the
network interface. A simple restart of Apache helps.
Errors like (22/502) are of format (curl error code/http error
code). So (22/404) means something like 'not found' at the server.
Reading /usr/local/apache2/logs/error_log is often helpful.
On Debian: Read /var/log/apache2/error.log instead.
Debian References: http://www.debian-administration.org/articles/285
Authors
Johannes Schindelin <Johannes.Schindelin@gmx.de>
Rutger Nijlunsing <git@wingding.demon.nl>

View File

@ -4,12 +4,16 @@ T="$1"
for h in *.html *.txt howto/*.txt howto/*.html
do
diff -u -I'Last updated [0-9][0-9]-[A-Z][a-z][a-z]-' "$T/$h" "$h" || {
if test -f "$T/$h" &&
diff -u -I'Last updated [0-9][0-9]-[A-Z][a-z][a-z]-' "$T/$h" "$h"
then
:; # up to date
else
echo >&2 "# install $h $T/$h"
rm -f "$T/$h"
mkdir -p `dirname "$T/$h"`
cp "$h" "$T/$h"
}
fi
done
strip_leading=`echo "$T/" | sed -e 's|.|.|g'`
for th in "$T"/*.html "$T"/*.txt "$T"/howto/*.txt "$T"/howto/*.html

View File

@ -6,6 +6,14 @@
not autocommit, to give the user a chance to inspect and
further tweak the merge result before committing.
--squash::
Produce the working tree and index state as if a real
merge happened, but do not actually make a commit or
move the `HEAD`, nor record `$GIT_DIR/MERGE_HEAD` to
cause the next `git commit` command to create a merge
commit. This allows you to create a single commit on
top of the current branch whose effect is the same as
merging another branch (or more in case of an octopus).
-s <strategy>, \--strategy=<strategy>::
Use the given merge strategy; can be supplied more than

View File

@ -120,11 +120,24 @@ info/grafts::
info/exclude::
This file, by convention among Porcelains, stores the
exclude pattern list. `git status` looks at it, but
otherwise it is not looked at by any of the core git
commands.
exclude pattern list. `.gitignore` is the per-directory
ignore file. `git status`, `git add`, `git rm` and `git
clean` look at it but the core git commands do not look
at it. See also: gitlink:git-ls-files[1] `--exclude-from`
and `--exclude-per-directory`.
remotes::
Stores shorthands to be used to give URL and default
refnames to interact with remote repository to `git
fetch`, `git pull` and `git push` commands.
logs::
Records of changes made to refs are stored in this
directory. See the documentation on git-update-ref
for more information.
logs/refs/heads/`name`::
Records all changes made to the branch tip named `name`.
logs/refs/tags/`name`::
Records all changes made to the tag named `name`.

View File

@ -48,7 +48,7 @@ This list is sorted alphabetically:
';
@keys=sort {uc($a) cmp uc($b)} keys %terms;
$pattern='(\b'.join('\b|\b',reverse @keys).'\b)';
$pattern='(\b(?<!link:git-)'.join('\b|\b(?<!link:git-)',reverse @keys).'\b)';
foreach $key (@keys) {
$terms{$key}=~s/$pattern/sprintf "<<ref_".no_spaces($1).",$1>>";/eg;
print '[[ref_'.no_spaces($key).']]'.$key."::\n"

View File

@ -5,8 +5,13 @@ GIT pack format
- The header appears at the beginning and consists of the following:
4-byte signature
4-byte version number (network byte order)
4-byte signature:
The signature is: {'P', 'A', 'C', 'K'}
4-byte version number (network byte order):
GIT currently accepts version number 2 or 3 but
generates version 2 only.
4-byte number of objects contained in the pack (network byte order)
Observation: we cannot have more than 4G versions ;-) and
@ -41,7 +46,7 @@ GIT pack format
8-byte integers to go beyond 4G objects per pack, but it is
not strictly necessary.
- The header is followed by sorted 28-byte entries, one entry
- The header is followed by sorted 24-byte entries, one entry
per object in the pack. Each entry is:
4-byte network byte order integer, recording where the

View File

@ -73,7 +73,7 @@ The traditional insight:
<pasky> yes
And Bable-like confusion flowed.
And Babel-like confusion flowed.
<njs`> oh, hmm, and I'm not sure what this sliding window means either
@ -257,7 +257,7 @@ proclaim it a non-issue. Good style too!
(type, basename, size)).
Then we walk through this list, and calculate a delta of
each object against the last n (tunable paramater) objects,
each object against the last n (tunable parameter) objects,
and pick the smallest of these deltas.
Vastly simplified, but the essence is there!
@ -288,7 +288,7 @@ And of course there is the "Other Shoe" Factor too.
- we actively try to generate deltas from a larger object to a
smaller one
- this means that the top-of-tree very seldom has deltas
(ie deltas in _practice_ are "backwards deltas")
(i.e. deltas in _practice_ are "backwards deltas")
Again, we should reread that whole paragraph. Not just because
Linus has slipped Linus's Law in there on us, but because it is
@ -395,7 +395,7 @@ used as setup for a later optimization, which is a real word:
do "object name->location in packfile" translation.
<njs`> I'm assuming the real win for delta-ing large->small is
more homogenous statistics for gzip to run over?
more homogeneous statistics for gzip to run over?
(You have to put the bytes in one place or another, but
putting them in a larger blob wins on compression)
@ -448,7 +448,7 @@ design options, etc.
Bugs happen, but they are "simple" bugs. And bugs that
actually get some object store detail wrong are almost always
so obious that they never go anywhere.
so obvious that they never go anywhere.
<njs`> Yeah.

View File

@ -0,0 +1,392 @@
A tutorial introduction to git: part two
========================================
You should work through link:tutorial.html[A tutorial introduction to
git] before reading this tutorial.
The goal of this tutorial is to introduce two fundamental pieces of
git's architecture--the object database and the index file--and to
provide the reader with everything necessary to understand the rest
of the git documentation.
The git object database
-----------------------
Let's start a new project and create a small amount of history:
------------------------------------------------
$ mkdir test-project
$ cd test-project
$ git init-db
defaulting to local storage area
$ echo 'hello world' > file.txt
$ git add .
$ git commit -a -m "initial commit"
Committing initial tree 92b8b694ffb1675e5975148e1121810081dbdffe
$ echo 'hello world!' >file.txt
$ git commit -a -m "add emphasis"
------------------------------------------------
What are the 40 digits of hex that git responded to the first commit
with?
We saw in part one of the tutorial that commits have names like this.
It turns out that every object in the git history is stored under
such a 40-digit hex name. That name is the SHA1 hash of the object's
contents; among other things, this ensures that git will never store
the same data twice (since identical data is given an identical SHA1
name), and that the contents of a git object will never change (since
that would change the object's name as well).
We can ask git about this particular object with the cat-file
command--just cut-and-paste from the reply to the initial commit, to
save yourself typing all 40 hex digits:
------------------------------------------------
$ git cat-file -t 92b8b694ffb1675e5975148e1121810081dbdffe
tree
------------------------------------------------
A tree can refer to one or more "blob" objects, each corresponding to
a file. In addition, a tree can also refer to other tree objects,
thus creating a directory hierarchy. You can examine the contents of
any tree using ls-tree (remember that a long enough initial portion
of the SHA1 will also work):
------------------------------------------------
$ git ls-tree 92b8b694
100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad file.txt
------------------------------------------------
Thus we see that this tree has one file in it. The SHA1 hash is a
reference to that file's data:
------------------------------------------------
$ git cat-file -t 3b18e512
blob
------------------------------------------------
A "blob" is just file data, which we can also examine with cat-file:
------------------------------------------------
$ git cat-file blob 3b18e512
hello world
------------------------------------------------
Note that this is the old file data; so the object that git named in
its response to the initial tree was a tree with a snapshot of the
directory state that was recorded by the first commit.
All of these objects are stored under their SHA1 names inside the git
directory:
------------------------------------------------
$ find .git/objects/
.git/objects/
.git/objects/pack
.git/objects/info
.git/objects/3b
.git/objects/3b/18e512dba79e4c8300dd08aeb37f8e728b8dad
.git/objects/92
.git/objects/92/b8b694ffb1675e5975148e1121810081dbdffe
.git/objects/54
.git/objects/54/196cc2703dc165cbd373a65a4dcf22d50ae7f7
.git/objects/a0
.git/objects/a0/423896973644771497bdc03eb99d5281615b51
.git/objects/d0
.git/objects/d0/492b368b66bdabf2ac1fd8c92b39d3db916e59
.git/objects/c4
.git/objects/c4/d59f390b9cfd4318117afde11d601c1085f241
------------------------------------------------
and the contents of these files is just the compressed data plus a
header identifying their length and their type. The type is either a
blob, a tree, a commit, or a tag. We've seen a blob and a tree now,
so next we should look at a commit.
The simplest commit to find is the HEAD commit, which we can find
from .git/HEAD:
------------------------------------------------
$ cat .git/HEAD
ref: refs/heads/master
------------------------------------------------
As you can see, this tells us which branch we're currently on, and it
tells us this by naming a file under the .git directory, which itself
contains a SHA1 name referring to a commit object, which we can
examine with cat-file:
------------------------------------------------
$ cat .git/refs/heads/master
c4d59f390b9cfd4318117afde11d601c1085f241
$ git cat-file -t c4d59f39
commit
$ git cat-file commit c4d59f39
tree d0492b368b66bdabf2ac1fd8c92b39d3db916e59
parent 54196cc2703dc165cbd373a65a4dcf22d50ae7f7
author J. Bruce Fields <bfields@puzzle.fieldses.org> 1143418702 -0500
committer J. Bruce Fields <bfields@puzzle.fieldses.org> 1143418702 -0500
add emphasis
------------------------------------------------
The "tree" object here refers to the new state of the tree:
------------------------------------------------
$ git ls-tree d0492b36
100644 blob a0423896973644771497bdc03eb99d5281615b51 file.txt
$ git cat-file blob a0423896
hello world!
------------------------------------------------
and the "parent" object refers to the previous commit:
------------------------------------------------
$ git-cat-file commit 54196cc2
tree 92b8b694ffb1675e5975148e1121810081dbdffe
author J. Bruce Fields <bfields@puzzle.fieldses.org> 1143414668 -0500
committer J. Bruce Fields <bfields@puzzle.fieldses.org> 1143414668 -0500
initial commit
------------------------------------------------
The tree object is the tree we examined first, and this commit is
unusual in that it lacks any parent.
Most commits have only one parent, but it is also common for a commit
to have multiple parents. In that case the commit represents a
merge, with the parent references pointing to the heads of the merged
branches.
Besides blobs, trees, and commits, the only remaining type of object
is a "tag", which we won't discuss here; refer to gitlink:git-tag[1]
for details.
So now we know how git uses the object database to represent a
project's history:
* "commit" objects refer to "tree" objects representing the
snapshot of a directory tree at a particular point in the
history, and refer to "parent" commits to show how they're
connected into the project history.
* "tree" objects represent the state of a single directory,
associating directory names to "blob" objects containing file
data and "tree" objects containing subdirectory information.
* "blob" objects contain file data without any other structure.
* References to commit objects at the head of each branch are
stored in files under .git/refs/heads/.
* The name of the current branch is stored in .git/HEAD.
Note, by the way, that lots of commands take a tree as an argument.
But as we can see above, a tree can be referred to in many different
ways--by the SHA1 name for that tree, by the name of a commit that
refers to the tree, by the name of a branch whose head refers to that
tree, etc.--and most such commands can accept any of these names.
In command synopses, the word "tree-ish" is sometimes used to
designate such an argument.
The index file
--------------
The primary tool we've been using to create commits is "git commit
-a", which creates a commit including every change you've made to
your working tree. But what if you want to commit changes only to
certain files? Or only certain changes to certain files?
If we look at the way commits are created under the cover, we'll see
that there are more flexible ways creating commits.
Continuing with our test-project, let's modify file.txt again:
------------------------------------------------
$ echo "hello world, again" >>file.txt
------------------------------------------------
but this time instead of immediately making the commit, let's take an
intermediate step, and ask for diffs along the way to keep track of
what's happening:
------------------------------------------------
$ git diff
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@
hello world!
+hello world, again
$ git update-index file.txt
$ git diff
------------------------------------------------
The last diff is empty, but no new commits have been made, and the
head still doesn't contain the new line:
------------------------------------------------
$ git-diff HEAD
diff --git a/file.txt b/file.txt
index a042389..513feba 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@
hello world!
+hello world, again
------------------------------------------------
So "git diff" is comparing against something other than the head.
The thing that it's comparing against is actually the index file,
which is stored in .git/index in a binary format, but whose contents
we can examine with ls-files:
------------------------------------------------
$ git ls-files --stage
100644 513feba2e53ebbd2532419ded848ba19de88ba00 0 file.txt
$ git cat-file -t 513feba2
blob
$ git cat-file blob 513feba2
hello world!
hello world, again
------------------------------------------------
So what our "git update-index" did was store a new blob and then put
a reference to it in the index file. If we modify the file again,
we'll see that the new modifications are reflected in the "git-diff"
output:
------------------------------------------------
$ echo 'again?' >>file.txt
$ git diff
index 513feba..ba3da7b 100644
--- a/file.txt
+++ b/file.txt
@@ -1,2 +1,3 @@
hello world!
hello world, again
+again?
------------------------------------------------
With the right arguments, git diff can also show us the difference
between the working directory and the last commit, or between the
index and the last commit:
------------------------------------------------
$ git diff HEAD
diff --git a/file.txt b/file.txt
index a042389..ba3da7b 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,3 @@
hello world!
+hello world, again
+again?
$ git diff --cached
diff --git a/file.txt b/file.txt
index a042389..513feba 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@
hello world!
+hello world, again
------------------------------------------------
At any time, we can create a new commit using "git commit" (without
the -a option), and verify that the state committed only includes the
changes stored in the index file, not the additional change that is
still only in our working tree:
------------------------------------------------
$ git commit -m "repeat"
$ git diff HEAD
diff --git a/file.txt b/file.txt
index 513feba..ba3da7b 100644
--- a/file.txt
+++ b/file.txt
@@ -1,2 +1,3 @@
hello world!
hello world, again
+again?
------------------------------------------------
So by default "git commit" uses the index to create the commit, not
the working tree; the -a option to commit tells it to first update
the index with all changes in the working tree.
Finally, it's worth looking at the effect of "git add" on the index
file:
------------------------------------------------
$ echo "goodbye, world" >closing.txt
$ git add closing.txt
------------------------------------------------
The effect of the "git add" was to add one entry to the index file:
------------------------------------------------
$ git ls-files --stage
100644 8b9743b20d4b15be3955fc8d5cd2b09cd2336138 0 closing.txt
100644 513feba2e53ebbd2532419ded848ba19de88ba00 0 file.txt
------------------------------------------------
And, as you can see with cat-file, this new entry refers to the
current contents of the file:
------------------------------------------------
$ git cat-file blob a6b11f7a
goodbye, word
------------------------------------------------
The "status" command is a useful way to get a quick summary of the
situation:
------------------------------------------------
$ git status
#
# Updated but not checked in:
# (will commit)
#
# new file: closing.txt
#
#
# Changed but not updated:
# (use git-update-index to mark for commit)
#
# modified: file.txt
#
------------------------------------------------
Since the current state of closing.txt is cached in the index file,
it is listed as "updated but not checked in". Since file.txt has
changes in the working directory that aren't reflected in the index,
it is marked "changed but not updated". At this point, running "git
commit" would create a commit that added closing.txt (with its new
contents), but that didn't modify file.txt.
Also, note that a bare "git diff" shows the changes to file.txt, but
not the addition of closing.txt, because the version of closing.txt
in the index file is identical to the one in the working directory.
In addition to being the staging area for new commits, the index file
is also populated from the object database when checking out a
branch, and is used to hold the trees involved in a merge operation.
See the link:core-tutorial.txt[core tutorial] and the relevant man
pages for details.
What next?
----------
At this point you should know everything necessary to read the man
pages for any of the git commands; one good place to start would be
with the commands mentioned in link:everyday.html[Everyday git]. You
should be able to find any unknown jargon in the
link:glossary.html[Glossary].
The link:cvs-migration.html[CVS migration] document explains how to
import a CVS repository into git, and shows how to use git in a
CVS-like way.
For some interesting examples of git use, see the
link:howto-index.html[howtos].
For git developers, the link:core-tutorial.html[Core tutorial] goes
into detail on the lower-level git mechanisms involved in, for
example, creating a new commit.

View File

@ -80,13 +80,13 @@ file; just remove it, then commit.
At any point you can view the history of your changes using
------------------------------------------------
$ git whatchanged
$ git log
------------------------------------------------
If you also want to see complete diffs at each step, use
------------------------------------------------
$ git whatchanged -p
$ git log -p
------------------------------------------------
Managing branches
@ -194,7 +194,7 @@ $ git clone /home/alice/project myrepo
This creates a new directory "myrepo" containing a clone of Alice's
repository. The clone is on an equal footing with the original
project, posessing its own copy of the original project's history.
project, possessing its own copy of the original project's history.
Bob then makes some changes and commits them:
@ -216,7 +216,7 @@ This actually pulls changes from the branch in Bob's repository named
"master". Alice could request a different branch by adding the name
of the branch to the end of the git pull command line.
This merges Bob's changes into her repository; "git whatchanged" will
This merges Bob's changes into her repository; "git log" will
now show the new commits. If Alice has made her own changes in the
meantime, then Bob's changes will be merged in, and she will need to
manually fix any conflicts.
@ -234,13 +234,13 @@ named bob-incoming. (Unlike git pull, git fetch just fetches a copy
of Bob's line of development without doing any merging). Then
-------------------------------------
$ git whatchanged -p master..bob-incoming
$ git log -p master..bob-incoming
-------------------------------------
shows a list of all the changes that Bob made since he branched from
Alice's master branch.
After examing those changes, and possibly fixing things, Alice can
After examining those changes, and possibly fixing things, Alice can
pull the changes into her master branch:
-------------------------------------
@ -288,102 +288,187 @@ Git can also be used in a CVS-like mode, with a central repository
that various users push changes to; see gitlink:git-push[1] and
link:cvs-migration.html[git for CVS users].
Keeping track of history
------------------------
Exploring history
-----------------
Git history is represented as a series of interrelated commits. The
most recent commit in the currently checked-out branch can always be
referred to as HEAD, and the "parent" of any commit can always be
referred to by appending a caret, "^", to the end of the name of the
commit. So, for example,
Git history is represented as a series of interrelated commits. We
have already seen that the git log command can list those commits.
Note that first line of each git log entry also gives a name for the
commit:
-------------------------------------
git diff HEAD^ HEAD
$ git log
commit c82a22c39cbc32576f64f5c6b3f24b99ea8149c7
Author: Junio C Hamano <junkio@cox.net>
Date: Tue May 16 17:18:22 2006 -0700
merge-base: Clarify the comments on post processing.
-------------------------------------
shows the difference between the most-recently checked-in state of
the tree and the previous state, and
We can give this name to git show to see the details about this
commit.
-------------------------------------
git diff HEAD^^ HEAD^
$ git show c82a22c39cbc32576f64f5c6b3f24b99ea8149c7
-------------------------------------
shows the difference between that previous state and the state two
commits ago. Also, HEAD~5 can be used as a shorthand for HEAD{caret}{caret}{caret}{caret}{caret},
and more generally HEAD~n can refer to the nth previous commit.
Commits representing merges have more than one parent, and you can
specify which parent to follow in that case; see
gitlink:git-rev-parse[1].
The name of a branch can also be used to refer to the most recent
commit on that branch; so you can also say things like
But there other ways to refer to commits. You can use any initial
part of the name that is long enough to uniquely identify the commit:
-------------------------------------
git diff HEAD experimental
$ git show c82a22c39c # the first few characters of the name are
# usually enough
$ git show HEAD # the tip of the current branch
$ git show experimental # the tip of the "experimental" branch
-------------------------------------
to see the difference between the most-recently committed tree in
the current branch and the most-recently committed tree in the
experimental branch.
But you may find it more useful to see the list of commits made in
the experimental branch but not in the current branch, and
Every commit has at least one "parent" commit, which points to the
previous state of the project:
-------------------------------------
git whatchanged HEAD..experimental
$ git show HEAD^ # to see the parent of HEAD
$ git show HEAD^^ # to see the grandparent of HEAD
$ git show HEAD~4 # to see the great-great grandparent of HEAD
-------------------------------------
will do that, just as
Note that merge commits may have more than one parent:
-------------------------------------
git whatchanged experimental..HEAD
$ git show HEAD^1 # show the first parent of HEAD (same as HEAD^)
$ git show HEAD^2 # show the second parent of HEAD
-------------------------------------
will show the list of commits made on the HEAD but not included in
experimental.
You can also give commits convenient names of your own: after running
You can also give commits names of your own; after running
-------------------------------------
$ git-tag v2.5 HEAD^^
$ git-tag v2.5 1b2e1d63ff
-------------------------------------
you can refer to HEAD^^ by the name "v2.5". If you intend to share
this name with other people (for example, to identify a release
you can refer to 1b2e1d63ff by the name "v2.5". If you intend to
share this name with other people (for example, to identify a release
version), you should create a "tag" object, and perhaps sign it; see
gitlink:git-tag[1] for details.
You can revisit the old state of a tree, and make further
modifications if you wish, using git branch: the command
Any git command that needs to know a commit can take any of these
names. For example:
-------------------------------------
$ git branch stable-release v2.5
$ git diff v2.5 HEAD # compare the current HEAD to v2.5
$ git branch stable v2.5 # start a new branch named "stable" based
# at v2.5
$ git reset --hard HEAD^ # reset your current branch and working
# directory to its state at HEAD^
-------------------------------------
will create a new branch named "stable-release" starting from the
commit which you tagged with the name v2.5.
You can reset the state of any branch to an earlier commit at any
time with
-------------------------------------
$ git reset --hard v2.5
-------------------------------------
This will remove all later commits from this branch and reset the
working tree to the state it had when the given commit was made. If
this branch is the only branch containing the later commits, those
later changes will be lost. Don't use "git reset" on a
Be careful with that last command: in addition to losing any changes
in the working directory, it will also remove all later commits from
this branch. If this branch is the only branch containing those
commits, they will be lost. (Also, don't use "git reset" on a
publicly-visible branch that other developers pull from, as git will
be confused by history that disappears in this way.
be confused by history that disappears in this way.)
The git grep command can search for strings in any version of your
project, so
-------------------------------------
$ git grep "hello" v2.5
-------------------------------------
searches for all occurrences of "hello" in v2.5.
If you leave out the commit name, git grep will search any of the
files it manages in your current directory. So
-------------------------------------
$ git grep "hello"
-------------------------------------
is a quick way to search just the files that are tracked by git.
Many git commands also take sets of commits, which can be specified
in a number of ways. Here are some examples with git log:
-------------------------------------
$ git log v2.5..v2.6 # commits between v2.5 and v2.6
$ git log v2.5.. # commits since v2.5
$ git log --since="2 weeks ago" # commits from the last 2 weeks
$ git log v2.5.. Makefile # commits since v2.5 which modify
# Makefile
-------------------------------------
You can also give git log a "range" of commits where the first is not
necessarily an ancestor of the second; for example, if the tips of
the branches "stable-release" and "master" diverged from a common
commit some time ago, then
-------------------------------------
$ git log stable..experimental
-------------------------------------
will list commits made in the experimental branch but not in the
stable branch, while
-------------------------------------
$ git log experimental..stable
-------------------------------------
will show the list of commits made on the stable branch but not
the experimental branch.
The "git log" command has a weakness: it must present commits in a
list. When the history has lines of development that diverged and
then merged back together, the order in which "git log" presents
those commits is meaningless.
Most projects with multiple contributors (such as the linux kernel,
or git itself) have frequent merges, and gitk does a better job of
visualizing their history. For example,
-------------------------------------
$ gitk --since="2 weeks ago" drivers/
-------------------------------------
allows you to browse any commits from the last 2 weeks of commits
that modified files under the "drivers" directory. (Note: you can
adjust gitk's fonts by holding down the control key while pressing
"-" or "+".)
Finally, most commands that take filenames will optionally allow you
to precede any filename by a commit, to specify a particular version
of the file:
-------------------------------------
$ git diff v2.5:Makefile HEAD:Makefile.in
-------------------------------------
You can also use "git cat-file -p" to see any such file:
-------------------------------------
$ git cat-file -p v2.5:Makefile
-------------------------------------
Next Steps
----------
Some good commands to explore next:
This tutorial should be enough to perform basic distributed revision
control for your projects. However, to fully understand the depth
and power of git you need to understand two simple ideas on which it
is based:
* gitlink:git-diff[1]: This flexible command does much more than
we've seen in the few examples above.
* The object database is the rather elegant system used to
store the history of your project--files, directories, and
commits.
* The index file is a cache of the state of a directory tree,
used to create commits, check out working directories, and
hold the various trees involved in a merge.
link:tutorial-2.html[Part two of this tutorial] explains the object
database, the index file, and a few other odds and ends that you'll
need to make the most of git.
If you don't want to consider with that right away, a few other
digressions that may be interesting at this point are:
* gitlink:git-format-patch[1], gitlink:git-am[1]: These convert
series of git commits into emailed patches, and vice versa,
@ -397,8 +482,6 @@ Some good commands to explore next:
smart enough to perform a close-to-optimal search even in the
case of complex non-linear history with lots of merged branches.
Other good starting points include link:everyday.html[Everday GIT
with 20 Commands Or So] and link:cvs-migration.html[git for CVS
users]. Also, link:core-tutorial.html[A short git tutorial] gives an
introduction to lower-level git commands for advanced users and
developers.
* link:everyday.html[Everyday GIT with 20 Commands Or So]
* link:cvs-migration.html[git for CVS users].

View File

@ -10,20 +10,21 @@ to name the remote repository:
- https://host.xz/path/to/repo.git/
- git://host.xz/path/to/repo.git/
- git://host.xz/~user/path/to/repo.git/
- ssh://host.xz/path/to/repo.git/
- ssh://host.xz/~user/path/to/repo.git/
- ssh://host.xz/~/path/to/repo.git
- ssh://{startsb}user@{endsb}host.xz/path/to/repo.git/
- ssh://{startsb}user@{endsb}host.xz/~user/path/to/repo.git/
- ssh://{startsb}user@{endsb}host.xz/~/path/to/repo.git
===============================================================
SSH Is the default transport protocol and also supports an
scp-like syntax. Both syntaxes support username expansion,
SSH is the default transport protocol. You can optionally specify
which user to log-in as, and an alternate, scp-like syntax is also
supported. Both syntaxes support username expansion,
as does the native git protocol. The following three are
identical to the last three above, respectively:
===============================================================
- host.xz:/path/to/repo.git/
- host.xz:~user/path/to/repo.git/
- host.xz:path/to/repo.git
- {startsb}user@{endsb}host.xz:/path/to/repo.git/
- {startsb}user@{endsb}host.xz:~user/path/to/repo.git/
- {startsb}user@{endsb}host.xz:path/to/repo.git
===============================================================
To sync with a local directory, use:
@ -47,7 +48,7 @@ Then such a short-hand is specified in place of
<repository> without <refspec> parameters on the command
line, <refspec> specified on `Push:` lines or `Pull:`
lines are used for `git-push` and `git-fetch`/`git-pull`,
respectively. Multiple `Push:` and and `Pull:` lines may
respectively. Multiple `Push:` and `Pull:` lines may
be specified for additional branch mappings.
The name of a file in `$GIT_DIR/branches` directory can be

View File

@ -1,11 +1,19 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
DEF_VER=v1.3.GIT
DEF_VER=v1.4.2.GIT
LF='
'
# First try git-describe, then see if there is a version file
# (included in release tarballs), then default
if VN=$(git-describe --abbrev=4 HEAD 2>/dev/null); then
if VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
case "$VN" in
*$LF*) (exit 1) ;;
v[0-9]*) : happy ;;
esac
then
VN=$(echo "$VN" | sed -e 's/-/./g');
elif test -f version
then
@ -16,7 +24,7 @@ fi
VN=$(expr "$VN" : v*'\(.*\)')
dirty=$(sh -c 'git-diff-index --name-only HEAD' 2>/dev/null) || dirty=
dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty=
case "$dirty" in
'')
;;

15
INSTALL
View File

@ -13,6 +13,15 @@ that uses $prefix, the built results have some paths encoded,
which are derived from $prefix, so "make all; make prefix=/usr
install" would not work.
Alternatively you can use autoconf generated ./configure script to
set up install paths (via config.mak.autogen), so you can write instead
$ autoconf ;# as yourself if ./configure doesn't exist yet
$ ./configure --prefix=/usr ;# as yourself
$ make all doc ;# as yourself
# make install install-doc ;# as root
Issues of note:
- git normally installs a helper script wrapper called "git", which
@ -44,7 +53,7 @@ Issues of note:
- "libcurl" and "curl" executable. git-http-fetch and
git-fetch use them. If you do not use http
transfer, you are probabaly OK if you do not have
transfer, you are probably OK if you do not have
them.
- expat library; git-http-push uses it for remote lock
@ -69,7 +78,7 @@ Issues of note:
git, and if you only use git to track other peoples work you'll
never notice the lack of it.
- "wish", the TCL/Tk windowing shell is used in gitk to show the
- "wish", the Tcl/Tk windowing shell is used in gitk to show the
history graphically
- "ssh" is used to push and pull over the net
@ -96,7 +105,7 @@ Issues of note:
$ mkdir manual && cd manual
$ git init-db
$ git clone-pack git://git.kernel.org/pub/scm/git/git.git man html |
$ git fetch-pack git://git.kernel.org/pub/scm/git/git.git man html |
while read a b
do
echo $a >.git/$b

Some files were not shown because too many files have changed in this diff Show More