From 9a472b2639d7ef3f63e7d6b7210f161311f58df1 Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sun, 2 Mar 2025 19:24:33 +0000 Subject: [PATCH 1/6] allowing copy budget files to succeed even if cleanup fails --- packages/desktop-electron/index.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/desktop-electron/index.ts b/packages/desktop-electron/index.ts index cecd667e6fe..4f31de38f10 100644 --- a/packages/desktop-electron/index.ts +++ b/packages/desktop-electron/index.ts @@ -554,8 +554,8 @@ ipcMain.handle( await copy(currentBudgetDirectory, newDirectory, { overwrite: true, + preserveTimestamps: true, }); - await remove(currentBudgetDirectory); } catch (error) { logMessage( 'error', @@ -563,5 +563,16 @@ ipcMain.handle( ); throw error; } + + try { + await remove(currentBudgetDirectory); + } catch (error) { + // Fail silently. The move worked, but the old directory wasn't cleaned up - most likely a permission issue. + // This call needs to succeed to allow the user to continue using the app with the files in the new location. + logMessage( + 'error', + `There was an error removing the old directory: ${error}`, + ); + } }, ); From fe49e91feed30f0d8249c22f086d3ed1213c568f Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sun, 2 Mar 2025 19:26:21 +0000 Subject: [PATCH 2/6] release notes --- upcoming-release-notes/4507.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 upcoming-release-notes/4507.md diff --git a/upcoming-release-notes/4507.md b/upcoming-release-notes/4507.md new file mode 100644 index 00000000000..265cac2fdd9 --- /dev/null +++ b/upcoming-release-notes/4507.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [MikesGlitch] +--- + +Allow desktop app to move budget files even when cleanup tasks fail From 98739b07fd89afea8e4c359dda7e1f33e46ea690 Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sun, 2 Mar 2025 19:52:54 +0000 Subject: [PATCH 3/6] updating fs-extra --- packages/desktop-electron/package.json | 2 +- yarn.lock | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index 99f34d45d4d..4473931e3ed 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -86,7 +86,7 @@ }, "dependencies": { "better-sqlite3": "^11.7.0", - "fs-extra": "^11.2.0", + "fs-extra": "^11.3.0", "promise-retry": "^2.0.1" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 319d30ea0d9..073ffd5ea7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10172,7 +10172,7 @@ __metadata: cross-env: "npm:^7.0.3" electron: "npm:30.0.6" electron-builder: "npm:24.13.3" - fs-extra: "npm:^11.2.0" + fs-extra: "npm:^11.3.0" promise-retry: "npm:^2.0.1" typescript: "npm:^5.5.4" languageName: unknown @@ -12425,7 +12425,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": +"fs-extra@npm:^11.1.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" dependencies: @@ -12436,6 +12436,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^11.3.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10/c9fe7b23dded1efe7bbae528d685c3206477e20cc60e9aaceb3f024f9b9ff2ee1f62413c161cb88546cc564009ab516dec99e9781ba782d869bb37e4fe04a97f + languageName: node + linkType: hard + "fs-extra@npm:^8.0.1, fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" From 4cdef53ac8f52b01918097b44a6112a1cd995a61 Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sun, 2 Mar 2025 20:38:58 +0000 Subject: [PATCH 4/6] retries in for removing dir --- packages/desktop-electron/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/desktop-electron/index.ts b/packages/desktop-electron/index.ts index 4f31de38f10..1dc74673606 100644 --- a/packages/desktop-electron/index.ts +++ b/packages/desktop-electron/index.ts @@ -565,7 +565,13 @@ ipcMain.handle( } try { - await remove(currentBudgetDirectory); + await promiseRetry(retry => { + logMessage( + 'info', + `Cleaning up old directory: ${currentBudgetDirectory}`, + ); + return remove(currentBudgetDirectory).catch(retry); + }); } catch (error) { // Fail silently. The move worked, but the old directory wasn't cleaned up - most likely a permission issue. // This call needs to succeed to allow the user to continue using the app with the files in the new location. From 6d5a3169f69bfbf130b9614960a8108ecdd3a1d9 Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sun, 2 Mar 2025 21:09:15 +0000 Subject: [PATCH 5/6] better retry defaults --- packages/desktop-electron/index.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/desktop-electron/index.ts b/packages/desktop-electron/index.ts index 1dc74673606..8d01171fb79 100644 --- a/packages/desktop-electron/index.ts +++ b/packages/desktop-electron/index.ts @@ -565,13 +565,21 @@ ipcMain.handle( } try { - await promiseRetry(retry => { - logMessage( - 'info', - `Cleaning up old directory: ${currentBudgetDirectory}`, - ); - return remove(currentBudgetDirectory).catch(retry); - }); + await promiseRetry( + async retry => { + try { + return await remove(currentBudgetDirectory); + } catch (error) { + logMessage( + 'info', + `Retrying: Clean up old directory: ${currentBudgetDirectory}`, + ); + + retry(error); + } + }, + { maxTimeout: 200 }, + ); } catch (error) { // Fail silently. The move worked, but the old directory wasn't cleaned up - most likely a permission issue. // This call needs to succeed to allow the user to continue using the app with the files in the new location. From 0941c812795be851cc73ad8b92d7f1dbe14c337f Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sun, 2 Mar 2025 21:23:04 +0000 Subject: [PATCH 6/6] defaults --- packages/desktop-electron/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop-electron/index.ts b/packages/desktop-electron/index.ts index 8d01171fb79..611855f3542 100644 --- a/packages/desktop-electron/index.ts +++ b/packages/desktop-electron/index.ts @@ -578,7 +578,7 @@ ipcMain.handle( retry(error); } }, - { maxTimeout: 200 }, + { minTimeout: 200, maxTimeout: 500, factor: 1.25 }, ); } catch (error) { // Fail silently. The move worked, but the old directory wasn't cleaned up - most likely a permission issue.