Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

process.exit(1) for detect difference with diff command #66

Merged
merged 1 commit into from
Jan 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 24 additions & 9 deletions src/commands/diff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ export const command = 'diff'
export const aliases = 'df'
export const describe = 'Diff locale messages between local and localization service'

class DiffError extends Error {}

export const builder = (args: Argv): Argv<DiffOptions> => {
return args
.option('provider', {
Expand Down Expand Up @@ -60,6 +62,19 @@ export const builder = (args: Argv): Argv<DiffOptions> => {
alias: 'n',
describe: 'option for the locale messages structure, you can specify the option, if you hope to normalize for the provider.'
})
.fail((msg, err) => {
if (msg) {
console.error(msg)
process.exit(1)
} else {
if (err instanceof DiffError) {
console.warn(err.message)
process.exit(1)
} else {
if (err) throw err
}
}
})
}

export const handler = async (args: Arguments<DiffOptions>): Promise<unknown> => {
Expand Down Expand Up @@ -90,15 +105,15 @@ export const handler = async (args: Arguments<DiffOptions>): Promise<unknown> =>
return
}

try {
const provider = ProviderFactory(conf)
const locales = Object.keys(localeMessages) as Locale[]
const serviceMessages = await provider.pull({ locales, dryRun: false, normalize, format })
console.log(diffString(localeMessages, serviceMessages))
} catch (e) {
// TODO: should refactor console message
console.error('diff fail', e)
}
const provider = ProviderFactory(conf)
const locales = Object.keys(localeMessages) as Locale[]
const serviceMessages = await provider.pull({ locales, dryRun: false, normalize, format })
const ret = diffString(localeMessages, serviceMessages)
console.log(ret)

return !ret
? Promise.reject(new DiffError('There are differences!'))
: Promise.resolve('No difference!')
}

export default {
Expand Down
1 change: 0 additions & 1 deletion src/commands/status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ export const builder = (args: Argv): Argv<StatusOptions> => {
}

export const handler = async (args: Arguments<StatusOptions>): Promise<unknown> => {
// try {
const { provider, conf, locales } = args
debug(`status args: provider=${provider}, conf=${conf}, locales=${locales}`)
const status = await getTranslationStatus({ provider, conf, locales })
Expand Down
3 changes: 3 additions & 0 deletions test/commands/diff.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,22 @@ import L10nOmitServiceProvider from '@scope/l10n-omit-service-provider' // eslin
const PROCESS_CWD_TARGET_PATH = path.resolve(__dirname)

let orgCwd // for process.cwd mock
let orgExit // for process.exit mock
let spyLog
let spyError
beforeEach(() => {
spyLog = jest.spyOn(global.console, 'log')
spyError = jest.spyOn(global.console, 'error')
orgCwd = process.cwd
process.cwd = jest.fn(() => PROCESS_CWD_TARGET_PATH) // mock: process.cwd
process.exit = jest.fn((code => { return 'exit!' as never })) // mock: process.exit
})

afterEach(() => {
spyError.mockRestore()
spyLog.mockRestore()
jest.clearAllMocks()
process.exit = orgExit
process.cwd = orgCwd
})

Expand Down