Skip to content
Permalink
Browse files

fix: no longer include untracked files in backup stash (#827)

* fix: no longer include untracked files in backup stash

Since v10.1 having untracked files in the backup stash causes revert to fail, because the stash will not apply with the same files already on disk.

* fix: add --index flag to help text
  • Loading branch information
iiroj committed Apr 5, 2020
1 parent 78a677a commit 2f153368319371b8b4c270a7126ab37a644b2488
Showing with 28 additions and 5 deletions.
  1. +2 −2 lib/gitWorkflow.js
  2. +1 −1 lib/runAll.js
  3. +1 −1 test/runAll.unmocked.2.spec.js
  4. +24 −1 test/runAll.unmocked.spec.js
@@ -193,8 +193,8 @@ class GitWorkflow {
// Manually check and backup if necessary
await this.backupMergeStatus()

// Save stash of entire original state, including unstaged and untracked changes
await this.execGit(['stash', 'save', '--include-untracked', STASH])
// Save stash of original state
await this.execGit(['stash', 'save', STASH])
await this.execGit(['stash', 'apply', '--quiet', '--index', await this.getBackupStash()])

// Restore meta information about ongoing git merge, cleared by `git stash`
@@ -254,7 +254,7 @@ const runAll = async (
> git stash list
stash@{0}: On master: automatic lint-staged backup
> git stash pop stash@{0}\n`)
> git stash apply --index stash@{0}\n`)
}
}

@@ -124,7 +124,7 @@ describe('runAll', () => {
> git stash list
stash@{0}: On master: automatic lint-staged backup
> git stash pop stash@{0}
> git stash apply --index stash@{0}
"
`)
})
@@ -428,7 +428,7 @@ describe('runAll', () => {
> git stash list
stash@{0}: On master: automatic lint-staged backup
> git stash pop stash@{0}
> git stash apply --index stash@{0}
"
`)

@@ -608,6 +608,29 @@ describe('runAll', () => {
expect(Buffer.from(await readFile('binary'), 'binary').toString()).toEqual('Hello, World!')
})

it('should keep untracked files when taks fails', async () => {
// Stage unfixable file
await appendFile('test.js', testJsFileUnfixable)
await execGit(['add', 'test.js'])

// Add untracked files
await appendFile('test-untracked.js', testJsFilePretty)
await appendFile('.gitattributes', 'binary\n')
await writeFile('binary', Buffer.from('Hello, World!', 'binary'))

// Run lint-staged with `prettier --list-different` and commit pretty file
await expect(
gitCommit({ config: { '*.js': 'prettier --list-different' } })
).rejects.toThrowError()

// Something was wrong so the repo is returned to original state
expect(await execGit(['rev-list', '--count', 'HEAD'])).toEqual('1')
expect(await execGit(['log', '-1', '--pretty=%B'])).toMatch('initial commit')
expect(await readFile('test.js')).toEqual(testJsFileUnfixable)
expect(await readFile('test-untracked.js')).toEqual(testJsFilePretty)
expect(Buffer.from(await readFile('binary'), 'binary').toString()).toEqual('Hello, World!')
})

it('should work when amending previous commit with unstaged changes', async () => {
// Edit file from previous commit
await appendFile('README.md', '\n## Amended\n')

0 comments on commit 2f15336

Please sign in to comment.
You can’t perform that action at this time.