Merge branch 'maint' of git://repo.or.cz/git/fastimport into maint
authorJunio C Hamano <junkio@cox.net>
Sun, 29 Apr 2007 01:15:00 +0000 (18:15 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 29 Apr 2007 01:15:00 +0000 (18:15 -0700)
* 'maint' of git://repo.or.cz/git/fastimport:
  Don't allow empty pathnames in fast-import
  import-tars: be nice to wrong directory modes

Documentation/git-shortlog.txt
Documentation/git-svn.txt
builtin-fsck.c
git-svn.perl

index 1c8c55e..15cc6f7 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 a0d34e0..a35b9de 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 7c3b0a5..75e10e2 100644 (file)
@@ -218,6 +218,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;
@@ -241,6 +242,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);
 
@@ -289,6 +292,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 7b5f8ab..4be8576 100755 (executable)
@@ -141,6 +141,8 @@ my %cmd = (
                          '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');