]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Status.pm
* Fix lintian issues: libdebbugs-perl: spelling-error-in-manpage for:
[debbugs.git] / Debbugs / Status.pm
index e880783ca87493680b3c751e32cd06df7cf54526..6fad22e5f2d6a04359546f41041a44161fd4378c 100644 (file)
@@ -37,7 +37,8 @@ use vars qw($VERSION $DEBUG %EXPORT_TAGS @EXPORT_OK @EXPORT);
 use base qw(Exporter);
 
 use Params::Validate qw(validate_with :types);
-use Debbugs::Common qw(:util :lock :quit :misc :utf8);
+use Debbugs::Common qw(:util :lock :quit :misc);
+use Debbugs::UTF8;
 use Debbugs::Config qw(:config);
 use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522);
 use Debbugs::Packages qw(makesourceversions make_source_versions getversions get_versions binary_to_source);
@@ -108,6 +109,7 @@ our %fields = (originator     => 'submitter',
               blockedby      => 'blocked-by',
              unarchived     => 'unarchived',
              summary        => 'summary',
+             outlook        => 'outlook',
              affects        => 'affects',
              );
 
@@ -217,6 +219,7 @@ sub read_bug{
        }
        return undef;
     }
+    binmode($status_fh,':encoding(UTF-8)');
 
     my %data;
     my @lines;
@@ -239,30 +242,7 @@ sub read_bug{
     }
 
     my %namemap = reverse %fields;
-    for my $field (keys %fields) {
-        $data{$field} = '' unless exists $data{$field};
-    }
-    if ($version < 3) {
-       for my $field (@rfc1522_fields) {
-           $data{$field} = decode_rfc1522($data{$field});
-       }
-    }
     for my $line (@lines) {
-       my @encodings_to_try = qw(utf8 iso8859-1);
-       if ($version >= 3) {
-           @encodings_to_try = qw(utf8);
-       }
-       for (@encodings_to_try) {
-           last if is_utf8($line);
-           my $temp;
-           eval {
-               $temp = decode("$_",$line,Encode::FB_CROAK);
-           };
-           if (not $@) { # only update the line if there are no errors.
-               $line = $temp;
-               last;
-           }
-       }
         if ($line =~ /(\S+?): (.*)/) {
             my ($name, $value) = (lc $1, $2);
            # this is a bit of a hack; we should never, ever have \r
@@ -272,6 +252,14 @@ sub read_bug{
            $data{$namemap{$name}} = $value if exists $namemap{$name};
         }
     }
+    for my $field (keys %fields) {
+       $data{$field} = '' unless exists $data{$field};
+    }
+    if ($version < 3) {
+       for my $field (@rfc1522_fields) {
+           $data{$field} = decode_rfc1522($data{$field});
+       }
+    }
     $data{severity} = $config{default_severity} if $data{severity} eq '';
     for my $field (qw(found_versions fixed_versions found_date fixed_date)) {
         $data{$field} = [split ' ', $data{$field}];
@@ -667,7 +655,7 @@ sub makestatus {
 
 Writes the bug status and summary files out.
 
-Skips writting out a status file if minversion is 2
+Skips writing out a status file if minversion is 2
 
 Does not call bughook if disablebughook is true.
 
@@ -785,7 +773,7 @@ exactly are removed. Otherwise, all versions matching the version
 number are removed.
 
 Currently $package and $isbinary are entirely ignored, but accepted
-for backwards compatibilty.
+for backwards compatibility.
 
 =cut
 
@@ -1121,6 +1109,63 @@ a source package). Defaults to true.
 Note: Currently the version information is cached; this needs to be
 changed before using this function in long lived programs.
 
+=head3 Returns
+
+Currently returns a hashref of status with the following keys.
+
+=over
+
+=item id -- bug number
+
+=item bug_num -- duplicate of id
+
+=item keywords -- tags set on the bug, including usertags if bugusertags passed.
+
+=item tags -- duplicate of keywords
+
+=item package -- name of package that the bug is assigned to
+
+=item severity -- severity of the bug
+
+=item pending -- pending state of the bug; one of following possible
+values; values listed later have precedence if multiple conditions are
+satisifed:
+
+=over
+
+=item pending -- default state
+
+=item forwarded -- bug has been forwarded
+
+=item pending-fixed -- bug is tagged pending
+
+=item fixed -- bug is tagged fixed
+
+=item absent -- bug does not apply to this distribution/architecture
+
+=item done -- bug is resolved in this distribution/architecture
+
+=back
+
+=item location -- db-h or archive; the location in the filesystem
+
+=item subject -- title of the bug
+
+=item last_modified -- epoch that the bug was last modified
+
+=item date -- epoch that the bug was filed
+
+=item originator -- bug reporter
+
+=item log_modified -- epoch that the log file was last modified
+
+=item msgid -- Message id of the original bug report
+
+=back
+
+
+Other key/value pairs are returned but are not currently documented here.
+
 =cut
 
 sub get_bug_status {
@@ -1570,6 +1615,8 @@ sub update_realtime {
        my $idx_new = IO::File->new($file.'.new','w')
             or die "Couldn't open ${file}.new: $!";
 
+        binmode($idx_old,':raw:utf8');
+        binmode($idx_new,':raw:encoding(UTF-8)');
        my $min_bug = min(keys %bugs);
        my $line;
        my @line;