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