public void Initialize() { if (PackageIndexActivityLevelProvider.ActivityLevel > ActivityLevel.On) { return; } var shouldClean = false; // if at least one directory where packages live does not exist, // we need to clean index and rebuild it from scratch. It would be // much faster than go package by package. var packageDirs = _indexBuilder.GetPackageDirectories(); foreach (var packageDir in packageDirs) { if (!Directory.Exists(packageDir)) { shouldClean = true; try { // create directory to avoid cleaning at next VS startup Directory.CreateDirectory(packageDir); } catch (Exception e) { Debug.Write(e.ToString()); } } } // In addition to package sources we should also check WTE version, // since when there is new WTE installed, we have new set of default // packages and need to clean index complettely and rebuild // Note: yes we tied to WTE now, but whole current version of the // Package Index already very tied to WTE because of Roslyn limitation // and need to be redesigned to support all C# projects again after // Roslyn provides project info for file being analyzed and supports // VS UI thread correctly. var ideVersion = GetCurrentIDEVersion(); var indexIDEVersion = GetIndexIDEVersion(); if (!string.IsNullOrEmpty(ideVersion)) { if (!ideVersion.Equals(indexIDEVersion, StringComparison.OrdinalIgnoreCase)) { // remember new IDE version and clean/rebuild index shouldClean = true; SetIndexIDEVersion(ideVersion); } } if (shouldClean) { _indexBuilder.Clean(); } Synchronize(shouldClean: shouldClean, force: true); }
private void ProcessAction(ILocalPackageIndexBuilder builder, Arguments arguments, bool commandMode) { LocalPackageIndexBuilderResult result = null; switch (arguments.Action) { case PackageIndexManagerAction.Build: result = builder.BuildAsync().Result; break; case PackageIndexManagerAction.Rebuild: result = builder.Rebuild(); break; case PackageIndexManagerAction.Clean: result = builder.Clean(); break; case PackageIndexManagerAction.Add: if (!string.IsNullOrEmpty(arguments.Package)) { result = builder.AddPackage(arguments.Package, arguments.Force); } else { _consoleUI.WriteNormalLine(Resources.PackageIsMissingToAdd); } break; case PackageIndexManagerAction.Remove: if (!string.IsNullOrEmpty(arguments.Package)) { result = builder.RemovePackage(arguments.Package); } else { _consoleUI.WriteNormalLine(Resources.PackageIsMissingToRemove); } break; case PackageIndexManagerAction.Query: if (!string.IsNullOrEmpty(arguments.Type)) { DoQuery(() => { return(builder.Index.GetTypes(arguments.Type).Select(x => (object)x).ToList()); }); } else if (!string.IsNullOrEmpty(arguments.Package)) { DoQuery(() => { return(builder.Index.GetPackages(arguments.Package).Select(x => (object)x).ToList()); }); } else { _consoleUI.WriteNormalLine(Resources.PackageOrTypeIsMissing); } break; default: _consoleUI.WriteNormalLine(Resources.ActionUnrecognized); return; } if (result != null) { _consoleUI.WriteHighlitedLine(string.Format(Resources.TimeElapsed, result.TimeElapsed)); _consoleUI.WriteNormalLine(string.Empty); } }
private void ProcessAction(ILocalPackageIndexBuilder builder, Arguments arguments, bool commandMode) { LocalPackageIndexBuilderResult result = null; switch (arguments.Action) { case PackageIndexManagerAction.Build: result = builder.BuildAsync(shouldClean: false, newOnly: false, cancellationToken: CancellationToken.None).Result; break; case PackageIndexManagerAction.Rebuild: result = builder.Rebuild(); break; case PackageIndexManagerAction.Clean: result = builder.Clean(); break; case PackageIndexManagerAction.Add: if (!string.IsNullOrEmpty(arguments.Package)) { result = builder.AddPackage(arguments.Package, arguments.Force); } else { _consoleUI.WriteNormalLine(Resources.PackageIsMissingToAdd); } break; case PackageIndexManagerAction.Remove: if (!string.IsNullOrEmpty(arguments.Package)) { result = builder.RemovePackage(packageName: arguments.Package, force: false); } else { _consoleUI.WriteNormalLine(Resources.PackageIsMissingToRemove); } break; case PackageIndexManagerAction.Query: if (!string.IsNullOrEmpty(arguments.Type)) { DoQuery(() => { return(builder.Index.GetTypes(arguments.Type).Select(x => (object)x).ToList()); }); } else if (!string.IsNullOrEmpty(arguments.Package)) { DoQuery(() => { return(builder.Index.GetPackages(arguments.Package).Select(x => (object)x).ToList()); }); } else if (!string.IsNullOrEmpty(arguments.Namespace)) { DoQuery(() => { return(builder.Index.GetNamespaces(arguments.Namespace).Select(x => (object)x).ToList()); }); } else if (!string.IsNullOrEmpty(arguments.Extension)) { DoQuery(() => { return(builder.Index.GetExtensions(arguments.Extension).Select(x => (object)x).ToList()); }); } else { _consoleUI.WriteNormalLine(Resources.PackageOrTypeIsMissing); } break; case PackageIndexManagerAction.Dump: var dumpFile = arguments.DumpFile; if (string.IsNullOrEmpty(dumpFile)) { dumpFile = "IndexDump.csv"; } DumpIndex(builder, dumpFile); break; default: _consoleUI.WriteNormalLine(Resources.ActionUnrecognized); return; } if (result != null) { _consoleUI.WriteHighlitedLine(string.Format(Resources.TimeElapsed, result.TimeElapsed)); _consoleUI.WriteNormalLine(string.Empty); } }
private void ProcessAction(ILocalPackageIndexBuilder builder, Arguments arguments, bool commandMode) { LocalPackageIndexBuilderResult result = null; switch (arguments.Action) { case PackageIndexManagerAction.Build: result = builder.BuildAsync(shouldClean:false, newOnly: false, cancellationToken: CancellationToken.None).Result; break; case PackageIndexManagerAction.Rebuild: result = builder.Rebuild(); break; case PackageIndexManagerAction.Clean: result = builder.Clean(); break; case PackageIndexManagerAction.Add: if (!string.IsNullOrEmpty(arguments.Package)) { result = builder.AddPackage(arguments.Package, arguments.Force); } else { _consoleUI.WriteNormalLine(Resources.PackageIsMissingToAdd); } break; case PackageIndexManagerAction.Remove: if (!string.IsNullOrEmpty(arguments.Package)) { result = builder.RemovePackage(packageName:arguments.Package, force: false); } else { _consoleUI.WriteNormalLine(Resources.PackageIsMissingToRemove); } break; case PackageIndexManagerAction.Query: if (!string.IsNullOrEmpty(arguments.Type)) { DoQuery(() => { return builder.Index.GetTypes(arguments.Type).Select(x => (object)x).ToList(); }); } else if (!string.IsNullOrEmpty(arguments.Package)) { DoQuery(() => { return builder.Index.GetPackages(arguments.Package).Select(x => (object)x).ToList(); }); } else if (!string.IsNullOrEmpty(arguments.Namespace)) { DoQuery(() => { return builder.Index.GetNamespaces(arguments.Namespace).Select(x => (object)x).ToList(); }); } else if (!string.IsNullOrEmpty(arguments.Extension)) { DoQuery(() => { return builder.Index.GetExtensions(arguments.Extension).Select(x => (object)x).ToList(); }); } else { _consoleUI.WriteNormalLine(Resources.PackageOrTypeIsMissing); } break; case PackageIndexManagerAction.Dump: var dumpFile = arguments.DumpFile; if (string.IsNullOrEmpty(dumpFile)) { dumpFile = "IndexDump.csv"; } DumpIndex(builder, dumpFile); break; default: _consoleUI.WriteNormalLine(Resources.ActionUnrecognized); return; } if (result != null) { _consoleUI.WriteHighlitedLine(string.Format(Resources.TimeElapsed, result.TimeElapsed)); _consoleUI.WriteNormalLine(string.Empty); } }