Fix #27481: windows uninstaller could remove files unrelated to blender
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 1 Jun 2011 13:13:55 +0000 (13:13 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 1 Jun 2011 13:13:55 +0000 (13:13 +0000)
when installing to a folder that already existed. Now the uninstaller
will remove only the files it has installed, and leave any other files
in the installation directory intact.

build_files/scons/tools/btools.py
release/windows/installer/00.sconsblender.nsi

index accdde0d2cf0171f83c808a975e9e0fa364544e2..3131548aed2c1344418a8599d33e74b5a7bca1a7 100644 (file)
@@ -605,9 +605,12 @@ def NSIS_Installer(target=None, source=None, env=None):
     doneroot = False
     rootdirconts = []
     datafiles = ''
+    deldatafiles = ''
+    deldatadirs = ''
     l = len(bf_installdir)
     
     for dp,dn,df in os.walk(bf_installdir):
+        # install
         if not doneroot:
             for f in df:
                 rootdirconts.append(os.path.join(dp,f))
@@ -621,6 +624,16 @@ def NSIS_Installer(target=None, source=None, env=None):
                     outfile = os.path.join(dp,f)
                     datafiles += '  File '+outfile + "\n"
 
+        # uninstall
+        deldir = dp[l+1:]
+
+        if len(deldir)>0:
+            deldatadirs = "RMDir $INSTDIR\\" + deldir + "\n" + deldatadirs
+            deldatadirs = "RMDir /r $INSTDIR\\" + deldir + "\\__pycache__\n" + deldatadirs
+
+            for f in df:
+                deldatafiles += 'Delete \"$INSTDIR\\' + os.path.join(deldir, f) + "\"\n"
+
     #### change to suit install dir ####
     inst_dir = install_base_dir + env['BF_INSTALLDIR']
     
@@ -657,6 +670,8 @@ def NSIS_Installer(target=None, source=None, env=None):
     ns_cnt = string.replace(ns_cnt, "[DELROOTDIRCONTS]", delrootstring)
 
     ns_cnt = string.replace(ns_cnt, "[DODATAFILES]", datafiles)
+    ns_cnt = string.replace(ns_cnt, "[DELDATAFILES]", deldatafiles)
+    ns_cnt = string.replace(ns_cnt, "[DELDATADIRS]", deldatadirs)
 
     tmpnsi = os.path.normpath(install_base_dir+os.sep+env['BF_BUILDDIR']+os.sep+"00.blender_tmp.nsi")
     new_nsis = open(tmpnsi, 'w')
index 42a9b1c13b6814466748c1c77809f2790dc4ebc4..eddd215c64dc7732d9b3666e53a1f6e1302e35b6 100644 (file)
@@ -205,6 +205,8 @@ Section "Uninstall"
  
   ; Remove files
   [DELROOTDIRCONTS]
+  [DELDATAFILES]
+  [DELDATADIRS]
 
   Delete "$INSTDIR\uninstall.exe"
 
@@ -212,13 +214,14 @@ Section "Uninstall"
     RMDir /r "$BLENDERCONFIG\$SHORTVERSION"
   ${Endif}
 
+  ; Remove install directory if it's empty
+  RMDir $INSTDIR
   ; Remove shortcuts
   Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
   Delete "$DESKTOP\Blender.lnk"
   ; Remove all link related directories and files
-  RMDir /r "$SMPROGRAMS\Blender Foundation"
-  ; Clear out installation dir
-  RMDir /r "$INSTDIR"
+  RMDir "$SMPROGRAMS\Blender Foundation\Blender"
+  RMDir "$SMPROGRAMS\Blender Foundation"
   
   System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' ; Refresh icons
 SectionEnd