Merge git://git.bogomips.org/git-svn
authorJunio C Hamano <gitster@pobox.com>
Fri, 14 Nov 2008 17:21:08 +0000 (09:21 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Nov 2008 17:21:08 +0000 (09:21 -0800)
* git://git.bogomips.org/git-svn:
git-svn: Update git-svn to use the ability to place temporary files within repository directory
Git.pm: Make _temp_cache use the repository directory
git-svn: proper detection of bare repositories
git-svn: respect i18n.commitencoding config
git-svn: don't escape tilde ('~') for http(s) URLs

git-svn.perl
perl/Git.pm
index 86075ec616418f77e42dd72593a7efd00e1200c3..914c707a90e5755879574b2717c064fd9364d054 100755 (executable)
@@ -3332,11 +3332,11 @@ sub change_file_prop {
 
 sub apply_textdelta {
        my ($self, $fb, $exp) = @_;
-       my $fh = Git::temp_acquire('svn_delta');
+       my $fh = $::_repository->temp_acquire('svn_delta');
        # $fh gets auto-closed() by SVN::TxDelta::apply(),
        # (but $base does not,) so dup() it for reading in close_file
        open my $dup, '<&', $fh or croak $!;
-       my $base = Git::temp_acquire('git_blob');
+       my $base = $::_repository->temp_acquire('git_blob');
        if ($fb->{blob}) {
                print $base 'link ' if ($fb->{mode_a} == 120000);
                my $size = $::_repository->cat_blob($fb->{blob}, $base);
@@ -3377,7 +3377,8 @@ sub close_file {
                                warn "$path has mode 120000",
                                                " but is not a link\n";
                        } else {
-                               my $tmp_fh = Git::temp_acquire('svn_hash');
+                               my $tmp_fh = $::_repository->temp_acquire(
+                                       'svn_hash');
                                my $res;
                                while ($res = sysread($fh, my $str, 1024)) {
                                        my $out = syswrite($tmp_fh, $str, $res);
@@ -3765,7 +3766,7 @@ sub change_file_prop {
 
 sub _chg_file_get_blob ($$$$) {
        my ($self, $fbat, $m, $which) = @_;
-       my $fh = Git::temp_acquire("git_blob_$which");
+       my $fh = $::_repository->temp_acquire("git_blob_$which");
        if ($m->{"mode_$which"} =~ /^120/) {
                print $fh 'link ' or croak $!;
                $self->change_file_prop($fbat,'svn:special','*');
index ba94453781c98a97a95c65999873fc28b013340d..dde9105df8464911451830321e4da1cbae924955 100644 (file)
@@ -961,9 +961,7 @@ sub _close_cat_blob {
 =cut
 
 sub temp_acquire {
-       my ($self, $name) = _maybe_self(@_);
-
-       my $temp_fd = _temp_cache($name);
+       my $temp_fd = _temp_cache(@_);
 
        $TEMP_FILES{$temp_fd}{locked} = 1;
        $temp_fd;
@@ -1005,7 +1003,7 @@ sub temp_release {
 }
 
 sub _temp_cache {
-       my ($name) = @_;
+       my ($self, $name) = _maybe_self(@_);
 
        _verify_require();
 
@@ -1022,9 +1020,16 @@ sub _temp_cache {
                                "' was closed. Opening replacement.";
                }
                my $fname;
+
+               my $tmpdir;
+               if (defined $self) {
+                       $tmpdir = $self->repo_path();
+               }
+
                ($$temp_fd, $fname) = File::Temp->tempfile(
-                       'Git_XXXXXX', UNLINK => 1
+                       'Git_XXXXXX', UNLINK => 1, DIR => $tmpdir,
                        ) or throw Error::Simple("couldn't open new temp file");
+
                $$temp_fd->autoflush;
                binmode $$temp_fd;
                $TEMP_FILES{$$temp_fd}{fname} = $fname;