Skip to content

Commit fd29242

Browse files
committed
Add integration tests for use of log formats in git.log and unit/integration tests for git.diffSummary
`parseStringResponse` allows specifying whether to trim trailing white space on each line, disables on the diff parser Closes #796
1 parent 3b2c1b3 commit fd29242

File tree

15 files changed

+239
-31
lines changed

15 files changed

+239
-31
lines changed

simple-git/src/lib/args/log-format.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
export enum LogFormat {
32
NONE = '',
43
STAT = '--stat',

simple-git/src/lib/errors/git-error.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SimpleGitTask } from '../types';
1+
import type { SimpleGitTask } from '../types';
22

33
/**
44
* The `GitError` is thrown when the underlying `git` process throws a

simple-git/src/lib/parsers/parse-branch-delete.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const parsers: LineParser<BranchMultiDeleteResult>[] = [
2323
];
2424

2525
export const parseBranchDeletions: TaskParser<string, BranchMultiDeleteResult> = (stdOut, stdErr) => {
26-
return parseStringResponse(new BranchDeletionBatch(), parsers, stdOut, stdErr);
26+
return parseStringResponse(new BranchDeletionBatch(), parsers, [stdOut, stdErr]);
2727
}
2828

2929
export function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean {

simple-git/src/lib/parsers/parse-diff-summary.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,5 @@ const diffSummaryParsers: Record<LogFormat, LineParser<DiffResult>[]> = {
9797
export function getDiffParser(format = LogFormat.NONE) {
9898
const parser = diffSummaryParsers[format];
9999

100-
return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut);
100+
return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut, false);
101101
}

simple-git/src/lib/parsers/parse-fetch.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ export function parseFetchResult (stdOut: string, stdErr: string): FetchResult {
2626
branches: [],
2727
tags: [],
2828
};
29-
return parseStringResponse(result, parsers, stdOut, stdErr);
29+
return parseStringResponse(result, parsers, [stdOut, stdErr]);
3030
}

simple-git/src/lib/parsers/parse-pull.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ const errorParsers: LineParser<PullFailedResult>[] = [
4747
];
4848

4949
export const parsePullDetail: TaskParser<string, PullDetail> = (stdOut, stdErr) => {
50-
return parseStringResponse(new PullSummary(), parsers, stdOut, stdErr);
50+
return parseStringResponse(new PullSummary(), parsers, [stdOut, stdErr]);
5151
}
5252

5353
export const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr) => {
@@ -59,7 +59,7 @@ export const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr)
5959
}
6060

6161
export function parsePullErrorResult(stdOut: string, stdErr: string) {
62-
const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, stdOut, stdErr);
62+
const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);
6363

6464
return pullError.message && pullError;
6565
}

simple-git/src/lib/parsers/parse-push.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,5 @@ export const parsePushResult: TaskParser<string, PushResult> = (stdOut, stdErr)
6565
}
6666

6767
export const parsePushDetail: TaskParser<string, PushDetail> = (stdOut, stdErr) => {
68-
return parseStringResponse({pushed: []}, parsers, stdOut, stdErr);
68+
return parseStringResponse({pushed: []}, parsers, [stdOut, stdErr]);
6969
}

simple-git/src/lib/tasks/diff.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { isLogFormat, LogFormat, logFormatFromCommand } from '../args/log-format
44
import { getDiffParser } from '../parsers/parse-diff-summary';
55
import { configurationErrorTask, EmptyTask } from './task';
66

7-
export function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> {
7+
export function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> | EmptyTask {
88
let logFormat = logFormatFromCommand(customArgs);
99

1010
const commands = ['diff'];
@@ -16,17 +16,21 @@ export function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> {
1616

1717
commands.push(...customArgs);
1818

19-
return {
19+
return validateLogFormatConfig(commands) || {
2020
commands,
2121
format: 'utf-8',
2222
parser: getDiffParser(logFormat),
23-
}
23+
};
2424
}
2525

26-
export function validateSummaryOptions(customArgs: unknown[]): EmptyTask | void {
26+
export function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void {
2727
const flags = customArgs.filter(isLogFormat);
2828

2929
if (flags.length > 1) {
3030
return configurationErrorTask(`Summary flags are mutually exclusive - pick one of ${flags.join(',')}`);
3131
}
32+
33+
if (flags.length && customArgs.includes('-z')) {
34+
return configurationErrorTask(`Summary flag ${flags} parsing is not compatible with null termination option '-z'`);
35+
}
3236
}

simple-git/src/lib/tasks/log.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Options, StringTask } from '../types';
2-
import { LogResult, SimpleGit } from '../../../typings';
1+
import type { Options, StringTask } from '../types';
2+
import type { LogResult, SimpleGit } from '../../../typings';
33
import { logFormatFromCommand } from '../args/log-format';
44
import {
55
COMMIT_BOUNDARY,
@@ -18,7 +18,7 @@ import {
1818
} from '../utils';
1919
import { SimpleGitApi } from '../simple-git-api';
2020
import { configurationErrorTask } from './task';
21-
import { validateSummaryOptions } from './diff';
21+
import { validateLogFormatConfig } from './diff';
2222

2323
enum excludeOptions {
2424
'--pretty',
@@ -150,8 +150,8 @@ export default function (): Pick<SimpleGit, 'log'> {
150150
const next = trailingFunctionArgument(arguments);
151151
const options = parseLogOptions<T>(trailingOptionsArgument(arguments), filterType(arguments[0], filterArray));
152152
const task = rejectDeprecatedSignatures(...rest) ||
153-
validateSummaryOptions(options.commands) ||
154-
createLogTask(options)
153+
validateLogFormatConfig(options.commands) ||
154+
createLogTask(options);
155155

156156
return this._runTask(task, next);
157157
}

simple-git/src/lib/tasks/stash-list.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import { LogOptions, LogResult } from '../../../typings';
22
import { logFormatFromCommand } from '../args/log-format';
33
import { createListLogSummaryParser } from '../parsers/parse-list-log-summary';
4-
import { StringTask } from '../types';
4+
import type { StringTask } from '../types';
5+
import { validateLogFormatConfig } from './diff';
56
import { parseLogOptions } from './log';
7+
import type { EmptyTask } from './task';
68

7-
export function stashListTask(opt: LogOptions = {}, customArgs: string[]): StringTask<LogResult> {
9+
export function stashListTask(opt: LogOptions = {}, customArgs: string[]): EmptyTask | StringTask<LogResult> {
810
const options = parseLogOptions<any>(opt);
911
const commands = ['stash', 'list', ...options.commands, ...customArgs];
1012
const parser = createListLogSummaryParser(options.splitter, options.fields, logFormatFromCommand(commands));
1113

12-
return {
14+
return validateLogFormatConfig(commands) || {
1315
commands,
1416
format: 'utf-8',
1517
parser,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy