send-email: Handle "GIT:" rather than "GIT: " during --compose
[gitweb.git] / perl / Git.pm
index ba94453781c98a97a95c65999873fc28b013340d..291ff5b53c1883ee8fce67fbb7e2b32393ef0800 100644 (file)
@@ -56,7 +56,7 @@ =head1 SYNOPSIS
 @EXPORT_OK = qw(command command_oneline command_noisy
                 command_output_pipe command_input_pipe command_close_pipe
                 command_bidi_pipe command_close_bidi_pipe
-                version exec_path hash_object git_cmd_try
+                version exec_path html_path hash_object git_cmd_try
                 remote_refs
                 temp_acquire temp_release temp_reset temp_path);
 
@@ -166,11 +166,12 @@ sub repository {
                }
        }
 
-       if (not defined $opts{Repository} and not defined $opts{WorkingCopy}) {
-               $opts{Directory} ||= '.';
+       if (not defined $opts{Repository} and not defined $opts{WorkingCopy}
+               and not defined $opts{Directory}) {
+               $opts{Directory} = '.';
        }
 
-       if ($opts{Directory}) {
+       if (defined $opts{Directory}) {
                -d $opts{Directory} or throw Error::Simple("Directory not found: $!");
 
                my $search = Git->repository(WorkingCopy => $opts{Directory});
@@ -204,14 +205,14 @@ sub repository {
 
                        unless (-d "$dir/refs" and -d "$dir/objects" and -e "$dir/HEAD") {
                                # Mimick git-rev-parse --git-dir error message:
-                               throw Error::Simple('fatal: Not a git repository');
+                               throw Error::Simple("fatal: Not a git repository: $dir");
                        }
                        my $search = Git->repository(Repository => $dir);
                        try {
                                $search->command('symbolic-ref', 'HEAD');
                        } catch Git::Error::Command with {
                                # Mimick git-rev-parse --git-dir error message:
-                               throw Error::Simple('fatal: Not a git repository');
+                               throw Error::Simple("fatal: Not a git repository: $dir");
                        }
 
                        $opts{Repository} = abs_path($dir);
@@ -491,6 +492,16 @@ sub version {
 sub exec_path { command_oneline('--exec-path') }
 
 
+=item html_path ()
+
+Return path to the Git html documentation (the same as
+C<git --html-path>). Useful mostly only internally.
+
+=cut
+
+sub html_path { command_oneline('--html-path') }
+
+
 =item repo_path ()
 
 Return path to the git repository. Must be called on a repository instance.
@@ -961,9 +972,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,15 +1014,15 @@ sub temp_release {
 }
 
 sub _temp_cache {
-       my ($name) = @_;
+       my ($self, $name) = _maybe_self(@_);
 
        _verify_require();
 
        my $temp_fd = \$TEMP_FILEMAP{$name};
        if (defined $$temp_fd and $$temp_fd->opened) {
                if ($TEMP_FILES{$$temp_fd}{locked}) {
-                       throw Error::Simple("Temp file with moniker '",
-                               $name, "' already in use");
+                       throw Error::Simple("Temp file with moniker '" .
+                               $name . "' already in use");
                }
        } else {
                if (defined $$temp_fd) {
@@ -1022,9 +1031,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;