gitRemoteVerbose static method

Future<Map> gitRemoteVerbose({
  1. String? workingDirectory,
  2. Map<String, String>? environment,
  3. bool includeParentEnvironment = true,
  4. Client? httpClient,
})

Implementation

static Future<Map> gitRemoteVerbose({
  String? workingDirectory,
  Map<String, String>? environment,
  bool includeParentEnvironment = true,
  Client? httpClient,
}) async {
  var res = await Process.run("which", ["git"]);

  if (res.exitCode != 0) {
    return {"@type": "error", "message": "git_not_found", "description": "Please install git first"};
  }

  Process process = await Process.start(
    "git",
    "remote --verbose".split(" "),
    workingDirectory: workingDirectory,
    environment: environment,
    includeParentEnvironment: includeParentEnvironment,
  );
  String message = "";
  process.stderr.listen((event) {
    try {
      message += utf8.decode(event, allowMalformed: true).replaceAll(RegExp("(\t)", caseSensitive: false), " ");
    } catch (e) {}
  });
  process.stdout.listen((event) {
    try {
      message += utf8.decode(event, allowMalformed: true).replaceAll(RegExp("(\t)", caseSensitive: false), " ");
    } catch (e) {}
  });
  int exit_code = await process.exitCode;
  message = message.trim();
  bool is_error = false;
  if (exit_code != 0) {
    is_error = true;
  }
  if (is_error) {
    return {
      "@type": "error",
      "message": "",
      "description": "${message.trim()}".replaceAll(RegExp("(ghp_.*)", caseSensitive: false), ""),
    };
  }

  return {
    "@type": "remotes",
    "remotes": message
        .split("\n")
        .map((e) {
          // ignore: unnecessary_string_escapes
          RegExpMatch? regExpMatch = RegExp("(([a-z0-9_-]+)[ ]+(.*)[ ]+([(][a-z0-9_-]+[)]))", caseSensitive: false).firstMatch(e);

          if (regExpMatch == null) {
            return null;
          }
          Map json_data = {
            "@type": "remote",
            "location": regExpMatch.group(2),
            "url": regExpMatch.group(3),
            "type": (regExpMatch.group(4) ?? "").replaceAll(RegExp("([()])"), "").trim(),
          };
          return json_data;
        })
        .whereType<Map>()
        .toList(),
  };
}