33using System . Linq ;
44using System . IO ;
55using SmartStore . Core . Logging ;
6+ using SmartStore . Utilities ;
67
78namespace 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
0 commit comments