예제 #1
0
        /// <summary>
        /// Called by the Package Manager UI when the package selection changed.
        /// </summary>
        /// <param name="packageInfo">The newly selected package information (can be null)</param>
        public void OnPackageSelectionChange(PackageInfo packageInfo)
        {
            InitializeUI();
            if (!_initialized || packageInfo == null || _packageInfo == packageInfo)
            {
                return;
            }

            _packageInfo = packageInfo;

            var isGit = packageInfo.source == PackageSource.Git;

            UIUtils.SetElementDisplay(_gitDetailActoins, isGit);
            UIUtils.SetElementDisplay(_originalDetailActions, !isGit);
            UIUtils.SetElementDisplay(_detailControls.Q("", "popupField"), !isGit);
            UIUtils.SetElementDisplay(_updateButton, isGit);
            UIUtils.SetElementDisplay(_versionPopup, isGit);
            UIUtils.SetElementDisplay(_originalAddButton, false);
            UIUtils.SetElementDisplay(_addButton, true);

            if (isGit)
            {
                _updateButton.text = "Update to";
                _versionPopup.SetEnabled(false);
                _updateButton.SetEnabled(false);
                GitUtils.GetRefs(PackageUtils.GetRepoUrlForCommand(_packageInfo.packageId), _refs, () =>
                {
                    _updateButton.SetEnabled(_currentRefName != _selectedRefName);
                    _versionPopup.SetEnabled(true);
                });

                SetVersion(_currentRefName);
                EditorApplication.delayCall += () =>
                {
                    UIUtils.SetElementDisplay(_detailControls.Q("updateCombo"), true);
                    UIUtils.SetElementDisplay(_detailControls.Q("remove"), true);
                    _detailControls.Q("remove").SetEnabled(true);
                }
                ;
                _currentHostData = Settings.GetHostData(_packageInfo.packageId);

                _hostingIcon.tooltip = "View on " + _currentHostData.Name;
                _hostingIcon.style.backgroundImage = EditorGUIUtility.isProSkin ? _currentHostData.LogoLight : _currentHostData.LogoDark;
            }
        }
예제 #2
0
        void UpdateGitPackages(Queue <Expose> packagesToUpdate, Dictionary <string, IEnumerable <string> > results = null)
        {
            Debug.LogFormat("[UpdateGitPackages] {0} package(s) left", packagesToUpdate.Count);
            phase = Phase.UpdatePackages;
            bool isRunning = 0 < packagesToUpdate.Count;

            PlaySpinner(isRunning);

            // Update task is finished.
            if (!isRunning)
            {
                Debug.LogFormat("[UpdateGitPackages] Completed");
                // Nothing to do.
                if (results == null)
                {
                    phase = Phase.Idle;
                    return;
                }

                // Update package infomation's version.
                Expose exPackages = GetExposedPackages();
                foreach (var pair in results)
                {
                    try
                    {
                        Debug.LogFormat("[UpdateGitPackages] Overwrite {0}", pair.Key);
                        if (exPackages.Call("ContainsKey", pair.Key).As <bool>())
                        {
                            UpdatePackageInfoVersions(exPackages[pair.Key], pair.Value);
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogException(e);
                    }
                }

                // Reload package collection on next frame
                Debug.LogFormat("[UpdateGitPackages] Reload on next frame");
                phase = Phase.ReloadPackageCollection;
                EditorApplication.delayCall += ReloadPackageCollection;
                return;
            }

            if (results == null)
            {
                results = new Dictionary <string, IEnumerable <string> >();
            }

            //
            var package        = packagesToUpdate.Dequeue();
            var displayPackage = package["VersionToDisplay"];
            var packageId      = displayPackage["_PackageId"].As <string>();
            var packageName    = package["packageName"].As <string>();

            // Already get versions.
            if (packageId == null || results.ContainsKey(packageName))
            {
                Debug.LogFormat("[UpdateGitPackages] Skip: {0}", packageName);
                UpdateGitPackages(packagesToUpdate, results);
                return;
            }

            // Get all branch/tag names in repo.
            var url = PackageUtils.GetRepoUrlForCommand(packageId);

            Debug.LogFormat("[UpdateGitPackages] GetRefs: {0}", packageName);
            GitUtils.GetRefs(url, refNames =>
            {
                results[packageName] = refNames;
                UpdateGitPackages(packagesToUpdate, results);
            });
        }