diff --git a/packages/playwright/src/isomorphic/types.d.ts b/packages/playwright/src/isomorphic/types.d.ts index 72c6db3533..e2d4ba9e24 100644 --- a/packages/playwright/src/isomorphic/types.d.ts +++ b/packages/playwright/src/isomorphic/types.d.ts @@ -22,4 +22,5 @@ export interface GitCommitInfo { 'revision.timestamp'?: number | Date; 'revision.link'?: string; 'ci.link'?: string; + 'revision.diff'?: string; } diff --git a/packages/playwright/src/plugins/gitCommitInfoPlugin.ts b/packages/playwright/src/plugins/gitCommitInfoPlugin.ts index 4c972759d0..4b57c39279 100644 --- a/packages/playwright/src/plugins/gitCommitInfoPlugin.ts +++ b/packages/playwright/src/plugins/gitCommitInfoPlugin.ts @@ -64,23 +64,33 @@ function linksFromEnv(): Pick { async function gitStatusFromCLI(gitDir: string): Promise { const separator = `:${createGuid().slice(0, 4)}:`; - const { code, stdout } = await spawnAsync( + const commitInfoResult = await spawnAsync( 'git', ['show', '-s', `--format=%H${separator}%s${separator}%an${separator}%ae${separator}%ct`, 'HEAD'], { stdio: 'pipe', cwd: gitDir, timeout: GIT_OPERATIONS_TIMEOUT_MS } ); - if (code) + if (commitInfoResult.code) return; - const showOutput = stdout.trim(); + const showOutput = commitInfoResult.stdout.trim(); const [id, subject, author, email, rawTimestamp] = showOutput.split(separator); let timestamp: number = Number.parseInt(rawTimestamp, 10); timestamp = Number.isInteger(timestamp) ? timestamp * 1000 : 0; - return { + const result: GitCommitInfo = { 'revision.id': id, 'revision.author': author, 'revision.email': email, 'revision.subject': subject, 'revision.timestamp': timestamp, }; + + const diffResult = await spawnAsync( + 'git', + ['diff', 'HEAD~1'], + { stdio: 'pipe', cwd: gitDir, timeout: GIT_OPERATIONS_TIMEOUT_MS } + ); + if (!diffResult.code) + result['revision.diff'] = diffResult.stdout; + + return result; }