Merge branch 'maint'
authorJunio C Hamano <junkio@cox.net>
Sun, 29 Apr 2007 08:52:43 +0000 (01:52 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 29 Apr 2007 08:52:43 +0000 (01:52 -0700)
* maint:
http.c: Fix problem with repeated calls of http_init
Add missing reference to GIT_COMMITTER_DATE in git-commit-tree documentation
Fix import-tars fix.
Update .mailmap with "Michael"
Do not barf on too long action description
Catch empty pathnames in trees during fsck
Don't allow empty pathnames in fast-import
import-tars: be nice to wrong directory modes
git-svn: Added 'find-rev' command
git shortlog documentation: add long options and fix a typo

.mailmap
Documentation/git-commit-tree.txt
Documentation/git-shortlog.txt
Documentation/git-svn.txt
Documentation/git.txt
builtin-fetch--tool.c
builtin-fsck.c
contrib/fast-import/import-tars.perl
fast-import.c
git-svn.perl
http.c
index 3a624eabc32b9698b6701e133acbf575d02aa889..17e89af11847381cf6c5c21344fb09eec8776b34 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -23,6 +23,7 @@ Lars Doelle <lars.doelle@on-line.de>
 Lars Doelle <lars.doelle@on-line ! de>
 Lukas Sandström <lukass@etek.chalmers.se>
 Martin Langhoff <martin@catalyst.net.nz>
+Michele Ballabio <barra_cuda@katamail.com>
 Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
 Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk>
 René Scharfe <rene.scharfe@lsrfire.ath.cx>
index cf25507f8f37194461e939bfa389ca00af05a5b1..1571dbbb7449fb0d790fccf6b6adbca8d4f5c664 100644 (file)
@@ -60,6 +60,7 @@ either `.git/config` file, or using the following environment variables.
        GIT_AUTHOR_DATE
        GIT_COMMITTER_NAME
        GIT_COMMITTER_EMAIL
+       GIT_COMMITTER_DATE
 
 (nb "<", ">" and "\n"s are stripped)
 
index 1c8c55ef6eac57d5bcc1cad7afbecd354af9d3ab..15cc6f77c1e9b8a77c8396fab99cf9d9fda98ef3 100644 (file)
@@ -9,7 +9,7 @@ SYNOPSIS
 --------
 [verse]
 git-log --pretty=short | 'git-shortlog' [-h] [-n] [-s]
-git-shortlog [-n|--number] [-s|--summary] [<committish>...]
+git-shortlog [-n|--numbered] [-s|--summary] [<committish>...]
 
 DESCRIPTION
 -----------
@@ -22,14 +22,14 @@ Additionally, "[PATCH]" will be stripped from the commit description.
 OPTIONS
 -------
 
--h::
+-h, \--help::
        Print a short usage message and exit.
 
--n::
+-n, \--numbered::
        Sort output according to the number of commits per author instead
        of author alphabetic order.
 
--s::
+-s, \--summary::
        Suppress commit description and provide a commit count summary only.
 
 FILES
index a0d34e0058d721e655fd23c36415aaaecfa0c666..a35b9de3bfde036391b0ac869bf927361d3d4c67 100644 (file)
@@ -159,6 +159,11 @@ New features:
 Any other arguments are passed directly to `git log'
 
 --
+'find-rev'::
+       When given an SVN revision number of the form 'rN', returns the
+       corresponding git commit hash.  When given a tree-ish, returns the
+       corresponding SVN revision number.
+
 'set-tree'::
        You should consider using 'dcommit' instead of this command.
        Commit specified commit or tree objects to SVN.  This relies on
index ca1f78f790149d845e7f74fc8456399589e2e5b9..08ba53ae010bda8970642f142c1438b73b6c38d2 100644 (file)
@@ -344,6 +344,7 @@ git Commits
 'GIT_AUTHOR_DATE'::
 'GIT_COMMITTER_NAME'::
 'GIT_COMMITTER_EMAIL'::
+'GIT_COMMITTER_DATE'::
        see gitlink:git-commit-tree[1]
 
 git Diffs
index 3145c01f7e0e81bf28314b92737ccf2abb129dcd..2065466f272dba506e6c34f16b12e4726996e0ec 100644 (file)
@@ -35,16 +35,13 @@ static int update_ref(const char *action,
                      unsigned char *sha1,
                      unsigned char *oldval)
 {
-       int len;
        char msg[1024];
        char *rla = getenv("GIT_REFLOG_ACTION");
        static struct ref_lock *lock;
 
        if (!rla)
                rla = "(reflog update)";
-       len = snprintf(msg, sizeof(msg), "%s: %s", rla, action);
-       if (sizeof(msg) <= len)
-               die("insanely long action");
+       snprintf(msg, sizeof(msg), "%s: %s", rla, action);
        lock = lock_any_ref_for_update(refname, oldval);
        if (!lock)
                return 1;
index fcb8ed5af1bc50df19a2f533989aa9673ea166e8..44ce629a498f986f239e008a61d32e10968907e0 100644 (file)
@@ -219,6 +219,7 @@ static int fsck_tree(struct tree *item)
 {
        int retval;
        int has_full_path = 0;
+       int has_empty_name = 0;
        int has_zero_pad = 0;
        int has_bad_modes = 0;
        int has_dup_entries = 0;
@@ -242,6 +243,8 @@ static int fsck_tree(struct tree *item)
 
                if (strchr(name, '/'))
                        has_full_path = 1;
+               if (!*name)
+                       has_empty_name = 1;
                has_zero_pad |= *(char *)desc.buffer == '0';
                update_tree_entry(&desc);
 
@@ -291,6 +294,9 @@ static int fsck_tree(struct tree *item)
        if (has_full_path) {
                objwarning(&item->object, "contains full pathnames");
        }
+       if (has_empty_name) {
+               objwarning(&item->object, "contains empty pathname");
+       }
        if (has_zero_pad) {
                objwarning(&item->object, "contains zero-padded file modes");
        }
index 184214689dfd3f1204546b060adbffd3f6d79bbe..d2363a415d5a1a7a77fede7f5573342f9a20e755 100755 (executable)
@@ -52,6 +52,7 @@
                        Z8 Z1 Z100 Z6
                        Z2 Z32 Z32 Z8 Z8 Z*', $_;
                last unless $name;
+               next if $name =~ m{/\z};
                $mode = oct $mode;
                $size = oct $size;
                $mtime = oct $mtime;
index c4c8cb905e3bcdfb131af40da9f7e29ca86b4a01..b4cbcd90118c47d47e8940322c8ec2161b33a92a 100644 (file)
@@ -1199,6 +1199,8 @@ static int tree_content_set(
                n = slash1 - p;
        else
                n = strlen(p);
+       if (!n)
+               die("Empty path component found in input");
 
        for (i = 0; i < t->entry_count; i++) {
                e = t->entries[i];
index 7b5f8ab3be6639e682dc6b0d5a53412f1078ba54..4be85768949f037a0a91c2b8a4ff9ce0e220ade3 100755 (executable)
@@ -141,6 +141,8 @@ BEGIN
                          'color' => \$Git::SVN::Log::color,
                          'pager=s' => \$Git::SVN::Log::pager,
                        } ],
+       'find-rev' => [ \&cmd_find_rev, "Translate between SVN revision numbers and tree-ish",
+                       { } ],
        'rebase' => [ \&cmd_rebase, "Fetch and rebase your working directory",
                        { 'merge|m|M' => \$_merge,
                          'verbose|v' => \$_verbose,
@@ -428,6 +430,28 @@ sub cmd_dcommit {
        command_noisy(@finish, $gs->refname);
 }
 
+sub cmd_find_rev {
+       my $revision_or_hash = shift;
+       my $result;
+       if ($revision_or_hash =~ /^r\d+$/) {
+               my $desired_revision = substr($revision_or_hash, 1);
+               my ($fh, $ctx) = command_output_pipe('rev-list', 'HEAD');
+               while (my $hash = <$fh>) {
+                       chomp($hash);
+                       my (undef, $rev, undef) = cmt_metadata($hash);
+                       if ($rev && $rev eq $desired_revision) {
+                               $result = $hash;
+                               last;
+                       }
+               }
+               command_close_pipe($fh, $ctx);
+       } else {
+               my (undef, $rev, undef) = cmt_metadata($revision_or_hash);
+               $result = $rev;
+       }
+       print "$result\n" if $result;
+}
+
 sub cmd_rebase {
        command_noisy(qw/update-index --refresh/);
        my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');
diff --git a/http.c b/http.c
index 576740feff9ffa62b65f8cdf0a38f2354872c520..ae27e0c9409b93558e50318f2dd0a4fe758293b5 100644 (file)
--- a/http.c
+++ b/http.c
@@ -300,6 +300,7 @@ void http_cleanup(void)
        curl_global_cleanup();
 
        curl_slist_free_all(pragma_header);
+        pragma_header = NULL;
 }
 
 struct active_request_slot *get_active_slot(void)