private async function genFilteredChangesets()

in src/shipit/ShipItSync.php [70:105]


  private async function genFilteredChangesets(
  ): Awaitable<vec<ShipItChangeset>> {
    $manifest = $this->manifest;
    $skipped_ids = $this->syncConfig->getSkippedSourceCommits();
    $gen_filter = $this->syncConfig->getFilter();

    $source_changesets = await $this->genSourceChangesets();
    return await Vec\map_async(
      $source_changesets,
      async $changeset ==> {
        $skip_match = null;
        foreach ($skipped_ids as $skip_id) {
          if (Str\search($changeset->getID(), $skip_id) === 0) {
            $skip_match = $skip_id;
            break;
          }
        }
        if ($skip_match !== null) {
          return $changeset
            ->skip(Str\format(
              'USER SKIPPED COMMIT: id "%s" matches "%s"',
              $changeset->getID(),
              $skip_match,
            ));
        }

        $changeset = await $gen_filter($manifest, $changeset);
        if (!$this->isValidChangeToSync($changeset)) {
          return
            $changeset->withDebugMessage('SKIPPED COMMIT: no matching files');
        } else {
          return self::addTrackingData($manifest, $changeset);
        }
      },
    );
  }