blob: e3204c2e9cbcee5daf8c4fb2984da387ae382226 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(https://fxbug.dev/84961): Fix null safety and remove this language version.
// @dart=2.9
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'collector.dart';
/// Receives a [ProcessResult] which contains information about Jiri overrides.
class JiriOverrideParser {
bool parse({ProcessResult processResult}) {
if (processResult.exitCode != 0) {
return false;
}
LineSplitter ls = LineSplitter();
List<String> lines = ls.convert(processResult.stdout);
return lines.isNotEmpty;
}
}
/// Asks Jiri for a list of overrides. Intended to be paired with the
/// [JiriOverrideParser] class, which knows how to make sense of this result.
class JiriOverrideChecker {
Future<ProcessResult> checkStatus() async {
return Process.run('jiri', [
'override',
'-list',
]);
}
}
/// Confirms whether there are any Jiri overrides configured.
///
/// Accepts optional [JiriOverrideChecker] and [JiriOverrideParser] helper
/// classes which respectively know how to make a Jiri system call and
/// make sense of those results. Not passing values leads to default
/// behavior, which is usually what you want.
class JiriCollector implements Collector {
@override
Future<List<Item>> collect({
JiriOverrideChecker jiriOverrideChecker,
JiriOverrideParser jiriOverrideParser,
}) async {
// Create default values
jiriOverrideChecker ??= JiriOverrideChecker();
jiriOverrideParser ??= JiriOverrideParser();
ProcessResult pr = await jiriOverrideChecker.checkStatus();
bool jiriOverrides = jiriOverrideParser.parse(processResult: pr);
return <Item>[
Item(
CategoryType.sourceInfo,
'has_jiri_overrides',
'Has Jiri overrides?',
jiriOverrides,
'output of \'jiri override -list\'',
),
];
}
}