PageRenderTime 24ms CodeModel.GetById 0ms RepoModel.GetById 1ms app.codeStats 0ms

/opup/src/main/scala/com/atlassian/labs/opup/task/CreateUpgradeBranchesTask.scala

https://bitbucket.org/jwalton/opup
Scala | 143 lines | 104 code | 37 blank | 2 comment | 6 complexity | 1288ba0d2d797a8572aece2caa403317 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. package com.atlassian.labs.opup.task
  2. import java.io.BufferedWriter
  3. import java.io.File
  4. import java.io.FileWriter
  5. import java.util.ArrayList
  6. import java.util.HashMap
  7. import scala.collection.JavaConverters.asScalaBufferConverter
  8. import scala.collection.JavaConverters.asScalaSetConverter
  9. import scala.collection.JavaConverters.mapAsScalaMapConverter
  10. import scala.collection.mutable.ListBuffer
  11. import org.apache.http.client.CredentialsProvider
  12. import org.apache.maven.plugin.logging.Log
  13. import org.eclipse.jgit.api.Git
  14. import org.eclipse.jgit.lib.ObjectId
  15. import org.eclipse.jgit.lib.RepositoryBuilder
  16. import com.atlassian.labs.opup.UpgradeBranchCreator
  17. import com.atlassian.labs.opup.VersionChanger
  18. import com.atlassian.labs.opup.HttpCache
  19. import com.atlassian.labs.opup.UpgradeAdvice
  20. import com.atlassian.labs.opup.VersionClient
  21. class CreateUpgradeBranchesTask(upgradeStrategy: String, httpCache: HttpCache,
  22. advice: UpgradeAdvice, versionClient: VersionClient, gitWorkingDirectory: File)
  23. extends AbstractOpUpTask(upgradeStrategy, httpCache, advice, versionClient, gitWorkingDirectory)
  24. {
  25. var poms: Seq[File] = _
  26. def generateUpgradeBranches(reportFile: File, log: Log): Map[ObjectId, VersionChanger] = {
  27. val (poms, currentVersions, currentProperties, upgradeSchedule) = generateReport(reportFile)
  28. this.poms = poms
  29. val changerForEverything = new VersionChanger()
  30. changerForEverything.setKey("all")
  31. val allChanges = new HashMap[String, Seq[VersionChanger]]();
  32. val changeKeys = new ArrayList[String]();
  33. for (e <- upgradeSchedule.getNewVersions().entrySet().asScala)
  34. {
  35. val sb = new StringBuilder(e.getKey());
  36. sb.append(',');
  37. sb.append(currentVersions.get(e.getKey()).get)
  38. val branchName = "artifact-" + (e.getKey().replaceAll("[^a-zA-Z0-9]", "_"));
  39. val cl = new ListBuffer[VersionChanger]();
  40. for (v <- e.getValue.asScala)
  41. {
  42. val changer = new VersionChanger();
  43. changer.setNewVersion(e.getKey(), v);
  44. changer.setKey(e.getKey() + ":" + v);
  45. changerForEverything.setNewVersion(e.getKey(), v);
  46. cl += changer
  47. sb.append(',');
  48. sb.append(v);
  49. }
  50. allChanges.put(branchName, cl);
  51. changeKeys.add(sb.toString());
  52. }
  53. for (e <- upgradeSchedule.getNewProperties().entrySet().asScala)
  54. {
  55. val sb = new StringBuilder(e.getKey());
  56. sb.append(',');
  57. sb.append(currentProperties.get(e.getKey()).get)
  58. val branchName = "property-" + e.getKey();
  59. val cl = new ListBuffer[VersionChanger]();
  60. for (v <- e.getValue.asScala)
  61. {
  62. val changer = new VersionChanger();
  63. changer.setNewPropertyValue(e.getKey(), v);
  64. changer.setKey(e.getKey() + ":" + v);
  65. changerForEverything.setNewPropertyValue(e.getKey(), v);
  66. cl += changer
  67. sb.append(',');
  68. sb.append(v);
  69. }
  70. allChanges.put(branchName, cl);
  71. changeKeys.add(sb.toString());
  72. }
  73. allChanges.put("all", Seq(changerForEverything));
  74. /* Create the branches */
  75. val repo = new RepositoryBuilder().setWorkTree(gitWorkingDirectory).build();
  76. val git = new Git(repo);
  77. val upgradeBranchCreator = new UpgradeBranchCreator(git)
  78. upgradeBranchCreator.checkout("master")
  79. val logFunc = (s: String) => log.info(s)
  80. upgradeBranchCreator.deleteAllOpupBranches(logFunc)
  81. val commits = upgradeBranchCreator.createBranches(
  82. allChanges.asScala.toMap,
  83. poms,
  84. logFunc)
  85. upgradeBranchCreator.checkout("master")
  86. val commitKeys = for ((cmtId, changer) <- commits) yield changer.getKey() + "," + cmtId.getName()
  87. /* Write out the state */
  88. writeLines("target/opup/change.keys", changeKeys.asScala);
  89. writeLines("target/opup/commit.keys", commitKeys);
  90. return commits
  91. }
  92. def writeLines(filename: String, lines: Iterable[String]) = {
  93. val bw = new BufferedWriter(new FileWriter(filename));
  94. try
  95. {
  96. for (l <- lines) {
  97. bw.write(l)
  98. bw.newLine()
  99. }
  100. }
  101. finally
  102. {
  103. bw.close();
  104. }
  105. }
  106. }