anchor.diff:      ..libraries = libraries
       ..downloads = 0
       ..sortOrder = 1
  -    ..uploaderEmail = user;
  +    ..uploader = user.userId
  +    ..uploaderEmail = user.email;
   
     final versionPubspec = models.PackageVersionPubspec()
       ..initFromKey(key)
  
positive.code:   }
  
    Future<PackageVersion> _performTarballUpload(
        String userEmail,
        String filename,
        Future tarballUpload(String name, String version)) async {
      _logger.info('Examining tarball content.');
  
      // Parse metadata from the tarball.
      final validatedUpload =
          await _parseAndValidateUpload(db, filename, userEmail);
      final newVersion = validatedUpload.packageVersion;
  
      models.Package package;
  
negative.code:         // TODO: check why this is flaky https://github.com/dart-lang/pub-dartlang-dart/issues/1680
          await retryAsync(
              () => _saveTarballToFS(storage.readTempObject(guid), filename));
          return _performTarballUpload(user, filename, (package, version) {
            return storage.uploadViaTempObject(guid, package, version);
          }).whenComplete(() async {
            _logger.info('Removing temporary object $guid.');
  