예제 #1
0
        private void InternalExecute()
        {
            _packages.Clear();

            if (string.IsNullOrEmpty(Url))
            {
                throw new ArgumentException("Url");
            }

            if (IsSharePointOnline)
            {
                if (string.IsNullOrEmpty(UserName))
                {
                    throw new ArgumentException("UserName");
                }

                if (string.IsNullOrEmpty(UserPassword))
                {
                    throw new ArgumentException("UserPassword");
                }
            }

            var spService = new SharePointService();

            spService.WithSharePointContext(Url,
                                            UserName,
                                            UserPassword,
                                            IsSharePointOnline,
                                            context =>
            {
                var repoFolder = AppDomain.CurrentDomain.BaseDirectory;
                var repo       = PackageRepositoryFactory.Default.CreateRepository(repoFolder);

                // create manager with empty repo to avoid connectivity
                var packageManager = new DefaultMetaPackSolutionPackageManager(repo, context);

                //var packages = packageManager.LocalRepository.GetPackages();
                var packages = packageManager.LocalRepository.Search(
                    string.Empty,
                    Enumerable.Empty <string>(),
                    this.PreRelease);

                packages = packages.GroupBy(p => p.Id)
                           .Select(g => g.OrderByDescending(p => p.Version).FirstOrDefault());

                packages = packages.Where(p => p != null);

                foreach (var package in packages)
                {
                    _packages.Add(package);
                    Out.WriteLine(package.GetFullName());
                }
            });
        }
예제 #2
0
        protected virtual void InternalExecute()
        {
            if (PackageSources.Count == 0)
            {
                throw new ArgumentException("Source");
            }

            if (string.IsNullOrEmpty(Id))
            {
                throw new ArgumentException("Id");
            }

            if (string.IsNullOrEmpty(Url))
            {
                throw new ArgumentException("Url");
            }

            if (IsSharePointOnline)
            {
                if (string.IsNullOrEmpty(UserName))
                {
                    throw new ArgumentException("UserName");
                }

                if (string.IsNullOrEmpty(UserPassword))
                {
                    throw new ArgumentException("UserPassword");
                }
            }

            var spService = new SharePointService();

            spService.WithSharePointContext(Url,
                                            UserName,
                                            UserPassword,
                                            IsSharePointOnline,
                                            context =>
            {
                // connect to remote repo
                var repo         = new AggregateRepository(PackageRepositoryFactory.Default, PackageSources, true);
                IPackage package = null;

                if (!string.IsNullOrEmpty(Version))
                {
                    MetaPackTrace.Info("Fetching package [{0}] with version [{1}]", Id, Version);
                    package = repo.FindPackage(Id, new SemanticVersion(Version));
                }
                else
                {
                    MetaPackTrace.Info("Fetching the latest package [{0}]", Id);
                    package = repo.FindPackage(Id);
                }

                if (package == null)
                {
                    MetaPackTrace.Info("Cannot find package [{0}]. Throwing exception.", Id);
                    throw new ArgumentException("package");
                }
                else
                {
                }

                MetaPackTrace.Info("Found package [{0}] version [{1}].",
                                   package.Id,
                                   package.Version);

                MetaPackTrace.Info("Installing package to SharePoint web site...");

                // create manager with repo and current web site
                var packageManager = CreatePackageManager(repo, context);

                // install package
                if (Force)
                {
                    MetaPackTrace.Info("Force flag is true. Looking for existing package...");

                    var currentPackage = packageManager.LocalRepository.FindPackage(
                        package.Id,
                        package.Version,
                        this.PreRelease,
                        true);

                    if (currentPackage != null)
                    {
                        MetaPackTrace.Info(string.Format(
                                               "Package [{0}] version [{1}] already exists. Uninstalling...",
                                               currentPackage.Id,
                                               currentPackage.Version));

                        packageManager.UninstallPackage(package);

                        // we need a fresh start due to cached nuet packages
                        // TODO - rewrite SharePointCSOMFileSystem to support deletions better
                        packageManager = CreatePackageManager(repo, context);
                    }
                    else
                    {
                        MetaPackTrace.Info(string.Format(
                                               "Package [{0}] version [{1}] does not exist. It will be deployed.",
                                               package.Id,
                                               package.Version));
                    }
                }
                else
                {
                    var currentPackage = packageManager.LocalRepository.FindPackage(
                        package.Id,
                        package.Version,
                        this.PreRelease,
                        true);

                    if (currentPackage != null)
                    {
                        MetaPackTrace.Info(string.Format(
                                               "Package [{0}] version [{1}] already exists. Use --force flag to redeploy it.",
                                               currentPackage.Id,
                                               currentPackage.Version));

                        return;
                    }
                }

                packageManager.InstallPackage(package, false, PreRelease);
                MetaPackTrace.Info("Completed installation. All good!");
            });
        }
예제 #3
0
        private void InternalExecute()
        {
            if (string.IsNullOrEmpty(Source))
            {
                throw new ArgumentException("Source");
            }

            if (string.IsNullOrEmpty(Id))
            {
                throw new ArgumentException("Id");
            }

            if (string.IsNullOrEmpty(Url))
            {
                throw new ArgumentException("Url");
            }

            if (IsSharePointOnline)
            {
                if (string.IsNullOrEmpty(UserName))
                {
                    throw new ArgumentException("UserName");
                }

                if (string.IsNullOrEmpty(UserPassword))
                {
                    throw new ArgumentException("UserPassword");
                }
            }

            var spService = new SharePointService();

            spService.WithSharePointContext(Url,
                                            UserName,
                                            UserPassword,
                                            IsSharePointOnline,
                                            context =>
            {
                // connect to remote repo
                Out.WriteLine("Connecting to NuGet repository:[{0}]", Source);
                var repo         = PackageRepositoryFactory.Default.CreateRepository(Source);
                IPackage package = null;

                if (!string.IsNullOrEmpty(Version))
                {
                    Out.WriteLine("Fetching package [{0}] with version [{1}]", Id, Version);
                    package = repo.FindPackage(Id, new SemanticVersion(Version));
                }
                else
                {
                    Out.WriteLine("Fetching the latest package [{0}]", Id);
                    package = repo.FindPackage(Id);
                }

                if (package == null)
                {
                    Out.WriteLine("Cannot find package [{0}]. Throwing exception.", Id);
                    throw new ArgumentException("package");
                }
                else
                {
                    Out.WriteLine("Found remote package [{0}].", package.GetFullName());
                }

                Out.WriteLine("Checking local package [{0}]", Id);
                // create manager with repo and current web site
                var packageManager = new DefaultMetaPackSolutionPackageManager(repo, context);

                //var localPackage = packageManager.LocalRepository.FindPackage(package.Id, package.Version, true, true);
                var localPackages = packageManager.LocalRepository.FindPackagesById(package.Id);
                var localPackage  = localPackages.OrderByDescending(p => p.Version)
                                    .FirstOrDefault();

                if (localPackage != null)
                {
                    Out.WriteLine("Found local package [{0}] with version [{1}]",
                                  localPackage.Id,
                                  localPackage.Version);
                }

                if (localPackage == null)
                {
                    Out.WriteLine("Cannot find local package. Performing install...");
                }
                else
                {
                    if (localPackage.Version < package.Version)
                    {
                        Out.WriteLine("Local package version is behind remote one: [{0}] < [{1}]",
                                      localPackage.Version, package.Version);
                    }
                    else
                    {
                        Out.WriteLine("Local package version greater or equal remote one: [{0}] >= [{1}]. No update is required.",
                                      localPackage.Version, package.Version);
                        return;
                    }
                }

                Out.WriteLine("Installing package [{0}] to SharePoint web site...", package.GetFullName());


                // install package
                packageManager.InstallPackage(package, false, PreRelease);

                Out.WriteLine("Completed installation. All good!");
            });
        }