diff --git a/src/backupService.js b/src/backupService.js index 4aa4d30..a8d151b 100644 --- a/src/backupService.js +++ b/src/backupService.js @@ -489,13 +489,15 @@ class BackupService { maxOkExitCode: 1, onOutput: (line, stream) => { const normalizedLine = String(line || '').trim(); - if (!normalizedLine || stream !== 'stderr' || normalizedLine.startsWith('__DBKP_TAR_BEGIN__')) { + if (!normalizedLine || normalizedLine.startsWith('__DBKP_TAR_BEGIN__')) { return; } - if (!normalizedLine.startsWith('tar:')) { + // No helper (tar escreve em arquivo): lista de arquivos vai para stdout; + // avisos do tar vão para stderr. + if (stream === 'stdout' && !normalizedLine.startsWith('tar:')) { fileCurrent += 1; updateFileProgress(normalizedLine); - } else { + } else if (stream === 'stderr') { pushLog(`Aviso do tar: ${normalizedLine}`, 'gerando-tar'); } }, diff --git a/src/dockerService.js b/src/dockerService.js index 25b1cc9..36291cd 100644 --- a/src/dockerService.js +++ b/src/dockerService.js @@ -654,6 +654,15 @@ class DockerService { await container.start(); const result = await container.wait(); + + // Destruir o attachStream para que os PassThrough streams emitam 'end' + // e as outputPromises possam resolver. Sem isso o runHelper trava indefinidamente. + if (attachStream && typeof attachStream.destroy === 'function') { + attachStream.destroy(); + } + stdoutStream.end(); + stderrStream.end(); + await Promise.all(outputPromises); output = output.trim();