Skip to content

Commit 049e054

Browse files
committed
Added Backup to AppUpdater
1 parent cbbefc7 commit 049e054

File tree

2 files changed

+51
-14
lines changed

2 files changed

+51
-14
lines changed

src/Libraries/SmartStore.Core/Packaging/FolderUpdater.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
using System.Linq;
44
using System.IO;
55
using SmartStore.Core.Logging;
6+
using SmartStore.Utilities;
67

78
namespace SmartStore.Core.Packaging
89
{
910

1011
public interface IFolderUpdater
1112
{
12-
void Backup(DirectoryInfo existingFolder, DirectoryInfo backupfolder);
13+
void Backup(DirectoryInfo existingFolder, DirectoryInfo backupfolder, params string[] ignorePatterns);
1314
void Restore(DirectoryInfo backupfolder, DirectoryInfo existingFolder);
1415
}
1516

@@ -28,14 +29,15 @@ public FolderUpdater(ILogger logger)
2829
_logger = logger;
2930
}
3031

31-
public void Backup(DirectoryInfo existingFolder, DirectoryInfo backupfolder)
32+
public void Backup(DirectoryInfo existingFolder, DirectoryInfo backupfolder, params string[] ignorePatterns)
3233
{
33-
CopyFolder(GetFolderContent(existingFolder), backupfolder);
34+
var ignores = ignorePatterns.Select(x => new Wildcard(x));
35+
CopyFolder(GetFolderContent(existingFolder, ignores), backupfolder);
3436
}
3537

3638
public void Restore(DirectoryInfo backupfolder, DirectoryInfo existingFolder)
3739
{
38-
CopyFolder(GetFolderContent(backupfolder), existingFolder);
40+
CopyFolder(GetFolderContent(backupfolder, Enumerable.Empty<Wildcard>()), existingFolder);
3941
}
4042

4143
private void CopyFolder(FolderContent source, DirectoryInfo dest)
@@ -74,26 +76,34 @@ private void CopyFile(DirectoryInfo sourceFolder, string fileName, DirectoryInfo
7476
File.Copy(sourceFile.FullName, destFile.FullName, true);
7577
}
7678

77-
private FolderContent GetFolderContent(DirectoryInfo folder)
79+
private FolderContent GetFolderContent(DirectoryInfo folder, IEnumerable<Wildcard> ignores)
7880
{
7981
var files = new List<string>();
80-
GetFolderContent(folder, "", files);
82+
GetFolderContent(folder, "", files, ignores);
8183
return new FolderContent { Folder = folder, Files = files };
8284
}
8385

84-
private void GetFolderContent(DirectoryInfo folder, string prefix, List<string> files)
86+
private void GetFolderContent(DirectoryInfo folder, string prefix, List<string> files, IEnumerable<Wildcard> ignores)
8587
{
8688
if (!folder.Exists)
8789
return;
8890

91+
if (ignores.Any(w => w.IsMatch(prefix)))
92+
return;
93+
8994
foreach (var file in folder.GetFiles())
9095
{
91-
files.Add(Path.Combine(prefix, file.Name));
96+
var path = Path.Combine(prefix, file.Name);
97+
var ignore = ignores.Any(w => w.IsMatch(path));
98+
if (!ignore)
99+
{
100+
files.Add(path);
101+
}
92102
}
93103

94104
foreach (var child in folder.GetDirectories())
95105
{
96-
GetFolderContent(child, Path.Combine(prefix, child.Name), files);
106+
GetFolderContent(child, Path.Combine(prefix, child.Name), files, ignores);
97107
}
98108
}
99109

src/Libraries/SmartStore.Core/Packaging/Updater/AppUpdater.cs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ internal sealed class AppUpdater : DisposableObject
2525

2626
public bool TryUpdate()
2727
{
28-
//if (!DataSettings.DatabaseIsInstalled())
29-
// return false;
30-
3128
// NEVER EVER (!!!) make an attempt to auto-update in a dev environment!!!!!!!
3229
if (CommonHelper.IsDevEnvironment)
3330
return false;
@@ -96,13 +93,43 @@ private bool ValidatePackage(IPackage package)
9693

9794
private bool CheckEnvironment()
9895
{
96+
// TODO: Check it :-)
9997
return true;
10098
}
10199

100+
private void Backup()
101+
{
102+
var source = new DirectoryInfo(CommonHelper.MapPath("~/"));
103+
104+
var tempPath = "~/App_Data/_Backup/App/SmartStore";
105+
string localTempPath = null;
106+
for (int i = 0; i < 50; i++)
107+
{
108+
localTempPath = CommonHelper.MapPath(tempPath) + (i == 0 ? "" : "." + i.ToString());
109+
if (!Directory.Exists(localTempPath))
110+
{
111+
Directory.CreateDirectory(localTempPath);
112+
break;
113+
}
114+
localTempPath = null;
115+
}
116+
117+
if (localTempPath == null)
118+
{
119+
var exception = new SmartException("Too many backups in '{0}'.".FormatInvariant(tempPath));
120+
_logger.Error(exception.Message, exception);
121+
throw exception;
122+
}
123+
124+
var backupFolder = new DirectoryInfo(localTempPath);
125+
var folderUpdater = new FolderUpdater(_logger);
126+
folderUpdater.Backup(source, backupFolder, "App_Data", "Media");
127+
}
128+
102129
private PackageInfo ExecuteUpdate(IPackage package)
103130
{
104-
var appPath = CommonHelper.MapPath("~/");
105-
//var appPath = "D:\\_temp\\AppUpdater";
131+
//var appPath = CommonHelper.MapPath("~/");
132+
var appPath = "D:\\_temp\\AppUpdater\\Restore";
106133

107134
var logger = new NugetLogger(_logger);
108135

0 commit comments

Comments
 (0)