diff --git a/app/server/modules/backups/__tests__/backups.patterns.test.ts b/app/server/modules/backups/__tests__/backups.patterns.test.ts index 9dee49de..c299920d 100644 --- a/app/server/modules/backups/__tests__/backups.patterns.test.ts +++ b/app/server/modules/backups/__tests__/backups.patterns.test.ts @@ -46,7 +46,12 @@ describe("executeBackup - include / exclude patterns", () => { expect.anything(), volumePath, expect.objectContaining({ - include: ["*.zip", path.join(volumePath, "Photos"), `!${path.join(volumePath, "Temp")}`, "!*.log"], + include: [ + path.join(volumePath, "*.zip"), + path.join(volumePath, "Photos"), + `!${path.join(volumePath, "Temp")}`, + `!${path.join(volumePath, "*.log")}`, + ], exclude: [".DS_Store", path.join(volumePath, "Config"), `!${path.join(volumePath, "Important")}`, "!*.tmp"], excludeIfPresent: [".nobackup"], }), @@ -109,7 +114,7 @@ describe("executeBackup - include / exclude patterns", () => { expect.anything(), volumePath, expect.objectContaining({ - include: [relativeInclude, path.join(volumePath, "anchored/include")], + include: [path.join(volumePath, relativeInclude), path.join(volumePath, "anchored/include")], }), ); }); diff --git a/app/server/modules/backups/backup.helpers.ts b/app/server/modules/backups/backup.helpers.ts index ab5b3d7d..4a872d56 100644 --- a/app/server/modules/backups/backup.helpers.ts +++ b/app/server/modules/backups/backup.helpers.ts @@ -19,12 +19,14 @@ export const calculateNextRun = (cronExpression: string) => { } }; -export const processPattern = (pattern: string, volumePath: string) => { +export const processPattern = (pattern: string, volumePath: string, relative = false) => { const isNegated = pattern.startsWith("!"); const p = isNegated ? pattern.slice(1) : pattern; if (!p.startsWith("/")) { - return pattern; + if (!relative) return pattern; + const processed = path.join(volumePath, p); + return isNegated ? `!${processed}` : processed; } const processed = path.join(volumePath, p.slice(1)); @@ -37,5 +39,7 @@ export const createBackupOptions = (schedule: BackupSchedule, volumePath: string signal, exclude: schedule.excludePatterns ? schedule.excludePatterns.map((p) => processPattern(p, volumePath)) : undefined, excludeIfPresent: schedule.excludeIfPresent ?? undefined, - include: schedule.includePatterns ? schedule.includePatterns.map((p) => processPattern(p, volumePath)) : undefined, + include: schedule.includePatterns + ? schedule.includePatterns.map((p) => processPattern(p, volumePath, true)) + : undefined, });