GIT 0.99.9b

This contains the changes made on the master branch since 0.99.9a.

The workaround for building RPMs has not changed since 0.99.9a,
mainly because I haven't heard back if it was good enough for
kernel.org consumption, or otherwise what changes are needed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 704dc51..e4df4a4 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -82,8 +82,6 @@
 --------------
 Documentation by Petr Baudis, 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
diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
index f5248c9..4b62256 100644
--- a/Documentation/git-cvsimport.txt
+++ b/Documentation/git-cvsimport.txt
@@ -10,7 +10,7 @@
 --------
 'git-cvsimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ]
 			[ -d <CVSROOT> ] [ -p <options-for-cvsps> ]
-			[ -C <git_repository> ] [ -i ] [ -k ]
+			[ -C <git_repository> ] [ -i ] [ -P <file> ] [ -k ]
 			[ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ]
 
 
@@ -60,6 +60,10 @@
 +
 If you need to pass multiple options, separate them with a comma.
 
+-P:: <cvsps-output-file>
+	Instead of calling cvsps, read the provided cvsps output file. Useful
+	for debugging or when cvsps is being handled outside cvsimport.
+
 -m::    
 	Attempt to detect merges based on the commit message. This option
 	will enable default regexes that try to capture the name source 
diff --git a/Documentation/git-fmt-merge-msg.txt b/Documentation/git-fmt-merge-msg.txt
new file mode 100644
index 0000000..a70eb39
--- /dev/null
+++ b/Documentation/git-fmt-merge-msg.txt
@@ -0,0 +1,39 @@
+git-fmt-merge-msg(1)
+====================
+
+NAME
+----
+git-fmt-merge-msg - Produce a merge commit message
+
+
+SYNOPSIS
+--------
+'git-fmt-merge-msg' <$GIT_DIR/FETCH_HEAD
+
+DESCRIPTION
+-----------
+Takes the list of merged objects on stdin and produces a suitable
+commit message to be used for the merge commit, usually to be
+passed as the '<merge-message>' argument of `git-merge`.
+
+This script is intended mostly for internal use by scripts
+automatically invoking `git-merge`.
+
+
+SEE ALSO
+--------
+gitlink:git-merge[1]
+
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+Documentation
+--------------
+Documentation by Petr Baudis, Junio C Hamano and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index a007a8b..8c9c4d8 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -28,6 +28,11 @@
 	there is no `-s` option, built-in list of strategies is
 	used instead.
 
+<msg>::
+	The commit message to be used for the merge commit (in case
+	it is created). The `git-fmt-merge-msg` script can be used
+	to give a good default for automated `git-merge` invocations.
+
 <head>::
 	our branch head commit.
 
@@ -37,6 +42,11 @@
 	obviously means you are trying an Octopus.
 
 
+SEE ALSO
+--------
+gitlink:git-fmt-merge-msg[1]
+
+
 Author
 ------
 Written by Junio C Hamano <junkio@cox.net>
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index bae05de..cef4c0a 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -19,6 +19,9 @@
 into the local HEAD.  Otherwise uses 'git octopus' to merge them
 into the local HEAD.
 
+Note that you can use '.' (current directory) as the
+<repository> to pull from the local repository -- this is useful
+when merging local branches into the current branch.
 
 OPTIONS
 -------
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 59d0dc8..2f9622f 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -60,7 +60,6 @@
 
 gitlink:git-checkout-index[1]::
 	Copy files from the cache to the working directory
-	Previously this command was known as git-checkout-cache.
 
 gitlink:git-commit-tree[1]::
 	Creates a new commit object
@@ -76,7 +75,6 @@
 
 gitlink:git-merge-index[1]::
 	Runs a merge for files needing merging
-	Previously this command was known as git-merge-cache.
 
 gitlink:git-mktag[1]::
 	Creates a tag object
@@ -95,7 +93,6 @@
 
 gitlink:git-update-index[1]::
 	Modifies the index or directory cache
-	Previously this command was known as git-update-cache.
 
 gitlink:git-write-tree[1]::
 	Creates a tree from the current cache
@@ -109,7 +106,6 @@
 
 gitlink:git-diff-index[1]::
 	Compares content and mode of blobs between the cache and repository
-	Previously this command was known as git-diff-cache.
 
 gitlink:git-diff-files[1]::
 	Compares files in the working tree and the cache
@@ -122,7 +118,6 @@
 
 gitlink:git-fsck-objects[1]::
 	Verifies the connectivity and validity of the objects in the database
-	Previously this command was known as git-fsck-cache.
 
 gitlink:git-ls-files[1]::
 	Information about files in the cache/working directory
@@ -170,11 +165,9 @@
 
 gitlink:git-http-fetch[1]::
 	Downloads a remote git repository via HTTP
-	Previously this command was known as git-http-pull.
 
 gitlink:git-local-fetch[1]::
 	Duplicates another git repository on a local system
-	Previously this command was known as git-local-pull.
 
 gitlink:git-peek-remote[1]::
 	Lists references on a remote repository using upload-pack protocol.
@@ -190,11 +183,9 @@
 
 gitlink:git-ssh-fetch[1]::
 	Pulls from a remote repository over ssh connection
-	Previously this command was known as git-ssh-pull.
 
 gitlink:git-ssh-upload[1]::
 	Helper "server-side" program used by git-ssh-fetch
-	Previously this command was known as git-ssh-push.
 
 gitlink:git-update-server-info[1]::
 	Updates auxiliary information on a dumb server to help
@@ -210,7 +201,6 @@
 
 gitlink:git-add[1]::
 	Add paths to the index file.
-	Previously this command was known as git-add-script.
 
 gitlink:git-am[1]::
 	Apply patches from a mailbox, but cooler.
@@ -220,50 +210,39 @@
 
 gitlink:git-bisect[1]::
 	Find the change that introduced a bug.
-	Previously this command was known as git-bisect-script.
 
 gitlink:git-branch[1]::
 	Create and Show branches.
-	Previously this command was known as git-branch-script.
 
 gitlink:git-checkout[1]::
 	Checkout and switch to a branch.
-	Previously this command was known as git-checkout-script.
 
 gitlink:git-cherry-pick[1]::
 	Cherry-pick the effect of an existing commit.
-	Previously this command was known as git-cherry-pick-script.
 
 gitlink:git-clone[1]::
 	Clones a repository into a new directory.
-	Previously this command was known as git-clone-script.
 
 gitlink:git-commit[1]::
 	Record changes to the repository.
-	Previously this command was known as git-commit-script.
 
 gitlink:git-diff[1]::
 	Show changes between commits, commit and working tree, etc.
-	Previously this command was known as git-diff-script.
 
 gitlink:git-fetch[1]::
 	Download from a remote repository via various protocols.
-	Previously this command was known as git-fetch-script.
 
 gitlink:git-format-patch[1]::
 	Prepare patches for e-mail submission.
-	Previously this command was known as git-format-patch-script.
 
 gitlink:git-grep[1]::
 	Print lines matching a pattern
 
 gitlink:git-log[1]::
 	Shows commit logs.
-	Previously this command was known as git-log-script.
 
 gitlink:git-ls-remote[1]::
 	Shows references in a remote or local repository.
-	Previously this command was known as git-ls-remote-script.
 
 gitlink:git-merge[1]::
 	Grand unified merge driver.
@@ -273,39 +252,30 @@
 
 gitlink:git-octopus[1]::
 	Merge more than two commits.
-	Previously this command was known as git-octopus-script.
 
 gitlink:git-pull[1]::
 	Fetch from and merge with a remote repository.
-	Previously this command was known as git-pull-script.
 
 gitlink:git-push[1]::
 	Update remote refs along with associated objects.
-	Previously this command was known as git-push-script.
 
 gitlink:git-rebase[1]::
 	Rebase local commits to new upstream head.
-	Previously this command was known as git-rebase-script.
 
 gitlink:git-rename[1]::
 	Rename files and directories.
-	Previously this command was known as git-rename-script.
 
 gitlink:git-repack[1]::
 	Pack unpacked objects in a repository.
-	Previously this command was known as git-repack-script.
 
 gitlink:git-reset[1]::
 	Reset current HEAD to the specified state.
-	Previously this command was known as git-reset-script.
 
 gitlink:git-resolve[1]::
 	Merge two commits.
-	Previously this command was known as git-resolve-script.
 
 gitlink:git-revert[1]::
 	Revert an existing commit.
-	Previously this command was known as git-revert-script.
 
 gitlink:git-shortlog[1]::
 	Summarizes 'git log' output.
@@ -315,11 +285,9 @@
 
 gitlink:git-status[1]::
 	Shows the working tree status.
-	Previously this command was known as git-status-script.
 
 gitlink:git-verify-tag[1]::
 	Check the GPG signature of tag.
-	Previously this command was known as git-verify-tag-script.
 
 gitlink:git-whatchanged[1]::
 	Shows commit logs and differences they introduce.
@@ -334,41 +302,33 @@
 
 gitlink:git-archimport[1]::
 	Import an arch repository into git.
-	Previously this command was known as git-archimport-script.
 
 gitlink:git-convert-objects[1]::
 	Converts old-style git repository
-	Previously this command was known as git-convert-cache.
 
 gitlink:git-cvsimport[1]::
 	Salvage your data out of another SCM people love to hate.
-	Previously this command was known as git-cvsimport-script.
 
 gitlink:git-merge-one-file[1]::
 	The standard helper program to use with "git-merge-index"
-	Previously this command was known as git-merge-one-file-script.
 
 gitlink:git-prune[1]::
 	Prunes all unreachable objects from the object database
-	Previously this command was known as git-prune-script.
 
 gitlink:git-relink[1]::
 	Hardlink common objects in local repositories.
-	Previously this command was known as git-relink-script.
 
 gitlink:git-svnimport[1]::
 	Import a SVN repository into git.
 
 gitlink:git-sh-setup[1]::
 	Common git shell script setup code.
-	Previously this command was known as git-sh-setup-script.
 
 gitlink:git-symbolic-ref[1]::
 	Read and modify symbolic refs
 
 gitlink:git-tag[1]::
 	An example script to create a tag object signed with GPG
-	Previously this command was known as git-tag-script.
 
 gitlink:git-update-ref[1]::
 	Update the object name stored in a ref safely.
@@ -384,7 +344,6 @@
 
 gitlink:git-count-objects[1]::
 	Count unpacked number of objects and their disk consumption.
-	Previously this command was known as git-count-objects-script.
 
 gitlink:git-daemon[1]::
 	A really simple server for git repositories.
@@ -403,18 +362,15 @@
 
 gitlink:git-parse-remote[1]::
 	Routines to help parsing $GIT_DIR/remotes/
-	Previously this command was known as git-parse-remote-script.
 
 gitlink:git-request-pull[1]::
 	git-request-pull.
-	Previously this command was known as git-request-pull-script.
 
 gitlink:git-rev-parse[1]::
 	Pick out and massage parameters.
 
 gitlink:git-send-email[1]::
 	Send patch e-mails out of "format-patch --mbox" output.
-	Previously this command was known as git-send-email-script.
 
 gitlink:git-symbolic-refs[1]::
 	Read and modify symbolic refs.
diff --git a/Documentation/tutorial.txt b/Documentation/tutorial.txt
index b9f737e..20a4cb1 100644
--- a/Documentation/tutorial.txt
+++ b/Documentation/tutorial.txt
@@ -1028,7 +1028,9 @@
 
 [NOTE]
 You could even pull from your own repository by
-giving '.' as <remote-repository> parameter to `git pull`.
+giving '.' as <remote-repository> parameter to `git pull`.  This
+is useful when you want to merge a local branch (or more, if you
+are making an Octopus) into the current branch.
 
 It is likely that you will be pulling from the same remote
 repository from time to time. As a short hand, you can store
diff --git a/Makefile b/Makefile
index 5bb5108..5606c83 100644
--- a/Makefile
+++ b/Makefile
@@ -52,7 +52,7 @@
 
 # DEFINES += -DUSE_STDEV
 
-GIT_VERSION = 0.99.9a
+GIT_VERSION = 0.99.9b
 
 CFLAGS = -g -O2 -Wall
 ALL_CFLAGS = $(CFLAGS) $(PLATFORM_DEFINES) $(DEFINES)
@@ -94,7 +94,7 @@
 SCRIPT_PERL = \
 	git-archimport.perl git-cvsimport.perl git-relink.perl \
 	git-rename.perl git-shortlog.perl git-fmt-merge-msg.perl \
-	git-findtags.perl git-svnimport.perl git-mv.perl
+	git-svnimport.perl git-mv.perl
 
 SCRIPT_PYTHON = \
 	git-merge-recursive.py
@@ -413,7 +413,6 @@
 install: $(PROGRAMS) $(SCRIPTS)
 	$(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(bindir))
 	$(INSTALL) $(PROGRAMS) $(SCRIPTS) $(call shellquote,$(DESTDIR)$(bindir))
-	sh ./cmd-rename.sh $(call shellquote,$(DESTDIR)$(bindir))
 	$(MAKE) -C templates install
 	$(INSTALL) -d -m755 $(call shellquote,$(DESTDIR)$(GIT_PYTHON_DIR))
 	$(INSTALL) $(PYMODULES) $(call shellquote,$(DESTDIR)$(GIT_PYTHON_DIR))
diff --git a/cmd-rename.sh b/cmd-rename.sh
index 34e7f49..992493d 100755
--- a/cmd-rename.sh
+++ b/cmd-rename.sh
@@ -1,13 +1,21 @@
 #!/bin/sh
+#
+# If you installed git by hand previously, you may find this
+# script useful to remove the symbolic links that we shipped
+# for backward compatibility.
+#
+# Running this script with the previous installation directory
+# like this:
+#
+# $ cmd-rename.sh /usr/local/bin/
+#
+# would clean them.
+
 d="$1"
 test -d "$d" || exit
 while read old new
 do
 	rm -f "$d/$old"
-	if test -f "$d/$new"
-	then
-		ln -s "$new" "$d/$old" || exit
-	fi
 done <<\EOF
 git-add-script	git-add
 git-archimport-script	git-archimport
diff --git a/debian/changelog b/debian/changelog
index 7d18483..ee68af5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+git-core (0.99.9b-0) unstable; urgency=low
+
+  * GIT 0.99.9b
+
+ -- Junio C Hamano <junkio@cox.net>  Tue,  1 Nov 2005 21:39:39 -0800
+
 git-core (0.99.9a-0) unstable; urgency=low
 
   * GIT 0.99.9a
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index bbb83fb..7bd9136 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -29,7 +29,7 @@
 $SIG{'PIPE'}="IGNORE";
 $ENV{'TZ'}="UTC";
 
-our($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_s,$opt_m,$opt_M);
+our($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,$opt_M);
 
 sub usage() {
 	print STDERR <<END;
@@ -41,7 +41,7 @@
 	exit(1);
 }
 
-getopts("hivmkuo:d:p:C:z:s:M:") or usage();
+getopts("hivmkuo:d:p:C:z:s:M:P:") or usage();
 usage if $opt_h;
 
 @ARGV <= 1 or usage();
@@ -337,6 +337,10 @@
 	}
 	close ($fh);
 
+	if ($res eq '') {
+	    die "Looks like the server has gone away while fetching $fn $rev -- exiting!";
+	}
+
 	return ($name, $res);
 }
 
@@ -487,11 +491,16 @@
 	my @opt;
 	@opt = split(/,/,$opt_p) if defined $opt_p;
 	unshift @opt, '-z', $opt_z if defined $opt_z;
+	unshift @opt, '-q'         unless defined $opt_v;
 	unless (defined($opt_p) && $opt_p =~ m/--no-cvs-direct/) {
 		push @opt, '--cvs-direct';
 	}
-	exec("cvsps",@opt,"-u","-A",'--root',$opt_d,$cvs_tree);
-	die "Could not start cvsps: $!\n";
+	if ($opt_P) {
+	    exec("cat", $opt_P);
+	} else {
+	    exec("cvsps",@opt,"-u","-A",'--root',$opt_d,$cvs_tree);
+	    die "Could not start cvsps: $!\n";
+	}
 }
 
 
diff --git a/git-findtags.perl b/git-findtags.perl
deleted file mode 100755
index 745affe..0000000
--- a/git-findtags.perl
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (c) 2005 Martin Langhoff
-#
-# Walk the tags and find if they match a commit
-# expects a SHA1 of a commit. Option -t enables 
-# searching trees too.
-#
-
-use strict;
-use File::Basename;
-use File::Find;
-use Getopt::Std;
-
-my $git_dir = $ENV{GIT_DIR} || '.git';
-$git_dir =~ s|/$||; # chomp trailing slash
-
-# options
-our $opt_t;
-getopts("t") || usage();
-
-my @tagfiles   = `find $git_dir/refs/tags -follow -type f`; # haystack
-my $target = shift @ARGV;                     # needle
-unless ($target) {
-    usage();
-}
-
-# drive the processing from the find hook
-# slower, safer (?) than the find utility
-find( { wanted   => \&process,
-	no_chdir => 1,
-	follow   => 1,
-      }, "$git_dir/refs/tags");
-
-
-sub process {
-    my ($dev,$ino,$mode,$nlink,$uid,$gid);
-
-    # process only regular files
-    unless ((($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f _) {
-	return 1; # ignored anyway
-    }
-
-    my $tagfile = $_;
-    chomp $tagfile;
-    my $tagname = substr($tagfile, length($git_dir.'/refs/tags/'));
-
-    my $tagid = quickread($tagfile);
-    chomp $tagid;
-
-    # is it just a soft tag?
-    if ($tagid eq $target) {
-	print "$tagname\n";
-	return 1; # done with this tag
-    }
-
-    # grab the first 2 lines (the whole tag could be large)
-    my $tagobj = `git-cat-file tag $tagid | head -n2 `;
-    if ($tagobj =~  m/^type commit$/m) { # only deal with commits
-
-	if ($tagobj =~ m/^object $target$/m) { # match on the commit
-	    print "$tagname\n";
-
-	} elsif ( $opt_t &&                      # follow the commit
-		 $tagobj =~ m/^object (\S+)$/m) { # and try to match trees
-	    my $commitid = $1;
-	    my $commitobj = `git-cat-file commit $commitid | head -n1`;
-	    chomp $commitobj;
-	    $commitobj =~ m/^tree (\S+)$/;
-	    my $treeid = $1;
-	    if ($target eq $treeid) {
-		print "$tagname\n";
-	    }
-	}
-    }
-}
-
-sub quickread {
-    my $file = shift;
-    local $/; # undef: slurp mode
-    open FILE, "<$file"
-	or die "Cannot open $file : $!";
-    my $content = <FILE>;
-    close FILE;
-    return $content;
-}
-
-sub usage {
-	print STDERR <<END;
-Usage: ${\basename $0}     # find tags for a commit or tree
-       [ -t ] <commit-or-tree-sha1>
-END
-	exit(1);
-}
diff --git a/git-mv.perl b/git-mv.perl
index 17e35b0..a21d87e 100755
--- a/git-mv.perl
+++ b/git-mv.perl
@@ -54,6 +54,8 @@
 my $argCount = scalar @ARGV;
 if (-d $ARGV[$argCount-1]) {
 	$dstDir = $ARGV[$argCount-1];
+	# remove any trailing slash
+	$dstDir =~ s/\/$//;
 	@srcArgs = @ARGV[0..$argCount-2];
 	
 	foreach $src (@srcArgs) {
diff --git a/mozilla-sha1/sha1.c b/mozilla-sha1/sha1.c
index 7f6fc05..847531d 100644
--- a/mozilla-sha1/sha1.c
+++ b/mozilla-sha1/sha1.c
@@ -56,8 +56,8 @@
 }
 
 
-void SHA1_Update(SHA_CTX *ctx, void *_dataIn, int len) {
-  unsigned char *dataIn = _dataIn;
+void SHA1_Update(SHA_CTX *ctx, const void *_dataIn, int len) {
+  const unsigned char *dataIn = _dataIn;
   int i;
 
   /* Read the data into W and process blocks as they get full
diff --git a/mozilla-sha1/sha1.h b/mozilla-sha1/sha1.h
index f5decbf..5d82afa 100644
--- a/mozilla-sha1/sha1.h
+++ b/mozilla-sha1/sha1.h
@@ -41,5 +41,5 @@
 } SHA_CTX;
 
 void SHA1_Init(SHA_CTX *ctx);
-void SHA1_Update(SHA_CTX *ctx, void *dataIn, int len);
+void SHA1_Update(SHA_CTX *ctx, const void *dataIn, int len);
 void SHA1_Final(unsigned char hashout[20], SHA_CTX *ctx);