OSDN Git Service

na-get,インストール時AppliStation,ハッシュが非整合の時にダウンロード処理から「再試行」をすることをできるようにした
authorttp <ttp@users.sourceforge.jp>
Wed, 21 May 2008 10:56:17 +0000 (10:56 +0000)
committerttp <ttp@users.sourceforge.jp>
Wed, 21 May 2008 10:56:17 +0000 (10:56 +0000)
git-svn-id: http://localhost/svn/AppliStation/trunk@912 34ed2c89-c49f-4a4b-abdb-c318350108cf

na-get-lib/NaGet.Packages.Install/Installation.cs
na-get-lib/NaGet.SubCommands/NaGetInstall.cs
na-get-lib/na-get-lib.csproj

index 9711c93..8ff6026 100644 (file)
@@ -416,6 +416,16 @@ namespace NaGet.Packages.Install
                        return NaGet.Utils.ProcessStartWithOutputCapture(procInfo, outputReceived, errorReceived);\r
                }\r
                \r
+               /// <summary>\r
+               /// ダウンロードしたインストーラファイルを削除する\r
+               /// </summary>\r
+               public virtual void RemoveDownloadedFile()\r
+               {\r
+                       if (Downloaded && File.Exists(InstallerFile)) {\r
+                               File.Delete(InstallerFile);\r
+                       }\r
+               }\r
+               \r
                public override string ToString()\r
                {\r
                        return string.Format("{0}({1})", InstalledPackage.Name, InstalledPackage.Version);\r
index 55631eb..6b58eac 100644 (file)
@@ -63,12 +63,102 @@ namespace NaGet.SubCommands
                        \r
                        TaskSetNames = taskSetNames.ToArray();\r
                }\r
-               \r
+                               \r
                public override void Run()\r
                {\r
-                       currentTaskSetIndex ++;\r
+                       currentTaskSetIndex = 0;\r
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\8aJ\8en");\r
                        \r
+                       {\r
+                               // \83n\83b\83V\83\85\94ñ\93K\8d\87\82È\83C\83\93\83X\83g\81[\83\89\82Ì\95\\r
+                               System.Collections.Generic.List<Installation> invalidInstallers = null;\r
+                               \r
+                               while (invalidInstallers == null || invalidInstallers.Count > 0) {\r
+                                       currentTaskSetIndex = 0;\r
+                                       packageInstallerDownloaded = false;\r
+                                       \r
+                                       runDownloadInstallers();\r
+                                       if (done) return; // \82à\82µrunDownloadInstallers()\93à\82Å\83G\83\89\81[\8fI\97¹\82µ\82Ä\82¢\82½\82È\82ç\8fI\97¹\r
+                                       \r
+                                       packageInstallerDownloaded = true;\r
+                                       \r
+                                       // \83n\83b\83V\83\85\82Ì\89ó\82ê\82Ä\82¢\82é\83C\83\93\83X\83g\81[\83\89\82ð\8eæ\93¾\r
+                                       invalidInstallers = runCheckHashForInstaller();\r
+                                       \r
+                                       // \83n\83b\83V\83\85\82ª\89ó\82ê\82Ä\82¢\82é\82Æ\82«\82Ì\91Î\8dô\r
+                                       if (invalidInstallers.Count >= 0) {\r
+                                               string msg = string.Format("{0}\8cÂ\82Ì\83p\83b\83P\81[\83W\82Å\83t\83@\83C\83\8b\82ª\89ó\82ê\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\n\8b­\90§\93I\82É\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82µ\82Ü\82·\82©?",\r
+                                                                          invalidInstallers.Count);\r
+                                               NaGetTaskQueryResult result = RaiseTaskSetQueryEvent(msg, NaGetTaskQueryResult.CONTINUE\r
+                                                                                                    | NaGetTaskQueryResult.RETRY\r
+                                                                                                    | NaGetTaskQueryResult.CANCEL);\r
+                                               \r
+                                               switch (result) {\r
+                                                       case NaGetTaskQueryResult.CONTINUE:\r
+                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\83n\83b\83V\83\85\82Ì\94ñ\90®\8d\87\82ð\96³\8e\8b\82µ\82Ä\83C\83\93\83X\83g\81[\83\8b\82ð\8cp\91±");\r
+                                                               invalidInstallers.Clear(); // \83n\83b\83V\83\85\94ñ\93K\8d\87\83p\83b\83P\81[\83W\82ð\8b­\90§\93I\82É\96\95\8fÁ\r
+                                                               break;\r
+                                                       case NaGetTaskQueryResult.RETRY:\r
+                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "\83_\83E\83\93\83\8d\81[\83h\8f\88\97\9d\82ð\8dÄ\8e\8e\8ds");\r
+                                                               \r
+                                                               foreach (Installation invalidInst in invalidInstallers) {\r
+                                                                       invalidInst.RemoveDownloadedFile();\r
+                                                               }\r
+                                                               \r
+                                                               break;\r
+                                                       //case NaGetTaskQueryResult.CANCEL:\r
+                                                       default:\r
+                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "\83p\83b\83P\81[\83W\82Ì\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\82ª\83L\83\83\83\93\83Z\83\8b\82³\82ê\82Ü\82µ\82½");\r
+                                                               done = true;\r
+                                                               return;\r
+                                               }\r
+                                       }\r
+                                       currentTaskSetIndex ++;\r
+                               }\r
+                       }\r
+                       \r
+                       foreach (Installation inst in Installations) {\r
+                               RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, inst.ToString());\r
+                               \r
+                               try {\r
+                                       inst.ErrorDataReceived += this.ReceivedErrorData;\r
+                                       inst.OutputDataReceived += this.ReceivedOutputData;\r
+                                       int exitCode = inst.Install();\r
+                                       if (exitCode != 0) {\r
+                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\83C\83\93\83X\83g\81[\83\8b\82ª\90³\8fí\82É\8fI\82¦\82Ä\82¢\82È\82¢\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83C\83\93\83X\83g\81[\83\89\82Ì\8fI\97¹\83R\81[\83h:"+exitCode);\r
+                                       }\r
+                                       \r
+                                       pkgListMan.WriteInstallationLog(inst);\r
+                               } catch (Exception e) {\r
+                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
+                                       done = true;\r
+                                       return;\r
+                               }\r
+                               currentTaskSetIndex ++;\r
+                               \r
+                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, inst.ToString());\r
+                               \r
+                               if (cancelCalled) {\r
+                                       RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "\83p\83b\83P\81[\83W\82Ì\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\82ª\83L\83\83\83\93\83Z\83\8b\82³\82ê\82Ü\82µ\82½");\r
+                                       done = true;\r
+                                       return;\r
+                               }\r
+                       }\r
+                       pkgListMan.SaveSystemInstalledLogList(); // \83\8d\83O\82Ì\83R\83~\83b\83g\r
+                       \r
+                       runLocalUpdate();\r
+                       \r
+                       done = true;\r
+                       \r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "\8fI\97¹", 100);\r
+               }\r
+               \r
+               \r
+               /// <summary>\r
+               /// \8f\88\97\9d\93à\97e\82Ì\83_\83E\83\93\83\8d\81[\83h\95\94\95ª\82Ì\83T\83u\83\8b\81[\83`\83\93\r
+               /// </summary>\r
+               private void runDownloadInstallers()\r
+               {\r
                        foreach (Installation inst in Installations) {\r
                                if (! inst.IsInstallablePackage()) {\r
                                        string msg = string.Format("{0}\82Í\83C\83\93\83X\83g\81[\83\8b\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82¹\82ñ", inst.ToString());\r
@@ -110,79 +200,34 @@ namespace NaGet.SubCommands
                                        RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}\82Ì\83C\83\93\83X\83g\81[\83\89\82ð\90³\8fí\82É\83_\83E\83\93\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½", inst.ToString()));\r
                                }\r
                        }\r
+               }\r
+               \r
+               /// <summary>\r
+               /// \83_\83E\83\93\83\8d\81[\83h\82µ\82½\83p\83b\83P\81[\83W\82ª\90®\8d\87\82µ\82½\82©\94Û\82©\83n\83b\83V\83\85\82Å\83`\83F\83b\83N\r
+               /// </summary>\r
+               /// <returns>\90®\8d\87\82µ\82È\82©\82Á\82½\83C\83\93\83X\83g\81[\83\89\82Ì\83\8a\83X\83g</returns>\r
+               private System.Collections.Generic.List<Installation> runCheckHashForInstaller()\r
+               {\r
+                       System.Collections.Generic.List<Installation> invalidInstallers = new System.Collections.Generic.List<Installation>();\r
                        \r
-                       packageInstallerDownloaded = true;\r
-                       \r
-                       {\r
-                               bool invalid = false;\r
-                               int i = 0;\r
-                               foreach (Installation inst in Installations) {\r
-                                       float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/TaskSetNames.Length;\r
-                                       \r
-                                       if (inst.GetRegisteredHashCount() > 0) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "\8c\9f\8fØ: "+inst.ToString(), percent);\r
-                                               \r
-                                               if (inst.IsInstallablePackage() && inst.VerifyHashValues() == false) {\r
-                                                       invalid = true;\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\8c\9f\8fØ: "+inst.ToString() + " \94ñ\90®\8d\87", percent);\r
-                                               } else {\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "\8c\9f\8fØ: "+inst.ToString() + " OK", percent);\r
-                                               }\r
-                                       }\r
-                                       i++;\r
-                               }\r
-                               \r
+                       int i = 0;\r
+                       foreach (Installation inst in Installations) {\r
+                               float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/TaskSetNames.Length;\r
                                \r
-                               // \83n\83b\83V\83\85\82ª\89ó\82ê\82Ä\82¢\82é\82Æ\82«\82Ì\91Î\8dô\r
-                               if (invalid) {\r
-                                       string msg = "\82¢\82­\82Â\82©\82Ì\83p\83b\83P\81[\83W\82Å\83t\83@\83C\83\8b\82ª\89ó\82ê\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\n\8b­\90§\93I\82É\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82µ\82Ü\82·\82©?";\r
-                                       NaGetTaskQueryResult result = RaiseTaskSetQueryEvent(msg, NaGetTaskQueryResult.CONTINUE | NaGetTaskQueryResult.CANCEL);\r
+                               if (inst.GetRegisteredHashCount() > 0) {\r
+                                       RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "\8c\9f\8fØ: "+inst.ToString(), percent);\r
                                        \r
-                                       if (result != NaGetTaskQueryResult.CONTINUE) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "\83p\83b\83P\81[\83W\82Ì\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\82ª\83L\83\83\83\93\83Z\83\8b\82³\82ê\82Ü\82µ\82½");\r
-                                               done = true;\r
-                                               return;\r
+                                       if (inst.IsInstallablePackage() && inst.VerifyHashValues() == false) {\r
+                                               invalidInstallers.Add(inst);\r
+                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\8c\9f\8fØ: "+inst.ToString() + " \94ñ\90®\8d\87", percent);\r
                                        } else {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\83n\83b\83V\83\85\82Ì\94ñ\90®\8d\87\82ð\96³\8e\8b\82µ\82Ä\83C\83\93\83X\83g\81[\83\8b\82ð\8cp\91±");\r
+                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "\8c\9f\8fØ: "+inst.ToString() + " OK", percent);\r
                                        }\r
                                }\r
-                               currentTaskSetIndex ++;\r
+                               i++;\r
                        }\r
                        \r
-                       foreach (Installation inst in Installations) {\r
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, inst.ToString());\r
-                               \r
-                               try {\r
-                                       inst.ErrorDataReceived += this.ReceivedErrorData;\r
-                                       inst.OutputDataReceived += this.ReceivedOutputData;\r
-                                       int exitCode = inst.Install();\r
-                                       if (exitCode != 0) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\83C\83\93\83X\83g\81[\83\8b\82ª\90³\8fí\82É\8fI\82¦\82Ä\82¢\82È\82¢\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83C\83\93\83X\83g\81[\83\89\82Ì\8fI\97¹\83R\81[\83h:"+exitCode);\r
-                                       }\r
-                                       \r
-                                       pkgListMan.WriteInstallationLog(inst);\r
-                               } catch (Exception e) {\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
-                                       done = true;\r
-                                       return;\r
-                               }\r
-                               currentTaskSetIndex ++;\r
-                               \r
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, inst.ToString());\r
-                               \r
-                               if (cancelCalled) {\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "\83p\83b\83P\81[\83W\82Ì\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\82ª\83L\83\83\83\93\83Z\83\8b\82³\82ê\82Ü\82µ\82½");\r
-                                       done = true;\r
-                                       return;\r
-                               }\r
-                       }\r
-                       pkgListMan.SaveSystemInstalledLogList(); // \83\8d\83O\82Ì\83R\83~\83b\83g\r
-                       \r
-                       runLocalUpdate();\r
-                       \r
-                       done = true;\r
-                       \r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "\8fI\97¹", 100);\r
+                       return invalidInstallers;\r
                }\r
                \r
                private void runLocalUpdate()\r
index 7788e6c..937f75d 100644 (file)
@@ -64,7 +64,7 @@
     <Compile Include="NaGet.SubCommands\NaGetTask.cs" />\r
     <Compile Include="NaGet.SubCommands\NaGetTaskSet.cs" />\r
     <Compile Include="NaGet.SubCommands\NaGetUninstall.cs" />\r
-    <Compile Include="NaGet\ArgParse.cs" />\r
+    <Compile Include="NaGet\ArgParser.cs" />\r
     <Compile Include="NaGet\Env.cs" />\r
     <Compile Include="NaGet\Utils.cs" />\r
     <Compile Include="NaGet.Net\Downloader.cs" />\r