示例#1
0
        private FileInfo SavePack(Pack pack)
        {
            var targetFile = FileSystem.DistFile;

            PackHandler.Save(pack, new TargetWriter(targetFile));
            return(targetFile);
        }
示例#2
0
 public void HasDroppedCorrectly(PackHandler pack)
 {
     if (dropArea.onPointer)
     {
         pack.cardPack.AddCards();
     }
 }
示例#3
0
        public void UpgradePackProject(Uri repositoryUri, FileInfo packFile, IEnumerable <Artifact> dependencies)
        {
            var pack = PackHandler.Load(packFile);

            var index = DownloadRepositoryIndex(repositoryUri);

            var resolver  = new DependencyResolver();
            var artifacts = resolver.ResolveArtifacts(index, dependencies);

            var semver = new Semver();

            foreach (var artifact in artifacts)
            {
                var dep = pack.Deps.Find(a => a.HasSameRadical(artifact));
                if (dep == null)
                {
                    continue;
                }

                var current = dep.Version;
                var upgrade = semver.UpgradePattern(dep.Version, null, artifact.Version);

                if (current != upgrade)
                {
                    dep.Version = upgrade;
                    Console.WriteLine($"[upgrade]{dep.Group}/{dep.Name} from {current} to {upgrade}");
                }
            }
            PackHandler.Save(pack, packFile);
        }
示例#4
0
        public void DeployPack(Uri repositoryUri, FileInfo packFile, DirectoryInfo distFolder)
        {
            var pack        = PackHandler.Load(packFile);
            var artifactUri = new Uri(repositoryUri, pack.Id + "/");

            using (var basket = new PackDeployerBasket())
            {
                var packUri = new Uri(artifactUri, Settings.DefaultPackFile);

                foreach (var dist in pack.Dist)
                {
                    var filename = dist.Replace('/', Path.DirectorySeparatorChar);
                    var filepath = Path.Combine(distFolder.FullName, filename);

                    var distFile = new FileInfo(filepath);
                    var distUri  = new Uri(artifactUri, dist);

                    basket.Add(distFile, distUri);
                }

                // o descritor do artefato será o último arquivo a ser enviado
                basket.Add(packFile, packUri);

                basket.Complete();
            }
        }
示例#5
0
        private void DownloadArtifacts(Uri repositoryUri, DirectoryInfo depsFolder, IEnumerable <Artifact> artifacts)
        {
            var depsPath = depsFolder.FullName;

            foreach (var artifact in artifacts)
            {
                using (var basket = new DependencyInstallerBasket())
                {
                    // Contém grupo, nome e versao e segue o formato de URL.
                    basket.CloudPath = new Uri(repositoryUri, artifact.Id + "/");

                    // O caminho local, por padrão, contém grupo e nome e segue o formato de pasta.
                    // Quando FlatFolder é ativado o grupo e o nome não são usados.
                    if (FlatFolder)
                    {
                        var targetName =
                            artifact.Group + "." + artifact.Name + "." + Settings.DefaultPackFile;

                        basket.LocalPath = new DirectoryInfo(depsPath);
                        basket.Add(Settings.DefaultPackFile, targetName);
                    }
                    else
                    {
                        basket.LocalPath = new DirectoryInfo(Path.Combine(depsPath, artifact.Group, artifact.Name));
                        basket.Add(Settings.DefaultPackFile);
                    }

                    using (var reader = basket.CreateReader(Settings.DefaultPackFile))
                    {
                        var pack = PackHandler.Load(reader);

                        foreach (var distname in pack.Dist)
                        {
                            basket.Add(distname);
                        }
                    }

                    basket.Complete();
                }
            }
        }
示例#6
0
        public static Context Create(Options options)
        {
            var conf       = CreateConf(options);
            var fileSystem = CreateFileSystem(options, conf);

            var settings = new Settings(conf, options);

            var packFile = fileSystem.PackFile;
            var pack     = packFile.Exists ? PackHandler.Load(packFile) : new Pack();

            var credentialsFile = settings.CredentialsFile;
            var credentials     = File.Exists(credentialsFile) ? CredentialsHandler.Load(credentialsFile) : new Credentials();

            return(new Context
            {
                Pack = pack,
                Options = options,
                Settings = settings,
                FileSystem = fileSystem,
                Credentials = credentials
            });
        }
 protected override void Start()
 {
     base.Start();
     packHandler = GetComponent<PackHandler>();
 }
示例#8
0
        private FileInfo CreateIndexFile()
        {
            var indexFile = new FileInfo(Path.GetTempFileName());

            Console.Write("[index]indexing ");
            Console.WriteLine(folder.FullName);

            try
            {
                using (var stream = indexFile.OpenWrite())
                {
                    var writer = new StreamWriter(stream);

                    writer.WriteLine(string.Format(
                                         "#\n"
                                         + "# Índice do repositório.\n"
                                         + "# {0}\n"
                                         + "#\n"
                                         + "# A indentação com " + " refere-se às dependências da biblioteca.\n"
                                         + "# Por exemplo, se o aplicativo App dependende da biblioteca Lib a entrada de\n"
                                         + "# índice seria:\n"
                                         + "#    Grupo/App/1.0.0\n"
                                         + "#    + Grupo/Lib/1.0.0\n"
                                         + "#\n"
                                         , DateTime.Now
                                         ));

                    var stack = new Stack <DirectoryInfo>();
                    stack.Push(folder);

                    while (stack.Count > 0)
                    {
                        var directory = stack.Pop();
                        foreach (var subdirectory in directory.EnumerateDirectories())
                        {
                            stack.Push(subdirectory);
                        }

                        var files    = directory.EnumerateFiles();
                        var packFile = files.SingleOrDefault(f => f.Name == Settings.DefaultPackFile);
                        if (packFile != null)
                        {
                            try
                            {
                                var pack = PackHandler.Load(packFile);
                                writer.WriteLine(pack.Id);
                                foreach (var dep in pack.Deps)
                                {
                                    writer.Write("+ ");
                                    writer.WriteLine(dep);
                                }
                            }
                            catch (Exception ex)
                            {
                                Program.DumpException("O arquivo de pacote não pode ser lido: " + packFile, ex);
                            }
                        }
                    }

                    writer.WriteLine();
                    writer.Flush();
                }

                return(indexFile);
            }
            catch (Exception ex)
            {
                if (indexFile.Exists)
                {
                    try
                    {
                        indexFile.Delete();
                    }
                    catch
                    {
                        // nada a fazer...
                    }
                }
                throw ex;
            }
        }