1 // project created on 2007/09/08 at 20:20
\r
4 using System.Collections.Generic;
\r
5 using NaGet.Packages;
\r
6 using NaGet.Packages.Install;
\r
7 using NaGet.SubCommands;
\r
12 sealed class TaskSetEventHandlers
\r
14 public static void OnTaskSetEvent(object sender, TaskEventArgs e) {
\r
16 // case NaGetTaskSetEventType.COMPLETED_TASKSET
\r
18 case TaskEventType.COMPLETED:
\r
19 Console.WriteLine("Done.");
\r
21 case TaskEventType.STARTED_SUBTASK:
\r
22 Console.Write(" " + e.TaskMessage);
\r
24 case TaskEventType.COMPLETED_SUBTASK:
\r
25 Console.WriteLine(" ... Done. [{0}%]", (int) e.ProgressPercent);
\r
27 case TaskEventType.INFO:
\r
28 Console.WriteLine(" " + e.TaskMessage);
\r
30 case TaskEventType.ERROR:
\r
31 case TaskEventType.WARNING:
\r
32 Console.WriteLine(" [Error]" + e.TaskMessage);
\r
37 public static void OnDownloadSubTaskEvent(object sender, TaskEventArgs e)
\r
39 if (sender is NaGet.SubCommands.SubTask.DownloadSubTask) {
\r
40 if (e.Type == TaskEventType.STARTED) {
\r
41 Console.WriteLine();
\r
44 int origPosX = Console.CursorLeft;
\r
45 for (int i = 0; i < Console.WindowWidth - 1; i++) {
\r
48 Console.CursorLeft = origPosX;
\r
51 case TaskEventType.PING:
\r
53 int origPos = Console.CursorLeft;
\r
54 Console.Write(e.TaskMessage);
\r
55 Console.CursorLeft = origPos;
\r
58 case TaskEventType.WARNING:
\r
59 case TaskEventType.ERROR:
\r
60 Console.WriteLine(" [Error]" + e.TaskMessage);
\r
63 Console.WriteLine(e.TaskMessage);
\r
69 public static NaGetTaskQueryResult OnTaskQueryEvent(object sender, NaGetTaskQueryArgs e)
\r
71 char result = '\u0000';
\r
72 if (e.SelectionFlag == (NaGetTaskQueryResult.CONTINUE | NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {
\r
73 result = AllGet.Util.Query(e.Message + " [y/R/n]?", "yrn", 'r');
\r
74 } else if (e.SelectionFlag == (NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {
\r
75 result = AllGet.Util.Query(e.Message + " [R/n]?", "rn", 'r');
\r
76 } else if (e.SelectionFlag == NaGetTaskQueryResult.CONTINUE) {
\r
77 result = AllGet.Util.Query(e.Message + " [Y]?", "y", 'y');
\r
79 result = AllGet.Util.Query(e.Message + " [Y/n]?", "yn", 'y');
\r
84 return NaGetTaskQueryResult.CONTINUE;
\r
86 return NaGetTaskQueryResult.CANCEL;
\r
88 return NaGetTaskQueryResult.RETRY;
\r
90 return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;
\r
98 private PackageListsManager pkgListMan;
\r
101 /// サイレントインストールをするか否か
\r
103 private bool silent = false;
\r
107 pkgListMan = new PackageListsManager();
\r
108 pkgListMan.LoadPackageLists();
\r
111 public void Update()
\r
116 public void LocalUpdate()
\r
121 public void update(bool downloadPackageListFlag)
\r
123 NaGet.SubCommands.NaGetUpdate2 tasks = new NaGet.SubCommands.NaGetUpdate2(pkgListMan, downloadPackageListFlag);
\r
124 tasks.TaskEventRaised += TaskSetEventHandlers.OnTaskSetEvent;
\r
125 tasks.SubTaskEventRaised += TaskSetEventHandlers.OnDownloadSubTaskEvent;
\r
130 public void CheckUpgrade()
\r
132 foreach (Package pkg in UpgradeFinder.GetUpgradePackages(pkgListMan)) {
\r
133 bool isSystem = false;
\r
134 Package instPkg = null;
\r
136 instPkg = pkgListMan.SystemInstalledPkgList.GetPackageForName(pkg.Name);
\r
137 if (instPkg != null) {
\r
140 instPkg = pkgListMan.InstalledPkgList.GetPackageForName(pkg.Name);
\r
141 if (instPkg != null) {
\r
144 System.Diagnostics.Debug.Fail("internal error.");
\r
148 Console.WriteLine("{0} ({1}){3} => ({2})", pkg.Name, instPkg.Version, pkg.Version, (isSystem)? "@sys" : "");
\r
152 public void Search(string keys)
\r
154 foreach(Package package in pkgListMan.AvailablePkgList.Search(keys)) {
\r
155 Console.WriteLine("{0} ({1}) - {2}", package.Name, package.Version, package.Summary);
\r
158 foreach(InstalledPackage package in pkgListMan.InstalledPkgList.Search(keys)) {
\r
159 Console.WriteLine("{0} ({1})[@install] - {2}", package.Name, package.Version, package.Summary);
\r
162 foreach(InstalledPackage package in pkgListMan.SystemInstalledPkgList.Search(keys)) {
\r
163 Console.WriteLine("{0} ({1})[@sys] - {2}", package.Name, package.Version, package.Summary);
\r
167 public void Show(string packagename)
\r
169 PackageList<Package> allPkgs = new PackageList<Package>();
\r
170 allPkgs.AddPackages(pkgListMan.GetAllPackages());
\r
172 foreach (Package pkg in allPkgs.GetPackagesForName(packagename)) {
\r
173 Console.WriteLine("Package: {0}", pkg.Name);
\r
174 Console.WriteLine("Version: {0}", pkg.Version);
\r
175 Console.WriteLine("Summary: {0}", pkg.Summary);
\r
176 if (pkg.Url != null) Console.WriteLine("Website: {0}", pkg.Url.Href);
\r
177 if (pkg.Tags != null) Console.WriteLine("Tag: {0}", pkg.Tags.ToLower());
\r
178 Console.WriteLine("Type: {0}", pkg.Type);
\r
179 if (pkg.License != null) Console.WriteLine("License: {0}", pkg.License);
\r
180 if (pkg is InstalledPackage) Console.WriteLine("State: Installed");
\r
181 Console.WriteLine("Repository: {0}", pkg.PackageListName);
\r
183 if (pkg.Description != null) {
\r
184 Console.WriteLine("Description:");
\r
185 Console.WriteLine(pkg.Description);
\r
187 Console.WriteLine();
\r
192 public void Download(string[] packagenames)
\r
194 Installation[] installations = null;
\r
196 List<Package> downloadList = new List<Package>();
\r
198 foreach(string packagename in packagenames) {
\r
199 Package foundPackage = pkgListMan.AvailablePkgList.GetPackageForName(packagename);
\r
200 if (foundPackage == null) {
\r
201 Console.WriteLine("E: Couldn't find package "+packagename);
\r
202 Environment.Exit(1);
\r
204 if (! downloadList.Contains(foundPackage)) {
\r
205 downloadList.Add(foundPackage);
\r
209 installations = new Installation[downloadList.Count];
\r
210 for (int i = 0; i < installations.Length; i++) {
\r
211 installations[i] = new Installation(downloadList[i]);
\r
215 Console.WriteLine("The following packages will be downloaded:");
\r
216 Console.WriteLine(" {0}", Installation.ToString(installations));
\r
217 if (AllGet.Util.Confirm("Do you want to continue [Y/n]?", true) == false) {
\r
218 Console.WriteLine("Abort.");
\r
219 Environment.Exit(0);
\r
222 NaGet.SubCommands.NaGetDownloadToCache2 tasks = new NaGet.SubCommands.NaGetDownloadToCache2(pkgListMan, installations);
\r
223 tasks.TaskEventRaised += TaskSetEventHandlers.OnTaskSetEvent;
\r
224 tasks.SubTaskEventRaised += TaskSetEventHandlers.OnDownloadSubTaskEvent;
\r
225 tasks.TaskQueryRaised += TaskSetEventHandlers.OnTaskQueryEvent;
\r
230 public void Install(string[] packagenames)
\r
232 if (! NaGet.Utils.IsAdministrators()) {
\r
233 Console.WriteLine("W: you are not administrators!");
\r
236 Installation[] installations = null;
\r
238 List<Package> downloadList = new List<Package>();
\r
240 foreach(string packagename in packagenames) {
\r
241 Package foundPackage = pkgListMan.AvailablePkgList.GetPackageForName(packagename);
\r
242 if (foundPackage == null) {
\r
243 Console.WriteLine("E: Couldn't find package "+packagename);
\r
244 Environment.Exit(1);
\r
246 if (! downloadList.Contains(foundPackage)) {
\r
247 downloadList.Add(foundPackage);
\r
251 installations = new Installation[downloadList.Count];
\r
252 for (int i = 0; i < installations.Length; i++) {
\r
253 installations[i] = new Installation(downloadList[i]);
\r
257 Installation[] depInstallations;
\r
259 Installation[] resolved;
\r
260 DependeciesResolver.ResolveInstallations(installations, pkgListMan, out resolved, out depInstallations);
\r
261 installations = resolved;
\r
264 Console.WriteLine("The following packages will be downloaded:");
\r
265 Console.WriteLine(" {0}", Installation.ToString(installations));
\r
266 if (AllGet.Util.Confirm("Do you want to continue [Y/n]?", true) == false) {
\r
267 Console.WriteLine("Abort.");
\r
268 Environment.Exit(0);
\r
271 NaGet.SubCommands.NaGetInstall2 tasks = new NaGet.SubCommands.NaGetInstall2(pkgListMan, installations);
\r
272 tasks.TaskEventRaised += TaskSetEventHandlers.OnTaskSetEvent;
\r
273 tasks.SubTaskEventRaised += TaskSetEventHandlers.OnDownloadSubTaskEvent;
\r
274 tasks.TaskQueryRaised += TaskSetEventHandlers.OnTaskQueryEvent;
\r
279 public void Remove(string[] packagenames)
\r
281 if (! NaGet.Utils.IsAdministrators()) {
\r
282 Console.WriteLine("W: you are not administrators!");
\r
285 this.LocalUpdate();
\r
287 PackageList<InstalledPackage> installedPkgList = new PackageList<InstalledPackage>();
\r
288 installedPkgList.AddPackages(pkgListMan.GetAllInstalledPackages());
\r
290 InstalledPackage[] insPkgs = new InstalledPackage[packagenames.Length];
\r
291 for (int i = 0; i < packagenames.Length; i++) {
\r
292 insPkgs[i] = installedPkgList.GetPackageForName(packagenames[i]);
\r
294 if (insPkgs[i] == null) {
\r
295 Console.WriteLine("E: could not found package " + packagenames[i]);
\r
296 Environment.Exit(1);
\r
300 // if (AllGet.Util.Confirm("Do you want to continue [Y/n]?", true) == false) {
\r
301 // Console.WriteLine("Abort.");
\r
302 // Environment.Exit(0);
\r
305 NaGet.SubCommands.NaGetUninstall2 tasks = new NaGet.SubCommands.NaGetUninstall2(pkgListMan, insPkgs);
\r
306 tasks.TaskEventRaised += TaskSetEventHandlers.OnTaskSetEvent;
\r
311 public void CleanCache(string[] packages)
\r
313 if (! Directory.Exists(NaGet.Env.ArchiveFolderPath)) {
\r
318 if (packages.Length == 0) {
\r
319 foreach (string folder in Directory.GetDirectories(NaGet.Env.ArchiveFolderPath)) {
\r
320 Directory.Delete(folder, true);
\r
324 foreach (string package in packages) {
\r
325 foreach (string folder in Directory.GetDirectories(NaGet.Env.ArchiveFolderPath, package+"*", SearchOption.TopDirectoryOnly)) {
\r
326 Directory.Delete(folder, true);
\r
332 Console.WriteLine("... Done.");
\r
338 string executeFileName = System.AppDomain.CurrentDomain.FriendlyName;
\r
339 Console.Write("Usage:");
\r
341 Console.WriteLine("\t{0} update|localupdate", executeFileName);
\r
342 Console.WriteLine("\t{0} search|show pkg1 [pkg2 ...]", executeFileName);
\r
343 Console.WriteLine("\t{0} cleancache [pkg ...]", executeFileName);
\r
344 Console.WriteLine("\t{0} download pkg1 [pkg2 ...]", executeFileName);
\r
345 Console.WriteLine("\t{0} [--quiet] install|uninstall pkg1 [pkg2 ...]", executeFileName);
\r
346 Console.WriteLine();
\r
347 Console.WriteLine("{0} is a simple command line interface for downloading and "+
\r
348 "installing packages. The most frequently used commands are update "+
\r
349 "and install.", executeFileName);
\r
350 Console.WriteLine();
\r
351 Console.WriteLine("Commands:");
\r
352 Console.WriteLine(" update - Retrieve new lists of packages");
\r
353 Console.WriteLine(" localupdate - Update installed-soft-list only");
\r
354 Console.WriteLine(" checkupgrade - Show upgraded-soft list");
\r
355 Console.WriteLine(" search - Search the package list for not a regex pattern");
\r
356 Console.WriteLine(" show - Show package detail");
\r
357 Console.WriteLine(" cleancache - Clear cached archived file(s)");
\r
358 Console.WriteLine(" download - Download only - do NOT install or unpack archives");
\r
359 Console.WriteLine(" install - Install new packages");
\r
360 Console.WriteLine(" remove - Uninstall packages");
\r
361 Console.WriteLine();
\r
364 public void FooBar()
\r
366 foreach (InstalledPackage pkg in pkgListMan.SystemInstalledPkgList) {
\r
367 Console.WriteLine("{0} : {1}", pkg.Name, pkg.UninstallInfo.UninstallString);
\r
373 foreach (UninstallInformation uInfo in RegistriedUninstallers.Uninstallers) {
\r
374 if (! uInfo.IsOSPatch && ! uInfo.IsSystemComponent) {
\r
375 Console.WriteLine("{0}", uInfo.DisplayName);
\r
382 // TODO スーパー牛さんパワー化
\r
384 string executeFileName = System.AppDomain.CurrentDomain.FriendlyName;
\r
385 Console.WriteLine("誰か {0} をスーパー牛さんパワー化してくれ", executeFileName);
\r
389 public static void Main(string[] args)
\r
391 // アーカイブSYSTEM32をパスに足す
\r
392 NaGet.Utils.AddDirectoryToPath(NaGet.Env.ArchiveSystem32);
\r
394 MainClass mc = new MainClass();
\r
396 if (args.Length == 0) {
\r
399 Environment.Exit(1);
\r
402 NaGet.ArgParser argParser = new NaGet.ArgParser();
\r
403 argParser["quiet"] = false;
\r
404 args = argParser.Parse(args);
\r
405 mc.silent = (bool) argParser["quiet"];
\r
406 } catch (ApplicationException e) {
\r
407 Console.WriteLine(e.Message);
\r
408 Environment.Exit(1);
\r
416 if (args.Length != 1) {
\r
417 Console.WriteLine("E: The update command takes no arguments");
\r
418 Environment.Exit(1);
\r
422 case "localupdate":
\r
423 if (args.Length != 1) {
\r
424 Console.WriteLine("E: The update command takes no arguments");
\r
425 Environment.Exit(1);
\r
430 if (args.Length <= 1) {
\r
431 Console.WriteLine("E: You must give exactly one pattern");
\r
432 Environment.Exit(1);
\r
435 mc.Search(string.Join(" ", args, 1, args.Length - 1));
\r
438 if (args.Length <= 1) {
\r
439 Console.WriteLine("E: You must give exactly one pattern");
\r
440 Environment.Exit(1);
\r
443 for (int i = 1; i < args.Length; i++) {
\r
448 if (args.Length <= 1) {
\r
449 Console.WriteLine("E: Invalid operation download");
\r
450 Environment.Exit(1);
\r
452 string[] packages = new string[args.Length - 1];
\r
453 Array.Copy(args, 1, packages, 0, packages.Length);
\r
455 mc.Download(packages);
\r
459 if (args.Length <= 1) {
\r
460 Console.WriteLine("E: Invalid operation install");
\r
461 Environment.Exit(1);
\r
463 string[] packages = new string[args.Length - 1];
\r
464 Array.Copy(args, 1, packages, 0, packages.Length);
\r
466 mc.Install(packages);
\r
469 case "checkupgrade":
\r
473 if (args.Length <= 1) {
\r
474 Console.WriteLine("E: Invalid operation remove");
\r
475 Environment.Exit(1);
\r
477 string[] packages = new string[args.Length - 1];
\r
478 Array.Copy(args, 1, packages, 0, packages.Length);
\r
480 mc.Remove(packages);
\r
485 string[] packages = new string[args.Length - 1];
\r
486 Array.Copy(args, 1, packages, 0, packages.Length);
\r
488 mc.CleanCache(packages);
\r
503 Environment.Exit(1);
\r