anchor.diff:        }
         final name = result["name"];
         final test = new Test(bot, name, result, approvedResult, flakiness);
  +      final dropApproval =
  +          test.matches ? options["failures-only"] : options["successes-only"];
  +      if (dropApproval && !test.isApproved) {
  +        if (approvedResult == null) continue;
  +        result.clear();
  +        result.addAll(approvedResult);
  +      }
         tests.add(test);
       }
       // If preapproving and the CL has introduced new tests, add the new tests
  
positive.code:       negatable: false);
    parser.addOption("preapprove",
        abbr: "p", help: "Preapprove the new failures in a gerrit CL.");
    parser.addFlag("verbose",
        abbr: "v", help: "Describe asynchronous operations.", negatable: false);
    parser.addFlag("yes",
  
negative.code: 
  main(List<String> args) async {
    final parser = new ArgParser();
    parser.addFlag("automated-approver",
        help: "Record the approval as done by an automated process.",
        negatable: false);
    parser.addMultiOption("bot",
        abbr: "b",
        help: "Select the bots matching the glob pattern [option is repeatable]",
        splitCommas: false);
    parser.addFlag("help", help: "Show the program usage.", negatable: false);
    parser.addFlag("failures-only",
        help: "Approve failures only.", negatable: false);
    parser.addFlag("list",
        abbr: "l", help: "List the available bots.", negatable: false);
    parser.addFlag("no",
  