]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/errorlib.in
remove useless duplicated functions
[debbugs.git] / scripts / errorlib.in
index 338b7c170491eecfbb3784dc97806e9a97b3aead..a93c79bf3542e376203c79f1664de98dbe839130 100755 (executable)
@@ -1,8 +1,11 @@
 # -*- perl -*-
-# $Id: errorlib.in,v 1.4 2001/07/15 09:46:16 doogie Exp $
 
-sub F_SETLK { 6; } sub F_WRLCK{ 1; }
-$flockstruct= 'sslll'; # And there ought to be something for this too.
+use Mail::Address;
+use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522);
+use Debbugs::Packages qw(:all);
+use Debbugs::Common qw(:all);
+use Debbugs::Status qw(:all);
+use Carp;
 
 sub unlockreadbugmerge {
     local ($rv) = @_;
@@ -11,115 +14,68 @@ sub unlockreadbugmerge {
 }
 
 sub lockreadbugmerge {
-    local ($lref) = @_;
-    if (!&lockreadbug($lref)) { return 0; }
-    if (!length($s_mergedwith)) { return 1; }
+    local ($lref, $location) = @_;
+    local $data;
+    if (!($data = &lockreadbug($lref, $location))) { return ( 0, undef ); }
+    if (!length($data->{mergedwith})) { return ( 1, $data ); }
     &unfilelock;
     &filelock('lock/merge');
-    if (!&lockreadbug($lref)) { &unfilelock; return 0; }
-    return 2;
-}
-
-sub lockreadbug {
-    local ($lref) = @_;
-    &filelock("lock/$lref");
-    if (!open(S,"db/$lref.status")) { &unfilelock; return 0; }
-    chop($s_originator= <S>);
-    chop($s_date= <S>);
-    chop($s_subject= <S>);
-    chop($s_msgid= <S>);
-    chop($s_package= <S>);
-    chop($s_keywords= <S>);
-    chop($s_done= <S>);
-    chop($s_forwarded= <S>);
-    chop($s_mergedwith= <S>);
-    chop($s_severity= <S>);
-    close(S);
-       $s_severity = 'normal' if $s_severity eq '';
-    return 1;
-}
-
-sub filelock {
-    # NB - NOT COMPATIBLE WITH `with-lock'
-    local ($lockfile,$flockpushno,$evalstring,$count,$errors,@s1,@s2) = @_;
-    $flockpushno= $#filelocks+1;
-    $count= 10; $errors= '';
-    for (;;) {
-        $evalstring= "
-            open(FLOCK${flockpushno},\"> \$lockfile\") || die \"open: \$!\";
-            \$flockwant= pack(\$flockstruct,&F_WRLCK,0,0,1,0);".
-                ($] >= 5.000 ? "
-            fcntl(FLOCK$flockpushno,&F_SETLK,\$flockwant) || die \"setlk: \$!\";" : "
-            \$z= syscall(&SYS_fcntl,fileno(FLOCK$flockpushno),&F_SETLK,\$flockwant) < 0
-                 && die \"syscall fcntl setlk: \$!\";") ."
-            (\@s1= lstat(\$lockfile)) || die \"lstat: \$!\";
-            (\@s2= stat(FLOCK$flockpushno)) || die \"fstat: \$!\";
-            join(',',\@s1) eq join(',',\@s2) || die \"file switched\";
-            1;
-        ";
-        last if eval $evalstring;
-        $errors .= $@;
-        eval "close(FLOCK$flockpushno);";
-        if (--$count <=0) {
-            $errors =~ s/\n+$//;
-            &quit("failed to get lock on file $lockfile: $errors // $evalstring");
-        }
-        sleep 10;
-    }
-    push(@cleanups,'unfilelock');
-    push(@filelocks,$lockfile);
-}
-
-sub unfilelock {
-    local ($lockfile) = pop(@filelocks);
-    pop(@cleanups);
-    eval 'close(FLOCK'.($#filelocks+1).');' || warn "failed to close lock file: $!";
-    unlink($lockfile) || warn "failed to remove lock file: $!";
-}
-
-sub quit {
-    print DEBUG "quitting >$_[0]<\n";
-    local ($u);
-    while ($u= $cleanups[$#cleanups]) { &$u; }
-    die "*** $_[0]\n";
+    if (!&lockreadbug($lref, $location)) { &unfilelock; return ( 0, undef ); }
+    return ( 2, $data );
 }
 
 %saniarray= ('<','lt', '>','gt', '&','amp', '"','quot');
 
 sub sani {
-    local ($in) = @_;
-    local ($out);
-    while ($in =~ m/[<>&"]/) {
-        $out.= $`. '&'. $saniarray{$&}. ';';
-        $in=$';
-    }
-    $out.= $in;
-    $out;
+    my ($in) = @_;
+    carp "You should be using HTML::Entities instead.";
+    $in =~ s/([<>&"])/$saniarray{$1}/g;
+    return $in;
 }
 
-sub bughook {
-       my ( $type, $ref ) = ( shift, shift );
-       &filelock("debbugs.trace.lock");
-       &appendfile("debbugs.trace","$type $ref\n",@_);
-       &unfilelock;
+sub getmailbody {
+       my $entity = shift;
+       my $type = $entity->effective_type;
+       if ($type =~ m#text/(?!html|enriched)# or
+           $type eq 'application/pgp') {
+               return $entity->bodyhandle;
+       } elsif ($type eq 'multipart/alternative') {
+               # RFC 2046 says we should use the last part we recognize.
+               for my $part (reverse $entity->parts) {
+                       my $ret = getmailbody($part);
+                       return $ret if $ret;
+               }
+       } else {
+               # For other multipart types, we just pretend they're
+               # multipart/mixed and run through in order.
+               for my $part ($entity->parts) {
+                       my $ret = getmailbody($part);
+                       return $ret if $ret;
+               }
+       }
+       return undef;
 }
 
-sub appendfile {
-       my $file = shift;
-       if (!open(AP,">>$file")) {
-               print DEBUG "failed open log<\n";
-               print DEBUG "failed open log err $!<\n";
-               &quit("opening db/$ref.log (li): $!");
-       }
-       print(AP @_) || &quit("writing $file (appendfile): $!");
-       close(AP) || &quit("closing $file (appendfile): $!");
+sub get_addresses {
+       return
+           map { $_->address() }
+           map { Mail::Address->parse($_) } @_;
 }
 
+sub escapelog {
+       my @log = @_;
+       map { s/^([\01-\07\030])/\030$1/gm } @log;
+       return \@log;
+}
 
-@severities= @gSeverityList;
+@severities= grep { not exists $gObsoleteSeverities{$_} } @gSeverityList;
 @showseverities= @severities;
 grep ($_= $_ eq '' ? $gDefaultSeverity : $_, @showseverities);
-@strongseverities= @gStrongSeverities;
 %displayshowseverities= %gSeverityDisplay;
 
+# compatibility
+if (defined $gFowardList and not defined $gForwardList) {
+    $gForwardList = $gFowardList;
+}
+
 1;