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);
        }