Skip to content

Commit 8075aba

Browse files
authored
Apply obsolete asset removal when deleting a specific version. (#1297)
1 parent f2d08db commit 8075aba

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

app/bin/tools/remove_package.dart

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,13 @@ Future listPackage(String packageName) async {
7575
}
7676
}
7777

78-
Future _deleteWithQuery(Query query) async {
78+
Future _deleteWithQuery<T>(Query query, {bool where(T item)}) async {
7979
final deletes = <Key>[];
8080
await for (Model m in query.run()) {
81-
deletes.add(m.key);
81+
final shouldDelete = where == null || where(m as T);
82+
if (shouldDelete) {
83+
deletes.add(m.key);
84+
}
8285
}
8386
await dbService.withTransaction((tx) async {
8487
tx.queueMutations(deletes: deletes);
@@ -146,7 +149,7 @@ Future removePackage(String packageName) async {
146149
}
147150

148151
Future removePackageVersion(String packageName, String version) async {
149-
return dbService.withTransaction((Transaction T) async {
152+
await dbService.withTransaction((Transaction T) async {
150153
final Key packageKey = dbService.emptyKey.append(Package, id: packageName);
151154
final Package package = (await T.lookup([packageKey])).first;
152155
if (package == null) {
@@ -157,8 +160,7 @@ Future removePackageVersion(String packageName, String version) async {
157160
final List<PackageVersion> versions = await versionsQuery.run().toList();
158161
final versionNames = versions.map((v) => '${v.semanticVersion}').toList();
159162
if (!versionNames.contains(version)) {
160-
throw new Exception(
161-
"Package $packageName does not have a version $version.");
163+
print('Package $packageName does not have a version $version.');
162164
}
163165

164166
if ('${package.latestSemanticVersion}' == version) {
@@ -174,8 +176,20 @@ Future removePackageVersion(String packageName, String version) async {
174176
final storage = backend.repository.storage;
175177
print('Removing GCS objects ...');
176178
await storage.remove(packageName, version);
177-
178-
print('Version "$version" of "$packageName" got successfully removed.');
179-
print('WARNING: Please remember to clear the AppEngine memcache!');
180179
});
180+
181+
await dartdocBackend.removeAll(packageName, version: version);
182+
183+
await _deleteWithQuery(
184+
dbService.query(Job)..filter('packageName =', packageName),
185+
where: (Job job) => job.packageVersion == version,
186+
);
187+
188+
await _deleteWithQuery(
189+
dbService.query(History)..filter('packageName =', packageName),
190+
where: (History history) => history.packageVersion == version,
191+
);
192+
193+
print('Version "$version" of "$packageName" got successfully removed.');
194+
print('WARNING: Please remember to clear the AppEngine memcache!');
181195
}

app/lib/dartdoc/backend.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,9 @@ class DartdocBackend {
166166
}
167167

168168
/// Removes all files related to a package.
169-
Future removeAll(String package) async {
170-
await _deleteAllWithPrefix('$package/');
169+
Future removeAll(String package, {String version}) async {
170+
final prefix = version == null ? '$package/' : '$package/$version/';
171+
await _deleteAllWithPrefix(prefix);
171172
}
172173

173174
/// Removes incomplete uploads and old outputs from the bucket.

app/test/dartdoc/handlers_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class DartdocBackendMock implements DartdocBackend {
139139
}
140140

141141
@override
142-
Future removeAll(String package) {
142+
Future removeAll(String package, {String version}) {
143143
throw new UnimplementedError();
144144
}
145145

0 commit comments

Comments
 (0)