Merge branch 'sd/t3200-branch-m-test'
[gitweb.git] / git-send-email.perl
index 0d90439d9a8e5f701f96afbd19883060a516a341..7fd58744360a2bb14531ed3f73092b45449d5590 100755 (executable)
@@ -25,8 +25,9 @@
 use Text::ParseWords;
 use Term::ANSIColor;
 use File::Temp qw/ tempdir tempfile /;
-use File::Spec::Functions qw(catfile);
+use File::Spec::Functions qw(catdir catfile);
 use Error qw(:try);
+use Cwd qw(abs_path cwd);
 use Git;
 use Git::I18N;
 
@@ -1354,7 +1355,7 @@ sub send_message {
                }
 
                require Net::SMTP;
-               my $use_net_smtp_ssl = version->parse($Net::SMTP::VERSION) < version->parse("1.28");
+               my $use_net_smtp_ssl = version->parse($Net::SMTP::VERSION) < version->parse("2.34");
                $smtp_domain ||= maildomain();
 
                if ($smtp_encryption eq 'ssl') {
@@ -1753,6 +1754,25 @@ sub unique_email_list {
 
 sub validate_patch {
        my $fn = shift;
+
+       if ($repo) {
+               my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
+                                           'sendemail-validate');
+               my $hook_error;
+               if (-x $validate_hook) {
+                       my $target = abs_path($fn);
+                       # The hook needs a correct cwd and GIT_DIR.
+                       my $cwd_save = cwd();
+                       chdir($repo->wc_path() or $repo->repo_path())
+                               or die("chdir: $!");
+                       local $ENV{"GIT_DIR"} = $repo->repo_path();
+                       $hook_error = "rejected by sendemail-validate hook"
+                               if system($validate_hook, $target);
+                       chdir($cwd_save) or die("chdir: $!");
+               }
+               return $hook_error if $hook_error;
+       }
+
        open(my $fh, '<', $fn)
                or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
        while (my $line = <$fh>) {