private void ShowNormalDependencies() { PackageDependencies dependencies = PackageManagerInjectionHelper.InjectedVisualElement.PackageDetails.dependencies; VisualElement visualElement = dependencies.Element.Q("dependenciesContainer"); visualElement.style.display = new StyleEnum <DisplayStyle>(DisplayStyle.Flex); }
private void HideNormalDependencies() { // We only want to do this for packages that are in development, this wouldn't work on other packages anyway if (!currentPackage.HasTag(PackageTag.InDevelopment)) { ShowNormalDependencies(); return; } PackageDependencies dependencies = PackageManagerInjectionHelper.InjectedVisualElement.PackageDetails.dependencies; VisualElement visualElement = dependencies.Element.Q("dependenciesContainer"); visualElement.style.display = new StyleEnum <DisplayStyle>(DisplayStyle.None); }
private void RemoveDependenciesVisualElement() { try { PackageDependencies dependencies = PackageManagerInjectionHelper.InjectedVisualElement.PackageDetails.dependencies; VisualElement visualElement = dependencies.Element.Q("dependenciesInnerContainer"); if (visualElement.Contains(dependenciesVisualElement)) { visualElement.Remove(dependenciesVisualElement); } } catch (NullReferenceException) { // Thrown when disposing, safe to ignore } }
static void Main(string[] args) { Console.WriteLine("Topological Sort!"); //Vertex vertex0 = new Vertex("A"); //Vertex vertex1 = new Vertex("B"); //Vertex vertex2 = new Vertex("C"); //Vertex vertex3 = new Vertex("D"); //vertex0.addNeighbour(vertex1); //vertex0.addNeighbour(vertex2); //vertex1.addNeighbour(vertex3); ////vertex1.addNeighbour(vertex4); //TopologicalOrdering topOrder = new TopologicalOrdering(); //topOrder.DFS(vertex0); //foreach(Vertex v in topOrder.getList()) //{ // v.ToString(); //} // Complexity O(v+e) var packDependencies = new Dictionary <int, List <int> >(); packDependencies.Add(0, new List <int>() { }); // Add 1 in List to cause Cycle for Error case packDependencies.Add(1, new List <int>() { }); //packDependencies.Add(2, new List<int>() { 0 }); //packDependencies.Add(3, new List<int>() { 1, 2}); //packDependencies.Add(4, new List<int>() { 3 }); PackageDependencies packaging = new PackageDependencies(packDependencies); var order = packaging.PackageOrder(); PrintArray(order.ToArray()); }
private void InsertDependenciesVisualElement() { // We only want to do this for packages that are in development, this wouldn't work on other packages anyway if (!currentPackage.HasTag(PackageTag.InDevelopment)) { RemoveDependenciesVisualElement(); return; } PackageDependencies dependencies = PackageManagerInjectionHelper.InjectedVisualElement.PackageDetails.dependencies; VisualElement visualElement = dependencies.Element.Q("dependenciesInnerContainer"); if (!visualElement.Contains(dependenciesVisualElement)) { visualElement.Add(dependenciesVisualElement); } dependenciesVisualElement.UpdatePackage(currentPackage); }
public void TestPackageDependencies() { var pd = new PackageDependencies(); pd.groupId = "my.group.id"; pd.artifactId = "my-artifact-id"; var dep = new AndroidPackageDependency(); dep.group = "com.google.android.gms"; dep.artifact = "play-services-ads"; dep.version = "LATEST"; var arg = new DependencyArgument(); arg.packageIds.Add("extra-google-m2repository"); arg.packageIds.Add("extra-google-m2repository"); arg.repositories.Add("some-repository"); dep.args = arg; pd.androidDependencies.Add(dep); var xml = pd.SerializeToXMLString(); // these can come back out of order on inflate - so we remove them xml = xml.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", ""); xml = xml.Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", ""); Console.WriteLine("Actual: " + xml + "\n\n"); xml = xml.Substring(1); // strip BOM for test var expectedXml = File.ReadAllText( Path.Combine( Path.Combine( Path.GetFullPath(TestData.PATH), "flatdeps"), "group.id.example-artifact.gpm.deps.xml")); // these can come back out of order on inflate - so we remove them expectedXml = expectedXml.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", ""); expectedXml = expectedXml.Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", ""); Console.WriteLine("Expected: " + xml + "\n\n"); Assert.AreEqual(expectedXml, xml); }
private static void CreateToggle(string dependencyName, string dependencyVersion, PackageDependencies target, PackageDependencies newTarget) { if (dependencyName.StartsWith("com.unity.modules.")) { return; } EditorGUILayout.BeginHorizontal(); var contains = target.ContainsKey(dependencyName); var newContains = EditorGUILayout.Toggle(contains, GUILayout.Width(30)); if (newContains) { newTarget[dependencyName] = dependencyVersion; } var content = new GUIContent(dependencyName, $"\"{dependencyName}\" : \"{dependencyVersion}\""); EditorGUILayout.LabelField(content); EditorGUILayout.EndHorizontal(); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { label.tooltip = "A map of package dependencies. They indicate other packages that this package depends on."; property.isExpanded = EditorGUI.Foldout(position, property.isExpanded, label, true); if (!property.isExpanded) { return; } var packagesDirectory = Directory.GetParent(Application.dataPath).GetDirectories("Packages").FirstOrDefault(); var manifestFile = packagesDirectory?.GetFiles("manifest.json").FirstOrDefault(); if (manifestFile == null) { return; } var manifestJson = File.ReadAllText(manifestFile.FullName); var manifest = JsonMapper.ToObject <ProjectManifest>(manifestJson); EditorGUI.indentLevel++; var targetObject = property.serializedObject.targetObject; if (!(fieldInfo.GetValue(targetObject) is PackageDependencies target)) { return; } var newTarget = new PackageDependencies(); foreach (var dependency in manifest.dependencies) { CreateToggle(dependency.Key, dependency.Value, target, newTarget); } var targetPackage = Path.ChangeExtension(AssetDatabase.GetAssetPath(targetObject), "json"); var packages = AssetDatabase.GetAllAssetPaths() .Where(s => s != targetPackage && s.StartsWith("Assets/") && s.EndsWith("/package.json")); foreach (var packagePath in packages) { var packageJson = File.ReadAllText(packagePath); var package = JsonMapper.ToObject <PackageManifest>(packageJson); CreateToggle(package.name, package.version, target, newTarget); } if (!target.SequenceEqual(newTarget)) { fieldInfo.SetValue(targetObject, newTarget); newTarget.OnBeforeSerialize(); var keyValuePairs = property.FindPropertyRelative("keyValuePairs"); keyValuePairs.arraySize = newTarget.Count; for (var i = 0; i < newTarget.Count; i++) { var arrayElement = keyValuePairs.GetArrayElementAtIndex(i); var newArrayElement = newTarget.keyValuePairs[i]; arrayElement.FindPropertyRelative("key").stringValue = newArrayElement.key; arrayElement.FindPropertyRelative("value").stringValue = newArrayElement.value; } } EditorGUI.indentLevel--; }
public override bool Execute() { if (Environment.GetEnvironmentVariable("DEBUG_NUGETIZER") == "1") { Debugger.Launch(); } var packages = new ConcurrentDictionary <PackageIdentity, List <PackageIdentity> >(); Func <string, PackageIdentity> parse = value => { var parts = value.Split('/'); return(new PackageIdentity(parts[0], parts[1])); }; // Build the list of parent>child relationships. foreach (var dependency in PackageDependencies.Where(x => x.ItemSpec.Contains('/'))) { var identity = parse(dependency.ItemSpec); var parent = dependency.GetMetadata("ParentPackage"); if (!string.IsNullOrEmpty(parent)) { packages.GetOrAdd(parse(parent), _ => new List <PackageIdentity>()) .Add(identity); } else { // In centrally managed package versions, at this point we have // the right version if the project is using centrally managed versions var primaryReference = PackageReferences.FirstOrDefault(x => x.ItemSpec == identity.Id); if (primaryReference != null && primaryReference.GetNullableMetadata("Version") == null) { primaryReference.SetMetadata("Version", identity.Version); } } } var inferred = new Dictionary <PackageIdentity, ITaskItem>(); foreach (var reference in PackageReferences) { var identity = new PackageIdentity(reference.ItemSpec, reference.GetMetadata("Version")); var originalMetadata = (IDictionary <string, string>)reference.CloneCustomMetadata(); foreach (var dependency in FindDependencies(identity, packages)) { if (!inferred.ContainsKey(dependency)) { var item = new TaskItem(dependency.Id); foreach (var metadata in originalMetadata) { item.SetMetadata(metadata.Key, metadata.Value); } item.SetMetadata("Version", dependency.Version); inferred.Add(dependency, item); } } } ImplicitPackageReferences = inferred.Values.ToArray(); return(true); }