]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Control.pm
* Fix __internal_request in Debbugs::Control
[debbugs.git] / Debbugs / Control.pm
index 199f202b4cc97d1ec5290c7558229c0e66df8627..cf2ab8416566df3645c823d758393ce82cd27c0f 100644 (file)
@@ -94,6 +94,7 @@ BEGIN{
                     fixed   => [qw(set_found set_fixed)],
                     package => [qw(set_package)],
                     block   => [qw(set_blocks)],
+                    tag     => [qw(set_tag)],
                     archive => [qw(bug_archive bug_unarchive),
                                ],
                     log     => [qw(append_action_to_log),
@@ -106,7 +107,7 @@ BEGIN{
 
 use Debbugs::Config qw(:config);
 use Debbugs::Common qw(:lock buglog :misc get_hashname);
-use Debbugs::Status qw(bug_archiveable :read :hook writebug splitpackages);
+use Debbugs::Status qw(bug_archiveable :read :hook writebug splitpackages split_status_fields);
 use Debbugs::CGI qw(html_escape);
 use Debbugs::Log qw(:misc);
 use Debbugs::Recipients qw(:add);
@@ -435,8 +436,8 @@ sub set_blocks {
            print {$transcript} "Was blocked by: $data->{blockedby}\n";
        }
        my @changed;
-       push @changed, 'added blocking bug(s) '.english_join([keys %added_blockers]) if keys %added_blockers;
-       push @changed, 'removed blocking bug(s) '.english_join([keys %removed_blockers]) if keys %removed_blockers;
+       push @changed, 'added blocking bug(s) of '.$data->{bug_num}.': '.english_join([keys %added_blockers]) if keys %added_blockers;
+       push @changed, 'removed blocking bug(s) of '.$data->{bug_num}.': '.english_join([keys %removed_blockers]) if keys %removed_blockers;
        $action = ucfirst(join ('; ',@changed)) if @changed;
        if (not @changed) {
            print {$transcript} "Ignoring request to alter tags of bug #$data->{bug_num} to the same tags previously set\n"
@@ -481,8 +482,9 @@ sub set_blocks {
            for my $data (@blocking_data) {
                my $old_data = dclone($data);
                my %blocks;
-               %blocks = split ' ', $data->{blocks};
-               my @blocks;
+               my @blocks = split ' ', $data->{blocks};
+               @blocks{@blocks} = (1) x @blocks;
+               @blocks = ();
                for my $bug (@bugs) {
                    if ($add_remove eq 'remove') {
                        next unless exists $blocks{$bug};
@@ -614,7 +616,7 @@ sub set_tag {
        my %tag_added = ();
        my %tag_removed = ();
        my %fixed_removed = ();
-       my @old_tags = split /\,\s*/, $data->{tags};
+       my @old_tags = split /\,\s*/, $data->{keywords};
        my %tags;
        @tags{@old_tags} = (1) x @old_tags;
        my $reopened = 0;
@@ -656,7 +658,7 @@ sub set_tag {
            print {$transcript} "Unknown tag(s): ".join(', ',@bad_tags).".\n";
            print {$transcript} "These tags are recognized: ".join(', ',@{$config{tags}}).".\n";
        }
-       $data->{tags} = join(', ',keys %tags); # double check this
+       $data->{keywords} = join(', ',keys %tags); # double check this
 
        my @changed;
        push @changed, 'added tag(s) '.english_join([keys %tag_added]) if keys %tag_added;
@@ -1816,7 +1818,7 @@ sub affects {
              }
              if (keys %added_packages) {
                  $action .= "Added indication that $data->{bug_num} affects " .
-                  english_join([%added_packages]);
+                  english_join([keys %added_packages]);
              }
         }
        if (not length $action) {
@@ -2584,7 +2586,7 @@ C<__PACKAGE__>.
 sub __internal_request{
     my ($l) = @_;
     $l = 0 if not defined $l;
-    if (defined +(caller(2+$l))[0] and +(caller(2+$l))[0] eq __PACKAGE__) {
+    if (defined((caller(1+$l))[0]) and (caller(1+$l))[0] eq __PACKAGE__) {
        return 1;
     }
     return 0;
@@ -2683,10 +2685,17 @@ sub __begin_control {
     if (not @data) {
        die "Unable to read any bugs successfully.";
     }
+    if (not $param{archived}) {
+       for my $data (@data) {
+           if ($data->{archived}) {
+               die "Not altering archived bugs; see unarchive.";
+           }
+       }
+    }
     if (not __check_limit(data => \@data,
                          exists $param{limit}?(limit => $param{limit}):(),
                         )) {
-       die "limit failed for bugs: ".join(', ',map {$_->{bugnum}} @data);
+       die "limit failed for bugs: ".join(', ',map {$_->{bug_num}} @data);
     }
 
     __handle_affected_packages(%param,data => \@data);
@@ -2701,7 +2710,7 @@ sub __begin_control {
                   recipients => $param{recipients},
                   (exists $param{command}?(actions_taken => {$param{command} => 1}):()),
                   debug      => $debug,
-                  transcript => $transcript,
+                  (__internal_request()?(transcript => $transcript):()),
                  );
 
     print {$debug} "$param{bug} read done\n";