diff --git a/CHANGELOG.md b/CHANGELOG.md index ecd6ad5..3fa8dcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,3 @@ -## Cockpit Navigator 0.5.11-3 +## Cockpit Navigator 0.5.11-4 -* build package + fixed deletion method of tmp files \ No newline at end of file +* build package \ No newline at end of file diff --git a/manifest.json b/manifest.json index 65f67e2..e931d88 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "title": "Cockpit Navigator", "description": "A File System Browser for Cockpit.", "version": "0.5.11", - "build_number": "3", + "build_number": "4", "stable": false, "author": "Josh Boudreau ", "git_url": "https://github.com/45Drives/cockpit-navigator", @@ -32,8 +32,7 @@ "rsync", "zip", "file", - "/bin/mkdir", - "/bin/rmdir", + "coreutils", "inotify-tools" ] }, @@ -71,7 +70,7 @@ "changelog": { "urgency": "medium", "version": "0.5.11", - "build_number": "3", + "build_number": "4", "date": null, "packager": "Josh Boudreau ", "changes": [] diff --git a/navigator/components/NavContextMenu.js b/navigator/components/NavContextMenu.js index 4d4cc61..8763877 100644 --- a/navigator/components/NavContextMenu.js +++ b/navigator/components/NavContextMenu.js @@ -137,7 +137,7 @@ export class NavContextMenu { }); } - async download(e) { + async download(e) { let download_target = ""; let result; // function-scoped so we can reference later @@ -158,34 +158,85 @@ export class NavContextMenu { this.nav_window_ref.stop_load(); } } - if (result?.["archive-path"]) { - const unitName = `nav-clean-on-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`; - const script = [ - 'set -euo pipefail', - 'if ! command -v inotifywait >/dev/null 2>&1; then ' + - 'sleep 300; rm -f -- "$ARCHIVE"; ' + - '[ -n "${TEMPDIR:-}" ] && [[ "$TEMPDIR" == /tmp/navigator-* ]] && rm -rf -- "$TEMPDIR"; ' + - 'exit 0; fi', - 'inotifywait -q -t 1800 -e open -- "$ARCHIVE" || true', - 'rm -f -- "$ARCHIVE"', - 'sleep 3600', - '[ -n "${TEMPDIR:-}" ] && [[ "$TEMPDIR" == /tmp/navigator-* ]] && rm -rf -- "$TEMPDIR" || :' - ].join(' && '); - const cmd = [ - 'systemd-run', - '--property=CollectMode=inactive-or-failed', - '--property=RuntimeMaxSec=90000', - '--unit', unitName, - '--setenv=ARCHIVE=' + result['archive-path'], - ...(result['temp-dir'] ? ['--setenv=TEMPDIR=' + result['temp-dir']] : []), - '/bin/bash','-lc', script - ]; - - await cockpit.spawn(cmd, { superuser: 'require', err: 'out' }).then(out => console.log(out)); - console.log("scheduled cleanup:", unitName); - console.log("Deleting :", result['archive-path'], "in 30 minutes or after download starts."); - } - + if (result?.["archive-path"]) { + const unitName = `nav-clean-sweep-on-close-${Date.now()}-${Math.random().toString(36).slice(2,8)}`; + + const script = ` + set -euo pipefail + + ARCHIVE="$ARCHIVE" + DIR="$(dirname -- "$ARCHIVE")" + BASE="$(basename -- "$ARCHIVE")" + ROOT="/tmp/navigator" + PATTERN="navigator-download*" + + if ! command -v inotifywait >/dev/null 2>&1; then + sleep 300 + rm -f -- "$ARCHIVE" || true + # Sweep everything matching PATTERN that's not in use + find "$ROOT" -mindepth 1 -maxdepth 1 -name "$PATTERN" -print0 | \ + while IFS= read -r -d '' p; do + if command -v lsof >/dev/null 2>&1 && lsof -t -- "$p" >/dev/null 2>&1; then + continue + fi + rm -rf -- "$p" + done + [ -n "\${TEMPDIR:-}" ] && [[ "$TEMPDIR" == /tmp/navigator-* ]] && rm -rf -- "$TEMPDIR" || : + exit 0 + fi + + if ! timeout 1800 bash -lc ' + inotifywait -q -m -e open --format "%e %f" -- "$DIR" | + while read ev f; do + if [ "$f" = "$BASE" ]; then exit 0; fi + done + '; then + find "$ROOT" -mindepth 1 -maxdepth 1 -name "$PATTERN" -print0 | \ + while IFS= read -r -d '' p; do + if command -v lsof >/dev/null 2>&1 && lsof -t -- "$p" >/dev/null 2>&1; then + continue + fi + rm -rf -- "$p" + done + exit 0 + fi + + if command -v lsof >/dev/null 2>&1; then + # Ensure no process holds ARCHIVE open + sleep 1 + while lsof -t -- "$ARCHIVE" >/dev/null 2>&1; do sleep 1; done + else + timeout 86400 bash -lc ' + inotifywait -q -m -e close --format "%e %f" -- "$DIR" | + while read ev f; do + if [ "$f" = "$BASE" ]; then exit 0; fi + done + ' || true + fi + + rm -f -- "$ARCHIVE" || true + + # (uncomment -mmin +5 to keep very fresh ones) + find "$ROOT" -mindepth 1 -maxdepth 1 -name "$PATTERN" -print0 | \ + while IFS= read -r -d '' p; do + if command -v lsof >/dev/null 2>&1 && lsof -t -- "$p" >/dev/null 2>&1; then + continue + fi + rm -rf -- "$p" + done + [ -n "\${TEMPDIR:-}" ] && [[ "$TEMPDIR" == /tmp/navigator-* ]] && rm -rf -- "$TEMPDIR" || : + `; + const cmd = [ + 'systemd-run', + '--property=CollectMode=inactive-or-failed', + '--property=RuntimeMaxSec=90000', + '--unit', unitName, + '--setenv=ARCHIVE=' + result['archive-path'], + ...(result['temp-dir'] ? ['--setenv=TEMPDIR=' + result['temp-dir']] : []), + '/bin/bash','-lc', script + ]; + await cockpit.spawn(cmd, { superuser: 'require', err: 'out' }); + } const downloader = new NavDownloader(download_target); downloader.download(); } diff --git a/packaging/debian-bookworm/changelog b/packaging/debian-bookworm/changelog index 8f9ba20..deedca5 100644 --- a/packaging/debian-bookworm/changelog +++ b/packaging/debian-bookworm/changelog @@ -1,3 +1,9 @@ +cockpit-navigator (0.5.11-4bookworm) bookworm; urgency=medium + + * build package + + -- Rachit Hans Tue, 16 Sep 2025 11:58:45 -0300 + cockpit-navigator (0.5.11-3bookworm) bookworm; urgency=medium * build package + fixed deletion method of tmp files diff --git a/packaging/rocky-el8/main.spec.j2 b/packaging/rocky-el8/main.spec.j2 index d898896..d0067be 100644 --- a/packaging/rocky-el8/main.spec.j2 +++ b/packaging/rocky-el8/main.spec.j2 @@ -33,6 +33,8 @@ rm -rf %{buildroot} /usr/share/cockpit/navigator/* %changelog +* Tue Sep 16 2025 Rachit Hans 0.5.11-4 +- build package * Tue Sep 16 2025 Rachit Hans 0.5.11-3 - build package + fixed deletion method of tmp files * Tue Sep 16 2025 Jordan Keough 0.5.11-2 diff --git a/packaging/rocky-el9/main.spec.j2 b/packaging/rocky-el9/main.spec.j2 index 23b36b2..d03f5fe 100644 --- a/packaging/rocky-el9/main.spec.j2 +++ b/packaging/rocky-el9/main.spec.j2 @@ -33,6 +33,8 @@ rm -rf %{buildroot} /usr/share/cockpit/navigator/* %changelog +* Tue Sep 16 2025 Rachit Hans 0.5.11-4 +- build package * Tue Sep 16 2025 Rachit Hans 0.5.11-3 - build package + fixed deletion method of tmp files * Tue Sep 16 2025 Jordan Keough 0.5.11-2 diff --git a/packaging/ubuntu-focal/changelog b/packaging/ubuntu-focal/changelog index 26a4867..dbf9ede 100644 --- a/packaging/ubuntu-focal/changelog +++ b/packaging/ubuntu-focal/changelog @@ -1,3 +1,9 @@ +cockpit-navigator (0.5.11-4focal) focal; urgency=medium + + * build package + + -- Rachit Hans Tue, 16 Sep 2025 11:58:45 -0300 + cockpit-navigator (0.5.11-3focal) focal; urgency=medium * build package + fixed deletion method of tmp files diff --git a/packaging/ubuntu-jammy/changelog b/packaging/ubuntu-jammy/changelog index 4f490b5..a9b80e0 100644 --- a/packaging/ubuntu-jammy/changelog +++ b/packaging/ubuntu-jammy/changelog @@ -1,3 +1,9 @@ +cockpit-navigator (0.5.11-4jammy) jammy; urgency=medium + + * build package + + -- Rachit Hans Tue, 16 Sep 2025 11:58:45 -0300 + cockpit-navigator (0.5.11-3jammy) jammy; urgency=medium * build package + fixed deletion method of tmp files