builtin-fsck: move away from object-refs to fsck_walk
[gitweb.git] / git-send-email.perl
index 7a86977ef104da807743c879532ca942dd2c939a..a1a9d14b00d01844509a87c598314e2ffbbfa47c 100755 (executable)
@@ -100,6 +100,8 @@ sub usage {
 
    --envelope-sender   Specify the envelope sender used to send the emails.
 
+   --no-validate       Don't perform any sanity checks on patches.
+
 EOT
        exit(1);
 }
@@ -177,6 +179,7 @@ sub format_2822_time {
 my ($thread, $chain_reply_to, $suppress_from, $signed_off_cc, $cc_cmd);
 my ($smtp_server, $smtp_server_port, $smtp_authuser, $smtp_authpass, $smtp_ssl);
 my ($identity, $aliasfiletype, @alias_files, @smtp_host_parts);
+my ($no_validate);
 
 my %config_bool_settings = (
     "thread" => [\$thread, 1],
@@ -222,6 +225,7 @@ sub format_2822_time {
                    "dry-run" => \$dry_run,
                    "envelope-sender=s" => \$envelope_sender,
                    "thread!" => \$thread,
+                   "no-validate" => \$no_validate,
         );
 
 unless ($rc) {
@@ -332,6 +336,13 @@ sub read_config {
        }
 }
 
+if (!$no_validate) {
+       foreach my $f (@files) {
+               my $error = validate_patch($f);
+               $error and die "fatal: $f: $error\nwarning: no patches were sent\n";
+       }
+}
+
 if (@files) {
        unless ($quiet) {
                print $_,"\n" for (@files);
@@ -451,7 +462,7 @@ sub expand_aliases {
                exit(0);
        }
 
-       @files = ($compose_filename . ".final");
+       @files = ($compose_filename . ".final", @files);
 }
 
 # Variables we set as part of the loop over files
@@ -837,3 +848,15 @@ (@)
        }
        return @emails;
 }
+
+sub validate_patch {
+       my $fn = shift;
+       open(my $fh, '<', $fn)
+               or die "unable to open $fn: $!\n";
+       while (my $line = <$fh>) {
+               if (length($line) > 998) {
+                       return "$.: patch contains a line longer than 998 characters";
+               }
+       }
+       return undef;
+}