src/dal/git/GitStatusCommand.ts (34 lines of code) (raw):

import {CvsResource} from "../../bll/entities/cvsresources/cvsresource"; import {Logger} from "../../bll/utils/logger"; import {CpProxy} from "../../bll/moduleproxies/cp-proxy"; import {GitStatusRowsParser} from "./GitStatusRowsParser"; export class GitStatusCommand { constructor(private readonly workspaceRootPath: string, private readonly gitPath: string, private cpProxy: CpProxy, private readonly statusRowParser: GitStatusRowsParser, private readonly isPorcelain: boolean = true) { // } public async execute(): Promise<CvsResource[]> { const END_SPACES_REGEXP: RegExp = /\s*$/; let porcelainStatusResult: any; porcelainStatusResult = await this.cpProxy.execAsync(this.getCommand()); if (!porcelainStatusResult || !porcelainStatusResult.stdout) { Logger.logWarning(`GitStatusCommand#exec: git status command result is empty`); return []; } const statusRows = porcelainStatusResult.stdout .toString() .replace(END_SPACES_REGEXP, "") .split("\n"); return this.statusRowParser.tryParseRows(this.workspaceRootPath, statusRows); } private getCommand(): string { const builder: string[] = []; builder.push(`"${this.gitPath}"`); builder.push(`-C "${this.workspaceRootPath}"`); builder.push("status"); builder.push(`${this.isPorcelain ? "--porcelain" : ""}`); return builder.join(" "); } }