]> git.ipfire.org Git - thirdparty/git.git/blobdiff - perl/Git.pm
perl: lazily load some common Git.pm setup code
[thirdparty/git.git] / perl / Git.pm
index 02eacef0c2a4a43058a74dda4cebe1ae16bdd2eb..5562c0cede24c8d2f7d90539f1d4cea63c062e0b 100644 (file)
@@ -11,9 +11,6 @@ use 5.008;
 use strict;
 use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : ();
 
-use File::Temp ();
-use File::Spec ();
-
 BEGIN {
 
 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK);
@@ -103,12 +100,9 @@ increase notwithstanding).
 =cut
 
 
-use Carp qw(carp croak); # but croak is bad - throw instead
+sub carp { require Carp; goto &Carp::carp }
+sub croak { require Carp; goto &Carp::croak }
 use Git::LoadCPAN::Error qw(:try);
-use Cwd qw(abs_path cwd);
-use IPC::Open2 qw(open2);
-use Fcntl qw(SEEK_SET SEEK_CUR);
-use Time::Local qw(timegm);
 }
 
 
@@ -191,13 +185,15 @@ sub repository {
                        $dir = undef;
                };
 
+               require Cwd;
                if ($dir) {
+                       require File::Spec;
                        File::Spec->file_name_is_absolute($dir) or $dir = $opts{Directory} . '/' . $dir;
-                       $opts{Repository} = abs_path($dir);
+                       $opts{Repository} = Cwd::abs_path($dir);
 
                        # If --git-dir went ok, this shouldn't die either.
                        my $prefix = $search->command_oneline('rev-parse', '--show-prefix');
-                       $dir = abs_path($opts{Directory}) . '/';
+                       $dir = Cwd::abs_path($opts{Directory}) . '/';
                        if ($prefix) {
                                if (substr($dir, -length($prefix)) ne $prefix) {
                                        throw Error::Simple("rev-parse confused me - $dir does not have trailing $prefix");
@@ -223,7 +219,7 @@ sub repository {
                                throw Error::Simple("fatal: Not a git repository: $dir");
                        }
 
-                       $opts{Repository} = abs_path($dir);
+                       $opts{Repository} = Cwd::abs_path($dir);
                }
 
                delete $opts{Directory};
@@ -408,10 +404,12 @@ sub command_bidi_pipe {
        my $cwd_save = undef;
        if ($self) {
                shift;
-               $cwd_save = cwd();
+               require Cwd;
+               $cwd_save = Cwd::cwd();
                _setup_git_cmd_env($self);
        }
-       $pid = open2($in, $out, 'git', @_);
+       require IPC::Open2;
+       $pid = IPC::Open2::open2($in, $out, 'git', @_);
        chdir($cwd_save) if $cwd_save;
        return ($pid, $in, $out, join(' ', @_));
 }
@@ -538,7 +536,8 @@ sub get_tz_offset {
        my $t = shift || time;
        my @t = localtime($t);
        $t[5] += 1900;
-       my $gm = timegm(@t);
+       require Time::Local;
+       my $gm = Time::Local::timegm(@t);
        my $sign = qw( + + - )[ $gm <=> $t ];
        return sprintf("%s%02d%02d", $sign, (gmtime(abs($t - $gm)))[2,1]);
 }
@@ -1340,6 +1339,7 @@ sub _temp_cache {
                my $n = $name;
                $n =~ s/\W/_/g; # no strange chars
 
+               require File::Temp;
                ($$temp_fd, $fname) = File::Temp::tempfile(
                        "Git_${n}_XXXXXX", UNLINK => 1, DIR => $tmpdir,
                        ) or throw Error::Simple("couldn't open new temp file");
@@ -1362,9 +1362,9 @@ sub temp_reset {
 
        truncate $temp_fd, 0
                or throw Error::Simple("couldn't truncate file");
-       sysseek($temp_fd, 0, SEEK_SET) and seek($temp_fd, 0, SEEK_SET)
+       sysseek($temp_fd, 0, Fcntl::SEEK_SET()) and seek($temp_fd, 0, Fcntl::SEEK_SET())
                or throw Error::Simple("couldn't seek to beginning of file");
-       sysseek($temp_fd, 0, SEEK_CUR) == 0 and tell($temp_fd) == 0
+       sysseek($temp_fd, 0, Fcntl::SEEK_CUR()) == 0 and tell($temp_fd) == 0
                or throw Error::Simple("expected file position to be reset");
 }