feat: allow add-paths to resolve to no changes

This commit is contained in:
Peter Evans 2022-03-22 12:26:00 +09:00
parent 84fd482a50
commit 42e0b16593
7 changed files with 176 additions and 89 deletions

View file

@ -119,21 +119,26 @@ export async function createOrUpdateBranch(
const tempBranch = uuidv4()
await git.checkout(tempBranch, 'HEAD')
// Commit any uncommitted changes
if (await git.isDirty(true)) {
if (await git.isDirty(true, addPaths)) {
core.info('Uncommitted changes found. Adding a commit.')
for (const path of addPaths) {
await git.exec(['add', path], true)
const aopts = ['add']
if (addPaths.length > 0) {
aopts.push(...['--', ...addPaths])
} else {
aopts.push('-A')
}
const params = ['-m', commitMessage]
await git.exec(aopts, true)
const popts = ['-m', commitMessage]
if (signoff) {
params.push('--signoff')
popts.push('--signoff')
}
await git.commit(params)
// Remove uncommitted tracked and untracked changes
await git.exec(['reset', '--hard'])
await git.exec(['clean', '-f'])
await git.commit(popts)
}
// Remove uncommitted tracked and untracked changes
await git.exec(['reset', '--hard'])
await git.exec(['clean', '-f', '-d'])
// Perform fetch and reset the working base
// Commits made during the workflow will be removed
if (workingBaseType == WorkingBaseType.Branch) {

View file

@ -155,17 +155,22 @@ export class GitCommandManager {
return output.exitCode === 1
}
async isDirty(untracked: boolean): Promise<boolean> {
async isDirty(untracked: boolean, pathspec?: string[]): Promise<boolean> {
const pathspecArgs = pathspec ? ['--', ...pathspec] : []
// Check untracked changes
if (untracked && (await this.status(['--porcelain', '-unormal']))) {
const sargs = ['--porcelain', '-unormal']
sargs.push(...pathspecArgs)
if (untracked && (await this.status(sargs))) {
return true
}
// Check working index changes
if (await this.hasDiff()) {
if (await this.hasDiff(pathspecArgs)) {
return true
}
// Check staged changes
if (await this.hasDiff(['--staged'])) {
const dargs = ['--staged']
dargs.push(...pathspecArgs)
if (await this.hasDiff(dargs)) {
return true
}
return false