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