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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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();
        }
Пример #8
0
        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);
        }