You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

65 lines
1.9 KiB

using System;
using System.IO;
using System.Linq;
namespace IPA.Patcher
{
public static class BackupManager
{
public static BackupUnit FindLatestBackup(PatchContext context)
{
new DirectoryInfo(context.BackupPath).Create();
return new DirectoryInfo(context.BackupPath)
.GetDirectories()
.OrderByDescending(p => p.Name)
.Select(p => BackupUnit.FromDirectory(p, context))
.FirstOrDefault();
}
public static bool HasBackup(PatchContext context)
{
return FindLatestBackup(context) != null;
}
public static bool Restore(PatchContext context)
{
var backup = FindLatestBackup(context);
if(backup != null)
{
backup.Restore();
backup.Delete();
DeleteEmptyDirs(context.ProjectRoot);
return true;
}
return false;
}
public static void DeleteEmptyDirs(string dir)
{
if (string.IsNullOrEmpty(dir))
throw new ArgumentException(
"Starting directory is a null reference or an empty string",
nameof(dir));
try
{
foreach (var d in Directory.EnumerateDirectories(dir))
{
DeleteEmptyDirs(d);
}
var entries = Directory.EnumerateFileSystemEntries(dir);
if (entries.Any()) return;
try
{
Directory.Delete(dir);
}
catch (UnauthorizedAccessException) { }
catch (DirectoryNotFoundException) { }
}
catch (UnauthorizedAccessException) { }
}
}
}