You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ab1c8b1
Browse filesBrowse the repository at this point in the historyBrowse files
- CMLock: add post-write PID verification to close TOCTOU race on orphaned lock takeover; replace mtime-based stuck detection with a persistent `stuck-since` file measuring uninterrupted U/D time to avoid killing legitimately long-running processes
- MountService: treat `rclone lsf` failure as hard error instead of "not exists" to prevent overwriting existing backups; fix `--bwlimit` to pass raw bytes/s (mbps * 125_000) instead of binary-ambiguous `M` suffix
- MountHealth: move `stopTimeMachineIfRunning` outside the `isMounted` branch in watchdog so TM is always stopped before any rclone kill/unmount; add `logPrefix` param for per-caller log attribution; fix success/timeout log inversion
// WAZNE: `rclone lsf` zwraca exit 0 z PUSTYM stdout gdy folder istnieje,
81
-
// ale jest pusty (np. po `rclone delete` ktory zostawia katalog bez plikow).
80
+
// WAZNE: `try?`/`succeeded != true` NIE ROZROZNIA "sprawdzenie sie nie
81
+
// udalo" (blad sieci, przejsciowy 429 z Google Drive API, timeout) od
82
+
// "potwierdzone, ze pusto/nie istnieje". Traktowanie porazki sprawdzenia
83
+
// jako "nie istnieje" jest niebezpieczne - ponizej kod TWORZY nowy pusty
84
+
// sparsebundle i `rclone copy` go NA WIERZCH istniejacej sciezki, co przy
85
+
// prawdziwym, w pelni przeslanym backupie nadpisuje/kasuje jego dane.
86
+
// Dlatego przerywamy montowanie zamiast zgadywac, gdy samo sprawdzenie
87
+
// zawiodlo - "nie wiem" nie moze pociagac za soba destrukcyjnej akcji.
88
+
guardlet listResult else{
89
+
CMLogger.log(
90
+
"BLAD: nie udalo sie sprawdzic czy sparsebundle istnieje w chmurze (blad polaczenia z rclone) - przerywam, zeby nie ryzykowac nadpisania istniejacego backupu."
91
+
)
92
+
returnfalse
93
+
}
94
+
guard listResult.succeeded else{
95
+
CMLogger.log(
96
+
"BLAD: 'rclone lsf' zakonczylo sie bledem podczas sprawdzania sparsebundle w chmurze - przerywam, zeby nie ryzykowac nadpisania istniejacego backupu. Sprobuje ponownie przy nastepnym cyklu."
97
+
)
98
+
returnfalse
99
+
}
100
+
// `rclone lsf` zwraca exit 0 z PUSTYM stdout gdy folder istnieje, ale
101
+
// jest pusty (np. po `rclone delete` ktory zostawia katalog bez plikow).
82
102
// Pusty folder != istniejacy sparsebundle - trzeba sprawdzic czy lsf zwrocil
83
103
// jakikolwiek content (poprawny sparsebundle ZAWSZE ma co najmniej Info.plist).
84
104
// Bez tego warunku MountService pomijal tworzenie nowego sparsebundle i probowal
85
105
// zamontowac pusty folder -> "hdiutil: image not recognized" w nieskonczonosc.
0 commit comments