From 15afb8f13554ea940edc9f191573b2425d0df3d1 Mon Sep 17 00:00:00 2001 From: evshiron Date: Tue, 4 Apr 2017 03:24:13 +0800 Subject: [PATCH] fix(nsis-gen): use paths relative to cwd to specify files in nsis scripts --- src/lib/Builder.ts | 7 ++--- src/lib/nsis-gen/NsisComposer.ts | 47 ++------------------------------ src/lib/nsis-gen/index.ts | 8 ++++-- test/nsis-gen.js | 15 ++++++---- 4 files changed, 18 insertions(+), 59 deletions(-) diff --git a/src/lib/Builder.ts b/src/lib/Builder.ts index 30febb6..46c510f 100644 --- a/src/lib/Builder.ts +++ b/src/lib/Builder.ts @@ -367,7 +367,7 @@ export class Builder { const script = await tmpName(); await writeFileAsync(script, data); - await nsisBuild(script, { + await nsisBuild(toDir, script, { mute: false, }); @@ -480,9 +480,6 @@ export class Builder { modern: config.nsis.modern, languages: config.nsis.languages, - // Files. - srcDir: targetDir, - // Output. output: targetNsis, @@ -491,7 +488,7 @@ export class Builder { const script = await tmpName(); await writeFileAsync(script, data); - await nsisBuild(script, { + await nsisBuild(targetDir, script, { mute: false, }); diff --git a/src/lib/nsis-gen/NsisComposer.ts b/src/lib/nsis-gen/NsisComposer.ts index 68f13a8..7680dc4 100644 --- a/src/lib/nsis-gen/NsisComposer.ts +++ b/src/lib/nsis-gen/NsisComposer.ts @@ -21,9 +21,6 @@ export interface INsisComposerOptions { modern: boolean; languages: string[]; - // Files. - srcDir?: string; - // Output. output: string; @@ -213,14 +210,8 @@ SectionEnd protected async makeInstallerFiles(): Promise { - if(!this.options.srcDir) { - throw new Error('ERROR_NO_SRCDIR'); - } - - const out: string[] = []; - await this.readdirLines(resolve(this.options.srcDir), resolve(this.options.srcDir), out); - - return out.join('\n'); + return `SetOutPath "$INSTDIR" +FILE /r .\\*.*`; } @@ -229,38 +220,4 @@ SectionEnd return /^\d+\.\d+\.\d+$/.test(this.options.version) ? `${ this.options.version }.0` : this.options.version; } - protected async readdirLines(dir: string, baseDir: string, out: string[]) { - - const lines = []; - const pendingFiles = []; - - const files = await readdirAsync(dir); - - if(files.length > 0) { - const path = win32.normalize(relative(baseDir, dir)); - lines.push(`SetOutPath "$INSTDIR${ path == '.' ? '' : `\\${ path }` }"`); - } - - for(const file of files) { - - const path = resolve(dir, file); - const stat = await lstatAsync(path); - - if(stat.isFile()) { - lines.push(`File "${ win32.normalize(path) }"`); - } - else if(stat.isDirectory()) { - pendingFiles.push(path); - } - - } - - for(const file of pendingFiles) { - await this.readdirLines(resolve(dir, file), resolve(baseDir), lines); - } - - out.push(...lines); - - } - } diff --git a/src/lib/nsis-gen/index.ts b/src/lib/nsis-gen/index.ts index b159ea9..3a5726e 100644 --- a/src/lib/nsis-gen/index.ts +++ b/src/lib/nsis-gen/index.ts @@ -12,16 +12,18 @@ interface INsisBuildOptions { mute: boolean; } -export async function nsisBuild(script: string, options: INsisBuildOptions = { +export async function nsisBuild(cwd: string, script: string, options: INsisBuildOptions = { mute: false, }) { - const args = [ win32.normalize(resolve(DIR_NSIS, 'makensis.exe')), win32.normalize(resolve(script)) ]; + const args = [ win32.normalize(resolve(DIR_NSIS, 'makensis.exe')), '/NOCD', win32.normalize(resolve(script)) ]; if(process.platform != 'win32') { args.unshift('wine'); } - const child = spawn(args.shift(), args); + const child = spawn(args.shift(), args, { + cwd, + }); await new Promise((resolve, reject) => { diff --git a/test/nsis-gen.js b/test/nsis-gen.js index 847fd86..0f65761 100644 --- a/test/nsis-gen.js +++ b/test/nsis-gen.js @@ -26,20 +26,23 @@ const options = { }; -test.skip('build', async (t) => { +test('build', async (t) => { - const output = await tmpName(); + const output = await tmpName({ + postfix: '.exe', + }); const data = await (new NsisComposer(Object.assign({}, options, { - srcDir: './src/', output, }))) .make(); - const script = await tmpName(); + const script = await tmpName({ + postfix: '.nsi', + }); await writeFileAsync(script, data); - await nsisBuild(script); + await nsisBuild('./src/', script); await removeAsync(output); await removeAsync(script); @@ -62,7 +65,7 @@ test('diff', async (t) => { }); await writeFileAsync(script, data); - await nsisBuild(script); + await nsisBuild('./dist/', script); await removeAsync(output); await removeAsync(script);