OSDN Git Service

archive-inst,1.3.2b1にてアーカイブのトップに唯一のフォルダーしかないとき、そのアーカイブインストールにそのフォルダもインストールされて階層が深くなって... v1.3.2b2
authorttp <ttp@users.sourceforge.jp>
Thu, 31 Dec 2009 06:07:24 +0000 (15:07 +0900)
committerttp <ttp@users.sourceforge.jp>
Thu, 31 Dec 2009 06:07:24 +0000 (15:07 +0900)
91e4e4e133a0dde6163d795c3332e948c872b5e8 に伴って入ったバグ)

archive-inst/Program.cs

index de1d698..01a53bd 100644 (file)
@@ -24,13 +24,6 @@ namespace ArchiveInstall
                \r
                private static void install(string fakeTargetDir, string targetDir)\r
                {\r
-                       string installSrc = fakeTargetDir;\r
-                       \r
-                       if (Directory.GetFiles(installSrc).Length == 0 &&\r
-                           Directory.GetDirectories(installSrc).Length == 1) {\r
-                               installSrc = Directory.GetDirectories(installSrc)[0];\r
-                       }\r
-                       \r
                        // ハッシュ比較\r
                        if (Directory.Exists(targetDir)) {\r
                                InstalledFileList list = null;\r
@@ -42,7 +35,7 @@ namespace ArchiveInstall
                                        // 変更されたファイル(設定ファイル)をキープする処理\r
                                        foreach (InstalledFile changedFile in list.Verify(targetDir)) {\r
                                                string changedFilePath = Path.Combine(targetDir, changedFile.Path);\r
-                                               string toBeChangedFilePath = Path.Combine(installSrc, changedFile.Path);\r
+                                               string toBeChangedFilePath = Path.Combine(fakeTargetDir, changedFile.Path);\r
                                                \r
                                                // 新規のファイルは退避させる\r
                                                if (File.Exists(toBeChangedFilePath)) {\r
@@ -64,8 +57,8 @@ namespace ArchiveInstall
                        }\r
                        \r
                        // まずはフォルダーツリーを作成\r
-                       foreach (string dir in Directory.GetDirectories(installSrc, "*", SearchOption.AllDirectories)) {\r
-                               string dirPath = NaGet.Utils.GetRelativePath(installSrc, dir);\r
+                       foreach (string dir in Directory.GetDirectories(fakeTargetDir, "*", SearchOption.AllDirectories)) {\r
+                               string dirPath = NaGet.Utils.GetRelativePath(fakeTargetDir, dir);\r
                                string targetDirPath = Path.Combine(targetDir, dirPath);\r
                                if (! Directory.Exists(targetDirPath)) {\r
                                        Directory.CreateDirectory(targetDirPath);\r
@@ -73,8 +66,8 @@ namespace ArchiveInstall
                        }\r
                        \r
                        // ファイルをインストール(高速化のため移動)\r
-                       foreach (string file in Directory.GetFiles(installSrc, "*", SearchOption.AllDirectories)) {\r
-                               string filePath = NaGet.Utils.GetRelativePath(installSrc, file);\r
+                       foreach (string file in Directory.GetFiles(fakeTargetDir, "*", SearchOption.AllDirectories)) {\r
+                               string filePath = NaGet.Utils.GetRelativePath(fakeTargetDir, file);\r
                                string targetFilePath = Path.Combine(targetDir, filePath);\r
                                if (File.Exists(targetFilePath)) {\r
                                        File.SetAttributes(targetFilePath, FileAttributes.Normal);\r
@@ -321,11 +314,19 @@ namespace ArchiveInstall
                                                extract(arcFile, tempExtractDir);\r
                                        }\r
                                        \r
-                                       // STEP2. 展開フォルダでインストールファイルリストの作成\r
-                                       storeInstalledFileList(tempExtractDir);\r
+                                       // インストールの元となるフォルダを決定する\r
+                                       string installSrc = tempExtractDir;\r
+                                       // 展開先のトップに唯一のフォルダーしかないのであれば、そのフォルダー内を基準とする\r
+                                       if (Directory.GetFiles(tempExtractDir).Length == 0 &&\r
+                                           Directory.GetDirectories(tempExtractDir).Length == 1) {\r
+                                               installSrc = Directory.GetDirectories(tempExtractDir)[0];\r
+                                       }\r
+                                       \r
+                                       // STEP2. インストール元フォルダでインストールファイルリストの作成\r
+                                       storeInstalledFileList(installSrc);\r
                                        \r
                                        // STEP3. インストール\r
-                                       install(tempExtractDir, targetDir);\r
+                                       install(installSrc, targetDir);\r
                                        \r
                                        if (package != null) {\r
                                                // STEP4. カスタマイズ可能な後処理\r