simple-git
Version:
Simple GIT interface for node.js
1 lines • 263 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/lib/errors/git-error.ts","../src/lib/errors/git-construct-error.ts","../src/lib/errors/git-plugin-error.ts","../src/lib/errors/git-response-error.ts","../src/lib/errors/task-configuration-error.ts","../src/lib/utils/util.ts","../src/lib/utils/argument-filters.ts","../src/lib/utils/exit-codes.ts","../src/lib/utils/git-output-streams.ts","../src/lib/utils/line-parser.ts","../src/lib/utils/simple-git-options.ts","../src/lib/utils/task-options.ts","../src/lib/utils/task-parser.ts","../src/lib/tasks/check-is-repo.ts","../src/lib/parsers/parse-clean.ts","../src/lib/tasks/task.ts","../src/lib/tasks/clean.ts","../src/lib/responses/ConfigList.ts","../src/lib/tasks/config.ts","../src/lib/tasks/diff-name-status.ts","../src/lib/tasks/grep.ts","../src/lib/tasks/reset.ts","../src/lib/git-logger.ts","../src/lib/runners/tasks-pending-queue.ts","../src/lib/runners/git-executor-chain.ts","../src/lib/runners/git-executor.ts","../src/lib/task-callback.ts","../src/lib/tasks/change-working-directory.ts","../src/lib/tasks/checkout.ts","../src/lib/tasks/clone.ts","../src/lib/parsers/parse-commit.ts","../src/lib/tasks/commit.ts","../src/lib/tasks/count-objects.ts","../src/lib/tasks/first-commit.ts","../src/lib/tasks/hash-object.ts","../src/lib/responses/InitSummary.ts","../src/lib/tasks/init.ts","../src/lib/tasks/interpret-trailers.ts","../src/lib/args/log-format.ts","../src/lib/responses/DiffSummary.ts","../src/lib/parsers/parse-diff-summary.ts","../src/lib/parsers/parse-list-log-summary.ts","../src/lib/tasks/diff.ts","../src/lib/tasks/log.ts","../src/lib/responses/MergeSummary.ts","../src/lib/responses/PullSummary.ts","../src/lib/parsers/parse-remote-objects.ts","../src/lib/parsers/parse-remote-messages.ts","../src/lib/parsers/parse-pull.ts","../src/lib/parsers/parse-merge.ts","../src/lib/tasks/merge.ts","../src/lib/parsers/parse-push.ts","../src/lib/tasks/push.ts","../src/lib/tasks/show.ts","../src/lib/responses/FileStatusSummary.ts","../src/lib/responses/StatusSummary.ts","../src/lib/tasks/status.ts","../src/lib/tasks/version.ts","../src/lib/simple-git-api.ts","../src/lib/runners/scheduler.ts","../src/lib/tasks/apply-patch.ts","../src/lib/responses/BranchSummary.ts","../src/lib/parsers/parse-branch.ts","../src/lib/responses/BranchDeleteSummary.ts","../src/lib/parsers/parse-branch-delete.ts","../src/lib/tasks/branch.ts","../src/lib/tasks/check-ignore.ts","../src/lib/parsers/parse-fetch.ts","../src/lib/tasks/fetch.ts","../src/lib/parsers/parse-move.ts","../src/lib/tasks/move.ts","../src/lib/tasks/pull.ts","../src/lib/responses/GetRemoteSummary.ts","../src/lib/tasks/remote.ts","../src/lib/tasks/stash-list.ts","../src/lib/tasks/sub-module.ts","../src/lib/responses/TagList.ts","../src/lib/tasks/tag.ts","../src/git.mjs","../src/lib/plugins/abort-plugin.ts","../src/lib/plugins/allow-environment.plugin.ts","../src/lib/plugins/block-unsafe-operations-plugin.ts","../src/lib/plugins/command-config-prefixing-plugin.ts","../src/lib/plugins/completion-detection.plugin.ts","../src/lib/plugins/custom-binary.plugin.ts","../src/lib/errors/git-configuration-error.ts","../src/lib/plugins/error-detection.plugin.ts","../src/lib/plugins/input.plugin.ts","../src/lib/plugins/plugin-store.ts","../src/lib/plugins/progress-monitor-plugin.ts","../src/lib/plugins/spawn-options-plugin.ts","../src/lib/plugins/suffix-paths.plugin.ts","../src/lib/plugins/timeout-plugin.ts","../src/lib/git-factory.ts"],"sourcesContent":["import type { SimpleGitTask } from '../types';\n\n/**\n * The `GitError` is thrown when the underlying `git` process throws a\n * fatal exception (eg an `ENOENT` exception when attempting to use a\n * non-writable directory as the root for your repo), and acts as the\n * base class for more specific errors thrown by the parsing of the\n * git response or errors in the configuration of the task about to\n * be run.\n *\n * When an exception is thrown, pending tasks in the same instance will\n * not be executed. The recommended way to run a series of tasks that\n * can independently fail without needing to prevent future tasks from\n * running is to catch them individually:\n *\n * ```typescript\n import { simpleGit, SimpleGit, GitError, PullResult } from 'simple-git';\n\n function catchTask (e: GitError) {\n return e.\n }\n\n const git = simpleGit(repoWorkingDir);\n const pulled: PullResult | GitError = await git.pull().catch(catchTask);\n const pushed: string | GitError = await git.pushTags().catch(catchTask);\n ```\n */\nexport class GitError extends Error {\n constructor(\n public task?: SimpleGitTask<any>,\n message?: string\n ) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import type { SimpleGitOptions } from '../types';\nimport { GitError } from './git-error';\n\n/**\n * The `GitConstructError` is thrown when an error occurs in the constructor\n * of the `simple-git` instance itself. Most commonly as a result of using\n * a `baseDir` option that points to a folder that either does not exist,\n * or cannot be read by the user the node script is running as.\n *\n * Check the `.message` property for more detail including the properties\n * passed to the constructor.\n */\nexport class GitConstructError extends GitError {\n constructor(\n public readonly config: SimpleGitOptions,\n message: string\n ) {\n super(undefined, message);\n }\n}\n","import type { SimpleGitOptions, SimpleGitTask } from '../types';\nimport { GitError } from './git-error';\n\nexport class GitPluginError extends GitError {\n constructor(\n public task?: SimpleGitTask<any>,\n public readonly plugin?: keyof SimpleGitOptions,\n message?: string\n ) {\n super(task, message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `GitResponseError` is the wrapper for a parsed response that is treated as\n * a fatal error, for example attempting a `merge` can leave the repo in a corrupted\n * state when there are conflicts so the task will reject rather than resolve.\n *\n * For example, catching the merge conflict exception:\n *\n * ```typescript\n import { simpleGit, SimpleGit, GitResponseError, MergeSummary } from 'simple-git';\n\n const git = simpleGit(repoRoot);\n const mergeOptions: string[] = ['--no-ff', 'other-branch'];\n const mergeSummary: MergeSummary = await git.merge(mergeOptions)\n .catch((e: GitResponseError<MergeSummary>) => e.git);\n\n if (mergeSummary.failed) {\n // deal with the error\n }\n ```\n */\nexport class GitResponseError<T = any> extends GitError {\n constructor(\n /**\n * `.git` access the parsed response that is treated as being an error\n */\n public readonly git: T,\n message?: string\n ) {\n super(undefined, message || String(git));\n }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `TaskConfigurationError` is thrown when a command was incorrectly\n * configured. An error of this kind means that no attempt was made to\n * run your command through the underlying `git` binary.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class TaskConfigurationError extends GitError {\n constructor(message?: string) {\n super(undefined, message);\n }\n}\n","import { exists, FOLDER } from '@kwsites/file-exists';\n\nimport type { Maybe } from '../types';\nimport { filterHasLength } from './argument-filters';\n\ntype Callable = (...args: unknown[]) => unknown;\n\nexport const NULL = '\\0';\n\nexport const NOOP: Callable = () => {};\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function asFunction<T>(source: T | unknown): Callable {\n if (typeof source !== 'function') {\n return NOOP;\n }\n return source as Callable;\n}\n\n/**\n * Determines whether the supplied argument is both a function, and is not\n * the `NOOP` function.\n */\nexport function isUserFunction<T extends Function>(source: T | unknown): source is T {\n return typeof source === 'function' && source !== NOOP;\n}\n\nexport function splitOn(input: string, char: string): [string, string] {\n const index = input.indexOf(char);\n if (index <= 0) {\n return [input, ''];\n }\n\n return [input.substr(0, index), input.substr(index + 1)];\n}\n\nexport function first<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function first<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function first(input: unknown[] | IArguments, offset = 0): Maybe<unknown> {\n return isArrayLike(input) && input.length > offset ? input[offset] : undefined;\n}\n\nexport function last<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function last<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function last<T>(input: T, offset?: number): Maybe<unknown>;\nexport function last(input: unknown, offset = 0) {\n if (isArrayLike(input) && input.length > offset) {\n return input[input.length - 1 - offset];\n }\n}\n\ntype ArrayLike<T> = T[] | IArguments | { [index: number]: T; length: number };\n\nfunction isArrayLike(input: unknown): input is ArrayLike<unknown> {\n return filterHasLength(input);\n}\n\nexport function toLinesWithContent(input = '', trimmed = true, separator = '\\n'): string[] {\n return input.split(separator).reduce((output, line) => {\n const lineContent = trimmed ? line.trim() : line;\n if (lineContent) {\n output.push(lineContent);\n }\n return output;\n }, [] as string[]);\n}\n\ntype LineWithContentCallback<T = void> = (line: string) => T;\n\nexport function forEachLineWithContent<T>(\n input: string,\n callback: LineWithContentCallback<T>\n): T[] {\n return toLinesWithContent(input, true).map((line) => callback(line));\n}\n\nexport function folderExists(path: string): boolean {\n return exists(path, FOLDER);\n}\n\n/**\n * Adds `item` into the `target` `Array` or `Set` when it is not already present and returns the `item`.\n */\nexport function append<T>(target: T[] | Set<T>, item: T): typeof item {\n if (Array.isArray(target)) {\n if (!target.includes(item)) {\n target.push(item);\n }\n } else {\n target.add(item);\n }\n return item;\n}\n\n/**\n * Adds `item` into the `target` `Array` when it is not already present and returns the `target`.\n */\nexport function including<T>(target: T[], item: T): typeof target {\n if (Array.isArray(target) && !target.includes(item)) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function remove<T>(target: Set<T> | T[], item: T): T {\n if (Array.isArray(target)) {\n const index = target.indexOf(item);\n if (index >= 0) {\n target.splice(index, 1);\n }\n } else {\n target.delete(item);\n }\n return item;\n}\n\nexport const objectToString = Object.prototype.toString.call.bind(Object.prototype.toString) as (\n input: unknown\n) => string;\n\nexport function asArray<T>(source: T | T[]): T[] {\n return Array.isArray(source) ? source : [source];\n}\n\nexport function asCamelCase(str: string) {\n return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n return chr.toUpperCase();\n });\n}\n\nexport function asStringArray<T>(source: T | T[]): string[] {\n return asArray(source).map((item) => {\n return item instanceof String ? (item as string) : String(item);\n });\n}\n\nexport function asNumber(source: string | null | undefined, onNaN = 0) {\n if (source == null) {\n return onNaN;\n }\n\n const num = parseInt(source, 10);\n return Number.isNaN(num) ? onNaN : num;\n}\n\nexport function prefixedArray<T>(input: T[], prefix: T): T[] {\n const output: T[] = [];\n for (let i = 0, max = input.length; i < max; i++) {\n output.push(prefix, input[i]);\n }\n return output;\n}\n\nexport function bufferToString(input: Buffer | Buffer[]): string {\n return (Array.isArray(input) ? Buffer.concat(input) : input).toString('utf-8');\n}\n\nexport function byteLength(input?: string | Buffer) {\n if (!input) {\n return 0;\n }\n\n return Buffer.isBuffer(input) ? input.length : Buffer.byteLength(input);\n}\n\n/**\n * Get a new object from a source object with only the listed properties.\n */\nexport function pick<T, K extends keyof T>(source: T, properties: readonly K[]) {\n const out: Partial<Pick<T, K>> = {};\n\n properties.forEach((key) => {\n if (source[key] !== undefined) {\n out[key] = source[key];\n }\n });\n\n return out;\n}\n\nexport function delay(duration = 0): Promise<void> {\n return new Promise((done) => setTimeout(done, duration));\n}\n\nexport function orVoid<T>(input: T | false) {\n if (input === false) {\n return undefined;\n }\n return input;\n}\n","import { isPathSpec } from '@simple-git/args-pathspec';\n\nimport type { Maybe, Options, Primitives } from '../types';\nimport { objectToString } from './util';\n\nexport type ArgumentFilterPredicate<T> = (input: T | unknown) => input is T;\n\nexport function filterType<T, K>(\n input: K,\n filter: ArgumentFilterPredicate<T>\n): K extends T ? T : undefined;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def: T): T;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def?: T): Maybe<T> {\n if (filter(input)) {\n return input;\n }\n return arguments.length > 2 ? def : undefined;\n}\n\nexport const filterArray: ArgumentFilterPredicate<Array<unknown>> = (\n input\n): input is Array<unknown> => {\n return Array.isArray(input);\n};\n\nexport function filterPrimitives(\n input: unknown,\n omit?: Array<'boolean' | 'string' | 'number'>\n): input is Primitives {\n const type = isPathSpec(input) ? 'string' : typeof input;\n\n return (\n /number|string|boolean/.test(type) &&\n (!omit || !omit.includes(type as 'boolean' | 'string' | 'number'))\n );\n}\n\nexport const filterNumber: ArgumentFilterPredicate<number> = (input: unknown): input is number => {\n return typeof input === 'number';\n};\n\nexport const filterString: ArgumentFilterPredicate<string> = (input: unknown): input is string => {\n return typeof input === 'string' || isPathSpec(input);\n};\n\nexport const filterStringOrBuffer: ArgumentFilterPredicate<string | Buffer> = (\n input: unknown\n): input is string | Buffer => {\n return filterString(input) || Buffer.isBuffer(input);\n};\n\nexport const filterStringOrStringArray: ArgumentFilterPredicate<string | string[]> = (\n input\n): input is string | string[] => {\n return filterString(input) || (Array.isArray(input) && input.every(filterString));\n};\n\nexport function filterPlainObject<T extends Options>(input: T | unknown): input is T;\nexport function filterPlainObject<T extends Record<string, unknown>>(\n input: T | unknown\n): input is T {\n return !!input && objectToString(input) === '[object Object]';\n}\n\nexport function filterFunction(input: unknown): input is (...args: unknown[]) => unknown {\n return typeof input === 'function';\n}\n\nexport const filterHasLength: ArgumentFilterPredicate<{ length: number }> = (\n input\n): input is { length: number } => {\n if (input == null || 'number|boolean|function'.includes(typeof input)) {\n return false;\n }\n\n return typeof (input as { length?: number }).length === 'number';\n};\n","/**\n * Known process exit codes used by the task parsers to determine whether an error\n * was one they can automatically handle\n */\nexport enum ExitCodes {\n SUCCESS,\n ERROR,\n NOT_FOUND = -2,\n UNCLEAN = 128,\n}\n","import type { TaskResponseFormat } from '../types';\n\nexport class GitOutputStreams<T extends TaskResponseFormat = Buffer> {\n constructor(\n public readonly stdOut: T,\n public readonly stdErr: T\n ) {}\n\n asStrings(): GitOutputStreams<string> {\n return new GitOutputStreams(this.stdOut.toString('utf8'), this.stdErr.toString('utf8'));\n }\n}\n","function useMatchesDefault() {\n throw new Error(`LineParser:useMatches not implemented`);\n}\n\nexport class LineParser<T> {\n protected matches: string[] = [];\n protected useMatches: (target: T, match: string[]) => boolean | void = useMatchesDefault;\n\n private _regExp: RegExp[];\n\n constructor(\n regExp: RegExp | RegExp[],\n useMatches?: (target: T, match: string[]) => boolean | void\n ) {\n this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n if (useMatches) {\n this.useMatches = useMatches;\n }\n }\n\n parse = (line: (offset: number) => string | undefined, target: T): boolean => {\n this.resetMatches();\n\n if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n return false;\n }\n\n return this.useMatches(target, this.prepareMatches()) !== false;\n };\n\n protected resetMatches() {\n this.matches.length = 0;\n }\n\n protected prepareMatches() {\n return this.matches;\n }\n\n protected addMatch(reg: RegExp, index: number, line?: string) {\n const matched = line && reg.exec(line);\n if (matched) {\n this.pushMatch(index, matched);\n }\n\n return !!matched;\n }\n\n protected pushMatch(_index: number, matched: string[]) {\n this.matches.push(...matched.slice(1));\n }\n}\n\nexport class RemoteLineParser<T> extends LineParser<T> {\n protected addMatch(reg: RegExp, index: number, line?: string): boolean {\n return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n }\n\n protected pushMatch(index: number, matched: string[]) {\n if (index > 0 || matched.length > 1) {\n super.pushMatch(index, matched);\n }\n }\n}\n","import type { SimpleGitOptions } from '../types';\n\nconst defaultOptions: Omit<SimpleGitOptions, 'baseDir'> = {\n binary: 'git',\n maxConcurrentProcesses: 5,\n config: [],\n trimmed: false,\n};\n\nexport function createInstanceConfig(\n ...options: Array<Partial<SimpleGitOptions> | undefined>\n): SimpleGitOptions {\n const baseDir = process.cwd();\n const config: SimpleGitOptions = Object.assign(\n { baseDir, ...defaultOptions },\n ...options.filter((o) => typeof o === 'object' && o)\n );\n\n config.baseDir = config.baseDir || baseDir;\n config.trimmed = config.trimmed === true;\n\n return config;\n}\n","import { isPathSpec } from '@simple-git/args-pathspec';\n\nimport type { Maybe, Options } from '../types';\nimport {\n filterArray,\n filterFunction,\n filterPlainObject,\n filterPrimitives,\n filterType,\n} from './argument-filters';\nimport { asFunction, asStringArray, isUserFunction, last } from './util';\n\nexport function appendTaskOptions<T extends Options = Options>(\n options: Maybe<T>,\n commands: string[] = []\n): string[] {\n if (!filterPlainObject<Options>(options)) {\n return commands;\n }\n\n return Object.keys(options).reduce((commands: string[], key: string) => {\n const value = options[key];\n\n if (isPathSpec(value)) {\n commands.push(value);\n } else if (filterPrimitives(value, ['boolean'])) {\n commands.push(key + '=' + value);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n if (!filterPrimitives(v, ['string', 'number'])) {\n commands.push(key + '=' + v);\n }\n }\n } else {\n commands.push(key);\n }\n\n return commands;\n }, commands);\n}\n\nexport function getTrailingOptions(\n args: IArguments,\n initialPrimitive = 0,\n objectOnly = false\n): string[] {\n const command: string[] = [];\n\n for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n if ('string|number'.includes(typeof args[i])) {\n command.push(String(args[i]));\n }\n }\n\n appendTaskOptions(trailingOptionsArgument(args), command);\n if (!objectOnly) {\n command.push(...trailingArrayArgument(args));\n }\n\n return command;\n}\n\nfunction trailingArrayArgument(args: IArguments) {\n const hasTrailingCallback = typeof last(args) === 'function';\n return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\n\n/**\n * Given any number of arguments, returns the trailing options argument, ignoring a trailing function argument\n * if there is one. When not found, the return value is null.\n */\nexport function trailingOptionsArgument(args: IArguments): Maybe<Options> {\n const hasTrailingCallback = filterFunction(last(args));\n return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function trailingFunctionArgument(\n args: unknown[] | IArguments | unknown,\n includeNoop = true\n): Maybe<(...args: unknown[]) => unknown> {\n const callback = asFunction(last(args));\n return includeNoop || isUserFunction(callback) ? callback : undefined;\n}\n","import type { MaybeArray, TaskParser, TaskResponseFormat } from '../types';\nimport type { GitOutputStreams } from './git-output-streams';\nimport type { LineParser } from './line-parser';\nimport { asArray, toLinesWithContent } from './util';\n\nexport function callTaskParser<INPUT extends TaskResponseFormat, RESPONSE>(\n parser: TaskParser<INPUT, RESPONSE>,\n streams: GitOutputStreams<INPUT>\n) {\n return parser(streams.stdOut, streams.stdErr);\n}\n\nexport function parseStringResponse<T>(\n result: T,\n parsers: LineParser<T>[],\n texts: MaybeArray<string>,\n trim = true\n): T {\n asArray(texts).forEach((text) => {\n for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n const line = (offset = 0) => {\n if (i + offset >= max) {\n return;\n }\n return lines[i + offset];\n };\n\n parsers.some(({ parse }) => parse(line, result));\n }\n });\n\n return result;\n}\n","import type { Maybe, StringTask } from '../types';\nimport { ExitCodes } from '../utils';\n\nexport enum CheckRepoActions {\n BARE = 'bare',\n IN_TREE = 'tree',\n IS_REPO_ROOT = 'root',\n}\n\nconst onError: StringTask<boolean>['onError'] = ({ exitCode }, error, done, fail) => {\n if (exitCode === ExitCodes.UNCLEAN && isNotRepoMessage(error)) {\n return done(Buffer.from('false'));\n }\n\n fail(error);\n};\n\nconst parser: StringTask<boolean>['parser'] = (text) => {\n return text.trim() === 'true';\n};\n\nexport function checkIsRepoTask(action: Maybe<CheckRepoActions>): StringTask<boolean> {\n switch (action) {\n case CheckRepoActions.BARE:\n return checkIsBareRepoTask();\n case CheckRepoActions.IS_REPO_ROOT:\n return checkIsRepoRootTask();\n }\n\n const commands = ['rev-parse', '--is-inside-work-tree'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser,\n };\n}\n\nexport function checkIsRepoRootTask(): StringTask<boolean> {\n const commands = ['rev-parse', '--git-dir'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser(path) {\n return /^\\.(git)?$/.test(path.trim());\n },\n };\n}\n\nexport function checkIsBareRepoTask(): StringTask<boolean> {\n const commands = ['rev-parse', '--is-bare-repository'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser,\n };\n}\n\nfunction isNotRepoMessage(error: Error): boolean {\n return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\n","import type { CleanSummary } from '../../typings';\nimport { toLinesWithContent } from '../utils';\n\nexport class CleanResponse implements CleanSummary {\n public readonly paths: string[];\n public readonly files: string[];\n public readonly folders: string[];\n public readonly dryRun: boolean;\n\n constructor(dryRun: boolean) {\n this.paths = [];\n this.files = [];\n this.folders = [];\n this.dryRun = dryRun;\n }\n}\n\nconst removalRegexp = /^[a-z]+\\s*/i;\nconst dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\nconst isFolderRegexp = /\\/$/;\n\nexport function cleanSummaryParser(dryRun: boolean, text: string): CleanSummary {\n const summary = new CleanResponse(dryRun);\n const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n\n toLinesWithContent(text).forEach((line) => {\n const removed = line.replace(regexp, '');\n\n summary.paths.push(removed);\n (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n });\n\n return summary;\n}\n","import { TaskConfigurationError } from '../errors/task-configuration-error';\nimport type { BufferTask, EmptyTaskParser, SimpleGitTask, StringTask } from '../types';\n\nexport const EMPTY_COMMANDS: [] = [];\n\nexport type EmptyTask = {\n commands: typeof EMPTY_COMMANDS;\n format: 'empty';\n parser: EmptyTaskParser;\n onError?: undefined;\n};\n\nexport function adhocExecTask(parser: EmptyTaskParser): EmptyTask {\n return {\n commands: EMPTY_COMMANDS,\n format: 'empty',\n parser,\n };\n}\n\nexport function configurationErrorTask(error: Error | string): EmptyTask {\n return {\n commands: EMPTY_COMMANDS,\n format: 'empty',\n parser() {\n throw typeof error === 'string' ? new TaskConfigurationError(error) : error;\n },\n };\n}\n\nexport function straightThroughStringTask(commands: string[], trimmed = false): StringTask<string> {\n return {\n commands,\n format: 'utf-8',\n parser(text) {\n return trimmed ? String(text).trim() : text;\n },\n };\n}\n\nexport function straightThroughBufferTask(commands: string[]): BufferTask<Buffer> {\n return {\n commands,\n format: 'buffer',\n parser(buffer) {\n return buffer;\n },\n };\n}\n\nexport function isBufferTask<R>(task: SimpleGitTask<R>): task is BufferTask<R> {\n return task.format === 'buffer';\n}\n\nexport function isEmptyTask<R>(task: SimpleGitTask<R>): task is EmptyTask {\n return task.format === 'empty' || !task.commands.length;\n}\n","import type { CleanSummary } from '../../typings';\nimport { cleanSummaryParser } from '../parsers/parse-clean';\nimport type { Maybe, StringTask } from '../types';\nimport { asStringArray } from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport const CONFIG_ERROR_INTERACTIVE_MODE = 'Git clean interactive mode is not supported';\nexport const CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\nexport const CONFIG_ERROR_UNKNOWN_OPTION = 'Git clean unknown option found in: ';\n\n/**\n * All supported option switches available for use in a `git.clean` operation\n */\nexport enum CleanOptions {\n DRY_RUN = 'n',\n FORCE = 'f',\n IGNORED_INCLUDED = 'x',\n IGNORED_ONLY = 'X',\n EXCLUDING = 'e',\n QUIET = 'q',\n RECURSIVE = 'd',\n}\n\n/**\n * The two modes `git.clean` can run in - one of these must be supplied in order\n * for the command to not throw a `TaskConfigurationError`\n */\nexport type CleanMode = CleanOptions.FORCE | CleanOptions.DRY_RUN;\n\nconst CleanOptionValues: Set<string> = new Set([\n 'i',\n ...asStringArray(Object.values(CleanOptions as any)),\n]);\n\nexport function cleanWithOptionsTask(mode: CleanMode | string, customArgs: string[]) {\n const { cleanMode, options, valid } = getCleanOptions(mode);\n\n if (!cleanMode) {\n return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n }\n\n if (!valid.options) {\n return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n }\n\n options.push(...customArgs);\n\n if (options.some(isInteractiveMode)) {\n return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n }\n\n return cleanTask(cleanMode, options);\n}\n\nexport function cleanTask(mode: CleanMode, customArgs: string[]): StringTask<CleanSummary> {\n const commands: string[] = ['clean', `-${mode}`, ...customArgs];\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): CleanSummary {\n return cleanSummaryParser(mode === CleanOptions.DRY_RUN, text);\n },\n };\n}\n\nexport function isCleanOptionsArray(input: string[]): input is CleanOptions[] {\n return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\n\nfunction getCleanOptions(input: string) {\n let cleanMode: Maybe<CleanMode>;\n let options: string[] = [];\n let valid = { cleanMode: false, options: true };\n\n input\n .replace(/[^a-z]i/g, '')\n .split('')\n .forEach((char) => {\n if (isCleanMode(char)) {\n cleanMode = char;\n valid.cleanMode = true;\n } else {\n valid.options = valid.options && isKnownOption((options[options.length] = `-${char}`));\n }\n });\n\n return {\n cleanMode,\n options,\n valid,\n };\n}\n\nfunction isCleanMode(cleanMode?: string): cleanMode is CleanMode {\n return cleanMode === CleanOptions.FORCE || cleanMode === CleanOptions.DRY_RUN;\n}\n\nfunction isKnownOption(option: string): boolean {\n return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\n\nfunction isInteractiveMode(option: string): boolean {\n if (/^-[^\\-]/.test(option)) {\n return option.indexOf('i') > 0;\n }\n\n return option === '--interactive';\n}\n","import type { ConfigGetResult, ConfigListSummary, ConfigValues } from '../../typings';\nimport { last, splitOn } from '../utils';\n\nexport class ConfigList implements ConfigListSummary {\n public files: string[] = [];\n public values: { [fileName: string]: ConfigValues } = Object.create(null);\n\n private _all: ConfigValues | undefined;\n\n public get all(): ConfigValues {\n if (!this._all) {\n this._all = this.files.reduce((all: ConfigValues, file: string) => {\n return Object.assign(all, this.values[file]);\n }, {});\n }\n\n return this._all;\n }\n\n public addFile(file: string): ConfigValues {\n if (!(file in this.values)) {\n const latest = last(this.files);\n this.values[file] = latest ? Object.create(this.values[latest]) : {};\n\n this.files.push(file);\n }\n\n return this.values[file];\n }\n\n public addValue(file: string, key: string, value: string) {\n const values = this.addFile(file);\n\n if (!Object.hasOwn(values, key)) {\n values[key] = value;\n } else if (Array.isArray(values[key])) {\n (values[key] as string[]).push(value);\n } else {\n values[key] = [values[key] as string, value];\n }\n\n this._all = undefined;\n }\n}\n\nexport function configListParser(text: string): ConfigList {\n const config = new ConfigList();\n\n for (const item of configParser(text)) {\n config.addValue(item.file, String(item.key), item.value);\n }\n\n return config;\n}\n\nexport function configGetParser(text: string, key: string): ConfigGetResult {\n let value: string | null = null;\n const values: string[] = [];\n const scopes: Map<string, string[]> = new Map();\n\n for (const item of configParser(text, key)) {\n if (item.key !== key) {\n continue;\n }\n\n values.push((value = item.value));\n\n if (!scopes.has(item.file)) {\n scopes.set(item.file, []);\n }\n\n scopes.get(item.file)!.push(value);\n }\n\n return {\n key,\n paths: Array.from(scopes.keys()),\n scopes,\n value,\n values,\n };\n}\n\nfunction configFilePath(filePath: string): string {\n return filePath.replace(/^(file):/, '');\n}\n\nfunction* configParser(text: string, requestedKey: string | null = null) {\n const lines = text.split('\\0');\n\n for (let i = 0, max = lines.length - 1; i < max; ) {\n const file = configFilePath(lines[i++]);\n\n let value = lines[i++];\n let key = requestedKey;\n\n if (value.includes('\\n')) {\n const line = splitOn(value, '\\n');\n key = line[0];\n value = line[1];\n }\n\n yield { file, key, value };\n }\n}\n","import type { ConfigGetResult, ConfigListSummary, SimpleGit } from '../../typings';\nimport { configGetParser, configListParser } from '../responses/ConfigList';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { trailingFunctionArgument } from '../utils';\n\nexport enum GitConfigScope {\n system = 'system',\n global = 'global',\n local = 'local',\n worktree = 'worktree',\n}\n\nfunction asConfigScope<T extends GitConfigScope | undefined>(\n scope: GitConfigScope | unknown,\n fallback: T\n): GitConfigScope | T {\n if (typeof scope === 'string' && Object.hasOwn(GitConfigScope, scope)) {\n return scope as GitConfigScope;\n }\n return fallback;\n}\n\nfunction addConfigTask(\n key: string,\n value: string,\n append: boolean,\n scope: GitConfigScope\n): StringTask<string> {\n const commands: string[] = ['config', `--${scope}`];\n\n if (append) {\n commands.push('--add');\n }\n\n commands.push(key, value);\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): string {\n return text;\n },\n };\n}\n\nfunction getConfigTask(key: string, scope?: GitConfigScope): StringTask<ConfigGetResult> {\n const commands: string[] = ['config', '--null', '--show-origin', '--get-all', key];\n\n if (scope) {\n commands.splice(1, 0, `--${scope}`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text) {\n return configGetParser(text, key);\n },\n };\n}\n\nfunction listConfigTask(scope?: GitConfigScope): StringTask<ConfigListSummary> {\n const commands = ['config', '--list', '--show-origin', '--null'];\n\n if (scope) {\n commands.push(`--${scope}`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string) {\n return configListParser(text);\n },\n };\n}\n\nexport default function (): Pick<SimpleGit, 'addConfig' | 'getConfig' | 'listConfig'> {\n return {\n addConfig(this: SimpleGitApi, key: string, value: string, ...rest: unknown[]) {\n return this._runTask(\n addConfigTask(\n key,\n value,\n rest[0] === true,\n asConfigScope(rest[1], GitConfigScope.local)\n ),\n trailingFunctionArgument(arguments)\n );\n },\n\n getConfig(this: SimpleGitApi, key: string, scope?: GitConfigScope) {\n return this._runTask(\n getConfigTask(key, asConfigScope(scope, undefined)),\n trailingFunctionArgument(arguments)\n );\n },\n\n listConfig(this: SimpleGitApi, ...rest: unknown[]) {\n return this._runTask(\n listConfigTask(asConfigScope(rest[0], undefined)),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","export enum DiffNameStatus {\n ADDED = 'A',\n COPIED = 'C',\n DELETED = 'D',\n MODIFIED = 'M',\n RENAMED = 'R',\n CHANGED = 'T',\n UNMERGED = 'U',\n UNKNOWN = 'X',\n BROKEN = 'B',\n}\n\nconst diffNameStatus = new Set(Object.values(DiffNameStatus));\n\nexport function isDiffNameStatus(input: string): input is DiffNameStatus {\n return diffNameStatus.has(input as DiffNameStatus);\n}\n","import type { GrepResult, SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport {\n asNumber,\n forEachLineWithContent,\n getTrailingOptions,\n NULL,\n prefixedArray,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nconst disallowedOptions = ['-h'];\n\nconst Query = Symbol('grepQuery');\n\nexport interface GitGrepQuery extends Iterable<string> {\n /** Adds one or more terms to be grouped as an \"and\" to any other terms */\n and(...and: string[]): this;\n\n /** Adds one or more search terms - git.grep will \"or\" this to other terms */\n param(...param: string[]): this;\n}\n\nclass GrepQuery implements GitGrepQuery {\n private [Query]: string[] = [];\n\n *[Symbol.iterator]() {\n for (const query of this[Query]) {\n yield query;\n }\n }\n\n and(...and: string[]) {\n and.length && this[Query].push('--and', '(', ...prefixedArray(and, '-e'), ')');\n return this;\n }\n\n param(...param: string[]) {\n this[Query].push(...prefixedArray(param, '-e'));\n return this;\n }\n}\n\n/**\n * Creates a new builder for a `git.grep` query with optional params\n */\nexport function grepQueryBuilder(...params: string[]): GitGrepQuery {\n return new GrepQuery().param(...params);\n}\n\nfunction parseGrep(grep: string): GrepResult {\n const paths: GrepResult['paths'] = new Set<string>();\n const results: GrepResult['results'] = {};\n\n forEachLineWithContent(grep, (input) => {\n const [path, line, preview] = input.split(NULL);\n paths.add(path);\n (results[path] = results[path] || []).push({\n line: asNumber(line),\n path,\n preview,\n });\n });\n\n return {\n paths,\n results,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'grep'> {\n return {\n grep(this: SimpleGitApi, searchTerm: string | GitGrepQuery) {\n const then = trailingFunctionArgument(arguments);\n const options = getTrailingOptions(arguments);\n\n for (const option of disallowedOptions) {\n if (options.includes(option)) {\n return this._runTask(\n configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n then\n );\n }\n }\n\n if (typeof searchTerm === 'string') {\n searchTerm = grepQueryBuilder().param(searchTerm);\n }\n\n const commands = ['grep', '--null', '-n', '--full-name', ...options, ...searchTerm];\n\n return this._runTask(\n {\n commands,\n format: 'utf-8',\n parser(stdOut) {\n return parseGrep(stdOut);\n },\n },\n then\n );\n },\n };\n}\n","import type { Maybe, OptionFlags, Options } from '../types';\nimport { asStringArray } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport enum ResetMode {\n MIXED = 'mixed',\n SOFT = 'soft',\n HARD = 'hard',\n MERGE = 'merge',\n KEEP = 'keep',\n}\n\nconst validResetModes = asStringArray(Object.values(ResetMode));\n\nexport type ResetOptions = Options &\n OptionFlags<'-q' | '--quiet' | '--no-quiet' | '--pathspec-from-nul'> &\n OptionFlags<'--pathspec-from-file', string>;\n\nexport function resetTask(mode: Maybe<ResetMode>, customArgs: string[]) {\n const commands: string[] = ['reset'];\n if (isValidResetMode(mode)) {\n commands.push(`--${mode}`);\n }\n commands.push(...customArgs);\n\n return straightThroughStringTask(commands);\n}\n\nexport function getResetMode(mode: ResetMode | unknown): Maybe<ResetMode> {\n if (isValidResetMode(mode)) {\n return mode;\n }\n\n switch (typeof mode) {\n case 'string':\n case 'undefined':\n return ResetMode.SOFT;\n }\n\n return;\n}\n\nfunction isValidResetMode(mode: ResetMode | unknown): mode is ResetMode {\n return typeof mode === 'string' && validResetModes.includes(mode);\n}\n","import debug, { type Debugger } from 'debug';\n\nimport type { Maybe } from './types';\nimport {\n append,\n filterHasLength,\n filterString,\n filterType,\n NOOP,\n objectToString,\n remove,\n} from './utils';\n\ndebug.formatters.L = (value: any) => String(filterHasLength(value) ? value.length : '-');\ndebug.formatters.B = (value: Buffer) => {\n if (Buffer.isBuffer(value)) {\n return value.toString('utf8');\n }\n return objectToString(value);\n};\n\ntype OutputLoggingHandler = (message: string, ...args: any[]) => void;\n\nfunction createLog() {\n return debug('simple-git');\n}\n\nexport interface OutputLogger extends OutputLoggingHandler {\n readonly label: string;\n\n info: OutputLoggingHandler;\n step(nextStep?: string): OutputLogger;\n sibling(name: string): OutputLogger;\n}\n\nfunction prefixedLogger(\n to: Debugger,\n prefix: string,\n forward?: OutputLoggingHandler\n): OutputLoggingHandler {\n if (!prefix || !String(prefix).replace(/\\s*/, '')) {\n return !forward\n ? to\n : (message, ...args) => {\n to(message, ...args);\n forward(message, ...args);\n };\n }\n\n return (message, ...args) => {\n to(`%s ${message}`, prefix, ...args);\n if (forward) {\n forward(message, ...args);\n }\n };\n}\n\nfunction childLoggerName(\n name: Maybe<string>,\n childDebugger: Maybe<Debugger>,\n { namespace: parentNamespace }: Debugger\n): string {\n if (typeof name === 'string') {\n return name;\n }\n const childNamespace = (childDebugger && childDebugger.namespace) || '';\n\n if (childNamespace.startsWith(parentNamespace)) {\n return childNamespace.substr(parentNamespace.length + 1);\n }\n\n return childNamespace || parentNamespace;\n}\n\nexport function createLogger(\n label: string,\n verbose?: string | Debugger,\n initialStep?: string,\n infoDebugger = createLog()\n): OutputLogger {\n const labelPrefix = (label && `[${label}]`) || '';\n\n const spawned: OutputLogger[] = [];\n const debugDebugger: Maybe<Debugger> =\n typeof verbose === 'string' ? infoDebugger.extend(verbose) : verbose;\n const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n\n return step(initialStep);\n\n function sibling(name: string, initial?: string) {\n return append(\n spawned,\n createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n );\n }\n\n function step(phase?: string) {\n const stepPrefix = (phase && `[${phase}]`) || '';\n const debug = (debugDebugger && prefixedLogger(debugDebugger, stepPrefix)) || NOOP;\n const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug);\n\n return Object.assign(debugDebugger ? debug : info, {\n label,\n sibling,\n info,\n step,\n });\n }\n}\n\n/**\n * The `GitLogger` is used by the main `SimpleGit` runner to handle logging\n * any warnings or errors.\n */\nexport class GitLogger {\n public error: OutputLoggingHandler;\n\n public warn: OutputLoggingHandler;\n\n constructor(private _out: Debugger = createLog()) {\n this.error = prefixedLogger(_out, '[ERROR]');\n this.warn = prefixedLogger(_out, '[WARN]');\n }\n\n silent(silence = false) {\n if (silence !== this._out.enabled) {\n return;\n }\n\n const { namespace } = this._out;\n const env = (process.env.DEBUG || '').split(',').filter((s) => !!s);\n const hasOn = env.includes(namespace);\n const hasOff = env.includes(`-${namespace}`);\n\n // enabling the log\n if (!silence) {\n if (hasOff) {\n remove(env, `-${namespace}`);\n } else {\n env.push(namespace);\n }\n } else {\n if (hasOn) {\n remove(env, namespace);\n } else {\n env.push(`-${namespace}`);\n }\n }\n\n debug.enable(env.join(','));\n }\n}\n","import { GitError } from '../errors/git-error';\nimport { createLogger, type OutputLogger } from '../git-logger';\nimport type { SimpleGitTask } from '../types';\n\ntype AnySimpleGitTask = SimpleGitTask<any>;\n\ntype TaskInProgress = {\n name: string;\n logger: OutputLogger;\n task: AnySimpleGitTask;\n};\n\nexport class TasksPendingQueue {\n private _queue: Map<AnySimpleGitTask, TaskInProgress> = new Map();\n\n constructor(private logLabel = 'GitExecutor') {}\n\n private withProgress(task: AnySimpleGitTask) {\n return this._queue.get(task);\n }\n\n private createProgress(task: AnySimpleGitTask): TaskInProgress {\n const name = TasksPendingQueue.getName(task.commands[0]);\n const logger = createLogger(this.logLabel, name);\n\n return {\n task,\n logger,\n name,\n };\n }\n\n push(task: AnySimpleGitTask): TaskInProgress {\n const progress = this.createProgress(task);\n progress.logger('Adding task to the queue, commands = %o', task.commands);\n\n this._queue.set(task, progress);\n\n return progress;\n }\n\n fatal(err: GitError) {\n for (const [task, { logger }] of Array.from(this._queue.entries())) {\n if (task === err.task) {\n logger.info(`Failed %o`, err);\n logger(\n `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n );\n } else {\n logger.info(\n `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n err.message\n );\n }\n\n this.complete(task);\n }\n\n if (this._queue.size !== 0) {\n throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n }\n }\n\n complete(task: AnySimpleGitTask) {\n const progress = this.withProgress(task);\n if (progress) {\n this._queue.delete(task);\n }\n }\n\n attempt(task: AnySimpleGitTask): TaskInProgress {\n const progress = this.withProgress(task);\n if (!progress) {\n throw new GitError(undefined, 'TasksPendingQueue: attempt called for an unknown task');\n }\n progress.logger('Starting task');\n\n return progress;\n }\n\n static getName(name = 'empty') {\n return `task:${name}:${++TasksPendingQueue.counter}`;\n }\n\n private static counter = 0;\n}\n","import { type SpawnOptions, spawn } from 'node:child_process';\n\nimport { GitError } from '../errors/git-error';\nimport type { OutputLogger } from '../git-logger';\nimport type { PluginStore, SimpleGitTaskPluginContext } from '../plugins';\nimport { type EmptyTask, isBufferTask, isEmptyTask } from '../tasks/task';\nimport type {\n GitExecutorResult,\n Maybe,\n outputHandler,\n RunnableTask,\n SimpleGitExecutor,\n SimpleGitTask,\n} from '../types';\nimport { callTaskParser, first, GitOutputStreams, objectToString } from '../utils';\nimport type { Scheduler } from './scheduler';\nimport { TasksPendingQueue } from './tasks-pending-queue';\n\nexport class GitExecutorChain implements SimpleGitExecutor {\n private _chain: Promise<any> = Promise.resolve();\n private _queue = new TasksPendingQueue();\n private _cwd: string | undefined;\n\n public get cwd() {\n return this._cwd || this._executor.cwd;\n }\n\n public set cwd(cwd: string) {\n this._cwd = cwd;\n }\n\n public get env() {\n return this._executor.env;\n }\n\n public get outputHandler() {\n return this._executor.outputHandler;\n }\n\n constructor(\n private _executor: SimpleGitExecutor,\n private _scheduler: Scheduler,\n private _plugins: PluginStore\n ) {}\n\n public chain() {\n return this;\n }\n\n public push<R>(task: SimpleGitTask<R>): Promise<R> {\n this._queue.push(task);\n\n return (this._chain = this._chain.then(() => this.attemptTask(task)));\n }\n\n private async attemptTask<R>(task: SimpleGitTask<R>): Promise<void | R> {\n const onScheduleComplete = await this._scheduler.next();\n const onQueueComplete = () => this._queue.complete(task);\n\n try {\n const { logger } = this._queue.attempt(task);\n return (await (isEmptyTask(task)\n ? this.attemptEmptyTask(task, logger)\n : this.attemptRemoteTask(task, logger))) as R;\n } catch (e) {\n throw this.onFatalException(task, e as Error);\n } finally {\n onQueueComplete();\n onScheduleComplete();\n }\n }\n\n private onFatalException<R>(task: SimpleGitTask<R>, e: Error) {\n const gitError =\n e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n\n this._chain = Promise.resolve();\n this._queue.fatal(gitError);\n\n return gitError;\n }\n\n private async attemptRemoteTask<R>(task: RunnableTask<R>, logger: OutputLogger) {\n const binary = this._plugins.exec('spawn.binary', '', this.taskContext(task, task.commands));\n const args = this._plugins.exec(\n 'spawn.args',\n [...task.commands],\n this.taskContext(task, task.commands)\n );\n\n const raw = await this.gitResponse(\n task,\n binary,\n args,\n this.outputHandler,\n logger.step('SPAWN')\n );\n const outputStreams = await this.handleTaskData(task, args, raw, logger.step('HANDLE'));\n\n logger(`passing response to task's parser as a %s`, task.format);\n\n if (isBufferTask(task)) {\n return callTaskParser(task.parser, outputStreams);\n }\n\n return callTaskParser(task.parser, outputStreams.asStrings());\n }\n\n private async attemptEmptyTask(task: EmptyTask, logger: OutputLogger) {\n logger(`empty task bypassing child process to call to task's parser`);\n return task.parser(this);\n }\n\n private handleTaskData<R>(\n task: SimpleGitTask<R>,\n args: string[],\n result: GitExecutorResult,\n logger: OutputLogger\n ): Promise<GitOutputStreams> {\n const { exitCode, rejection, stdOut, stdErr } = result;\n\n return new Promise((done, fail) => {\n logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n\n const { error } = this._plugins.exec(\n 'task.error',\n { error: rejection },\n {\n ...this.taskContext(task, args),\n ...result,\n }\n );\n\n if (error && task.onError) {\n logger.info(`exitCode=%s handling with custom error handler`);\n\n return task.onError(\n result,\n error,\n (newStdOut) => {\n logger.info(`custom error handler treated as success`);\n logger(`custom error returned a %s`, objectToString(newStdOut));\n\n done(\n new GitOutputStreams(\n Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n Buffer.concat(stdErr)\n )\n );\n },\n fail\n );\n }\n\n if (error) {\n logger.info(\n `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n exitCode,\n stdErr.length,\n rejection\n );\n return fail(error);\n }\n\n logger.info(`retrieving task output complete`);\n done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n });\n }\n\n private async gitResponse<R>(\n task: SimpleGitTask<R>,\n command: string,\n args: string[],\n outputHandler: Maybe<outputHandler>,\n logger: OutputLogger\n ): Promise<GitExecutorResult> {\n const outputLogger = logger.sibling('output');\n const spawnOptions: SpawnOptions = this._plugins.exec(\n 'spawn.options',\n {\n cwd: this.cwd,\n env: this.env,\n windowsHide: true,\n },\n this.taskContext(task, task.commands)\n );\n\n return new Promise((done) => {\n const stdOut: Buffer[] = [];\n const stdErr: Buffer[] = [];\n\n logger.info(`%s %o`, command, args);\n logger('%O', spawnOptions);\n\n let rejection = this._beforeSpawn(task, args);\n if (rejection) {\n return done({\n stdOut,\n stdErr,\n exitCode: 9901,\n rejection,\n });\n }\n\n this._plugins.exec('spawn.before', undefined, {\n ...this.taskContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n },\n });\n\n const spawned = spawn(command, args, spawnOptions);\n\n spawned.stdout!.on(\n 'data',\n onDataReceived(stdOut, 'stdOut', logger, outputLogger.step('stdOut'))\n );\n spawned.stderr!.on(\n 'data',\n onDataReceived(stdErr, 'stdErr', logger, outputLogger.step('stdErr'))\n );\n\n spawned.on('error', onErrorReceived(stdErr, logger));\n\n if (outputHandler) {\n logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n outputHandler(command, spawned.stdout!, spawned.stderr!, [...args]);\n }\n\n this._plugins.exec('spawn.after', undefined, {\n ...this.taskContext(task, args),\n spawned,\n close(exitCode: number, reason?: Error) {\n done({\n stdOut,\n stdErr,\n exitCode,\n rejection: rejection || reason,\n });\n },\n kill(reason: Error) {\n if (spawned.killed) {\n return;\n }\n\n rejection = reason;\n spawned.kill('SIGINT');\n },\n });\n });\n }\n\n private _beforeSpawn<R>(task: SimpleGitTask<R>, args: string[]) {\n let rejection: Maybe<Error>;\n this._plugins.exec('spawn.before', undefined, {\n ...this.taskContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n },\n });\n\n return rejection;\n }\n\n private taskContext<R>(task: SimpleGitTask<R>, commands: string[]): SimpleGitTaskPluginContext {\n return {\n method: String(first(task.commands) || ''),\n commands,\n env: { ...this.env },\n input: isEmptyTask(task) ? undefined : task.input,\n };\n }\n}\n\nfunction onErrorReceived(target: Buffer[], logger: OutputLogger) {\n return (err: Error) => {\n logger(`[ERROR] child process exception %o`, err);\n target.push(Buffer.from(String(err.stack), 'ascii'));\n };\n}\n\nfunction onDataReceived(\n target: Buffer[],\n name: string,\n logger: OutputLogger,\n output: OutputLogger\n) {\n return (buffer: Buffer) => {\n logger(`%s received %L bytes`, name, buffer);\n output(`%B`, buffer);\n target.push(buffer);\n };\n}\n","import type { PluginStore } from '../plugins';\nimport type { GitExecutorEnv, outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types';\nimport { GitExecutorChain } from './git-executor-chain';\nimport type { Scheduler } from './scheduler';\n\nexport class GitExecutor implements SimpleGitExecutor {\n private _chain: SimpleGitExecutor;\n\n public env: GitExecutorEnv;\n public outputHandler?: outputHandler;\n\n constructor(\n public cwd: string,\n private _scheduler: Scheduler,\n private _plugins: PluginStore\n ) {\n this._chain = this.chain();\n }\n\n chain(): SimpleGitExecutor {\n return new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n\n push<R>(task: SimpleGitTask<R>): Promise<R> {\n return this._chain.push(task);\n }\n}\n","import type { GitError } from './errors/git-error';\nimport type { GitResponseError } from './errors/git-response-error';\nimport type { SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport { NOOP } from './utils';\n\nexport function taskCallback<R>(\n task: SimpleGitTask<R>,\n response: Promise<R>,\n callback: SimpleGitTaskCallback<R> = NOOP\n) {\n const onSuccess = (data: R) => {\n callback(null, data);\n };\n\n const onError = (err: GitError | GitResponseError) => {\n if (err?.task === task) {\n callback(err, undefined as any);\n }\n };\n\n response.then(onSuccess, onError);\n}\n","import type { SimpleGitExecutor } from '../types';\nimport { folderExists } from '../utils';\nimport { adhocExecTask } from './task';\n\nexport function changeWorkingDirectoryTask(directory: string, root?: SimpleGitExecutor) {\n return adhocExecTask((instance: SimpleGitExecutor) => {\n if (!folderExists(directory)) {\n throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n }\n\n return ((root || instance).cwd = directory);\n });\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, remove, trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nfunction checkoutTask(args: string[]) {\n const commands = ['checkout', ...args];\n if (commands[1] === '-b' && commands.includes('-B')) {\n commands[1] = remove(commands, '-B');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport default function (): Pick<SimpleGit, 'checkout' | 'checkoutBranch' | 'checkoutLocalBranch'> {\n return {\n checkout(this: SimpleGitApi) {\n return this._runTask(\n checkoutTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n },\n\n checkoutBranch(this: SimpleGitApi, branchName, startPoint) {\n return this._runTask(\n checkoutTask(['-b', branchName, startPoint, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n\n checkoutLocalBranch(this: SimpleGitApi, branchName) {\n return this._runTask(\n checkoutTask(['-b', branchName, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import { pathspec } from '@simple-git/args-pathspec';\n\nimport type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { OptionFlags, Options, StringTask } from '../types';\nimport {\n append,\n filterString,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask, type EmptyTask, straightThroughStringTask } from './task';\n\nexport type CloneOptions = Options &\n OptionFlags<\n | '--bare'\n | '--dissociate'\n | '--mirror'\n | '--no-checkout'\n | '--no-remote-submodules'\n | '--no-shallow-submodules'\n | '--no-single-branch'\n | '--no-tags'\n | '--remote-submodules'\n | '--single-branch'\n | '--shallow-submodules'\n | '--verbose'\n > &\n OptionFlags<'--depth' | '-j' | '--jobs', number> &\n OptionFlags<\n | '--branch'\n | '--origin'\n | '--recurse-submodules'\n | '--separate-git-dir'\n | '--shallow-exclude'\n | '--shallow-since'\n | '--template',\n string\n >;\n\ntype CloneTaskBuilder = (\n repo: string | undefined,\n directory: string | undefined,\n customArgs: string[]\n) => StringTask<string> | EmptyTask;\n\nexport const cloneTask: CloneTaskBuilder = (repo, directory, customArgs) => {\n const commands = ['clone', ...customArgs];\n\n filterString(repo) && commands.push(pathspec(repo));\n filterString(directory) && commands.push(pathspec(directory));\n\n return straightThroughStringTask(commands);\n};\n\nexport const cloneMirrorTask: CloneTaskBuilder = (repo, directory, customArgs) => {\n append(customArgs, '--mirror');\n\n return cloneTask(repo, directory, customArgs);\n};\n\nfunction createCloneTask(\n api: 'clone' | 'mirror',\n task: CloneTaskBuilder,\n repoPath: string | undefined,\n ...args: unknown[]\n) {\n if (!filterString(repoPath)) {\n return configurationErrorTask(`git.${api}() requires a string 'repoPath'`);\n }\n\n return task(repoPath, filterType(args[0], filterString), getTrailingOptions(arguments));\n}\n\nexport default function (): Pick<SimpleGit, 'clone' | 'mirror'> {\n return {\n clone(this: SimpleGitApi, repo: string | unknown, ...rest: unknown[]) {\n return this._runTask(\n createCloneTask('clone', cloneTask, filterType(repo, filterString), ...rest),\n trailingFunctionArgument(arguments)\n );\n },\n mirror(this: SimpleGitApi, repo: string | unknown, ...rest: unknown[]) {\n return this._runTask(\n createCloneTask('mirror', cloneMirrorTask, filterType(repo, filterString), ...rest),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import type { CommitResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<CommitResult>[] = [\n new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n result.branch = branch;\n result.commit = commit;\n result.root = !!root;\n }),\n new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n const parts = author.split('<');\n const email = parts.pop();\n\n if (!email || !email.includes('@')) {\n return;\n }\n\n result.author = {\n email: email.substr(0, email.length - 1),\n name: parts.join('<').trim(),\n };\n }),\n new LineParser(\n /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n (result, [changes, insertions, deletions]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n result.summary.insertions = parseInt(insertions, 10) || 0;\n result.summary.deletions = parseInt(deletions, 10) || 0;\n }\n ),\n new LineParser(\n /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n (result, [changes, lines, direction]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n const count = parseInt(lines, 10) || 0;\n if (direction === '-') {\n result.summary.deletions = count;\n } else if (direction === '+') {\n result.summary.insertions = count;\n }\n }\n ),\n];\n\nexport function parseCommitResult(stdOut: string): CommitResult {\n const result: CommitResult = {\n author: null,\n branch: '',\n commit: '',\n root: false,\n summary: {\n changes: 0,\n insertions: 0,\n deletions: 0,\n },\n };\n return parseStringResponse(result, parsers, stdOut);\n}\n","import type { CommitResult, SimpleGit } from '../../typings';\nimport { parseCommitResult } from '../parsers/parse-commit';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n asArray,\n asStringArray,\n filterArray,\n filterStringOrStringArray,\n filterType,\n getTrailingOptions,\n prefixedArray,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport function commitTask(\n message: string[],\n files: string[],\n customArgs: string[]\n): StringTask<CommitResult> {\n const commands: string[] = [\n '-c',\n 'core.abbrev=40',\n 'commit',\n ...prefixedArray(message, '-m'),\n ...files,\n ...customArgs,\n ];\n\n return {\n commands,\n format: 'utf-8',\n parser: parseCommitResult,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'commit'> {\n return {\n commit(this: SimpleGitApi, message: string | string[], ...rest: unknown[]) {\n const next = trailingFunctionArgument(arguments);\n const task =\n rejectDeprecatedSignatures(message) ||\n commitTask(\n asArray(message),\n asArray(filterType(rest[0], filterStringOrStringArray, [])),\n [\n ...asStringArray(filterType(rest[1], filterArray, [])),\n ...getTrailingOptions(arguments, 0, true),\n ]\n );\n\n return this._runTask(task, next);\n },\n };\n\n function rejectDeprecatedSignatures(message?: unknown) {\n return (\n !filterStringOrStringArray(message) &&\n configurationErrorTask(\n `git.commit: requires the commit message to be supplied as a string/string[]`\n )\n );\n }\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { asCamelCase, asNumber, LineParser, parseStringResponse } from '../utils';\n\nexport interface CountObjectsResult {\n count: number;\n size: number;\n inPack: number;\n packs: number;\n sizePack: number;\n prunePackable: number;\n garbage: number;\n sizeGarbage: number;\n}\n\nfunction countObjectsResponse(): CountObjectsResult {\n return {\n count: 0,\n garbage: 0,\n inPack: 0,\n packs: 0,\n prunePackable: 0,\n size: 0,\n sizeGarbage: 0,\n sizePack: 0,\n };\n}\n\nconst parser: LineParser<CountObjectsResult> = new LineParser(\n /([a-z-]+): (\\d+)$/,\n (result, [key, value]) => {\n const property = asCamelCase(key);\n if (Object.hasOwn(result, property)) {\n result[property as keyof typeof result] = asNumber(value);\n }\n }\n);\n\nexport default function (): Pick<SimpleGit, 'countObjects'> {\n return {\n countObjects(this: SimpleGitApi) {\n return this._runTask({\n commands: ['count-objects', '--verbose'],\n format: 'utf-8',\n parser(stdOut: string) {\n return parseStringResponse(countObjectsResponse(), [parser], stdOut);\n },\n });\n },\n };\n}\n","import type { Response, SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'firstCommit'> {\n return {\n firstCommit(this: SimpleGitApi): Response<string> {\n return this._runTask(\n straightThroughStringTask(['rev-list', '--max-parents=0', 'HEAD'], true),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\n/**\n * Task used by `git.hashObject`\n */\nexport function hashObjectTask(filePath: string, write: boolean): StringTask<string> {\n const commands = ['hash-object', filePath];\n if (write) {\n commands.push('-w');\n }\n\n return straightThroughStringTask(commands, true);\n}\n","import type { InitResult } from '../../typings';\n\nexport class InitSummary implements InitResult {\n constructor(\n public readonly bare: boolean,\n public readonly path: string,\n public readonly existing: boolean,\n public readonly gitDir: string\n ) {}\n}\n\nconst initResponseRegex = /^Init.+ repository in (.+)$/;\nconst reInitResponseRegex = /^Rein.+ in (.+)$/;\n\nexport function parseInit(bare: boolean, path: string, text: string) {\n const response = String(text).trim();\n let result;\n\n if ((result = initResponseRegex.exec(response))) {\n return new InitSummary(bare, path, false, result[1]);\n }\n\n if ((result = reInitResponseRegex.exec(response))) {\n return new InitSummary(bare, path, true, result[1]);\n }\n\n let gitDir = '';\n const tokens = response.split(' ');\n while (tokens.length) {\n const token = tokens.shift();\n if (token === 'in') {\n gitDir = tokens.join(' ');\n break;\n }\n }\n\n return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\n","import type { InitResult } from '../../typings';\nimport { parseInit } from '../responses/InitSummary';\nimport type { StringTask } from '../types';\n\nconst bareCommand = '--bare';\n\nfunction hasBareCommand(command: string[]) {\n return command.includes(bareCommand);\n}\n\nexport function initTask(bare = false, path: string, customArgs: string[]): StringTask<InitResult> {\n const commands = ['init', ...customArgs];\n if (bare && !hasBareCommand(commands)) {\n commands.splice(1, 0, bareCommand);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): InitResult {\n return parseInit(commands.includes('--bare'), path, text);\n },\n };\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n asCamelCase,\n filterStringOrBuffer,\n filterType,\n forEachLineWithContent,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nfunction interpretTrailersTask(\n input?: string | Buffer\n): StringTask<Record<string, string>> | EmptyTask {\n if (input === undefined) {\n return configurationErrorTask(`interpretTrailers called without input content`);\n }\n\n return {\n format: 'utf-8',\n parser(stdOut) {\n return Object.fromEntries(\n forEachLineWithContent(stdOut, (line) => {\n const index = line.indexOf(':');\n return [\n asCamelCase(line.substring(0, index).toLowerCase()),\n line.substring(index + 2).trim(),\n ];\n })\n );\n },\n commands: ['interpret-trailers', '--parse'],\n input,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'interpretTrailers'> {\n return {\n interpretTrailers(this: SimpleGitApi, input) {\n return this._runTask(\n interpretTrailersTask(filterType(input, filterStringOrBuffer)),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","export enum LogFormat {\n NONE = '',\n STAT = '--stat',\n NUM_STAT = '--numstat',\n NAME_ONLY = '--name-only',\n NAME_STATUS = '--name-status',\n}\n\nconst logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n\nexport function logFormatFromCommand(customArgs: string[]) {\n for (let i = 0; i < customArgs.length; i++) {\n const format = logFormatRegex.exec(customArgs[i]);\n if (format) {\n return `--${format[1]}` as LogFormat;\n }\n }\n\n return LogFormat.NONE;\n}\n\nexport function isLogFormat(customArg: string | unknown) {\n return logFormatRegex.test(customArg as string);\n}\n","import type { DiffResult, DiffResultBinaryFile, DiffResultTextFile } from '../../typings';\n\n/***\n * The DiffSummary is returned as a response to getting `git().status()`\n */\nexport class DiffSummary implements DiffResult {\n changed = 0;\n deletions = 0;\n insertions = 0;\n\n files: Array<DiffResultTextFile | DiffResultBinaryFile> = [];\n}\n","import type { DiffResult } from '../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { DiffSummary } from '../responses/DiffSummary';\nimport { isDiffNameStatus } from '../tasks/diff-name-status';\nimport { asNumber, LineParser, orVoid, parseStringResponse } from '../utils';\n\nconst statParser = [\n new LineParser<DiffResult>(\n /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n (result, [file, changes, alterations = '']) => {\n result.files.push({\n file: file.trim(),\n changes: asNumber(changes),\n insertions: alterations.replace(/[^+]/g, '').length,\n deletions: alterations.replace(/[^-]/g, '').length,\n binary: false,\n });\n }\n ),\n new LineParser<DiffResult>(\n /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n (result, [file, before, after]) => {\n result.files.push({\n file: file.trim(),\n before: asNumber(before),\n after: asNumber(after),\n binary: true,\n });\n }\n ),\n new LineParser<DiffResult>(/^(.+)\\s+\\|\\s+Bin\\s*$/, (result, [file]) => {\n result.files.push({\n file: file.trim(),\n before: 0,\n after: 0,\n binary: true,\n });\n }),\n new LineParser<DiffResult>(\n /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n (result, [changed, summary]) => {\n const inserted = /(\\d+) i/.exec(summary);\n const deleted = /(\\d+) d/.exec(summary);\n\n result.changed = asNumber(changed);\n result.insertions = asNumber(inserted?.[1]);\n result.deletions = asNumber(deleted?.[1]);\n }\n ),\n];\n\nconst numStatParser = [\n new LineParser<DiffResult>(\n /(\\d+)\\t(\\d+)\\t(.+)$/,\n (result, [changesInsert, changesDelete, file]) => {\n const insertions = asNumber(changesInsert);\n const deletions = asNumber(changesDelete);\n\n result.changed++;\n result.insertions += insertions;\n result.deletions += deletions;\n\n result.files.push({\n file,\n changes: insertions + deletions,\n insertions,\n deletions,\n binary: false,\n });\n }\n ),\n new LineParser<DiffResult>(/-\\t-\\t(.+)$/, (result, [file]) => {\n result.changed++;\n\n result.files.push({\n file,\n after: 0,\n before: 0,\n binary: true,\n });\n }),\n];\n\nconst nameOnlyParser = [\n new LineParser<DiffResult>(/(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n });\n }),\n];\n\nconst nameStatusParser = [\n new LineParser<DiffResult>(\n /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n (result, [status, similarity, from, _to, to]) => {\n result.changed++;\n result.files.push({\n file: to ?? from,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n status: orVoid(isDiffNameStatus(status) && status),\n from: orVoid(!!to && from !== to && from),\n similarity: asNumber(similarity),\n });\n }\n ),\n];\n\nconst diffSummaryParsers: Record<LogFormat, LineParser<DiffResult>[]> = {\n [LogFormat.NONE]: statParser,\n [LogFormat.STAT]: statParser,\n [LogFormat.NUM_STAT]: numStatParser,\n [LogFormat.NAME_STATUS]: nameStatusParser,\n [LogFormat.NAME_ONLY]: nameOnlyParser,\n};\n\nexport function getDiffParser(format = LogFormat.NONE) {\n const parser = diffSummaryParsers[format];\n\n return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut, false);\n}\n","import type { ListLogLine, LogResult } from '../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { toLinesWithContent } from '../utils';\nimport { getDiffParser } from './parse-diff-summary';\n\nexport const START_BOUNDARY = 'òòòòòò ';\n\nexport const COMMIT_BOUNDARY = ' òò';\n\nexport const SPLITTER = ' ò ';\n\nconst defaultFieldNames = ['hash', 'date', 'message', 'refs', 'author_name', 'author_email'];\n\nfunction lineBuilder(tokens: string[], fields: string[]): any {\n return fields.reduce(\n (line, field, index) => {\n line[field] = tokens[index] || '';\n return line;\n },\n Object.create({ diff: null }) as any\n );\n}\n\nexport function createListLogSummaryParser<T = any>(\n splitter = SPLITTER,\n fields = defaultFieldNames,\n logFormat = LogFormat.NONE\n) {\n const parseDiffResult = getDiffParser(logFormat);\n\n return function (stdOut: string): LogResult<T> {\n const all: ReadonlyArray<T & ListLogLine> = toLinesWithContent(\n stdOut.trim(),\n false,\n START_BOUNDARY\n ).map(function (item) {\n const lineDetail = item.split(COMMIT_BOUNDARY);\n const listLogLine: T & ListLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n\n if (lineDetail.length > 1 && lineDetail[1].trim()) {\n listLogLine.diff = parseDiffResult(lineDetail[1]);\n }\n\n return listLogLine;\n });\n\n return {\n all,\n latest: (all.length && all[0]) || null,\n total: all.length,\n };\n };\n}\n","import type { DiffResult } from '../../typings';\nimport { isLogFormat, LogFormat, logFormatFromCommand } from '../args/log-format';\nimport { getDiffParser } from '../parsers/parse-diff-summary';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nexport function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> | EmptyTask {\n let logFormat = logFormatFromCommand(customArgs);\n\n const commands = ['diff'];\n\n if (logFormat === LogFormat.NONE) {\n logFormat = LogFormat.STAT;\n commands.push('--stat=4096');\n }\n\n commands.push(...customArgs);\n\n return (\n validateLogFormatConfig(commands) || {\n commands,\n format: 'utf-8',\n parser: getDiffParser(logFormat),\n }\n );\n}\n\nexport function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void {\n const flags = customArgs.filter(isLogFormat);\n\n if (flags.length > 1) {\n return configurationErrorTask(\n `Summary flags are mutually exclusive - pick one of ${flags.join(',')}`\n );\n }\n\n if (flags.length && customArgs.includes('-z')) {\n return configurationErrorTask(\n `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n );\n }\n}\n","import { pathspec } from '@simple-git/args-pathspec';\n\nimport type { LogResult, Options, SimpleGit } from '../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport {\n COMMIT_BOUNDARY,\n createListLogSummaryParser,\n SPLITTER,\n START_BOUNDARY,\n} from '../parsers/parse-list-log-summary';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n appendTaskOptions,\n asStringArray,\n filterArray,\n filterPlainObject,\n filterString,\n filterType,\n trailingFunctionArgument,\n trailingOptionsArgument,\n} from '../utils';\nimport { validateLogFormatConfig } from './diff';\nimport { configurationErrorTask } from './task';\n\nenum excludeOptions {\n '--pretty',\n 'max-count',\n 'maxCount',\n 'n',\n 'file',\n 'format',\n 'from',\n 'to',\n 'splitter',\n 'symmetric',\n 'mailMap',\n 'multiLine',\n 'strictDate',\n}\n\nexport interface DefaultLogFields {\n hash: string;\n date: string;\n message: string;\n refs: string;\n body: string;\n author_name: string;\n author_email: string;\n}\n\nexport type LogOptions<T = DefaultLogFields> = {\n file?: string;\n format?: T;\n from?: string;\n mailMap?: boolean;\n maxCount?: number;\n multiLine?: boolean;\n splitter?: string;\n strictDate?: boolean;\n symmetric?: boolean;\n to?: string;\n};\n\ninterface ParsedLogOptions {\n fields: string[];\n splitter: string;\n commands: string[];\n}\n\nfunction prettyFormat(\n format: Record<string, string | unknown>,\n splitter: string\n): [string[], string] {\n const fields: string[] = [];\n const formatStr: string[] = [];\n\n Object.keys(format).forEach((field) => {\n fields.push(field);\n formatStr.push(String(format[field]));\n });\n\n return [fields, formatStr.join(splitter)];\n}\n\nfunction userOptions<T extends Options>(input: T): Options {\n return Object.keys(input).reduce((out, key) => {\n if (!(key in excludeOptions)) {\n out[key] = input[key];\n }\n return out;\n }, {} as Options);\n}\n\nexport function parseLogOptions<T extends Options>(\n opt: Options | LogOptions<T> = {},\n customArgs: string[] = []\n): ParsedLogOptions {\n const splitter = filterType(opt.splitter, filterString, SPLITTER);\n const format = filterPlainObject(opt.format)\n ? opt.format\n : {\n hash: '%H',\n date: opt.strictDate === false ? '%ai' : '%aI',\n message: '%s',\n refs: '%D',\n body: opt.multiLine ? '%B' : '%b',\n author_name: opt.mailMap !== false ? '%aN' : '%an',\n author_email: opt.mailMap !== false ? '%aE' : '%ae',\n };\n\n const [fields, formatStr] = prettyFormat(format, splitter);\n\n const suffix: string[] = [];\n const command: string[] = [\n `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n ...customArgs,\n ];\n\n const maxCount: number | undefined = (opt as any).n || (opt as any)['max-count'] || opt.maxCount;\n if (maxCount) {\n command.push(`--max-count=${maxCount}`);\n }\n\n if (opt.from || opt.to) {\n const rangeOperator = opt.symmetric !== false ? '...' : '..';\n suffix.push(`${opt.from || ''}${rangeOperator}${opt.to || ''}`);\n }\n\n if (filterString(opt.file)) {\n command.push('--follow', pathspec(opt.file));\n }\n\n appendTaskOptions(userOptions(opt as Options), command);\n\n return {\n fields,\n splitter,\n commands: [...command, ...suffix],\n };\n}\n\nexport function logTask<T>(\n splitter: string,\n fields: string[],\n customArgs: string[]\n): StringTask<LogResult<T>> {\n const parser = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n\n return {\n commands: ['log', ...customArgs],\n format: 'utf-8',\n parser,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'log'> {\n return {\n log<T extends Options>(this: SimpleGitApi, ...rest: unknown[]) {\n const next = trailingFunctionArgument(arguments);\n const options = parseLogOptions<T>(\n trailingOptionsArgument(arguments),\n asStringArray(filterType(arguments[0], filterArray, []))\n );\n const task =\n rejectDeprecatedSignatures(...rest) ||\n validateLogFormatConfig(options.commands) ||\n createLogTask(options);\n\n return this._runTask(task, next);\n },\n };\n\n function createLogTask(options: ParsedLogOptions) {\n return logTask(options.splitter, options.fields, options.commands);\n }\n\n function rejectDeprecatedSignatures(from?: unknown, to?: unknown) {\n return (\n filterString(from) &&\n filterString(to) &&\n configurationErrorTask(\n `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n )\n );\n }\n}\n","import type {\n MergeConflict,\n MergeConflictDeletion,\n MergeDetail,\n MergeResultStatus,\n} from '../../typings';\n\nexport class MergeSummaryConflict implements MergeConflict {\n constructor(\n public readonly reason: string,\n public readonly file: string | null = null,\n public readonly meta?: MergeConflictDeletion\n ) {}\n\n toString() {\n return `${this.file}:${this.reason}`;\n }\n}\n\nexport class MergeSummaryDetail implements MergeDetail {\n public conflicts: MergeConflict[] = [];\n public merges: string[] = [];\n public result: MergeResultStatus = 'success';\n\n get failed() {\n return this.conflicts.length > 0;\n }\n\n get reason() {\n return this.result;\n }\n\n toString() {\n if (this.conflicts.length) {\n return `CONFLICTS: ${this.conflicts.join(', ')}`;\n }\n\n return 'OK';\n }\n}\n","import type {\n PullDetailFileChanges,\n PullDetailSummary,\n PullFailedResult,\n PullResult,\n} from '../../typings';\n\nexport class PullSummary implements PullResult {\n public remoteMessages = {\n all: [],\n };\n public created = [];\n public deleted: string[] = [];\n public files: string[] = [];\n public deletions: PullDetailFileChanges = {};\n public insertions: PullDetailFileChanges = {};\n public summary: PullDetailSummary = {\n changes: 0,\n deletions: 0,\n insertions: 0,\n };\n}\n\nexport class PullFailedSummary implements PullFailedResult {\n remote = '';\n hash = {\n local: '',\n remote: '',\n };\n branch = {\n local: '',\n remote: '',\n };\n message = '';\n\n toString() {\n return this.message;\n }\n}\n","import type {\n RemoteMessageResult,\n RemoteMessages,\n RemoteMessagesObjectEnumeration,\n} from '../../typings';\nimport { asNumber, RemoteLineParser } from '../utils';\n\nfunction objectEnumerationResult<T extends RemoteMessages = RemoteMessages>(\n remoteMessages: T\n): RemoteMessagesObjectEnumeration {\n return (remoteMessages.objects = remoteMessages.objects || {\n compressing: 0,\n counting: 0,\n enumerating: 0,\n packReused: 0,\n reused: { count: 0, delta: 0 },\n total: { count: 0, delta: 0 },\n });\n}\n\nfunction asObjectCount(source: string) {\n const count = /^\\s*(\\d+)/.exec(source);\n const delta = /delta (\\d+)/i.exec(source);\n\n return {\n count: asNumber((count && count[1]) || '0'),\n delta: asNumber((delta && delta[1]) || '0'),\n };\n}\n\nexport const remoteMessagesObjectParsers: RemoteLineParser<RemoteMessageResult<RemoteMessages>>[] =\n [\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n (result, [total, reused, packReused]) => {\n const objects = objectEnumerationResult(result.remoteMessages);\n objects.total = asObjectCount(total);\n objects.reused = asObjectCount(reused);\n objects.packReused = asNumber(packReused);\n }\n ),\n ];\n","import type { PushResultRemoteMessages, RemoteMessageResult, RemoteMessages } from '../../typings';\nimport { asNumber, parseStringResponse, RemoteLineParser } from '../utils';\nimport { remoteMessagesObjectParsers } from './parse-remote-objects';\n\nconst parsers: RemoteLineParser<RemoteMessageResult<PushResultRemoteMessages | RemoteMessages>>[] =\n [\n new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n result.remoteMessages.all.push(text.trim());\n return false;\n }),\n ...remoteMessagesObjectParsers,\n new RemoteLineParser(\n [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [pullRequestUrl]) => {\n (result.remoteMessages as PushResultRemoteMessages).pullRequestUrl = pullRequestUrl;\n }\n ),\n new RemoteLineParser(\n [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [count, summary, url]) => {\n (result.remoteMessages as PushResultRemoteMessages).vulnerabilities = {\n count: asNumber(count),\n summary,\n url,\n };\n }\n ),\n ];\n\nexport function parseRemoteMessages<T extends RemoteMessages = RemoteMessages>(\n _stdOut: string,\n stdErr: string\n): RemoteMessageResult {\n return parseStringResponse({ remoteMessages: new RemoteMessageSummary() as T }, parsers, stdErr);\n}\n\nexport class RemoteMessageSummary implements RemoteMessages {\n public readonly all: string[] = [];\n}\n","import type { PullDetail, PullFailedResult, PullResult, RemoteMessages } from '../../typings';\nimport { PullFailedSummary, PullSummary } from '../responses/PullSummary';\nimport type { TaskParser } from '../types';\nimport { append, LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nconst FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\nconst SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\nconst ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n\nconst parsers: LineParser<PullResult>[] = [\n new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n result.files.push(file);\n\n if (insertions) {\n result.insertions[file] = insertions.length;\n }\n\n if (deletions) {\n result.deletions[file] = deletions.length;\n }\n }),\n new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n if (insertions !== undefined || deletions !== undefined) {\n result.summary.changes = +changes || 0;\n result.summary.insertions = +insertions || 0;\n result.summary.deletions = +deletions || 0;\n return true;\n }\n return false;\n }),\n new LineParser(ACTION_REGEX, (result, [action, file]) => {\n append(result.files, file);\n append(action === 'create' ? result.created : result.deleted, file);\n }),\n];\n\nconst errorParsers: LineParser<PullFailedResult>[] = [\n new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n new LineParser(\n /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n result.branch.local = branchLocal;\n result.hash.local = hashLocal;\n result.branch.remote = branchRemote;\n result.hash.remote = hashRemote;\n }\n ),\n];\n\nexport const parsePullDetail: TaskParser<string, PullDetail> = (stdOut, stdErr) => {\n return parseStringResponse(new PullSummary(), parsers, [stdOut, stdErr]);\n};\n\nexport const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr) => {\n return Object.assign(\n new PullSummary(),\n parsePullDetail(stdOut, stdErr),\n parseRemoteMessages<RemoteMessages>(stdOut, stdErr)\n );\n};\n\nexport function parsePullErrorResult(stdOut: string, stdErr: string) {\n const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n\n return pullError.message && pullError;\n}\n","import type { MergeDetail, MergeResult } from '../../typings';\nimport { MergeSummaryConflict, MergeSummaryDetail } from '../responses/MergeSummary';\nimport type { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parsePullResult } from './parse-pull';\n\nconst parsers: LineParser<MergeDetail>[] = [\n new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n summary.merges.push(autoMerge);\n }),\n new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file));\n }),\n new LineParser(\n /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n (summary, [reason, file, deleteRef]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n }\n ),\n new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, null));\n }),\n new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n summary.result = result;\n }),\n];\n\n/**\n * Parse the complete response from `git.merge`\n */\nexport const parseMergeResult: TaskParser<string, MergeResult> = (stdOut, stdErr) => {\n return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n};\n\n/**\n * Parse the merge specific detail (ie: not the content also available in the pull detail) from `git.mnerge`\n * @param stdOut\n */\nexport const parseMergeDetail: TaskParser<string, MergeDetail> = (stdOut) => {\n return parseStringResponse(new MergeSummaryDetail(), parsers, stdOut);\n};\n","import type { MergeResult } from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseMergeResult } from '../parsers/parse-merge';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nexport function mergeTask(customArgs: string[]): EmptyTask | StringTask<MergeResult> {\n if (!customArgs.length) {\n return configurationErrorTask('Git.merge requires at least one option');\n }\n\n return {\n commands: ['merge', ...customArgs],\n format: 'utf-8',\n parser(stdOut, stdErr): MergeResult {\n const merge = parseMergeResult(stdOut, stdErr);\n if (merge.failed) {\n throw new GitResponseError(merge);\n }\n\n return merge;\n },\n };\n}\n","import type {\n PushDetail,\n PushResult,\n PushResultPushedItem,\n PushResultRemoteMessages,\n} from '../../typings';\nimport type { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nfunction pushResultPushedItem(local: string, remote: string, status: string): PushResultPushedItem {\n const deleted = status.includes('deleted');\n const tag = status.includes('tag') || /^refs\\/tags/.test(local);\n const alreadyUpdated = !status.includes('new');\n\n return {\n deleted,\n tag,\n branch: !tag,\n new: !alreadyUpdated,\n alreadyUpdated,\n local,\n remote,\n };\n}\n\nconst parsers: LineParser<PushDetail>[] = [\n new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n result.repo = repo;\n }),\n new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n result.ref = {\n ...(result.ref || {}),\n local,\n };\n }),\n new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n result.pushed.push(pushResultPushedItem(local, remote, type));\n }),\n new LineParser(\n /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n (result, [local, remote, remoteName]) => {\n result.branch = {\n ...(result.branch || {}),\n local,\n remote,\n remoteName,\n };\n }\n ),\n new LineParser(\n /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n (result, [local, remote, from, to]) => {\n result.update = {\n head: {\n local,\n remote,\n },\n hash: {\n from,\n to,\n },\n };\n }\n ),\n];\n\nexport const parsePushResult: TaskParser<string, PushResult> = (stdOut, stdErr) => {\n const pushDetail = parsePushDetail(stdOut, stdErr);\n const responseDetail = parseRemoteMessages<PushResultRemoteMessages>(stdOut, stdErr);\n\n return {\n ...pushDetail,\n ...responseDetail,\n };\n};\n\nexport const parsePushDetail: TaskParser<string, PushDetail> = (stdOut, stdErr) => {\n return parseStringResponse({ pushed: [] }, parsers, [stdOut, stdErr]);\n};\n","import type { PushResult } from '../../typings';\nimport { parsePushResult as parser } from '../parsers/parse-push';\nimport type { StringTask } from '../types';\nimport { append, remove } from '../utils';\n\ntype PushRef = { remote?: string; branch?: string };\n\nexport function pushTagsTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n append(customArgs, '--tags');\n return pushTask(ref, customArgs);\n}\n\nexport function pushTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n const commands = ['push', ...customArgs];\n if (ref.branch) {\n commands.splice(1, 0, ref.branch);\n }\n if (ref.remote) {\n commands.splice(1, 0, ref.remote);\n }\n\n remove(commands, '-v');\n append(commands, '--verbose');\n append(commands, '--porcelain');\n\n return {\n commands,\n format: 'utf-8',\n parser,\n };\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, trailingFunctionArgument } from '../utils';\nimport { straightThroughBufferTask, straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'showBuffer' | 'show'> {\n return {\n showBuffer(this: SimpleGitApi) {\n const commands = ['show', ...getTrailingOptions(arguments, 1)];\n if (!commands.includes('--binary')) {\n commands.splice(1, 0, '--binary');\n }\n\n return this._runTask(\n straightThroughBufferTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n\n show(this: SimpleGitApi) {\n const commands = ['show', ...getTrailingOptions(arguments, 1)];\n return this._runTask(\n straightThroughStringTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import type { FileStatusResult } from '../../typings';\n\nexport const fromPathRegex = /^(.+)\\0(.+)$/;\n\nexport class FileStatusSummary implements FileStatusResult {\n public readonly from: string | undefined;\n\n constructor(\n public path: string,\n public index: string,\n public working_dir: string\n ) {\n if (index === 'R' || working_dir === 'R') {\n const detail = fromPathRegex.exec(path) || [null, path, path];\n this.from = detail[2] || '';\n this.path = detail[1] || '';\n }\n }\n}\n","import type { StatusResult } from '../../typings';\nimport { filterString, filterType, NULL } from '../utils';\nimport { FileStatusSummary } from './FileStatusSummary';\n\ntype StatusLineParser = (result: StatusResult, file: string) => void;\n\nexport class StatusSummary implements StatusResult {\n public not_added = [];\n public conflicted = [];\n public created = [];\n public deleted = [];\n public ignored = undefined;\n public modified = [];\n public renamed = [];\n public files = [];\n public staged = [];\n public ahead = 0;\n public behind = 0;\n public current = null;\n public tracking = null;\n public detached = false;\n\n public isClean = () => {\n return !this.files.length;\n };\n}\n\nenum PorcelainFileStatus {\n ADDED = 'A',\n DELETED = 'D',\n MODIFIED = 'M',\n RENAMED = 'R',\n COPIED = 'C',\n UNMERGED = 'U',\n UNTRACKED = '?',\n IGNORED = '!',\n NONE = ' ',\n}\n\nfunction renamedFile(line: string) {\n const [to, from] = line.split(NULL);\n\n return {\n from: from || to,\n to,\n };\n}\n\nfunction parser(\n indexX: PorcelainFileStatus,\n indexY: PorcelainFileStatus,\n handler: StatusLineParser\n): [string, StatusLineParser] {\n return [`${indexX}${indexY}`, handler];\n}\n\nfunction conflicts(indexX: PorcelainFileStatus, ...indexY: PorcelainFileStatus[]) {\n return indexY.map((y) => parser(indexX, y, (result, file) => result.conflicted.push(file)));\n}\n\nconst parsers: Map<string, StatusLineParser> = new Map([\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.ADDED, (result, file) =>\n result.created.push(file)\n ),\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.DELETED, (result, file) =>\n result.deleted.push(file)\n ),\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.MODIFIED, (result, file) =>\n result.modified.push(file)\n ),\n\n parser(PorcelainFileStatus.ADDED, PorcelainFileStatus.NONE, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n }),\n parser(PorcelainFileStatus.ADDED, PorcelainFileStatus.MODIFIED, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n result.modified.push(file);\n }),\n\n parser(PorcelainFileStatus.DELETED, PorcelainFileStatus.NONE, (result, file) => {\n result.deleted.push(file);\n result.staged.push(file);\n }),\n\n parser(PorcelainFileStatus.MODIFIED, PorcelainFileStatus.NONE, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n parser(PorcelainFileStatus.MODIFIED, PorcelainFileStatus.MODIFIED, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n\n parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.NONE, (result, file) => {\n result.renamed.push(renamedFile(file));\n }),\n parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.MODIFIED, (result, file) => {\n const renamed = renamedFile(file);\n result.renamed.push(renamed);\n result.modified.push(renamed.to);\n }),\n parser(PorcelainFileStatus.IGNORED, PorcelainFileStatus.IGNORED, (_result, _file) => {\n (_result.ignored = _result.ignored || []).push(_file);\n }),\n\n parser(PorcelainFileStatus.UNTRACKED, PorcelainFileStatus.UNTRACKED, (result, file) =>\n result.not_added.push(file)\n ),\n\n ...conflicts(PorcelainFileStatus.ADDED, PorcelainFileStatus.ADDED, PorcelainFileStatus.UNMERGED),\n ...conflicts(\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.UNMERGED\n ),\n ...conflicts(\n PorcelainFileStatus.UNMERGED,\n PorcelainFileStatus.ADDED,\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.UNMERGED\n ),\n\n [\n '##',\n (result, line) => {\n const aheadReg = /ahead (\\d+)/;\n const behindReg = /behind (\\d+)/;\n const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n const trackingReg = /\\.{3}(\\S*)/;\n const onEmptyBranchReg = /\\son\\s(\\S+?)(?=\\.{3}|$)/;\n\n let regexResult = aheadReg.exec(line);\n result.ahead = (regexResult && +regexResult[1]) || 0;\n\n regexResult = behindReg.exec(line);\n result.behind = (regexResult && +regexResult[1]) || 0;\n\n regexResult = currentReg.exec(line);\n result.current = filterType(regexResult?.[1], filterString, null);\n\n regexResult = trackingReg.exec(line);\n result.tracking = filterType(regexResult?.[1], filterString, null);\n\n regexResult = onEmptyBranchReg.exec(line);\n if (regexResult) {\n result.current = filterType(regexResult?.[1], filterString, result.current);\n }\n\n result.detached = /\\(no branch\\)/.test(line);\n },\n ],\n]);\n\nexport const parseStatusSummary = function (text: string): StatusResult {\n const lines = text.split(NULL);\n const status = new StatusSummary();\n\n for (let i = 0, l = lines.length; i < l; ) {\n let line = lines[i++].trim();\n\n if (!line) {\n continue;\n }\n\n if (line.charAt(0) === PorcelainFileStatus.RENAMED) {\n line += NULL + (lines[i++] || '');\n }\n\n splitLine(status, line);\n }\n\n return status;\n};\n\nfunction splitLine(result: StatusResult, lineStr: string) {\n const trimmed = lineStr.trim();\n switch (' ') {\n case trimmed.charAt(2):\n return data(trimmed.charAt(0), trimmed.charAt(1), trimmed.slice(3));\n case trimmed.charAt(1):\n return data(PorcelainFileStatus.NONE, trimmed.charAt(0), trimmed.slice(2));\n default:\n return;\n }\n\n function data(index: string, workingDir: string, path: string) {\n const raw = `${index}${workingDir}`;\n const handler = parsers.get(raw);\n\n if (handler) {\n handler(result, path);\n }\n\n if (raw !== '##' && raw !== '!!') {\n result.files.push(new FileStatusSummary(path, index, workingDir));\n }\n }\n}\n","import type { StatusResult } from '../../typings';\nimport { parseStatusSummary } from '../responses/StatusSummary';\nimport type { StringTask } from '../types';\n\nconst ignoredOptions = ['--null', '-z'];\n\nexport function statusTask(customArgs: string[]): StringTask<StatusResult> {\n const commands = [\n 'status',\n '--porcelain',\n '-b',\n '-u',\n '--null',\n ...customArgs.filter((arg) => !ignoredOptions.includes(arg)),\n ];\n\n return {\n format: 'utf-8',\n commands,\n parser(text: string) {\n return parseStatusSummary(text);\n },\n };\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { asNumber, ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nexport interface VersionResult {\n major: number;\n minor: number;\n patch: number | string;\n agent: string;\n installed: boolean;\n}\n\nconst NOT_INSTALLED = 'installed=false';\n\nfunction versionResponse(\n major = 0,\n minor = 0,\n patch: string | number = 0,\n agent = '',\n installed = true\n): VersionResult {\n return Object.defineProperty(\n {\n major,\n minor,\n patch,\n agent,\n installed,\n },\n 'toString',\n {\n value() {\n return `${this.major}.${this.minor}.${this.patch}`;\n },\n configurable: false,\n enumerable: false,\n }\n );\n}\n\nfunction notInstalledResponse() {\n return versionResponse(0, 0, 0, '', false);\n}\n\nexport default function (): Pick<SimpleGit, 'version'> {\n return {\n version(this: SimpleGitApi) {\n return this._runTask({\n commands: ['--version'],\n format: 'utf-8',\n parser: versionParser,\n onError(result, error, done, fail) {\n if (result.exitCode === ExitCodes.NOT_FOUND) {\n return done(Buffer.from(NOT_INSTALLED));\n }\n\n fail(error);\n },\n });\n },\n };\n}\n\nconst parsers: LineParser<VersionResult>[] = [\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n (result, [major, minor, patch, agent = '']) => {\n Object.assign(\n result,\n versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n );\n }\n ),\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n (result, [major, minor, patch, agent = '']) => {\n Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n }\n ),\n];\n\nfunction versionParser(stdOut: string) {\n if (stdOut === NOT_INSTALLED) {\n return notInstalledResponse();\n }\n\n return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers, stdOut);\n}\n","import type { SimpleGitBase } from '../typings';\nimport { taskCallback } from './task-callback';\nimport { changeWorkingDirectoryTask } from './tasks/change-working-directory';\nimport checkout from './tasks/checkout';\nimport clone from './tasks/clone';\nimport commit from './tasks/commit';\nimport config from './tasks/config';\nimport countObjects from './tasks/count-objects';\nimport firstCommit from './tasks/first-commit';\nimport grep from './tasks/grep';\nimport { hashObjectTask } from './tasks/hash-object';\nimport { initTask } from './tasks/init';\nimport interpretTrailers from './tasks/interpret-trailers';\nimport log from './tasks/log';\nimport { mergeTask } from './tasks/merge';\nimport { pushTask } from './tasks/push';\nimport show from './tasks/show';\nimport { statusTask } from './tasks/status';\nimport { configurationErrorTask, straightThroughStringTask } from './tasks/task';\nimport version from './tasks/version';\nimport type {\n outputHandler,\n SimpleGitExecutor,\n SimpleGitTask,\n SimpleGitTaskCallback,\n} from './types';\nimport {\n asArray,\n filterString,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n} from './utils';\n\nexport class SimpleGitApi implements SimpleGitBase {\n constructor(private _executor: SimpleGitExecutor) {}\n\n protected _runTask<T>(task: SimpleGitTask<T>, then?: SimpleGitTaskCallback<T>) {\n const chain = this._executor.chain();\n const promise = chain.push(task);\n\n if (then) {\n taskCallback(task, promise, then);\n }\n\n return Object.create(this, {\n then: { value: promise.then.bind(promise) },\n catch: { value: promise.catch.bind(promise) },\n _executor: { value: chain },\n });\n }\n\n add(files: string | string[]) {\n return this._runTask(\n straightThroughStringTask(['add', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n }\n\n cwd(directory: string | { path: string; root?: boolean }) {\n const next = trailingFunctionArgument(arguments);\n\n if (typeof directory === 'string') {\n return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n }\n\n if (typeof directory?.path === 'string') {\n return this._runTask(\n changeWorkingDirectoryTask(\n directory.path,\n (directory.root && this._executor) || undefined\n ),\n next\n );\n }\n\n return this._runTask(\n configurationErrorTask('Git.cwd: workingDirectory must be supplied as a string'),\n next\n );\n }\n\n hashObject(path: string, write: boolean | unknown) {\n return this._runTask(\n hashObjectTask(path, write === true),\n trailingFunctionArgument(arguments)\n );\n }\n\n init(bare?: boolean | unknown) {\n return this._runTask(\n initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n\n merge() {\n return this._runTask(\n mergeTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n\n mergeFromTo(remote: string, branch: string) {\n if (!(filterString(remote) && filterString(branch))) {\n return this._runTask(\n configurationErrorTask(\n `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n )\n );\n }\n\n return this._runTask(\n mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments, false)\n );\n }\n\n outputHandler(handler: outputHandler) {\n this._executor.outputHandler = handler;\n return this;\n }\n\n push() {\n const task = pushTask(\n {\n remote: filterType(arguments[0], filterString),\n branch: filterType(arguments[1], filterString),\n },\n getTrailingOptions(arguments)\n );\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n }\n\n stash() {\n return this._runTask(\n straightThroughStringTask(['stash', ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n\n status() {\n return this._runTask(\n statusTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n}\n\nObject.assign(\n SimpleGitApi.prototype,\n checkout(),\n clone(),\n commit(),\n config(),\n countObjects(),\n firstCommit(),\n grep(),\n interpretTrailers(),\n log(),\n show(),\n version()\n);\n","import { createDeferred, type DeferredPromise } from '@kwsites/promise-deferred';\n\nimport { createLogger } from '../git-logger';\nimport { append, remove } from '../utils';\n\ntype ScheduleCompleteCallback = () => void;\ntype ScheduledTask = Pick<DeferredPromise<ScheduleCompleteCallback>, 'promise' | 'done'> & {\n id: number;\n};\n\nconst createScheduledTask: () => ScheduledTask = (() => {\n let id = 0;\n return () => {\n id++;\n const { promise, done } = createDeferred<ScheduleCompleteCallback>();\n\n return {\n promise,\n done,\n id,\n };\n };\n})();\n\nexport class Scheduler {\n private logger = createLogger('', 'scheduler');\n private pending: ScheduledTask[] = [];\n private running: ScheduledTask[] = [];\n\n constructor(private concurrency = 2) {\n this.logger(`Constructed, concurrency=%s`, concurrency);\n }\n\n private schedule() {\n if (!this.pending.length || this.running.length >= this.concurrency) {\n this.logger(\n `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n this.pending.length,\n this.running.length,\n this.concurrency\n );\n return;\n }\n\n const task = append(this.running, this.pending.shift()!);\n this.logger(`Attempting id=%s`, task.id);\n task.done(() => {\n this.logger(`Completing id=`, task.id);\n remove(this.running, task);\n this.schedule();\n });\n }\n\n next(): Promise<ScheduleCompleteCallback> {\n const { promise, id } = append(this.pending, createScheduledTask());\n this.logger(`Scheduling id=%s`, id);\n\n this.schedule();\n\n return promise;\n }\n}\n","import type { OptionFlags, Options, StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport type ApplyOptions = Options &\n OptionFlags<\n | '--stat'\n | '--numstat'\n | '--summary'\n | '--check'\n | '--index'\n | '--intent-to-add'\n | '--3way'\n | '--apply'\n | '--no-add'\n | '-R'\n | '--reverse'\n | '--allow-binary-replacement'\n | '--binary'\n | '--reject'\n | '-z'\n | '--inaccurate-eof'\n | '--recount'\n | '--cached'\n | '--ignore-space-change'\n | '--ignore-whitespace'\n | '--verbose'\n | '--unsafe-paths'\n > &\n OptionFlags<'--whitespace', 'nowarn' | 'warn' | 'fix' | 'error' | 'error-all'> &\n OptionFlags<'--build-fake-ancestor' | '--exclude' | '--include' | '--directory', string> &\n OptionFlags<'-p' | '-C', number>;\n\nexport function applyPatchTask(patches: string[], customArgs: string[]): StringTask<string> {\n return straightThroughStringTask(['apply', ...customArgs, ...patches]);\n}\n","import type { BranchSummary, BranchSummaryBranch } from '../../typings';\n\nexport enum BranchStatusIdentifier {\n CURRENT = '*',\n LINKED = '+',\n}\n\nexport class BranchSummaryResult implements BranchSummary {\n public all: string[] = [];\n public branches: { [p: string]: BranchSummaryBranch } = {};\n public current: string = '';\n public detached: boolean = false;\n\n push(\n status: BranchStatusIdentifier | unknown,\n detached: boolean,\n name: string,\n commit: string,\n label: string\n ) {\n if (status === BranchStatusIdentifier.CURRENT) {\n this.detached = detached;\n this.current = name;\n }\n\n this.all.push(name);\n this.branches[name] = {\n current: status === BranchStatusIdentifier.CURRENT,\n linkedWorkTree: status === BranchStatusIdentifier.LINKED,\n name,\n commit,\n label,\n };\n }\n}\n","import type { BranchSummary } from '../../typings';\nimport { BranchStatusIdentifier, BranchSummaryResult } from '../responses/BranchSummary';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<BranchSummaryResult>[] = [\n new LineParser(\n /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), true, name, commit, label);\n }\n ),\n new LineParser(\n /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), false, name, commit, label);\n }\n ),\n];\n\nconst currentBranchParser = new LineParser<BranchSummaryResult>(/^(\\S+)$/s, (result, [name]) => {\n result.push(BranchStatusIdentifier.CURRENT, false, name, '', '');\n});\n\nfunction branchStatus(input?: string) {\n return input ? input.charAt(0) : '';\n}\n\nexport function parseBranchSummary(stdOut: string, currentOnly = false): BranchSummary {\n return parseStringResponse(\n new BranchSummaryResult(),\n currentOnly ? [currentBranchParser] : parsers,\n stdOut\n );\n}\n","import type {\n BranchMultiDeleteResult,\n BranchSingleDeleteFailure,\n BranchSingleDeleteResult,\n BranchSingleDeleteSuccess,\n} from '../../typings';\n\nexport class BranchDeletionBatch implements BranchMultiDeleteResult {\n all: BranchSingleDeleteResult[] = [];\n branches: { [branchName: string]: BranchSingleDeleteResult } = {};\n errors: BranchSingleDeleteResult[] = [];\n\n get success(): boolean {\n return !this.errors.length;\n }\n}\n\nexport function branchDeletionSuccess(branch: string, hash: string): BranchSingleDeleteSuccess {\n return {\n branch,\n hash,\n success: true,\n };\n}\n\nexport function branchDeletionFailure(branch: string): BranchSingleDeleteFailure {\n return {\n branch,\n hash: null,\n success: false,\n };\n}\n\nexport function isSingleBranchDeleteFailure(\n test: BranchSingleDeleteResult\n): test is BranchSingleDeleteSuccess {\n return test.success;\n}\n","import type { BranchMultiDeleteResult } from '../../typings';\nimport {\n BranchDeletionBatch,\n branchDeletionFailure,\n branchDeletionSuccess,\n} from '../responses/BranchDeleteSummary';\nimport type { TaskParser } from '../types';\nimport { ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nconst deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\nconst deleteErrorRegex = /^error[^']+'([^']+)'/m;\n\nconst parsers: LineParser<BranchMultiDeleteResult>[] = [\n new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n const deletion = branchDeletionSuccess(branch, hash);\n\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n new LineParser(deleteErrorRegex, (result, [branch]) => {\n const deletion = branchDeletionFailure(branch);\n\n result.errors.push(deletion);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n];\n\nexport const parseBranchDeletions: TaskParser<string, BranchMultiDeleteResult> = (\n stdOut,\n stdErr\n) => {\n return parseStringResponse(new BranchDeletionBatch(), parsers, [stdOut, stdErr]);\n};\n\nexport function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean {\n return processExitCode === ExitCodes.ERROR && deleteErrorRegex.test(data);\n}\n","import type {\n BranchMultiDeleteResult,\n BranchSingleDeleteResult,\n BranchSummary,\n} from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseBranchSummary } from '../parsers/parse-branch';\nimport { hasBranchDeletionError, parseBranchDeletions } from '../parsers/parse-branch-delete';\nimport type { StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function containsDeleteBranchCommand(commands: string[]) {\n const deleteCommands = ['-d', '-D', '--delete'];\n return commands.some((command) => deleteCommands.includes(command));\n}\n\nexport function branchTask(\n customArgs: string[]\n): StringTask<BranchSummary | BranchSingleDeleteResult> {\n const isDelete = containsDeleteBranchCommand(customArgs);\n const isCurrentOnly = customArgs.includes('--show-current');\n\n const commands = ['branch', ...customArgs];\n\n if (commands.length === 1) {\n commands.push('-a');\n }\n\n if (!commands.includes('-v')) {\n commands.splice(1, 0, '-v');\n }\n\n return {\n format: 'utf-8',\n commands,\n parser(stdOut, stdErr) {\n if (isDelete) {\n return parseBranchDeletions(stdOut, stdErr).all[0];\n }\n\n return parseBranchSummary(stdOut, isCurrentOnly);\n },\n };\n}\n\nexport function branchLocalTask(): StringTask<BranchSummary> {\n return {\n format: 'utf-8',\n commands: ['branch', '-v'],\n parser(stdOut) {\n return parseBranchSummary(stdOut);\n },\n };\n}\n\nexport function deleteBranchesTask(\n branches: string[],\n forceDelete = false\n): StringTask<BranchMultiDeleteResult> {\n return {\n format: 'utf-8',\n commands: ['branch', '-v', forceDelete ? '-D' : '-d', ...branches],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr);\n },\n onError({ exitCode, stdOut }, error, done, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n\n done(stdOut);\n },\n };\n}\n\nexport function deleteBranchTask(\n branch: string,\n forceDelete = false\n): StringTask<BranchSingleDeleteResult> {\n const task: StringTask<BranchSingleDeleteResult> = {\n format: 'utf-8',\n commands: ['branch', '-v', forceDelete ? '-D' : '-d', branch],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr).branches[branch]!;\n },\n onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n\n throw new GitResponseError(\n task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n String(error)\n );\n },\n };\n\n return task;\n}\n","import { normalize } from 'node:path';\n\nimport type { StringTask } from '../types';\n\nexport function checkIgnoreTask(paths: string[]): StringTask<string[]> {\n return {\n commands: ['check-ignore', ...paths],\n format: 'utf-8',\n parser: parseCheckIgnore,\n };\n}\n\n/**\n * Parser for the `check-ignore` command - returns each file as a string array\n */\nfunction parseCheckIgnore(text: string): string[] {\n return text.split(/\\n/g).map(toPath).filter(Boolean);\n}\n\nfunction toPath(input: string) {\n const path = input.trim().replace(/^[\"']|[\"']$/g, '');\n return path && normalize(path);\n}\n","import type { FetchResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<FetchResult>[] = [\n new LineParser(/From (.+)$/, (result, [remote]) => {\n result.remote = remote;\n }),\n new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.branches.push({\n name,\n tracking,\n });\n }),\n new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.tags.push({\n name,\n tracking,\n });\n }),\n new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n result.deleted.push({\n tracking,\n });\n }),\n new LineParser(\n /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n (result, [from, to, name, tracking]) => {\n result.updated.push({\n name,\n tracking,\n to,\n from,\n });\n }\n ),\n];\n\nexport function parseFetchResult(stdOut: string, stdErr: string): FetchResult {\n const result: FetchResult = {\n raw: stdOut,\n remote: null,\n branches: [],\n tags: [],\n updated: [],\n deleted: [],\n };\n return parseStringResponse(result, parsers, [stdOut, stdErr]);\n}\n","import type { FetchResult } from '../../typings';\nimport { parseFetchResult } from '../parsers/parse-fetch';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nfunction disallowedCommand(command: string) {\n return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function fetchTask(\n remote: string,\n branch: string,\n customArgs: string[]\n): StringTask<FetchResult> | EmptyTask {\n const commands = ['fetch', ...customArgs];\n if (remote && branch) {\n commands.push(remote, branch);\n }\n\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser: parseFetchResult,\n };\n}\n","import type { MoveResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<MoveResult>[] = [\n new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n result.moves.push({ from, to });\n }),\n];\n\nexport function parseMoveResult(stdOut: string): MoveResult {\n return parseStringResponse({ moves: [] }, parsers, stdOut);\n}\n","import type { MoveResult } from '../../typings';\nimport { parseMoveResult } from '../parsers/parse-move';\nimport type { StringTask } from '../types';\nimport { asArray } from '../utils';\n\nexport function moveTask(from: string | string[], to: string): StringTask<MoveResult> {\n return {\n commands: ['mv', '-v', ...asArray(from), to],\n format: 'utf-8',\n parser: parseMoveResult,\n };\n}\n","import type { PullResult } from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parsePullErrorResult, parsePullResult } from '../parsers/parse-pull';\nimport type { Maybe, StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function pullTask(\n remote: Maybe<string>,\n branch: Maybe<string>,\n customArgs: string[]\n): StringTask<PullResult> {\n const commands: string[] = ['pull', ...customArgs];\n if (remote && branch) {\n commands.splice(1, 0, remote, branch);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(stdOut, stdErr): PullResult {\n return parsePullResult(stdOut, stdErr);\n },\n onError(result, _error, _done, fail) {\n const pullError = parsePullErrorResult(\n bufferToString(result.stdOut),\n bufferToString(result.stdErr)\n );\n if (pullError) {\n return fail(new GitResponseError(pullError));\n }\n\n fail(_error);\n },\n };\n}\n","import { forEachLineWithContent } from '../utils';\n\nexport interface RemoteWithoutRefs {\n name: string;\n}\n\nexport interface RemoteWithRefs extends RemoteWithoutRefs {\n refs: {\n fetch: string;\n push: string;\n };\n}\n\nexport function parseGetRemotes(text: string): RemoteWithoutRefs[] {\n const remotes: { [name: string]: RemoteWithoutRefs } = {};\n\n forEach(text, ([name]) => (remotes[name] = { name }));\n\n return Object.values(remotes);\n}\n\nexport function parseGetRemotesVerbose(text: string): RemoteWithRefs[] {\n const remotes: { [name: string]: RemoteWithRefs } = {};\n\n forEach(text, ([name, url, purpose]) => {\n if (!Object.hasOwn(remotes, name)) {\n remotes[name] = {\n name: name,\n refs: { fetch: '', push: '' },\n };\n }\n\n if (purpose && url) {\n remotes[name].refs[purpose.replace(/[^a-z]/g, '') as keyof RemoteWithRefs['refs']] = url;\n }\n });\n\n return Object.values(remotes);\n}\n\nfunction forEach(text: string, handler: (line: string[]) => void) {\n forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\n","import {\n parseGetRemotes,\n parseGetRemotesVerbose,\n type RemoteWithoutRefs,\n type RemoteWithRefs,\n} from '../responses/GetRemoteSummary';\nimport type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addRemoteTask(\n remoteName: string,\n remoteRepo: string,\n customArgs: string[]\n): StringTask<string> {\n return straightThroughStringTask(['remote', 'add', ...customArgs, remoteName, remoteRepo]);\n}\n\nexport function getRemotesTask(verbose: true): StringTask<RemoteWithRefs[]>;\nexport function getRemotesTask(verbose: false): StringTask<RemoteWithoutRefs[]>;\nexport function getRemotesTask(\n verbose: boolean\n): StringTask<RemoteWithRefs[] | RemoteWithoutRefs[]> {\n const commands = ['remote'];\n if (verbose) {\n commands.push('-v');\n }\n\n return {\n commands,\n format: 'utf-8',\n parser: verbose ? parseGetRemotesVerbose : parseGetRemotes,\n };\n}\n\nexport function listRemotesTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'ls-remote') {\n commands.unshift('ls-remote');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function remoteTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'remote') {\n commands.unshift('remote');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function removeRemoteTask(remoteName: string) {\n return straightThroughStringTask(['remote', 'remove', remoteName]);\n}\n","import type { LogOptions, LogResult } from '../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { createListLogSummaryParser } from '../parsers/parse-list-log-summary';\nimport type { StringTask } from '../types';\nimport { validateLogFormatConfig } from './diff';\nimport { parseLogOptions } from './log';\nimport type { EmptyTask } from './task';\n\nexport function stashListTask(\n opt: LogOptions = {},\n customArgs: string[]\n): EmptyTask | StringTask<LogResult> {\n const options = parseLogOptions<any>(opt);\n const commands = ['stash', 'list', ...options.commands, ...customArgs];\n const parser = createListLogSummaryParser(\n options.splitter,\n options.fields,\n logFormatFromCommand(commands)\n );\n\n return (\n validateLogFormatConfig(commands) || {\n commands,\n format: 'utf-8',\n parser,\n }\n );\n}\n","import type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addSubModuleTask(repo: string, path: string): StringTask<string> {\n return subModuleTask(['add', repo, path]);\n}\n\nexport function initSubModuleTask(customArgs: string[]): StringTask<string> {\n return subModuleTask(['init', ...customArgs]);\n}\n\nexport function subModuleTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'submodule') {\n commands.unshift('submodule');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function updateSubModuleTask(customArgs: string[]): StringTask<string> {\n return subModuleTask(['update', ...customArgs]);\n}\n","import type { TagResult } from '../../typings';\n\nexport class TagList implements TagResult {\n constructor(\n public readonly all: string[],\n public readonly latest: string | undefined\n ) {}\n}\n\nexport const parseTagList = function (data: string, customSort = false) {\n const tags = data.split('\\n').map(trimmed).filter(Boolean);\n\n if (!customSort) {\n tags.sort(function (tagA, tagB) {\n const partsA = tagA.split('.');\n const partsB = tagB.split('.');\n\n if (partsA.length === 1 || partsB.length === 1) {\n return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n }\n\n for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n\n if (diff) {\n return diff;\n }\n }\n\n return 0;\n });\n }\n\n const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf('.') >= 0);\n\n return new TagList(tags, latest);\n};\n\nfunction singleSorted(a: number, b: number): number {\n const aIsNum = Number.isNaN(a);\n const bIsNum = Number.isNaN(b);\n\n if (aIsNum !== bIsNum) {\n return aIsNum ? 1 : -1;\n }\n\n return aIsNum ? sorted(a, b) : 0;\n}\n\nfunction sorted(a: number, b: number) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\n\nfunction trimmed(input: string) {\n return input.trim();\n}\n\nfunction toNumber(input: string | undefined) {\n if (typeof input === 'string') {\n return parseInt(input.replace(/^\\D+/g, ''), 10) || 0;\n }\n\n return 0;\n}\n","import type { TagResult } from '../../typings';\nimport { parseTagList } from '../responses/TagList';\nimport type { StringTask } from '../types';\n\n/**\n * Task used by `git.tags`\n */\nexport function tagListTask(customArgs: string[] = []): StringTask<TagResult> {\n const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n\n return {\n format: 'utf-8',\n commands: ['tag', '-l', ...customArgs],\n parser(text: string) {\n return parseTagList(text, hasCustomSort);\n },\n };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addTagTask(name: string): StringTask<{ name: string }> {\n return {\n format: 'utf-8',\n commands: ['tag', name],\n parser() {\n return { name };\n },\n };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addAnnotatedTagTask(\n name: string,\n tagMessage: string\n): StringTask<{ name: string }> {\n return {\n format: 'utf-8',\n commands: ['tag', '-a', '-m', tagMessage, name],\n parser() {\n return { name };\n },\n };\n}\n","import {GitExecutor} from \"./lib/runners/git-executor\";\n\nimport {SimpleGitApi} from \"./lib/simple-git-api\";\n\nimport {Scheduler} from \"./lib/runners/scheduler\";\n\nimport {\n configurationErrorTask,\n straightThroughBufferTask,\n straightThroughStringTask\n} from \"./lib/tasks/task\";\n\nimport {\n asArray,\n filterArray,\n filterPrimitives,\n filterString,\n filterStringOrStringArray,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n trailingOptionsArgument\n} from \"./lib/utils\";\n\nimport {applyPatchTask} from \"./lib/tasks/apply-patch\";\n\nimport {branchLocalTask, branchTask, deleteBranchesTask, deleteBranchTask} from \"./lib/tasks/branch\";\n\nimport {checkIgnoreTask} from \"./lib/tasks/check-ignore\";\n\nimport {checkIsRepoTask} from \"./lib/tasks/check-is-repo\";\n\nimport {cleanWithOptionsTask, isCleanOptionsArray} from \"./lib/tasks/clean\";\n\nimport {diffSummaryTask} from \"./lib/tasks/diff\";\n\nimport {fetchTask} from \"./lib/tasks/fetch\";\n\nimport {moveTask} from \"./lib/tasks/move\";\n\nimport {pullTask} from \"./lib/tasks/pull\";\n\nimport {pushTagsTask} from \"./lib/tasks/push\";\n\nimport {addRemoteTask, getRemotesTask, listRemotesTask, remoteTask, removeRemoteTask} from \"./lib/tasks/remote\";\n\nimport {getResetMode, resetTask} from \"./lib/tasks/reset\";\n\nimport {stashListTask} from \"./lib/tasks/stash-list\";\n\nimport {addSubModuleTask, initSubModuleTask, subModuleTask, updateSubModuleTask} from \"./lib/tasks/sub-module\";\n\nimport {addAnnotatedTagTask, addTagTask, tagListTask} from \"./lib/tasks/tag\";\n\nfunction Git(options, plugins) {\n this._plugins = plugins;\n this._executor = new GitExecutor(\n options.baseDir,\n new Scheduler(options.maxConcurrentProcesses),\n plugins\n );\n\n this._trimmed = options.trimmed;\n}\n\n(Git.prototype = Object.create(SimpleGitApi.prototype)).constructor = Git;\n\n/**\n * Sets the path to a custom git binary, should either be `git` when there is an installation of git available on\n * the system path, or a fully qualified path to the executable.\n */\nGit.prototype.customBinary = function (command) {\n this._plugins.reconfigure('binary', command);\n return this;\n};\n\n/**\n * Sets an environment variable for the spawned child process, either supply both a name and value as strings or\n * a single object to entirely replace the current environment variables.\n *\n * @param {string|Object} name\n * @param {string} [value]\n * @returns {Git}\n */\nGit.prototype.env = function (name, value) {\n if (arguments.length === 1 && typeof name === 'object') {\n this._executor.env = name;\n } else {\n (this._executor.env = this._executor.env || {})[name] = value;\n }\n\n return this;\n};\n\n/**\n * List the stash(s) of the local repo\n */\nGit.prototype.stashList = function (options) {\n return this._runTask(\n stashListTask(\n trailingOptionsArgument(arguments) || {},\n (filterArray(options) && options) || []\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Moves one or more files to a new destination.\n *\n * @see https://git-scm.com/docs/git-mv\n *\n * @param {string|string[]} from\n * @param {string} to\n */\nGit.prototype.mv = function (from, to) {\n return this._runTask(moveTask(from, to), trailingFunctionArgument(arguments));\n};\n\n/**\n * Internally uses pull and tags to get the list of tags then checks out the latest tag.\n *\n * @param {Function} [then]\n */\nGit.prototype.checkoutLatestTag = function (then) {\n var git = this;\n return this.pull(function () {\n git.tags(function (err, tags) {\n git.checkout(tags.latest, then);\n });\n });\n};\n\n/**\n * Pull the updated contents of the current repo\n */\nGit.prototype.pull = function (remote, branch, options, then) {\n return this._runTask(\n pullTask(\n filterType(remote, filterString),\n filterType(branch, filterString),\n getTrailingOptions(arguments)\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Fetch the updated contents of the current repo.\n *\n * @example\n * .fetch('upstream', 'master') // fetches from master on remote named upstream\n * .fetch(function () {}) // runs fetch against default remote and branch and calls function\n *\n * @param {string} [remote]\n * @param {string} [branch]\n */\nGit.prototype.fetch = function (remote, branch) {\n return this._runTask(\n fetchTask(\n filterType(remote, filterString),\n filterType(branch, filterString),\n getTrailingOptions(arguments)\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * List all tags. When using git 2.7.0 or above, include an options object with `\"--sort\": \"property-name\"` to\n * sort the tags by that property instead of using the default semantic versioning sort.\n *\n * Note, supplying this option when it is not supported by your Git version will cause the operation to fail.\n *\n * @param {Object} [options]\n * @param {Function} [then]\n */\nGit.prototype.tags = function (options, then) {\n return this._runTask(\n tagListTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Rebases the current working copy. Options can be supplied either as an array of string parameters\n * to be sent to the `git rebase` command, or a standard options object.\n */\nGit.prototype.rebase = function () {\n return this._runTask(\n straightThroughStringTask(['rebase', ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Reset a repo\n */\nGit.prototype.reset = function (mode) {\n return this._runTask(\n resetTask(getResetMode(mode), getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Revert one or more commits in the local working copy\n */\nGit.prototype.revert = function (commit) {\n const next = trailingFunctionArgument(arguments);\n\n if (typeof commit !== 'string') {\n return this._runTask(configurationErrorTask('Commit must be a string'), next);\n }\n\n return this._runTask(\n straightThroughStringTask(['revert', ...getTrailingOptions(arguments, 0, true), commit]),\n next\n );\n};\n\n/**\n * Add a lightweight tag to the head of the current branch\n */\nGit.prototype.addTag = function (name) {\n const task =\n typeof name === 'string'\n ? addTagTask(name)\n : configurationErrorTask('Git.addTag requires a tag name');\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Add an annotated tag to the head of the current branch\n */\nGit.prototype.addAnnotatedTag = function (tagName, tagMessage) {\n return this._runTask(\n addAnnotatedTagTask(tagName, tagMessage),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Delete a local branch\n */\nGit.prototype.deleteLocalBranch = function (branchName, forceDelete, then) {\n return this._runTask(\n deleteBranchTask(branchName, typeof forceDelete === 'boolean' ? forceDelete : false),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Delete one or more local branches\n */\nGit.prototype.deleteLocalBranches = function (branchNames, forceDelete, then) {\n return this._runTask(\n deleteBranchesTask(branchNames, typeof forceDelete === 'boolean' ? forceDelete : false),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * List all branches\n *\n * @param {Object | string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.branch = function (options, then) {\n return this._runTask(\n branchTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Return list of local branches\n *\n * @param {Function} [then]\n */\nGit.prototype.branchLocal = function (then) {\n return this._runTask(branchLocalTask(), trailingFunctionArgument(arguments));\n};\n\n/**\n * Executes any command against the git binary.\n */\nGit.prototype.raw = function (commands) {\n const createRestCommands = !Array.isArray(commands);\n const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n\n for (let i = 0; i < command.length && createRestCommands; i++) {\n if (!filterPrimitives(command[i])) {\n command.splice(i, command.length - i);\n break;\n }\n }\n\n command.push(...getTrailingOptions(arguments, 0, true));\n\n var next = trailingFunctionArgument(arguments);\n\n if (!command.length) {\n return this._runTask(\n configurationErrorTask('Raw: must supply one or more command to execute'),\n next\n );\n }\n\n return this._runTask(straightThroughStringTask(command, this._trimmed), next);\n};\n\nGit.prototype.submoduleAdd = function (repo, path, then) {\n return this._runTask(addSubModuleTask(repo, path), trailingFunctionArgument(arguments));\n};\n\nGit.prototype.submoduleUpdate = function (args, then) {\n return this._runTask(\n updateSubModuleTask(getTrailingOptions(arguments, true)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.submoduleInit = function (args, then) {\n return this._runTask(\n initSubModuleTask(getTrailingOptions(arguments, true)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.subModule = function (options, then) {\n return this._runTask(\n subModuleTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.listRemote = function () {\n return this._runTask(\n listRemotesTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Adds a remote to the list of remotes.\n */\nGit.prototype.addRemote = function (remoteName, remoteRepo, then) {\n return this._runTask(\n addRemoteTask(remoteName, remoteRepo, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Removes an entry by name from the list of remotes.\n */\nGit.prototype.removeRemote = function (remoteName, then) {\n return this._runTask(removeRemoteTask(remoteName), trailingFunctionArgument(arguments));\n};\n\n/**\n * Gets the currently available remotes, setting the optional verbose argument to true includes additional\n * detail on the remotes themselves.\n */\nGit.prototype.getRemotes = function (verbose, then) {\n return this._runTask(getRemotesTask(verbose === true), trailingFunctionArgument(arguments));\n};\n\n/**\n * Call any `git remote` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.remote = function (options, then) {\n return this._runTask(\n remoteTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Call any `git tag` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.tag = function (options, then) {\n const command = getTrailingOptions(arguments);\n\n if (command[0] !== 'tag') {\n command.unshift('tag');\n }\n\n return this._runTask(straightThroughStringTask(command), trailingFunctionArgument(arguments));\n};\n\n/**\n * Updates repository server info\n *\n * @param {Function} [then]\n */\nGit.prototype.updateServerInfo = function (then) {\n return this._runTask(\n straightThroughStringTask(['update-server-info']),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Pushes the current tag changes to a remote which can be either a URL or named remote. When not specified uses the\n * default configured remote spec.\n *\n * @param {string} [remote]\n * @param {Function} [then]\n */\nGit.prototype.pushTags = function (remote, then) {\n const task = pushTagsTask(\n { remote: filterType(remote, filterString) },\n getTrailingOptions(arguments)\n );\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Removes the named files from source control.\n */\nGit.prototype.rm = function (files) {\n return this._runTask(\n straightThroughStringTask(['rm', '-f', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Removes the named files from source control but keeps them on disk rather than deleting them entirely. To\n * completely remove the files, use `rm`.\n *\n * @param {string|string[]} files\n */\nGit.prototype.rmKeepLocal = function (files) {\n return this._runTask(\n straightThroughStringTask(['rm', '--cached', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Returns a list of objects in a tree based on commit hash. Passing in an object hash returns the object's content,\n * size, and type.\n *\n * Passing \"-p\" will instruct cat-file to determine the object type, and display its formatted contents.\n *\n * @param {string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.catFile = function (options, then) {\n return this._catFile('utf-8', arguments);\n};\n\nGit.prototype.binaryCatFile = function () {\n return this._catFile('buffer', arguments);\n};\n\nGit.prototype._catFile = function (format, args) {\n var handler = trailingFunctionArgument(args);\n var command = ['cat-file'];\n var options = args[0];\n\n if (typeof options === 'string') {\n return this._runTask(\n configurationErrorTask('Git.catFile: options must be supplied as an array of strings'),\n handler\n );\n }\n\n if (Array.isArray(options)) {\n command.push.apply(command, options);\n }\n\n const task =\n format === 'buffer' ? straightThroughBufferTask(command) : straightThroughStringTask(command);\n\n return this._runTask(task, handler);\n};\n\nGit.prototype.diff = function (options, then) {\n const task = filterString(options)\n ? configurationErrorTask(\n 'git.diff: supplying options as a single string is no longer supported, switch to an array of strings'\n )\n : straightThroughStringTask(['diff', ...getTrailingOptions(arguments)]);\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.diffSummary = function () {\n return this._runTask(\n diffSummaryTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.applyPatch = function (patches) {\n const task = !filterStringOrStringArray(patches)\n ? configurationErrorTask(\n `git.applyPatch requires one or more string patches as the first argument`\n )\n : applyPatchTask(asArray(patches), getTrailingOptions([].slice.call(arguments, 1)));\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.revparse = function () {\n const commands = ['rev-parse', ...getTrailingOptions(arguments, true)];\n return this._runTask(\n straightThroughStringTask(commands, true),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n */\nGit.prototype.clean = function (mode, options, then) {\n const usingCleanOptionsArray = isCleanOptionsArray(mode);\n const cleanMode =\n (usingCleanOptionsArray && mode.join('')) || filterType(mode, filterString) || '';\n const customArgs = getTrailingOptions([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n\n return this._runTask(\n cleanWithOptionsTask(cleanMode, customArgs),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.exec = function (then) {\n const task = {\n commands: [],\n format: 'utf-8',\n parser() {\n if (typeof then === 'function') {\n then();\n }\n },\n };\n\n return this._runTask(task);\n};\n\n/**\n * Check if a pathname or pathnames are excluded by .gitignore\n *\n * @param {string|string[]} pathnames\n * @param {Function} [then]\n */\nGit.prototype.checkIgnore = function (pathnames, then) {\n return this._runTask(\n checkIgnoreTask(asArray(filterType(pathnames, filterStringOrStringArray, []))),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.checkIsRepo = function (checkType, then) {\n return this._runTask(\n checkIsRepoTask(filterType(checkType, filterString)),\n trailingFunctionArgument(arguments)\n );\n};\n\nexport default Git;\n","import { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitOptions } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function abortPlugin(signal: SimpleGitOptions['abort']) {\n if (!signal) {\n return;\n }\n\n const onSpawnAfter: SimpleGitPlugin<'spawn.after'> = {\n type: 'spawn.after',\n action(_data, context) {\n function kill() {\n context.kill(new GitPluginError(undefined, 'abort', 'Abort signal received'));\n }\n\n signal.addEventListener('abort', kill);\n\n context.spawned.on('close', () => signal.removeEventListener('abort', kill));\n },\n };\n\n const onSpawnBefore: SimpleGitPlugin<'spawn.before'> = {\n type: 'spawn.before',\n action(_data, context) {\n if (signal.aborted) {\n context.kill(new GitPluginError(undefined, 'abort', 'Abort already signaled'));\n }\n },\n };\n\n return [onSpawnBefore, onSpawnAfter];\n}\n","import { isGitEnvKey } from '@simple-git/argv-parser';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport { createLogger } from '../git-logger';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst logger = createLogger('', 'plugin:allowEnvironment');\n\nexport function allowEnvironmentPlugin(\n allowEnvironment: readonly string[],\n allowAbbreviatedOptions = false\n): SimpleGitPlugin<'spawn.options'> {\n const allowed = new Set(allowEnvironment.map((key) => key.toLowerCase().trim()));\n\n return {\n type: 'spawn.options',\n action(spawnOptions, context) {\n const env = { ...(spawnOptions.env ?? process.env) };\n const suppliedKeys = new Set(\n Object.keys(context.env).map((key) => key.toLowerCase().trim())\n );\n\n for (const key of Object.keys(env)) {\n const normalised = key.toLowerCase().trim();\n\n // not a GIT_ key, or explicitly permitted\n if (!isGuardedEnvKey(normalised) || allowed.has(normalised)) {\n continue;\n }\n\n // explicitly throw when simpleGit.env() was called with a guarded key\n if (suppliedKeys.has(normalised)) {\n throw new GitPluginError(\n undefined,\n 'allowEnvironment',\n `Use of \"${key}\" is blocked by the environment guard - add it to the allowEnvironment option to permit it`\n );\n }\n\n // log and remove guarded keys inherited from the outer environment\n logger(`removing ambient guarded environment variable %s`, key);\n delete env[key];\n }\n\n return {\n ...spawnOptions,\n env: {\n ...env,\n GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS: String(!allowAbbreviatedOptions),\n },\n };\n },\n };\n}\n\nfunction isGuardedEnvKey(key: string) {\n const normalised = key.toLowerCase().trim();\n return normalised.startsWith('git_') || isGitEnvKey(normalised);\n}\n","import { vulnerabilityCheck } from '@simple-git/argv-parser';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitPluginConfig } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function blockUnsafeOperationsPlugin(\n options: SimpleGitPluginConfig['unsafe'] = {}\n): SimpleGitPlugin<'spawn.args'> {\n return {\n type: 'spawn.args',\n action(args, { env }) {\n for (const vulnerability of vulnerabilityCheck(args, env)) {\n if (options[vulnerability.category] !== true) {\n throw new GitPluginError(undefined, 'unsafe', vulnerability.message);\n }\n }\n\n return args;\n },\n };\n}\n","import { prefixedArray } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function commandConfigPrefixingPlugin(\n configuration: string[]\n): SimpleGitPlugin<'spawn.args'> {\n const prefix = prefixedArray(configuration, '-c');\n\n return {\n type: 'spawn.args',\n action(data) {\n return [...prefix, ...data];\n },\n };\n}\n","import { type DeferredPromise, deferred } from '@kwsites/promise-deferred';\n\nimport type { SimpleGitPluginConfig } from '../types';\nimport { delay } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst never = deferred().promise;\n\nexport function completionDetectionPlugin({\n onClose = true,\n onExit = 50,\n}: SimpleGitPluginConfig['completion'] = {}): SimpleGitPlugin<'spawn.after'> {\n function createEvents() {\n let exitCode = -1;\n const events = {\n close: deferred(),\n closeTimeout: deferred(),\n exit: deferred(),\n exitTimeout: deferred(),\n };\n\n const result = Promise.race([\n onClose === false ? never : events.closeTimeout.promise,\n onExit === false ? never : events.exitTimeout.promise,\n ]);\n\n configureTimeout(onClose, events.close, events.closeTimeout);\n configureTimeout(onExit, events.exit, events.exitTimeout);\n\n return {\n close(code: number) {\n exitCode = code;\n events.close.done();\n },\n exit(code: number) {\n exitCode = code;\n events.exit.done();\n },\n get exitCode() {\n return exitCode;\n },\n result,\n };\n }\n\n function configureTimeout(\n flag: boolean | number,\n event: DeferredPromise<void>,\n timeout: DeferredPromise<void>\n ) {\n if (flag === false) {\n return;\n }\n\n (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n }\n\n return {\n type: 'spawn.after',\n async action(_data, { spawned, close }) {\n const events = createEvents();\n\n let deferClose = true;\n let quickClose = () => void (deferClose = false);\n\n spawned.stdout?.on('data', quickClose);\n spawned.stderr?.on('data', quickClose);\n spawned.on('error', quickClose);\n\n spawned.on('close', (code: number) => events.close(code));\n spawned.on('exit', (code: number) => events.exit(code));\n\n try {\n await events.result;\n if (deferClose) {\n await delay(50);\n }\n close(events.exitCode);\n } catch (err) {\n close(events.exitCode, err as Error);\n }\n },\n };\n}\n","import { GitPluginError } from '../errors/git-plugin-error';\nimport { createLogger } from '../git-logger';\nimport type { SimpleGitOptions } from '../types';\nimport { asArray } from '../utils';\nimport type { PluginStore } from './plugin-store';\n\nconst logger = createLogger('', 'plugin:binary');\n\nconst WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nconst WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\n\nfunction isBadArgument(arg: string) {\n return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_~-]+)$/i.test(arg);\n}\n\nfunction toBinaryConfig(\n input: string[],\n allowUnsafe: boolean\n): { binary: string; prefix?: string } {\n if (input.length < 1 || input.length > 2) {\n throw new GitPluginError(undefined, 'binary', WRONG_NUMBER_ERR);\n }\n\n const isBad = input.some(isBadArgument);\n if (isBad) {\n if (allowUnsafe) {\n logger('permitted unsafe binary %o', input);\n } else {\n throw new GitPluginError(undefined, 'binary', WRONG_CHARS_ERR);\n }\n }\n\n const [binary, prefix] = input;\n return {\n binary,\n prefix,\n };\n}\n\nexport function customBinaryPlugin(\n plugins: PluginStore,\n input: SimpleGitOptions['binary'] = ['git'],\n allowUnsafe = false\n) {\n let config = toBinaryConfig(asArray(input), allowUnsafe);\n\n plugins.on('binary', (input) => {\n config = toBinaryConfig(asArray(input), allowUnsafe);\n logger.info('reconfiguring %o', config);\n });\n\n plugins.append('spawn.binary', () => {\n return config.binary;\n });\n\n plugins.append('spawn.args', (data) => {\n return config.prefix ? [config.prefix, ...data] : data;\n });\n}\n","import { GitError } from './git-error';\n\nconst REASONS = {\n DISALLOWED_ABBREVIATED: {\n text: 'disallowed abbreviated or ambiguous option',\n solution:\n 'Unambiguous abbreviated options blocked with unsafe.allowAbbreviatedOptions setting: {message}',\n },\n UNKNOWN: {\n text: '~ unknown ~',\n solution: undefined,\n },\n} as const;\n\nexport type GitConfigurationErrorReason = keyof typeof REASONS;\n\nfunction getReason(message?: string): GitConfigurationErrorReason {\n if (!message) {\n return 'UNKNOWN';\n }\n for (const [reason, { text }] of Object.entries(REASONS)) {\n if (message.startsWith(`fatal: ${text}`)) {\n return reason as GitConfigurationErrorReason;\n }\n }\n return 'UNKNOWN';\n}\n\n/**\n * The `GitConfigurationError` is thrown when the `git` process rejects\n * the supplied configuration arguments or environment variables.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class GitConfigurationError extends GitError {\n public readonly reason: GitConfigurationErrorReason;\n\n constructor(message = '') {\n const reason = getReason(message);\n\n super(undefined, REASONS[reason].solution?.replace('{message}', message) ?? message);\n this.reason = reason;\n }\n}\n","import { GitConfigurationError } from '../errors/git-configuration-error';\nimport { GitError } from '../errors/git-error';\nimport type { GitExecutorResult, SimpleGitPluginConfig } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\ntype TaskResult = Omit<GitExecutorResult, 'rejection'>;\n\nfunction isTaskError(result: TaskResult) {\n return !!(result.exitCode && result.stdErr.length);\n}\n\nfunction getErrorMessage(result: TaskResult) {\n return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\n\nexport function errorDetectionHandler(\n overwrite = false,\n isError = isTaskError,\n errorMessage: (result: TaskResult) => Buffer | Error = getErrorMessage\n) {\n return (error: Buffer | Error | undefined, result: TaskResult) => {\n if ((!overwrite && error) || !isError(result)) {\n return error;\n }\n\n return errorMessage(result);\n };\n}\n\nfunction createGitError(exitCode: number, message: string) {\n if (exitCode === 128 && message.startsWith('fatal:')) {\n return new GitConfigurationError(message);\n }\n\n return new GitError(undefined, message);\n}\n\nexport function errorDetectionPlugin(\n config: SimpleGitPluginConfig['errors']\n): SimpleGitPlugin<'task.error'> {\n return {\n type: 'task.error',\n action(data, context) {\n const error = config(data.error, {\n stdErr: context.stdErr,\n stdOut: context.stdOut,\n exitCode: context.exitCode,\n });\n\n if (Buffer.isBuffer(error)) {\n return {\n error: createGitError(context.exitCode, error.toString('utf-8')),\n };\n }\n\n return {\n error,\n };\n },\n };\n}\n","import { createLogger } from '../git-logger';\nimport type { SimpleGitOptions } from '../types';\nimport { byteLength } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst logger = createLogger('', 'plugin:input');\n\nexport function inputPlugin(\n input: SimpleGitOptions['input']\n): SimpleGitPlugin<'spawn.after'> | void {\n return {\n type: 'spawn.after',\n action(_data, { commands, input: taskInput, spawned: { stdin } }) {\n if (!stdin) {\n return;\n }\n\n const content = input?.([...commands]) ?? taskInput;\n if (!content) {\n return logger(`generated zero length content, not writing to stdin`);\n }\n\n logger(`writing %s bytes to stdin`, byteLength(content));\n\n stdin.on('error', (err: NodeJS.ErrnoException) => {\n // EPIPE is expected when git exits before consuming all input\n if (err.code !== 'EPIPE') {\n logger('[ERROR] stdin error %o', err);\n }\n });\n\n stdin.end(content);\n },\n };\n}\n","import { EventEmitter } from 'node:events';\n\nimport type { SimpleGitPluginConfig } from '../types';\nimport { append, asArray } from '../utils';\nimport type {\n SimpleGitPlugin,\n SimpleGitPluginType,\n SimpleGitPluginTypes,\n} from './simple-git-plugin';\n\nexport class PluginStore {\n private plugins: Set<SimpleGitPlugin<SimpleGitPluginType>> = new Set();\n private events = new EventEmitter();\n\n on<K extends keyof SimpleGitPluginConfig>(\n type: K,\n listener: (data: SimpleGitPluginConfig[K]) => void\n ) {\n this.events.on(type, listener);\n }\n\n reconfigure<K extends keyof SimpleGitPluginConfig>(type: K, data: SimpleGitPluginConfig[K]) {\n this.events.emit(type, data);\n }\n\n public append<T extends SimpleGitPluginType>(type: T, action: SimpleGitPlugin<T>['action']) {\n const plugin = append(this.plugins, { type, action });\n\n return () => this.plugins.delete(plugin);\n }\n\n public add<T extends SimpleGitPluginType>(\n plugin: void | SimpleGitPlugin<T> | SimpleGitPlugin<T>[]\n ) {\n const plugins: SimpleGitPlugin<T>[] = [];\n\n asArray(plugin).forEach(\n (plugin) => void (plugin && this.plugins.add(append(plugins, plugin)))\n );\n\n return () => {\n plugins.forEach((plugin) => void this.plugins.delete(plugin));\n };\n }\n\n public exec<T extends SimpleGitPluginType>(\n type: T,\n data: SimpleGitPluginTypes[T]['data'],\n context: SimpleGitPluginTypes[T]['context']\n ): typeof data {\n let output = data;\n const contextual = Object.freeze(Object.create(context));\n\n for (const plugin of this.plugins) {\n if (plugin.type === type) {\n output = plugin.action(output, contextual);\n }\n }\n\n return output;\n }\n}\n","import type { SimpleGitOptions } from '../types';\nimport { asNumber, including } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function progressMonitorPlugin(progress: Exclude<SimpleGitOptions['progress'], void>) {\n const progressCommand = '--progress';\n const progressMethods = ['checkout', 'clone', 'fetch', 'pull', 'push'];\n\n const onProgress: SimpleGitPlugin<'spawn.after'> = {\n type: 'spawn.after',\n action(_data, context) {\n if (!context.commands.includes(progressCommand)) {\n return;\n }\n\n context.spawned.stderr?.on('data', (chunk: Buffer) => {\n const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString('utf8'));\n if (!message) {\n return;\n }\n\n progress({\n method: context.method,\n stage: progressEventStage(message[1]),\n progress: asNumber(message[2]),\n processed: asNumber(message[3]),\n total: asNumber(message[4]),\n });\n });\n },\n };\n\n const onArgs: SimpleGitPlugin<'spawn.args'> = {\n type: 'spawn.args',\n action(args, context) {\n if (!progressMethods.includes(context.method)) {\n return args;\n }\n\n return including(args, progressCommand);\n },\n };\n\n return [onArgs, onProgress];\n}\n\nfunction progressEventStage(input: string) {\n return String(input.toLowerCase().split(' ', 1)) || 'unknown';\n}\n","import type { SpawnOptions } from 'child_process';\n\nimport { pick } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function spawnOptionsPlugin(\n spawnOptions: Partial<SpawnOptions>\n): SimpleGitPlugin<'spawn.options'> {\n const options = pick(spawnOptions, ['uid', 'gid']);\n\n return {\n type: 'spawn.options',\n action(data) {\n return { ...options, ...data };\n },\n };\n}\n","import { isPathSpec, toPaths } from '@simple-git/args-pathspec';\n\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function suffixPathsPlugin(): SimpleGitPlugin<'spawn.args'> {\n return {\n type: 'spawn.args',\n action(data) {\n const prefix: string[] = [];\n let suffix: undefined | string[];\n function append(args: string[]) {\n (suffix = suffix || []).push(...args);\n }\n\n for (let i = 0; i < data.length; i++) {\n const param = data[i];\n\n if (isPathSpec(param)) {\n append(toPaths(param));\n continue;\n }\n\n if (param === '--') {\n append(\n data.slice(i + 1).flatMap((item) => (isPathSpec(item) && toPaths(item)) || item)\n );\n break;\n }\n\n prefix.push(param);\n }\n\n return !suffix ? prefix : [...prefix, '--', ...suffix.map(String)];\n },\n };\n}\n","import { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitOptions } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function timeoutPlugin({\n block,\n stdErr = true,\n stdOut = true,\n}: Exclude<SimpleGitOptions['timeout'], undefined>): SimpleGitPlugin<'spawn.after'> | void {\n if (block > 0) {\n return {\n type: 'spawn.after',\n action(_data, context) {\n let timeout: NodeJS.Timeout;\n\n function wait() {\n timeout && clearTimeout(timeout);\n timeout = setTimeout(kill, block);\n }\n\n function stop() {\n context.spawned.stdout?.off('data', wait);\n context.spawned.stderr?.off('data', wait);\n context.spawned.off('exit', stop);\n context.spawned.off('close', stop);\n timeout && clearTimeout(timeout);\n }\n\n function kill() {\n stop();\n context.kill(new GitPluginError(undefined, 'timeout', `block timeout reached`));\n }\n\n stdOut && context.spawned.stdout?.on('data', wait);\n stdErr && context.spawned.stderr?.on('data', wait);\n context.spawned.on('exit', stop);\n context.spawned.on('close', stop);\n\n wait();\n },\n };\n }\n}\n","// @ts-expect-error\nimport Git from '../git';\nimport type { SimpleGitFactory } from '../typings';\nimport * as api from './api';\nimport {\n abortPlugin,\n allowEnvironmentPlugin,\n blockUnsafeOperationsPlugin,\n commandConfigPrefixingPlugin,\n completionDetectionPlugin,\n customBinaryPlugin,\n errorDetectionHandler,\n errorDetectionPlugin,\n inputPlugin,\n PluginStore,\n progressMonitorPlugin,\n spawnOptionsPlugin,\n suffixPathsPlugin,\n timeoutPlugin,\n} from './plugins';\nimport type { SimpleGitOptions } from './types';\nimport { createInstanceConfig, folderExists } from './utils';\n\nexport const simpleGit: SimpleGitFactory = (\n baseDir?: string | Partial<SimpleGitOptions>,\n options?: Partial<SimpleGitOptions>\n) => {\n const plugins = new PluginStore();\n const config = createInstanceConfig(\n (baseDir && (typeof baseDir === 'string' ? { baseDir } : baseDir)) || {},\n options\n );\n\n if (!folderExists(config.baseDir)) {\n throw new api.GitConstructError(\n config,\n `Cannot use simple-git on a directory that does not exist`\n );\n }\n\n if (Array.isArray(config.config)) {\n plugins.add(commandConfigPrefixingPlugin(config.config));\n }\n\n plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n plugins.add(completionDetectionPlugin(config.completion));\n config.abort && plugins.add(abortPlugin(config.abort));\n config.progress && plugins.add(progressMonitorPlugin(config.progress));\n config.timeout && plugins.add(timeoutPlugin(config.timeout));\n config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n plugins.add(suffixPathsPlugin());\n\n plugins.add(inputPlugin(config.input));\n plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n config.errors && plugins.add(errorDetectionPlugin(config.errors));\n\n customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n\n plugins.add(\n allowEnvironmentPlugin(config.allowEnvironment ?? [], config.unsafe?.allowAbbreviatedOptions)\n );\n\n return new Git(config, plugins);\n};\n"],"names":["GitError","task","message","GitConstructError","config","GitPluginError","plugin","GitResponseError","git","TaskConfigurationError","NULL","NOOP","asFunction","source","isUserFunction","splitOn","input","char","index","first","offset","isArrayLike","last","filterHasLength","toLinesWithContent","trimmed","separator","output","line","lineContent","forEachLineWithContent","callback","folderExists","path","exists","FOLDER","append","target","item","including","remove","objectToString","asArray","asCamelCase","str","_all","chr","asStringArray","asNumber","onNaN","num","prefixedArray","prefix","i","max","bufferToString","byteLength","pick","properties","out","key","delay","duration","done","orVoid","filterType","filter","def","filterArray","filterPrimitives","omit","type","isPathSpec","filterString","filterStringOrBuffer","filterStringOrStringArray","filterPlainObject","filterFunction","ExitCodes","GitOutputStreams","stdOut","stdErr","useMatchesDefault","LineParser","regExp","useMatches","reg","matched","_index","RemoteLineParser","defaultOptions","createInstanceConfig","options","baseDir","o","appendTaskOptions","commands","value","v","getTrailingOptions","args","initialPrimitive","objectOnly","command","trailingOptionsArgument","trailingArrayArgument","hasTrailingCallback","trailingFunctionArgument","includeNoop","callTaskParser","parser","streams","parseStringResponse","result","parsers","texts","trim","text","lines","parse","CheckRepoActions","onError","exitCode","error","fail","isNotRepoMessage","checkIsRepoTask","action","checkIsBareRepoTask","checkIsRepoRootTask","CleanResponse","dryRun","removalRegexp","dryRunRemovalRegexp","isFolderRegexp","cleanSummaryParser","summary","regexp","removed","EMPTY_COMMANDS","adhocExecTask","configurationErrorTask","straightThroughStringTask","straightThroughBufferTask","buffer","isBufferTask","isEmptyTask","CONFIG_ERROR_INTERACTIVE_MODE","CONFIG_ERROR_MODE_REQUIRED","CONFIG_ERROR_UNKNOWN_OPTION","CleanOptions","CleanOptionValues","cleanWithOptionsTask","mode","customArgs","cleanMode","valid","getCleanOptions","isInteractiveMode","cleanTask","isCleanOptionsArray","test","isCleanMode","isKnownOption","option","ConfigList","all","file","latest","values","configListParser","configParser","configGetParser","scopes","configFilePath","filePath","requestedKey","GitConfigScope","asConfigScope","scope","fallback","addConfigTask","getConfigTask","listConfigTask","rest","DiffNameStatus","diffNameStatus","isDiffNameStatus","_a","disallowedOptions","Query","GrepQuery","query","and","param","grepQueryBuilder","params","parseGrep","grep","paths","results","preview","searchTerm","then","ResetMode","validResetModes","resetTask","isValidResetMode","getResetMode","debug","createLog","prefixedLogger","to","forward","childLoggerName","name","childDebugger","parentNamespace","childNamespace","createLogger","label","verbose","initialStep","infoDebugger","labelPrefix","spawned","debugDebugger","step","sibling","initial","phase","stepPrefix","info","_TasksPendingQueue","logLabel","logger","progress","err","TasksPendingQueue","GitExecutorChain","_executor","_scheduler","_plugins","cwd","onScheduleComplete","onQueueComplete","e","gitError","binary","raw","outputStreams","rejection","newStdOut","outputHandler","outputLogger","spawnOptions","reason","spawn","onDataReceived","onErrorReceived","GitExecutor","taskCallback","response","onSuccess","data","changeWorkingDirectoryTask","directory","root","instance","checkoutTask","checkout","branchName","startPoint","cloneTask","repo","pathspec","cloneMirrorTask","createCloneTask","api","repoPath","clone","branch","commit","author","parts","email","changes","insertions","deletions","direction","count","parseCommitResult","commitTask","files","next","rejectDeprecatedSignatures","countObjectsResponse","property","countObjects","firstCommit","hashObjectTask","write","InitSummary","bare","existing","gitDir","initResponseRegex","reInitResponseRegex","parseInit","tokens","bareCommand","hasBareCommand","initTask","interpretTrailersTask","interpretTrailers","LogFormat","logFormatRegex","logFormatFromCommand","format","isLogFormat","customArg","DiffSummary","statParser","alterations","before","after","changed","inserted","deleted","numStatParser","changesInsert","changesDelete","nameOnlyParser","nameStatusParser","status","similarity","from","_to","diffSummaryParsers","getDiffParser","START_BOUNDARY","COMMIT_BOUNDARY","SPLITTER","defaultFieldNames","lineBuilder","fields","field","createListLogSummaryParser","splitter","logFormat","parseDiffResult","lineDetail","listLogLine","diffSummaryTask","validateLogFormatConfig","flags","excludeOptions","prettyFormat","formatStr","userOptions","parseLogOptions","opt","suffix","maxCount","rangeOperator","logTask","log","createLogTask","MergeSummaryConflict","meta","MergeSummaryDetail","PullSummary","PullFailedSummary","objectEnumerationResult","remoteMessages","asObjectCount","delta","remoteMessagesObjectParsers","enumeration","total","reused","packReused","objects","pullRequestUrl","url","parseRemoteMessages","_stdOut","RemoteMessageSummary","FILE_UPDATE_REGEX","SUMMARY_REGEX","ACTION_REGEX","errorParsers","remote","hashLocal","hashRemote","branchLocal","branchRemote","parsePullDetail","parsePullResult","parsePullErrorResult","pullError","autoMerge","deleteRef","parseMergeResult","parseMergeDetail","mergeTask","merge","pushResultPushedItem","local","tag","alreadyUpdated","remoteName","parsePushResult","pushDetail","parsePushDetail","responseDetail","pushTagsTask","ref","pushTask","show","fromPathRegex","FileStatusSummary","working_dir","detail","StatusSummary","renamedFile","indexX","indexY","handler","conflicts","y","renamed","_result","_file","aheadReg","behindReg","currentReg","trackingReg","onEmptyBranchReg","regexResult","parseStatusSummary","l","splitLine","lineStr","workingDir","ignoredOptions","statusTask","arg","NOT_INSTALLED","versionResponse","major","minor","patch","agent","installed","notInstalledResponse","version","versionParser","SimpleGitApi","chain","promise","createScheduledTask","id","createDeferred","Scheduler","concurrency","applyPatchTask","patches","BranchStatusIdentifier","BranchSummaryResult","detached","current","branchStatus","currentBranchParser","parseBranchSummary","currentOnly","BranchDeletionBatch","branchDeletionSuccess","hash","branchDeletionFailure","deleteSuccessRegex","deleteErrorRegex","deletion","parseBranchDeletions","hasBranchDeletionError","processExitCode","containsDeleteBranchCommand","deleteCommands","branchTask","isDelete","isCurrentOnly","branchLocalTask","deleteBranchesTask","branches","forceDelete","deleteBranchTask","_","checkIgnoreTask","parseCheckIgnore","toPath","normalize","tracking","parseFetchResult","disallowedCommand","fetchTask","parseMoveResult","moveTask","pullTask","_error","_done","parseGetRemotes","remotes","forEach","parseGetRemotesVerbose","purpose","addRemoteTask","remoteRepo","getRemotesTask","listRemotesTask","remoteTask","removeRemoteTask","stashListTask","addSubModuleTask","subModuleTask","initSubModuleTask","updateSubModuleTask","TagList","parseTagList","customSort","tags","tagA","tagB","partsA","partsB","singleSorted","toNumber","diff","sorted","a","b","aIsNum","bIsNum","tagListTask","hasCustomSort","addTagTask","addAnnotatedTagTask","tagMessage","Git","plugins","tagName","branchNames","createRestCommands","usingCleanOptionsArray","pathnames","checkType","abortPlugin","signal","_data","context","kill","allowEnvironmentPlugin","allowEnvironment","allowAbbreviatedOptions","allowed","env","suppliedKeys","normalised","isGuardedEnvKey","isGitEnvKey","blockUnsafeOperationsPlugin","vulnerability","vulnerabilityCheck","commandConfigPrefixingPlugin","configuration","never","deferred","completionDetectionPlugin","onClose","onExit","createEvents","events","configureTimeout","code","flag","event","timeout","close","deferClose","quickClose","WRONG_NUMBER_ERR","WRONG_CHARS_ERR","isBadArgument","toBinaryConfig","allowUnsafe","customBinaryPlugin","REASONS","getReason","GitConfigurationError","isTaskError","getErrorMessage","errorDetectionHandler","overwrite","isError","errorMessage","createGitError","errorDetectionPlugin","inputPlugin","taskInput","stdin","content","PluginStore","EventEmitter","listener","contextual","progressMonitorPlugin","progressCommand","progressMethods","chunk","progressEventStage","spawnOptionsPlugin","suffixPathsPlugin","toPaths","timeoutPlugin","block","wait","stop","simpleGit","api.GitConstructError"],"mappings":"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"}