diff --git a/app/lib/frontend/handlers/package.dart b/app/lib/frontend/handlers/package.dart index 44245d32f5..c765c8a7d0 100644 --- a/app/lib/frontend/handlers/package.dart +++ b/app/lib/frontend/handlers/package.dart @@ -230,7 +230,7 @@ Future packageScoreLogTxtHandler( } final log = await taskBackend.taskLog(package, version); return shelf.Response( - log == null ? 404 : 200, + log == null || log.startsWith('no log -') ? 404 : 200, body: log ?? 'no log', headers: { 'content-type': 'text/plain;charset=UTF-8', diff --git a/app/lib/task/backend.dart b/app/lib/task/backend.dart index d40cd7a8c0..c41fb305c8 100644 --- a/app/lib/task/backend.dart +++ b/app/lib/task/backend.dart @@ -960,7 +960,7 @@ class TaskBackend { /// Get log from task run of [package] and [version]. /// - /// Returns `null`, if not available. + /// If log is unavailable, it returns some information about the internal state. /// /// If log is unavailable it's usually because: /// * package is not tracked for analysis, @@ -973,13 +973,21 @@ class TaskBackend { Future taskLog(String package, String version) async { final data = await gzippedTaskResult(package, version, 'log.txt'); if (data == null) { - return null; + final status = await packageStatus(package); + if (status.runtimeVersion == null) { + return 'no log - no tracking information'; + } + final v = status.versions[version]; + if (v == null) { + return 'no log - version is not tracked'; + } + return 'no log - current version status: ${v.status}'; } try { return utf8.decode(gzip.decode(data), allowMalformed: true); } on FormatException catch (e, st) { _log.shout('Task log for $package/$version is malformed', e, st); - return null; + return 'no log - `log.txt` contains malformed characters'; } } diff --git a/app/test/task/task_test.dart b/app/test/task/task_test.dart index 22d8d35520..5affb03533 100644 --- a/app/test/task/task_test.dart +++ b/app/test/task/task_test.dart @@ -77,7 +77,7 @@ void main() { // Check that the log is missing. final log1 = await taskBackend.taskLog('oxygen', '1.2.0'); - expect(log1, isNull); + expect(log1, 'no log - version is not tracked'); // Check that the dartdoc is missing final dartdoc1 = await taskBackend.dartdocFile(