async status()

in packages/web-ide-fs/src/scm/OverlaySourceControl.ts [36:62]


  async status(): Promise<FileStatus[]> {
    // 1. Read `deletedFiles`. Treat each entry as "deleted" file statuses.
    // 2. Recursively read all files in the `repoRootPath` in `writable`. For each file:
    //     a. If file was assumed to be deleted (based on `.deletedFiles.log`), remove "deleted" file status.
    //     b. If file does not exist in `readable`, add "new" file status.
    //     c. ElseIf `writable` file content is different than `readable` file content, add "modified" file status.
    // 3. Return statuses.

    // Step 1
    const deletedFilesLog = await this.#getDeletedFilesLog();

    // Step 2
    const touchedRepoFiles = await this.#readAllWritableRepoFiles();
    const allTouchedPaths = new Set(Object.keys(touchedRepoFiles));
    const touchedStatuses = await this.#processTouchedRepoFiles(touchedRepoFiles);

    const deletedStatuses: FileStatus[] = deletedFilesLog
      .filter(deletedPath => !allTouchedPaths.has(deletedPath))
      .map(path => ({
        type: FileStatusType.Deleted,
        path,
      }));

    const statuses: FileStatus[] = [...deletedStatuses, ...touchedStatuses];

    return statuses;
  }