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); }
/// <summary> /// Editando os arquivos pack.info e REVISION.txt de uma tag recém criada. /// </summary> private bool EditRevisionInfo(TagCommandOptions options, string tagPath, string tagVersion) { var curDir = Directory.GetCurrentDirectory(); var tmpDir = PathEx.CreateTempFolder(); try { bool ok; Directory.SetCurrentDirectory(tmpDir); var svn = new Svn(); svn.User = options.User.Text ?? Svn.DefaultUser; svn.Pass = options.Pass.Text ?? Svn.DefaultPass; ok = svn.Checkout(tagPath, depth: "empty"); if (!ok) { return(Prompt.PrintCannotContinue()); } //ok = svn.Update("pack.info pack.conf REVISION.txt"); ok = svn.Update("REVISION.txt"); if (!ok) { return(Prompt.PrintCannotContinue()); } //// editando o pack.info //{ // var pack = new Library.PackDm.PackDm(); // pack.PackConf = "pack.conf"; // pack.PackInfo = "pack.info"; // ok = pack.Fill(); // if (!ok) return Prompt.PrintCannotContinue(); // pack.Version = tagVersion; // ok = pack.Save(); // if (!ok) return Prompt.PrintCannotContinue(); //} // editando o REVISION.txt { File.WriteAllText("REVISION.txt", tagVersion); // garantindo o versionmanto do arquivo caso ainda nao exista svn.Add("REVISION.txt"); } //ok = svn.Commit("pack.info pack.conf REVISION.txt", "Atualizando informação de versão da tag recém criada."); ok = svn.Commit("REVISION.txt", "Atualizando informação de versão da tag recém criada."); if (!ok) { return(Prompt.PrintCannotContinue()); } return(true); } catch (Exception ex) { Prompt.PrintFault(ex); return(false); } finally { Directory.SetCurrentDirectory(curDir); try { PathEx.DeleteFolder(tmpDir); } catch { // Nada a fazer. } } }