@glassnote/client 2.4.6 → 2.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/glassnote.js +27 -2
- package/package.json +1 -1
package/bin/glassnote.js
CHANGED
|
@@ -27,8 +27,15 @@ const MARK_B = '# <<< glassnote <<<';
|
|
|
27
27
|
// El PATH que se le da a npm lleva delante nuestro bin: si install.sh tuvo que bajar
|
|
28
28
|
// Node, sus enlaces viven ahí y de otro modo npm no existiría para este proceso.
|
|
29
29
|
function npmEnv() {
|
|
30
|
+
// El directorio del node va en el PATH, no solo BIN_DIR: npm lanza los scripts de
|
|
31
|
+
// instalacion por cmd.exe (`cmd /c node install.js`, el postinstall de electron) y
|
|
32
|
+
// esos hijos buscan `node` en el PATH. Sin esto la actualizacion moria a medias con
|
|
33
|
+
// «"node" no se reconoce como un comando», dejando el paquete sin binario.
|
|
34
|
+
const nodeBinary = mode.resolveNodeBinary(process.execPath);
|
|
35
|
+
const dirs = [mode.BIN_DIR];
|
|
36
|
+
if (nodeBinary) dirs.push(path.dirname(nodeBinary));
|
|
30
37
|
return Object.assign({}, process.env, {
|
|
31
|
-
PATH: `${
|
|
38
|
+
PATH: `${dirs.join(path.delimiter)}${path.delimiter}${process.env.PATH || ''}`,
|
|
32
39
|
// Cache propia, bajo ~/.glassnote. Un ~/.npm con archivos de root —herencia de
|
|
33
40
|
// cualquier `sudo npm` viejo— hace que npm muera con EACCES antes de bajar nada,
|
|
34
41
|
// y el usuario tiene que andar con chown. Se pisa a propósito el npm_config_cache
|
|
@@ -103,6 +110,24 @@ function sleepSync(ms) {
|
|
|
103
110
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
104
111
|
}
|
|
105
112
|
|
|
113
|
+
// Dormir un rato fijo no alcanzaba. En Windows npm no puede borrar el árbol mientras
|
|
114
|
+
// quede vivo UN proceso del cliente, y electron cierra media docena de procesos hijos:
|
|
115
|
+
// con los 4 segundos de antes npm entraba con la app a medio cerrar y salía con
|
|
116
|
+
// «EPERM: rmdir ...\node_modules\got\dist», dejando la instalación rota. Se espera a
|
|
117
|
+
// que el servidor local del cliente deje de responder, que es la señal de que ya no está.
|
|
118
|
+
function esperarAQueCierre(maxMs) {
|
|
119
|
+
const tope = Date.now() + Math.max(maxMs, 30000);
|
|
120
|
+
while (Date.now() < tope) {
|
|
121
|
+
if (!clienteEnMarcha()) {
|
|
122
|
+
sleepSync(1500); // margen para que el SO suelte los handles
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
sleepSync(1000);
|
|
126
|
+
}
|
|
127
|
+
console.error('glassnote: el cliente sigue en marcha; se actualiza igual y puede fallar.');
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
|
|
106
131
|
const log = (...args) => console.log(...args);
|
|
107
132
|
// Cada paso se dice EN CUANTO EMPIEZA: lo que hace que un instalador parezca colgado
|
|
108
133
|
// no es que tarde, es que tarde sin decir en qué está.
|
|
@@ -532,7 +557,7 @@ function cmdUpdate(args) {
|
|
|
532
557
|
);
|
|
533
558
|
const version = positional[0] || 'latest';
|
|
534
559
|
|
|
535
|
-
if (waitMs > 0)
|
|
560
|
+
if (waitMs > 0) esperarAQueCierre(waitMs);
|
|
536
561
|
|
|
537
562
|
// El cwd no puede estar dentro de lo que npm va a borrar: en Windows un directorio
|
|
538
563
|
// que es el cwd de un proceso vivo no se puede eliminar, y ese proceso es este.
|
package/package.json
CHANGED