Esempio n. 1
0
        public Ret <ProjectHeader> LoadProjectHeader(string folder = ".")
        {
            try
            {
                bool ok;

                var svn = new Svn();
                svn.User = SvnUser ?? Svn.DefaultUser;
                svn.Pass = SvnPass ?? Svn.DefaultPass;
                ok       = svn.Fill();
                if (!ok)
                {
                    Ret.Fail();
                }

                var pack = new PackDm.PackDm();
                pack.PackConf = PackConf;
                pack.PackInfo = PackInfo;
                ok            = pack.Fill();
                if (!ok)
                {
                    Ret.Fail();
                }

                var header = LoadProjectHeader(svn, pack);
                return(header);
            }
            catch (Exception ex)
            {
                return(ex);
            }
        }
Esempio n. 2
0
        private static string InferPreRelease()
        {
            // tentando obter a revisao do REVISION.txt
            var revisionInfo = RevisionFileLoader.GetRevisionInfo();

            if (!string.IsNullOrWhiteSpace(revisionInfo.PreRelease))
            {
                return(revisionInfo.PreRelease);
            }

            // tentando obter a revisao do svn
            var svn = new Svn();
            var ok  = svn.Fill();

            if (ok)
            {
                var url = svn.Url;

                Match match;

                // Quando a URL contém informacao de versao na forma: X.X.X-prereleaseX
                match = Regex.Match(url, @"\d+(?:\.\d+)?(?:\.\d+)?(?:-([a-zA-Z\d]+))");
                if (match.Success)
                {
                    return(match.Groups[1].Value);
                }

                // Quando a URL contém trunk ou branches
                match = Regex.Match(url, @"(trunk|branch)");
                if (match.Success)
                {
                    return(match.Groups[1].Value);
                }
            }

            return(null);
        }
Esempio n. 3
0
        public bool CreateTag(TagCommandOptions options)
        {
            bool ok;

            var svn = new Svn();

            svn.User = options.User.Text ?? Svn.DefaultUser;
            svn.Pass = options.Pass.Text ?? Svn.DefaultPass;
            ok       = svn.Fill();
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            var pack = new Library.PackDm.PackDm();

            pack.PackConf = options.PackConf.Text;
            pack.PackInfo = options.PackInfo.Text;
            ok            = pack.Fill();
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            //
            // Validando
            //
            if (svn.IsTag)
            {
                return(Prompt.PrintCannotContinue(
                           "Não é possível criar uma tag a partir de outra tag diretamente.\n"
                           + "O comando deve ser executado a partir de uma pasta trunk ou branch."));
            }

            if (!svn.IsTrunk && !svn.IsBranch)
            {
                return(Prompt.PrintCannotContinue(
                           "O comando deve ser executado a partir de uma pasta trunk ou branch."));
            }

            if (svn.HasChanges && !options.Force.On)
            {
                return(Prompt.PrintCannotContinue(
                           "Existem alterações pendentes:\n"
                           + "---------- SVN STATUS ----------\n"
                           + $"{svn.Changes}\n"
                           + "--------------------------------\n"
                           + "Resolva as pendências do subversion ou use o argumento --force."));
            }

            //
            // Coletando parametros
            //
            var revision = svn.Revision;

            var tagVersion = pack.Version;
            var newVersion = SemVer.IncreaseMinor(tagVersion);

            var relPath = svn.Url.Strip("/(trunk|branches).*");
            var curPath = svn.Url;
            var tagPath = curPath.Replace(relPath, $"/tags/{tagVersion}");

            if (options.PreRelease.On)
            {
                int    rev = 0;
                string version;
                string path;
                do
                {
                    rev++;
                    version = $"{tagVersion}-{options.PreRelease.Text}{rev}";
                    path    = $"{tagPath}-{options.PreRelease.Text}{rev}";
                } while (svn.Exists(path));
                tagVersion = version;
                tagPath    = path;
            }

            //
            // Criando a tag
            //
            ok = svn.Info(pack.PackInfo); // Apenas imprime informacao de revisao no console
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            ok = svn.Copy(curPath, tagPath, $"Fechada a tag {tagVersion} a partir da revisão {revision} de {relPath}.");
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            ok = EditRevisionInfo(options, tagPath, tagVersion);
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            //
            // Incrementando a versao do trunk, se aplicavel
            //
            if (!options.PreRelease.On)
            {
                pack.Version = newVersion;
                pack.Save();
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }

                ok = svn.Commit(pack.PackInfo, $"Versão de {relPath} incrementada para: {newVersion}");
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }
            }

            return(true);
        }
Esempio n. 4
0
        public bool Exec(BuildCommandOptions options)
        {
            Toolchain.RequireDevenv();
            Toolchain.RequirePackDm();
            Toolchain.RequireSubversion();

            bool ok;

            string[] solutions;

            if (options.Solutions.On)
            {
                solutions = options.Solutions.Items.FindFiles();
            }
            else
            {
                solutions = "*.sln".FindFiles();
            }

            if (!solutions.Any())
            {
                return(Prompt.PrintNothingToBeDone("Nenhuma solução detectada."));
            }

            var pack = new Library.PackDm.PackDm();

            pack.PackConf = options.ConfFile.Text;
            pack.PackInfo = options.PackFile.Text;

            var svn = new Svn();

            ok = pack.Fill();
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            ok = svn.Fill();
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            // Imprimindo informação de revisao do pack.info e do subverison
            // no console e no arquivo REVISION.txt
            VersionInfo version;
            {
                var revisionFilepath = Path.GetFullPath("REVISION.txt");

                var loader = new ProjectLoader();
                loader.PackConf = options.ConfFile.Text;
                loader.PackInfo = options.PackFile.Text;
                var ret = loader.LoadProjectHeader();
                if (!ret.Ok)
                {
                    return(Prompt.PrintCannotContinue());
                }

                var project = ret.Value;
                version = project.Version;

                // imprimindo no console e no arquivo
                Prompt.PrintInfo(version);
                File.WriteAllText(revisionFilepath, version);
            }

            var configuration = options.Configuration.Text ?? "Release|Any CPU";

            foreach (var solution in solutions)
            {
                var solutionFilename = Path.GetFileName(solution);
                var solutionFolder   = Path.GetDirectoryName(solution);

                ok = $"devenv.com {solution.Quote()} /Rebuild {configuration.Quote()}".Run();
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }
            }

            // O packDm usa a máscara para substituir partes da versao
            var versionMask = $"*.*.*{version.FormattedPreRelease}";

            ok = pack.Pack(versionMask);
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            // Constrói a página HTML com informações de setup.
            // Falhas podem ser ignoradas.
            var title = Path.GetFileName(solutions.First()).Replace(".sln", "");

            MakeSetupPage(title, version);

            return(true);
        }