private async function genMakeDiffsUsingGit()

in src/shipit/repo/ShipItRepoHG.php [418:457]


  private async function genMakeDiffsUsingGit(
    string $rev,
    keyset<string> $files,
  ): Awaitable<vec<ShipItDiff>> {
    $tempdir = new ShipItTempDir('git-wd');
    $path = $tempdir->getPath();

    await $this->genCheckoutFilesAtRevToPath($files, $rev.'^', $path.'/a');
    await $this->genCheckoutFilesAtRevToPath($files, $rev, $path.'/b');

    $result = await (
      new ShipItShellCommand(
        $path,
        'git',
        'diff',
        '--binary',
        '--no-prefix',
        '--no-renames',
        'a',
        'b',
      )
    )->setNoExceptions()->genRun();

    invariant(
      $result->getExitCode() === 1,
      'git diff exited with %d, which means no changes; expected 1, '.
      'which means non-empty diff.',
      $result->getExitCode(),
    );
    $patch = $result->getStdOut();

    $diffs = vec[];
    foreach (self::parsePatch($patch) as $hunk) {
      $diff = self::parseDiffHunk($hunk);
      if ($diff !== null) {
        $diffs[] = $diff;
      }
    }
    return $diffs;
  }