Example #1
0
        public bool CreateLatestTag(TagCommandOptions options)
        {
            bool ok;

            var user = options.User.Text ?? Svn.DefaultUser;
            var pass = options.Pass.Text ?? Svn.DefaultPass;

            var remote   = new SvnRemote(user, pass);
            var workcopy = new SvnWorkcopy(".", user, pass);

            var uri = workcopy.GetInfo(Properties.Url);

            var tagNames = remote.GetTagNames(uri, "HEAD");

            if (options.PreRelease.On)
            {
                var regex = new Regex($@"^\d+.\d+.\d+-{options.PreRelease.Text}\d*$");
                tagNames = tagNames.Where(x => regex.IsMatch(x)).ToArray();
            }
            else
            {
                var regex = new Regex(@"^\d+.\d+.\d+$");
                tagNames = tagNames.Where(x => regex.IsMatch(x)).ToArray();
            }

            var maxTag = SemVer.GetMaxVersion(tagNames);

            if (maxTag == null)
            {
                return(Prompt.PrintCannotContinue("Não foram encontradas tags válidas na pasta: /tags"));
            }

            var tagsUri    = remote.MakeSpecialFolderUri(uri, $"tags/{maxTag}");
            var tagsLatest = remote.MakeSpecialFolderUri(uri, $"tags/latest");

            if (options.PreRelease.On)
            {
                tagsLatest = $"{tagsLatest}-{options.PreRelease.Text}";
            }

            if (remote.Exists(tagsLatest, "HEAD"))
            {
                ok = remote.Remove(tagsLatest, "Descartando a revisão \"latest\" para ser recriada.");
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }
            }

            ok = remote.Copy(tagsUri, tagsLatest, "HEAD", $"Criando a revisão \"latest\" com base na revisão {maxTag}");
            if (!ok)
            {
                return(Prompt.PrintCannotContinue());
            }

            return(true);
        }
Example #2
0
        public bool Exec(CheckoutCommandOptions options)
        {
            Toolchain.RequireSubversion();

            bool ok;

            if (!options.Repository.On)
            {
                return(Prompt.PrintInvalidUsage("A URI do repositório Subversion não foi indicada."));
            }

            var revision = options.Revision.On ? options.Revision.Text : "HEAD";
            var user     = options.User.On ? options.User.Text : Svn.DefaultUser;
            var pass     = options.Pass.On ? options.Pass.Text : Svn.DefaultPass;

            var folder = options.Directory.On ? options.Directory.Text : ".";

            folder = Path.GetFullPath(folder);

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            Prompt.PrintInfo("Workcopy: \n" + folder);

            var workcopy = new SvnWorkcopy(folder, user, pass);
            var remote   = new SvnRemote(user, pass);

            var tag = GetTagName(options);

            if (tag == "latest")
            {
                var baseUri  = options.Repository.Text;
                var tagNames = remote.GetTagNames(baseUri, revision);

                var tagName = SemVer.GetMaxVersion(tagNames);
                if (tagName == null)
                {
                    var exists = remote.HasSpecialFolder(baseUri, revision, "trunk");
                    tagName = exists ? "trunk" : "self";
                }

                tag = tagName;
            }

            var uri = GetRepositoryUri(options, tag);

            var workcopyUri = workcopy.GetInfo(Properties.Url);

            if (options.ForceCheckout.On || uri != workcopyUri)
            {
                workcopy.PurgeWorkcopy();

                ok = workcopy.Checkout(uri, revision);
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }

                ok = workcopy.Cleanup();
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }
            }
            else
            {
                ok = workcopy.Cleanup();
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }

                ok = workcopy.Revert();
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }

                ok = workcopy.Cleanup();
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }

                ok = workcopy.Update(revision);
                if (!ok)
                {
                    return(Prompt.PrintCannotContinue());
                }
            }

            workcopy.ShowInfo();
            Prompt.PrintInfo("Concluído com êxito.");
            return(true);
        }