+ } elsif (m/^clone\s+#?(\d+)\s+((-\d+\s+)*-\d+)\s*$/i) {
+ $ok++;
+
+ $origref = $1;
+ @newclonedids = split /\s+/, $2;
+ $newbugsneeded = scalar(@newclonedids);
+
+ $ref = $origref;
+ if (&setbug) {
+ if (length($data->{mergedwith})) {
+ &transcript("$gBug is marked as being merged with others.\n\n");
+ &nochangebug;
+ } else {
+ &filelock("nextnumber.lock");
+ open(N,"nextnumber") || &quit("nextnumber: read: $!");
+ $v=<N>; $v =~ s/\n$// || &quit("nextnumber bad format");
+ $firstref= $v+0; $v += $newbugsneeded;
+ open(NN,">nextnumber"); print NN "$v\n"; close(NN);
+ &unfilelock;
+
+ $lastref = $firstref + $newbugsneeded - 1;
+
+ if ($newbugsneeded == 1) {
+ $action= "$gBug $origref cloned as bug $firstref.";
+ } else {
+ $action= "$gBug $origref cloned as bugs $firstref-$lastref.";
+ }
+ &getnextbug;
+ my $ohash = get_hashname($origref);
+ $ref = $firstref;
+ for $newclonedid (@newclonedids) {
+ $clonebugs{$newclonedid} = $ref;
+
+ my $hash = get_hashname($ref);
+ copy("db-h/$ohash/$origref.log", "db-h/$hash/$ref.log");
+ copy("db-h/$ohash/$origref.status", "db-h/$hash/$ref.status");
+ copy("db-h/$ohash/$origref.report", "db-h/$hash/$ref.report");
+ &bughook('new', $ref, $data);
+
+ $ref++;
+ }
+ }
+ }
+ } elsif (m/^package\s*(\S.*\S)?\s*$/i) {
+ $ok++;
+ my @pkgs = split /\s+/, $1;
+ if (scalar(@pkgs) > 0) {
+ %limit_pkgs = map { ($_, 1) } @pkgs;
+ &transcript("Ignoring bugs not assigned to: " .
+ join(" ", keys(%limit_pkgs)) . "\n\n");
+ } else {
+ %limit_pkgs = ();
+ &transcript("Not ignoring any bugs.\n\n");
+ }