anchor.diff:    ..addOption('concurrency',
         abbr: 'c', defaultsTo: '1', help: 'Number of concurrent processing.')
     ..addOption('package', abbr: 'p', help: 'The package to process.')
  +  ..addFlag('dry-run',
  +      abbr: 'n', help: 'Print changes but do not update entities.')
  +  ..addFlag('verbose', abbr: 'v', help: 'Print all changes.')
     ..addFlag('help', abbr: 'h', defaultsTo: false, help: 'Show help.');
  +
  +bool _isDryRun = false;
  +bool _isVerbose = false;
  +final _removedCount = <String, int>{};
   
   Future main(List<String> args) async {
     final argv = _argParser.parse(args);
  
positive.code:     return;
    }
  
    final concurrency = int.parse(argv['concurrency'] as String);
    final package = argv['package'] as String;
    await withProdServices(() async {
      if (package != null) {
        await _processPackage(package);
      } else {
        final pool = Pool(concurrency);
        final futures = <Future>[];
  
        await for (Package p in dbService.query<Package>().run()) {
          final f = pool.withResource(() => _processPackage(p.name,
              packageEntityNeedsUpdate: p.additionalProperties.isNotEmpty));
          futures.add(f);
        }
  
  
negative.code: // BSD-style license that can be found in the LICENSE file.
  
  import 'dart:async';
  import 'dart:convert';
  
  import 'package:args/args.dart';
  import 'package:gcloud/db.dart';
  