anchor.diff:  import 'package:path/path.dart' as p;
   import 'package:pool/pool.dart';
   import 'package:pub_semver/pub_semver.dart';
  +import 'package:retry/retry.dart';
   
   import 'package:pub_dartdoc_data/pub_dartdoc_data.dart';
   
  
positive.code:   }
  
    Future<List<DartdocEntry>> _listEntries(String prefix) async {
      final List<DartdocEntry> list = [];
      await for (final entry in _storage.list(prefix: prefix)) {
        if (entry.isDirectory) continue;
        if (!entry.name.endsWith('.json')) continue;
  
        try {
          list.add(await DartdocEntry.fromStream(_storage.read(entry.name)));
        } catch (e, st) {
          if (e is DetailedApiRequestError && e.status == 404) {
            // ignore exception: entry was removed by another cleanup process during the listing
          } else {
            _logger.warning('Unable to read entry: ${entry.name}.', e, st);
          }
        }
      }
      return list;
    }
  
    Future _deleteAll(DartdocEntry entry) async {
  
negative.code:   /// Returns the file's header from the storage bucket
    Future<FileInfo> getFileInfo(DartdocEntry entry, String relativePath) async {
      final objectName = entry.objectName(relativePath);
      return cache.dartdocFileInfo(objectName).get(
            () async => retry(
              () async {
                try {
                  final info = await _storage.info(objectName);
                  return FileInfo(lastModified: info.updated, etag: info.etag);
                } catch (e) {
                  // TODO: Handle exceptions / errors
                  _logger.info('Requested path $objectName does not exists.');
                  return null;
                }
              },
              maxAttempts: 2,
            ),
          );
    }
  
    /// Returns a file's content from the storage bucket.
  