Kaynağa Gözat

fix(nsis-gen): use paths relative to cwd to specify files in nsis scripts

evshiron 8 yıl önce
ebeveyn
işleme
15afb8f135

+ 2 - 5
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,
         });
 

+ 2 - 45
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<string> {
 
-        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);
-
-    }
-
 }

+ 5 - 3
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) => {
 

+ 9 - 6
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);