Exemplo n.º 1
0
 protected IDisposable ChangeMonitor(FileBased<IPackageDescriptor> descriptor)
 {
     bool packagesChanged = false;
         PackageChanged change = (a, b, c, d) =>
         {
             packagesChanged = true;
             return Enumerable.Empty<object>();
         };
         PackageUpdated update = (a, b, c, d, e) =>
         {
             packagesChanged = true;
             return Enumerable.Empty<object>();
         };
         var listener = PackageManager.Monitor(change, change, update);
         return new ActionOnDispose(()=>
         {
             listener.Dispose();
             if (packagesChanged)
             {
                 if (HostEnvironment.Descriptor != descriptor.Value)
                 {
                     descriptor.File.Touch();
                     HostEnvironment.DescriptorFile.Touch();
                 }
                 else
                 {
                     foreach (var file in HostEnvironment.ScopedDescriptors.Select(x => x.Value.File))
                         file.Touch();
                 }
             }
         });
 }
Exemplo n.º 2
0
        protected IDisposable SaveDescriptorOnSuccess(FileBased <IPackageDescriptor> descriptor)
        {
            bool           packagesChanged = false;
            PackageChanged change          = (a, b, c, d) =>
            {
                packagesChanged = true;
                return(Enumerable.Empty <object>());
            };
            PackageUpdated update = (a, b, c, d, e) =>
            {
                packagesChanged = true;
                return(Enumerable.Empty <object>());
            };
            var listener = PackageManager.Monitor(change, change, update);

            return(new ActionOnDispose(() =>
            {
                listener.Dispose();
                if (Successful && packagesChanged)
                {
                    descriptor.Save();
                    if (HostEnvironment.Descriptor != descriptor.Value)
                    {
                        HostEnvironment.DescriptorFile.Touch();
                    }
                    else
                    {
                        foreach (var file in HostEnvironment.ScopedDescriptors.Select(x => x.Value.File))
                        {
                            file.Touch();
                        }
                    }
                }
            }));
        }
Exemplo n.º 3
0
        public IDictionary <string, FileBased <IPackageDescriptor> > ReadAll(IDirectory directoryToReadFrom)
        {
            var descriptorFiles = (from dir in directoryToReadFrom.AncestorsAndSelf()
                                   let descriptors = dir.Files("*.wrapdesc")
                                                     where descriptors.Count() > 0
                                                     select descriptors.OrderBy(x => x.Name.Length)).FirstOrDefault();
            var all = new Dictionary <string, FileBased <IPackageDescriptor> >();

            if (descriptorFiles == null)
            {
                return(all);
            }

            var root           = descriptorFiles.First();
            var rootDescriptor = root.ReadRetry(Read);

            all[string.Empty] = FileBased.New(root, rootDescriptor);
            foreach (var descriptor in descriptorFiles.Skip(1))
            {
                var regex      = new Regex(string.Format("^{0}.(?<scope>.*).wrapdesc$", rootDescriptor.Name));
                var scopeMatch = regex.Match(descriptor.Name);
                if (scopeMatch.Success == false)
                {
                    continue;
                }
                var scopedDescriptor = rootDescriptor
                                       .CreateScoped(descriptor.Read(Read));
                all[scopeMatch.Groups["scope"].Value] = FileBased.New(descriptor, scopedDescriptor);
            }
            return(all);
        }
Exemplo n.º 4
0
 protected void TrySaveDescriptorFile(FileBased <IPackageDescriptor> targetDescriptor)
 {
     if (!Successful)
     {
         return;
     }
     using (var descriptorStream = targetDescriptor.File.OpenWrite())
         new PackageDescriptorReaderWriter().Write(targetDescriptor.Value, descriptorStream);
 }
Exemplo n.º 5
0
 ICommandOutput VerifyDescriptor(FileBased <IPackageDescriptor> descriptor)
 {
     if (NoDescriptorUpdate)
     {
         return(new GenericMessage("Descriptor file will not be updated."));
     }
     return(descriptor.File.Exists
                    ? new GenericMessage(@"Using descriptor {0}.", descriptor.File.Name)
                    : new GenericMessage("Creating descriptor {0}.", descriptor.File.Name));
 }
Exemplo n.º 6
0
 ICommandOutput VerifyDescriptor(FileBased <IPackageDescriptor> descriptor)
 {
     if (Project == false)
     {
         return(null);
     }
     if (NoDescriptorUpdate)
     {
         return(new Info("Descriptor file will not be updated."));
     }
     return(descriptor.File.Exists
                    ? new Info(@"Using descriptor {0}.", descriptor.File.Name)
                    : new Info("Creating descriptor {0}.", descriptor.File.Name));
 }
Exemplo n.º 7
0
 public InMemoryEnvironment(IDirectory currentDirectory, IDirectory configDirectory = null)
 {
     CurrentDirectory = currentDirectory;
     SystemRepository = new InMemoryRepository("System repository");
     //RemoteRepository = new InMemoryRepository("Remote repository");
     CurrentDirectoryRepository = new InMemoryRepository("Current directory repository");
     //RemoteRepositories = new List<InMemoryRepository> { RemoteRepository };
     DescriptorFile                  = CurrentDirectory.GetFile("descriptor.wrapdesc").MustExist();
     Descriptor                      = new PackageDescriptor();
     ConfigurationDirectory          = configDirectory;
     ScopedDescriptors               = new Dictionary <string, FileBased <IPackageDescriptor> >(StringComparer.OrdinalIgnoreCase);
     ScopedDescriptors[string.Empty] = FileBased.New(DescriptorFile, Descriptor);
     ExecutionEnvironment            = new ExecutionEnvironment("AnyCPU", "net35");
 }
Exemplo n.º 8
0
        public static FileBased <IPackageDescriptor> GetOrCreateScopedDescriptor(this IEnvironment env, string scope)
        {
            scope = scope ?? string.Empty;
            if (env.ScopedDescriptors.ContainsKey(scope))
            {
                return(env.ScopedDescriptors[scope]);
            }

            var newDescriptorFile = env.DescriptorFile.Parent.GetFile(string.Format("{0}.{1}.wrapdesc", env.DescriptorFile.NameWithoutExtension, scope.ToLowerInvariant()));
            var newDescriptor     = env.Descriptor.CreateScoped(Enumerable.Empty <IPackageDescriptorEntry>());
            var result            = FileBased.New(newDescriptorFile, newDescriptor);

            return(env.ScopedDescriptors[scope] = result);
        }
Exemplo n.º 9
0
        IEnumerable <ICommandOutput> InProject()
        {
            if (!Project)
            {
                yield break;
            }

            if (HostEnvironment.ProjectRepository != null)
            {
                _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope);
            }
            else
            {
                yield return(new Error("Not in a package directory."));
            }
        }
Exemplo n.º 10
0
        IEnumerable <ICommandOutput> UpdateProjectPackages()
        {
            yield return(new Info("Updating project packages..."));

            var  sourceRepos = _remoteRepositories;
            var  errors      = new List <PackageOperationResult>();
            bool updated     = false;

            _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope ?? string.Empty);
            var packageDescriptor = _targetDescriptor.Value.Lock(HostEnvironment.ProjectRepository);

            foreach (var x in (string.IsNullOrEmpty(Name)
                                   ? PackageManager.UpdateProjectPackages(sourceRepos, HostEnvironment.ProjectRepository, packageDescriptor)
                                   : PackageManager.UpdateProjectPackages(sourceRepos, HostEnvironment.ProjectRepository, packageDescriptor, Name)))
            {
                if (x is PackageMissingResult || x is PackageConflictResult)
                {
                    errors.Add(x);
                }
                else
                {
                    updated = true;
                    yield return(x.ToOutput());
                }
            }
            if (updated)
            {
                _targetDescriptor.File.Touch();
            }

            foreach (var failed in errors.GetFailures())
            {
                var errorMessage = "{0} could not be updated\r\n{1}";

                var details = failed.SelectMany(_ => new[] { " - " + _.First() }.Concat(_.Skip(1).Select(x => "   " + x)));


                yield return(new Error(errorMessage, failed.Key, details.JoinString(@"\r\n")));
            }
        }
Exemplo n.º 11
0
 protected void TrySaveDescriptorFile(FileBased<IPackageDescriptor> targetDescriptor)
 {
     if (!Successful) return;
     using (var descriptorStream = targetDescriptor.File.OpenWrite())
         new PackageDescriptorReaderWriter().Write(targetDescriptor.Value, descriptorStream);
 }
Exemplo n.º 12
0
        protected override IEnumerable <ICommandOutput> ExecuteCore()
        {
            _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope ?? string.Empty);

            yield return(VerifyDescriptor(_targetDescriptor));

            yield return(VerifyProjectRepository());

            yield return(SetupEnvironmentForAdd());

            var sourceRepositories = GetSourceRepositories();

            var descriptor = new PackageDescriptor(_targetDescriptor.Value);

            if (Project && System)
            {
                var sysToAdd = new List <PackageIdentifier>();
                using (SaveDescriptorOnSuccess(_targetDescriptor))
                {
                    foreach (var m in AddProjectPackage(descriptor, sourceRepositories))
                    {
                        yield return(ToOutput(m));

                        ParseSuccess(m, sysToAdd.Add);
                    }
                    foreach (var identifier in sysToAdd)
                    {
                        foreach (var m in PackageManager.AddSystemPackage(PackageRequest.Exact(identifier.Name, identifier.Version), sourceRepositories, HostEnvironment.SystemRepository))
                        {
                            yield return(ToOutput(m));
                        }
                    }
                }
            }
            else if (Project)
            {
                using (SaveDescriptorOnSuccess(_targetDescriptor))
                {
                    foreach (var m in AddProjectPackage(descriptor, sourceRepositories))
                    {
                        yield return(ToOutput(m));
                    }
                }
            }
            else if (System)
            {
                foreach (var m in PackageManager.AddSystemPackage(PackageRequest, sourceRepositories, HostEnvironment.SystemRepository, AddOptions))
                {
                    yield return(ToOutput(m));
                }
            }

            if (_packageNotFound)
            {
                var hit = false;
                foreach (var m in PackageManager.ListPackages(sourceRepositories, Name))
                {
                    if (!hit)
                    {
                        yield return(new Info("Did you mean one of the following packages?", Name));

                        hit = true;
                    }
                    yield return(ToOutput(m));
                }
            }
        }
Exemplo n.º 13
0
 ICommandOutput VerifyDescriptor(FileBased<IPackageDescriptor> descriptor)
 {
     if (Project == false) return null;
     if (NoDescriptorUpdate)
         return new Info("Descriptor file will not be updated.");
     return descriptor.File.Exists
                    ? new Info(@"Using descriptor {0}.", descriptor.File.Name)
                    : new Info("Creating descriptor {0}.", descriptor.File.Name);
 }
Exemplo n.º 14
0
        protected override IEnumerable<ICommandOutput> ExecuteCore()
        {
            _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope ?? string.Empty);

            yield return VerifyDescriptor(_targetDescriptor);
            yield return VerifyProjectRepository();

            yield return SetupEnvironmentForAdd();
            var sourceRepositories = GetSourceRepositories().ToList();

            var descriptor = new PackageDescriptor(_targetDescriptor.Value);
            if (Project && System)
            {
                var sysToAdd = new List<PackageIdentifier>();
                using (SaveDescriptorOnSuccess(_targetDescriptor))
                {
                    foreach (var m in AddProjectPackage(descriptor, sourceRepositories))
                    {
                        yield return ToOutput(m);
                        ParseSuccess(m, sysToAdd.Add);
                    }
                    foreach (var identifier in sysToAdd)
                        foreach (var m in PackageManager.AddSystemPackage(PackageRequest.Exact(identifier.Name, identifier.Version), sourceRepositories, HostEnvironment.SystemRepository))
                            yield return ToOutput(m);
                }
            }
            else if (Project)
            {
                using (SaveDescriptorOnSuccess(_targetDescriptor))
                {
                    foreach (var m in AddProjectPackage(descriptor, sourceRepositories))
                    {
                        yield return ToOutput(m);
                    }
                }
            }
            else if (System)
            {
                foreach (var m in PackageManager.AddSystemPackage(PackageRequest, sourceRepositories, HostEnvironment.SystemRepository, AddOptions))
                {
                    yield return ToOutput(m);
                }
            }

            if (_packageNotFound)
            {
                var hit = false;
                foreach (var m in PackageManager.ListPackages(sourceRepositories, Name))
                {
                    if (!hit)
                    {
                        yield return new Info("Did you mean one of the following packages?", Name);
                        hit = true;
                    }
                    yield return ToOutput(m);
                }
            }
        }
Exemplo n.º 15
0
 public static void Save(this FileBased <IPackageDescriptor> descriptor)
 {
     using (var writeStream = descriptor.File.OpenWrite())
         new PackageDescriptorReaderWriter().Write(descriptor.Value.GetPersistableEntries(), writeStream);
 }
Exemplo n.º 16
0
        IEnumerable<ICommandOutput> UpdateProjectPackages()
        {
            yield return new Info("Updating project packages...");

            var sourceRepos = _remoteRepositories;
            var errors = new List<PackageOperationResult>();
            bool updated = false;

            _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope ?? string.Empty);
            var packageDescriptor = _targetDescriptor.Value.Lock(HostEnvironment.ProjectRepository);

            foreach (var x in (string.IsNullOrEmpty(Name)
                                   ? PackageManager.UpdateProjectPackages(sourceRepos, HostEnvironment.ProjectRepository, packageDescriptor)
                                   : PackageManager.UpdateProjectPackages(sourceRepos, HostEnvironment.ProjectRepository, packageDescriptor, Name)))
                if (x is PackageMissingResult || x is PackageConflictResult)
                {
                    errors.Add(x);
                }
                else
                {
                    updated = true;
                    yield return x.ToOutput();
                }
            if (updated)
                _targetDescriptor.File.Touch();

            foreach (var failed in errors.GetFailures())
            {
                var errorMessage = "{0} could not be updated\r\n{1}";

                var details = failed.SelectMany(_ => new[] { " - " + _.First() }.Concat(_.Skip(1).Select(x => "   " + x)));


                yield return new Error(errorMessage, failed.Key, details.JoinString(@"\r\n"));
            }
        }
Exemplo n.º 17
0
        IEnumerable<ICommandOutput> InProject()
        {
            if (!Project) yield break;

            if (HostEnvironment.ProjectRepository != null)
                _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope);
            else
                yield return new Error("Not in a package directory.");
        }
Exemplo n.º 18
0
 ICommandOutput VerifyDescriptor(FileBased<IPackageDescriptor> descriptor)
 {
     if (NoDescriptorUpdate)
         return new GenericMessage("Descriptor file will not be updated.");
     return descriptor.File.Exists
                    ? new GenericMessage(@"Using descriptor {0}.", descriptor.File.Name)
                    : new GenericMessage("Creating descriptor {0}.", descriptor.File.Name);
 }
Exemplo n.º 19
0
        protected override IEnumerable<ICommandOutput> ExecuteCore()
        {
            _targetDescriptor = HostEnvironment.GetOrCreateScopedDescriptor(Scope ?? string.Empty);

            yield return VerifyDescriptor(_targetDescriptor);
            yield return VerifyProjectRepository();

            yield return SetupEnvironmentForAdd();
            var sourceRepositories = GetSourceRepositories().ToList();
            foreach(var repository in from r in sourceRepositories
                                      let cache = r.Feature<ISupportCaching>()
                                      where cache != null
                                      select new { repository = r, cache })
            {
                var updateTime = new Stopwatch();
                updateTime.Start();
                yield return new Info("Updating repository {0}.", repository.repository.Name);
                repository.cache.Update();
                yield return new Info("Updated repository {0} in {1}.",
                    repository.repository.Name,
                    updateTime.Elapsed);

            }
            var descriptor = new PackageDescriptor(_targetDescriptor.Value);
            if (Project && System)
            {
                var sysToAdd = new List<PackageIdentifier>();
                using (SaveDescriptorOnSuccess(_targetDescriptor))
                {
                    foreach (var m in AddProjectPackage(descriptor, sourceRepositories))
                    {
                        yield return ToOutput(m);
                        ParseSuccess(m, sysToAdd.Add);
                    }
                    foreach (var identifier in sysToAdd)
                        foreach (var m in PackageManager.AddSystemPackage(PackageRequest.Exact(identifier.Name, identifier.Version), sourceRepositories, HostEnvironment.SystemRepository))
                            yield return ToOutput(m);
                }
            }
            else if (Project)
            {
                using (SaveDescriptorOnSuccess(_targetDescriptor))
                {
                    foreach (var m in AddProjectPackage(descriptor, sourceRepositories))
                    {
                        yield return ToOutput(m);
                    }
                }
            }
            else if (System)
            {
                foreach (var m in PackageManager.AddSystemPackage(PackageRequest, sourceRepositories, HostEnvironment.SystemRepository, AddOptions))
                {
                    yield return ToOutput(m);
                }
            }

            if (_packageNotFound)
            {
                var hit = false;
                foreach (var m in PackageManager.ListPackages(sourceRepositories, Name))
                {
                    if (!hit)
                    {
                        yield return new Info("Did you mean one of the following packages?", Name);
                        hit = true;
                    }
                    yield return ToOutput(m);
                }
            }
        }