\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
// 変更されたファイル(設定ファイル)をキープする処理\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
}\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
}\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
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