Add Gitea registry support and fix cross-device archiving
- Update docker-compose.yml to reference Gitea registry image - Add docker-publish.cmd for building and pushing to Gitea - Fix ArchiveService to handle cross-device moves by falling back to copy+delete when input and archive are on different volumes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
services:
|
||||
discord-archive:
|
||||
image: git.thecozycat.net/aj/discordarchivemanager:latest
|
||||
build: .
|
||||
volumes:
|
||||
- ./input:/app/input
|
||||
|
||||
2
docker-publish.cmd
Normal file
2
docker-publish.cmd
Normal file
@@ -0,0 +1,2 @@
|
||||
docker build -t git.thecozycat.net/aj/discordarchivemanager:latest .
|
||||
docker push git.thecozycat.net/aj/discordarchivemanager:latest
|
||||
@@ -36,7 +36,7 @@ public class ArchiveService
|
||||
// Archive the JSON file
|
||||
var archivedJsonPath = Path.Combine(archivePath, jsonFileName);
|
||||
var uniqueJsonPath = GetUniquePath(archivedJsonPath);
|
||||
File.Move(jsonFilePath, uniqueJsonPath);
|
||||
MoveFile(jsonFilePath, uniqueJsonPath);
|
||||
_logger.LogInformation("Archived JSON file to {Path}", uniqueJsonPath);
|
||||
|
||||
// Archive the _Files directory if it exists
|
||||
@@ -45,7 +45,7 @@ public class ArchiveService
|
||||
var filesDirectoryName = Path.GetFileName(filesDirectory);
|
||||
var archivedFilesPath = Path.Combine(archivePath, filesDirectoryName);
|
||||
var uniqueFilesPath = GetUniquePath(archivedFilesPath);
|
||||
Directory.Move(filesDirectory, uniqueFilesPath);
|
||||
MoveDirectory(filesDirectory, uniqueFilesPath);
|
||||
_logger.LogInformation("Archived files directory to {Path}", uniqueFilesPath);
|
||||
}
|
||||
|
||||
@@ -152,6 +152,58 @@ public class ArchiveService
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves a file, falling back to copy+delete for cross-device moves.
|
||||
/// </summary>
|
||||
private static void MoveFile(string source, string destination)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Move(source, destination);
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
File.Copy(source, destination);
|
||||
File.Delete(source);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves a directory, falling back to copy+delete for cross-device moves.
|
||||
/// </summary>
|
||||
private static void MoveDirectory(string source, string destination)
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Move(source, destination);
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
CopyDirectory(source, destination);
|
||||
Directory.Delete(source, true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recursively copies a directory.
|
||||
/// </summary>
|
||||
private static void CopyDirectory(string source, string destination)
|
||||
{
|
||||
Directory.CreateDirectory(destination);
|
||||
|
||||
foreach (var file in Directory.GetFiles(source))
|
||||
{
|
||||
var destFile = Path.Combine(destination, Path.GetFileName(file));
|
||||
File.Copy(file, destFile);
|
||||
}
|
||||
|
||||
foreach (var dir in Directory.GetDirectories(source))
|
||||
{
|
||||
var destDir = Path.Combine(destination, Path.GetFileName(dir));
|
||||
CopyDirectory(dir, destDir);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a unique file/directory path by appending a number if the path already exists.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user