'use strict'
|
|
const { GIT_ERROR, TASK_ERROR } = require('./messages')
|
const {
|
ApplyEmptyCommitError,
|
TaskError,
|
RestoreOriginalStateError,
|
GitError,
|
RestoreUnstagedChangesError,
|
} = require('./symbols')
|
|
const getInitialState = ({ quiet = false } = {}) => ({
|
hasPartiallyStagedFiles: null,
|
shouldBackup: null,
|
errors: new Set([]),
|
output: [],
|
quiet,
|
})
|
|
const hasPartiallyStagedFiles = (ctx) => ctx.hasPartiallyStagedFiles
|
|
const applyModificationsSkipped = (ctx) => {
|
// Always apply back unstaged modifications when skipping backup
|
if (!ctx.shouldBackup) return false
|
// Should be skipped in case of git errors
|
if (ctx.errors.has(GitError)) {
|
return GIT_ERROR
|
}
|
// Should be skipped when tasks fail
|
if (ctx.errors.has(TaskError)) {
|
return TASK_ERROR
|
}
|
}
|
|
const restoreUnstagedChangesSkipped = (ctx) => {
|
// Should be skipped in case of git errors
|
if (ctx.errors.has(GitError)) {
|
return GIT_ERROR
|
}
|
// Should be skipped when tasks fail
|
if (ctx.errors.has(TaskError)) {
|
return TASK_ERROR
|
}
|
}
|
|
const restoreOriginalStateEnabled = (ctx) =>
|
ctx.shouldBackup &&
|
(ctx.errors.has(TaskError) ||
|
ctx.errors.has(ApplyEmptyCommitError) ||
|
ctx.errors.has(RestoreUnstagedChangesError))
|
|
const restoreOriginalStateSkipped = (ctx) => {
|
// Should be skipped in case of unknown git errors
|
if (
|
ctx.errors.has(GitError) &&
|
!ctx.errors.has(ApplyEmptyCommitError) &&
|
!ctx.errors.has(RestoreUnstagedChangesError)
|
) {
|
return GIT_ERROR
|
}
|
}
|
|
const cleanupEnabled = (ctx) => ctx.shouldBackup
|
|
const cleanupSkipped = (ctx) => {
|
// Should be skipped in case of unknown git errors
|
if (
|
ctx.errors.has(GitError) &&
|
!ctx.errors.has(ApplyEmptyCommitError) &&
|
!ctx.errors.has(RestoreUnstagedChangesError)
|
) {
|
return GIT_ERROR
|
}
|
// Should be skipped when reverting to original state fails
|
if (ctx.errors.has(RestoreOriginalStateError)) {
|
return GIT_ERROR
|
}
|
}
|
|
module.exports = {
|
getInitialState,
|
hasPartiallyStagedFiles,
|
applyModificationsSkipped,
|
restoreUnstagedChangesSkipped,
|
restoreOriginalStateEnabled,
|
restoreOriginalStateSkipped,
|
cleanupEnabled,
|
cleanupSkipped,
|
}
|