Skip to content

Commit 21c41f7

Browse files
authored
process.exit(1) for detect difference with diff command (#66)
1 parent 579558a commit 21c41f7

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

src/commands/diff.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export const command = 'diff'
2222
export const aliases = 'df'
2323
export const describe = 'Diff locale messages between local and localization service'
2424

25+
class DiffError extends Error {}
26+
2527
export const builder = (args: Argv): Argv<DiffOptions> => {
2628
return args
2729
.option('provider', {
@@ -60,6 +62,19 @@ export const builder = (args: Argv): Argv<DiffOptions> => {
6062
alias: 'n',
6163
describe: 'option for the locale messages structure, you can specify the option, if you hope to normalize for the provider.'
6264
})
65+
.fail((msg, err) => {
66+
if (msg) {
67+
console.error(msg)
68+
process.exit(1)
69+
} else {
70+
if (err instanceof DiffError) {
71+
console.warn(err.message)
72+
process.exit(1)
73+
} else {
74+
if (err) throw err
75+
}
76+
}
77+
})
6378
}
6479

6580
export const handler = async (args: Arguments<DiffOptions>): Promise<unknown> => {
@@ -90,15 +105,15 @@ export const handler = async (args: Arguments<DiffOptions>): Promise<unknown> =>
90105
return
91106
}
92107

93-
try {
94-
const provider = ProviderFactory(conf)
95-
const locales = Object.keys(localeMessages) as Locale[]
96-
const serviceMessages = await provider.pull({ locales, dryRun: false, normalize, format })
97-
console.log(diffString(localeMessages, serviceMessages))
98-
} catch (e) {
99-
// TODO: should refactor console message
100-
console.error('diff fail', e)
101-
}
108+
const provider = ProviderFactory(conf)
109+
const locales = Object.keys(localeMessages) as Locale[]
110+
const serviceMessages = await provider.pull({ locales, dryRun: false, normalize, format })
111+
const ret = diffString(localeMessages, serviceMessages)
112+
console.log(ret)
113+
114+
return !ret
115+
? Promise.reject(new DiffError('There are differences!'))
116+
: Promise.resolve('No difference!')
102117
}
103118

104119
export default {

src/commands/status.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ export const builder = (args: Argv): Argv<StatusOptions> => {
4949
}
5050

5151
export const handler = async (args: Arguments<StatusOptions>): Promise<unknown> => {
52-
// try {
5352
const { provider, conf, locales } = args
5453
debug(`status args: provider=${provider}, conf=${conf}, locales=${locales}`)
5554
const status = await getTranslationStatus({ provider, conf, locales })

test/commands/diff.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,22 @@ import L10nOmitServiceProvider from '@scope/l10n-omit-service-provider' // eslin
2525
const PROCESS_CWD_TARGET_PATH = path.resolve(__dirname)
2626

2727
let orgCwd // for process.cwd mock
28+
let orgExit // for process.exit mock
2829
let spyLog
2930
let spyError
3031
beforeEach(() => {
3132
spyLog = jest.spyOn(global.console, 'log')
3233
spyError = jest.spyOn(global.console, 'error')
3334
orgCwd = process.cwd
3435
process.cwd = jest.fn(() => PROCESS_CWD_TARGET_PATH) // mock: process.cwd
36+
process.exit = jest.fn((code => { return 'exit!' as never })) // mock: process.exit
3537
})
3638

3739
afterEach(() => {
3840
spyError.mockRestore()
3941
spyLog.mockRestore()
4042
jest.clearAllMocks()
43+
process.exit = orgExit
4144
process.cwd = orgCwd
4245
})
4346

0 commit comments

Comments
 (0)