@@ -31,24 +31,46 @@ public bool TryUpdate()
3131
3232 using ( _rwLock . GetUpgradeableReadLock ( ) )
3333 {
34- var package = FindPackage ( ) ;
35-
36- if ( package == null )
37- return false ;
38-
39- if ( ! ValidatePackage ( package ) )
40- return false ;
41-
42- if ( ! CheckEnvironment ( ) )
43- return false ;
44-
45- using ( _rwLock . GetWriteLock ( ) )
34+ try
4635 {
47- var info = ExecuteUpdate ( package ) ;
48-
49- FinalizeUpdate ( ) ;
50-
51- return true ;
36+ string packagePath = null ;
37+ var package = FindPackage ( out packagePath ) ;
38+
39+ if ( package == null )
40+ return false ;
41+
42+ if ( ! ValidatePackage ( package ) )
43+ return false ;
44+
45+ if ( ! CheckEnvironment ( ) )
46+ return false ;
47+
48+ using ( _rwLock . GetWriteLock ( ) )
49+ {
50+ Backup ( ) ;
51+
52+ var info = ExecuteUpdate ( package ) ;
53+
54+ if ( info != null )
55+ {
56+ var newPath = packagePath + ".applied" ;
57+ if ( File . Exists ( newPath ) )
58+ {
59+ File . Delete ( packagePath ) ;
60+ }
61+ else
62+ {
63+ File . Move ( packagePath , newPath ) ;
64+ }
65+ }
66+
67+ return info != null ;
68+ }
69+ }
70+ catch ( Exception ex )
71+ {
72+ _logger . Error ( "An error occured while updating the application: {0}" . FormatCurrent ( ex . Message ) , ex ) ;
73+ return false ;
5274 }
5375 }
5476 }
@@ -59,8 +81,9 @@ private TraceLogger CreateLogger(IPackage package)
5981 return new TraceLogger ( logFile ) ;
6082 }
6183
62- private IPackage FindPackage ( )
84+ private IPackage FindPackage ( out string path )
6385 {
86+ path = null ;
6487 var dir = CommonHelper . MapPath ( UpdatePackagePath , false ) ;
6588 var files = Directory . GetFiles ( dir , "SmartStore.*.nupkg" , SearchOption . TopDirectoryOnly ) ;
6689
@@ -72,6 +95,7 @@ private IPackage FindPackage()
7295
7396 try
7497 {
98+ path = files [ 0 ] ;
7599 package = new ZipPackage ( files [ 0 ] ) ;
76100 _logger = CreateLogger ( package ) ;
77101 _logger . Information ( "Found update package '{0}'" . FormatInvariant ( package . GetFullName ( ) ) ) ;
@@ -101,19 +125,19 @@ private void Backup()
101125 {
102126 var source = new DirectoryInfo ( CommonHelper . MapPath ( "~/" ) ) ;
103127
104- var tempPath = "~/App_Data/_Backup/App/SmartStore" ;
128+ var tempPath = CommonHelper . MapPath ( "~/App_Data/_Backup/App/SmartStore" ) ;
105129 string localTempPath = null ;
106130 for ( int i = 0 ; i < 50 ; i ++ )
107131 {
108- localTempPath = CommonHelper . MapPath ( tempPath ) + ( i == 0 ? "" : "." + i . ToString ( ) ) ;
132+ localTempPath = tempPath + ( i == 0 ? "" : "." + i . ToString ( ) ) ;
109133 if ( ! Directory . Exists ( localTempPath ) )
110134 {
111135 Directory . CreateDirectory ( localTempPath ) ;
112136 break ;
113137 }
114138 localTempPath = null ;
115139 }
116-
140+
117141 if ( localTempPath == null )
118142 {
119143 var exception = new SmartException ( "Too many backups in '{0}'." . FormatInvariant ( tempPath ) ) ;
@@ -124,12 +148,13 @@ private void Backup()
124148 var backupFolder = new DirectoryInfo ( localTempPath ) ;
125149 var folderUpdater = new FolderUpdater ( _logger ) ;
126150 folderUpdater . Backup ( source , backupFolder , "App_Data" , "Media" ) ;
151+
152+ _logger . Information ( "Backup successfully created in folder '{0}'." . FormatInvariant ( localTempPath ) ) ;
127153 }
128154
129155 private PackageInfo ExecuteUpdate ( IPackage package )
130156 {
131- //var appPath = CommonHelper.MapPath("~/");
132- var appPath = "D:\\ _temp\\ AppUpdater\\ Restore" ;
157+ var appPath = CommonHelper . MapPath ( "~/" ) ;
133158
134159 var logger = new NugetLogger ( _logger ) ;
135160
@@ -147,20 +172,19 @@ private PackageInfo ExecuteUpdate(IPackage package)
147172 // Perform the update
148173 projectManager . AddPackageReference ( package , true , false ) ;
149174
150- return new PackageInfo
175+ var info = new PackageInfo
151176 {
152177 Id = package . Id ,
153178 Name = package . Title ?? package . Id ,
154179 Version = package . Version . ToString ( ) ,
155180 Type = "App" ,
156181 Path = appPath
157182 } ;
158- }
159183
160- private void FinalizeUpdate ( )
161- {
162- }
184+ _logger . Information ( "Update '{0}' successfully executed." . FormatInvariant ( info . Name ) ) ;
163185
186+ return info ;
187+ }
164188
165189 protected override void OnDispose ( bool disposing )
166190 {
0 commit comments