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;
}