Merge branch 'for-junio' of git://bogomips.org/git-svn
authorJunio C Hamano <gitster@pobox.com>
Fri, 25 Jan 2013 20:53:31 +0000 (12:53 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Jan 2013 20:53:31 +0000 (12:53 -0800)
* 'for-junio' of git://bogomips.org/git-svn:
git-svn: Simplify calculation of GIT_DIR
git-svn: cleanup sprintf usage for uppercasing hex

git-svn.perl
perl/Git/SVN.pm
perl/Git/SVN/Editor.pm
t/t9100-git-svn-basic.sh
index d0866946cee0076dd167cf6234dfec192d8d194e..b46795f5935dd3d61a2f3e45f979aec04d12afcb 100755 (executable)
@@ -61,8 +61,6 @@ BEGIN
        command_oneline([qw/rev-parse --show-prefix/], STDERR => 0)
 } || '';
 
-my $git_dir_user_set = 1 if defined $ENV{GIT_DIR};
-$ENV{GIT_DIR} ||= '.git';
 $Git::SVN::Ra::_log_window_size = 100;
 
 if (! exists $ENV{SVN_SSH} && exists $ENV{GIT_SSH}) {
@@ -327,27 +325,20 @@ package main;
 };
 
 # make sure we're always running at the top-level working directory
-unless ($cmd && $cmd =~ /(?:clone|init|multi-init)$/) {
-       unless (-d $ENV{GIT_DIR}) {
-               if ($git_dir_user_set) {
-                       die "GIT_DIR=$ENV{GIT_DIR} explicitly set, ",
-                           "but it is not a directory\n";
-               }
-               my $git_dir = delete $ENV{GIT_DIR};
-               my $cdup = undef;
-               git_cmd_try {
-                       $cdup = command_oneline(qw/rev-parse --show-cdup/);
-                       $git_dir = '.' unless ($cdup);
-                       chomp $cdup if ($cdup);
-                       $cdup = "." unless ($cdup && length $cdup);
-               } "Already at toplevel, but $git_dir not found\n";
-               chdir $cdup or die "Unable to chdir up to '$cdup'\n";
-               unless (-d $git_dir) {
-                       die "$git_dir still not found after going to ",
-                           "'$cdup'\n";
-               }
-               $ENV{GIT_DIR} = $git_dir;
-       }
+if ($cmd && $cmd =~ /(?:clone|init|multi-init)$/) {
+       $ENV{GIT_DIR} ||= ".git";
+} else {
+       my ($git_dir, $cdup);
+       git_cmd_try {
+               $git_dir = command_oneline([qw/rev-parse --git-dir/]);
+       } "Unable to find .git directory\n";
+       git_cmd_try {
+               $cdup = command_oneline(qw/rev-parse --show-cdup/);
+               chomp $cdup if ($cdup);
+               $cdup = "." unless ($cdup && length $cdup);
+       } "Already at toplevel, but $git_dir not found\n";
+       $ENV{GIT_DIR} = $git_dir;
+       chdir $cdup or die "Unable to chdir up to '$cdup'\n";
        $_repository = Git->repository(Repository => $ENV{GIT_DIR});
 }
 
index 59215fa86e2c2902ec97b12bea70736f9c7c02c6..490e3303804e834497fa1bd3f62500a7b07a31f1 100644 (file)
@@ -490,7 +490,7 @@ sub refname {
        #
        # Additionally, % must be escaped because it is used for escaping
        # and we want our escaped refname to be reversible
-       $refname =~ s{([ \%~\^:\?\*\[\t])}{uc sprintf('%%%02x',ord($1))}eg;
+       $refname =~ s{([ \%~\^:\?\*\[\t])}{sprintf('%%%02X',ord($1))}eg;
 
        # no slash-separated component can begin with a dot .
        # /.* becomes /%2E*
@@ -2377,7 +2377,7 @@ sub map_path {
 
 sub uri_encode {
        my ($f) = @_;
-       $f =~ s#([^a-zA-Z0-9\*!\:_\./\-])#uc sprintf("%%%02x",ord($1))#eg;
+       $f =~ s#([^a-zA-Z0-9\*!\:_\./\-])#sprintf("%%%02X",ord($1))#eg;
        $f
 }
 
index 3db152155c62fb43b6243c10ce25cc193895afe3..fa0d3c6cddfa7a36745c576ba69e484675238593 100644 (file)
@@ -146,7 +146,7 @@ sub url_path {
        my ($self, $path) = @_;
        if ($self->{url} =~ m#^https?://#) {
                # characters are taken from subversion/libsvn_subr/path.c
-               $path =~ s#([^~a-zA-Z0-9_./!$&'()*+,-])#uc sprintf("%%%02x",ord($1))#eg;
+               $path =~ s#([^~a-zA-Z0-9_./!$&'()*+,-])#sprintf("%%%02X",ord($1))#eg;
        }
        $self->{url} . '/' . $self->repo_path($path);
 }
index 749b75e8d4fba546b22a0280b72891c38b5ea00a..4fea8d901bbc0f713a1500adbbdd2e5886720f47 100755 (executable)
@@ -306,5 +306,13 @@ test_expect_success 'git-svn works in a bare repository' '
        git svn fetch ) &&
        rm -rf bare-repo
        '
+test_expect_success 'git-svn works in in a repository with a gitdir: link' '
+       mkdir worktree gitdir &&
+       ( cd worktree &&
+       git svn init "$svnrepo" &&
+       git init --separate-git-dir ../gitdir &&
+       git svn fetch ) &&
+       rm -rf worktree gitdir
+       '
 
 test_done