fromLine static method
Parses a dart installed line, null if it is not one (i.e.
No Dart CLI tools installed.).
Implementation
static DartInstalledCliPackage? fromLine(String line) {
var text = line.trim();
String? status;
final statusMatch = _statusRegExp.firstMatch(text);
if (statusMatch != null) {
status = statusMatch.group(1);
text = text.substring(0, statusMatch.start);
}
final nameEnd = text.indexOf(' ');
if (nameEnd <= 0) {
return null;
}
final name = text.substring(0, nameEnd);
var rest = text.substring(nameEnd + 1);
final versionEnd = rest.indexOf(' ');
final versionText = versionEnd < 0 ? rest : rest.substring(0, versionEnd);
final Version version;
try {
version = Version.parse(versionText);
} catch (_) {
return null;
}
rest = versionEnd < 0 ? '' : rest.substring(versionEnd + 1);
if (rest.isEmpty) {
return DartInstalledCliPackage(
name: name,
version: version,
source: sourceHosted,
status: status,
);
}
final git = _gitRegExp.firstMatch(rest);
if (git != null) {
return DartInstalledCliPackage(
name: name,
version: version,
source: sourceGit,
gitUrl: git.group(1),
gitRef: git.group(2),
status: status,
);
}
final unknown = _unknownRegExp.firstMatch(rest);
if (unknown != null) {
return DartInstalledCliPackage(
name: name,
version: version,
source: sourceUnknown,
status: status,
);
}
final path = _pathRegExp.firstMatch(rest);
if (path != null) {
return DartInstalledCliPackage(
name: name,
version: version,
source: sourcePath,
path: path.group(1),
lastModified: path.group(2),
status: status,
);
}
return null;
}