private void HandleCompilePackageListStatusComplete(Action action)
        {
            IsWorking.SetValue(false);
            Operation.SetValue(null);

            PackageListStatus.SetValue((PackageListStatus)action.Payload);
        }
示例#2
0
        private static void SyncProjectInternal(PackageListStatus packageListStatus, Action <OperationResult> onComplete)
        {
            if (packageListStatus.IsProjectUpToDate)
            {
                onComplete(new OperationResult());
                return;
            }

            var operation = new AsyncOperation();

            foreach (var packageStatus in packageListStatus.Packages)
            {
                var version     = packageStatus.RequiredVersion;
                var packageName = packageStatus.PackageName;
                var gitUrl      = packageStatus.GitUrl;
                var relativeInstallDirectory = Settings.RelativePackagesDirectoryPath + packageName;
                var absoluteInstallDirectory = Settings.AbsolutePackagesDirectoryPath + packageName;

                if (packageStatus.IsMissing)
                {
                    operation.Add(new AddSubmoduleTask(gitUrl, relativeInstallDirectory));
                    operation.Add(new CheckoutSubmoduleTask(absoluteInstallDirectory, version));
                }
                else if (packageStatus.IsOnWrongVersion)
                {
                    operation.Add(new CheckoutSubmoduleTask(absoluteInstallDirectory, version));
                }
            }

            operation.Execute(onComplete);
        }
示例#3
0
        public static AsyncOperation CompilePackageListStatus()
        {
            var operation         = new AsyncOperation();
            var packageListStatus = new PackageListStatus();

            foreach (var package in RootStore.Instance.Packages.InstalledPackages.Value.Packages)
            {
                var packageStatus = new PackageStatus
                {
                    RequiredVersion = package.Version,
                    PackageName     = package.Name,
                    GitUrl          = package.GitUrl
                };
                packageListStatus.Packages.Add(packageStatus);
                var packageDirectory = Settings.AbsolutePackagesDirectoryPath + package.Name;
                if (!Directory.Exists(packageDirectory))
                {
                    packageStatus.IsMissing = true;
                    continue;
                }

                var getGitBranchOrTagTask = new GetGitBranchOrTagTask(package);
                var packageVersion        = package.Version;
                operation.Add(getGitBranchOrTagTask, (result, op) =>
                {
                    packageStatus.IsOnWrongVersion = result.Data != packageVersion;
                });
            }

            operation.AddSync(() =>
            {
                Debug.Log("Project package status: ");

                foreach (var package in packageListStatus.Packages)
                {
                    Debug.Log(package);
                }

                Debug.Log("The project is " +
                          (packageListStatus.IsProjectUpToDate ? "" : "not ") + "up to date");

                return(new Result <PackageListStatus>(packageListStatus));
            }, (result, op) =>
            {
                op.Complete(result);
            });

            return(operation);
        }
示例#4
0
        public static AsyncOperation SyncProject()
        {
            var tasks = new AsyncOperation();

            PackageListStatus packageListStatus = null;

            // Compile package list status
            tasks.Add(new BasicTask <OperationResult>(CompileProjectPackageListStatus), (result, op) =>
            {
                if (result.IsError)
                {
                    Debug.LogError("Failed to compile package status");
                    Debug.LogError(result.Error.Message);
                    return;
                }

                packageListStatus = ((Result <PackageListStatus>)result).Data;
            });

            // Sync project
            tasks.Add(new BasicTask <OperationResult>(onComplete => SyncProjectInternal(packageListStatus, onComplete)));

            return(tasks);
        }
 private void HandleCompilePackageListStatusStarted(Action action)
 {
     PackageListStatus.SetValue(null);
     IsWorking.SetValue(true);
     Operation.SetValue("Compiling status of each package");
 }