/src/main/java/com/atlassian/bamboo/plugins/git/GitMavenPomAccessor.java

https://bitbucket.org/andsliz/bamboo-git-plugin · Java · 97 lines · 78 code · 11 blank · 8 comment · 5 complexity · fe8f4ab61b4190ee0df3e2b2090b71a7 MD5 · raw file

  1. package com.atlassian.bamboo.plugins.git;
  2. import com.atlassian.bamboo.build.logger.NullBuildLogger;
  3. import com.atlassian.bamboo.repository.MavenPomAccessorAbstract;
  4. import com.atlassian.bamboo.repository.RepositoryException;
  5. import com.atlassian.bamboo.ssh.SshProxyService;
  6. import com.atlassian.sal.api.message.I18nResolver;
  7. import org.apache.commons.lang.StringUtils;
  8. import org.apache.log4j.Logger;
  9. import org.eclipse.jgit.lib.Constants;
  10. import org.jetbrains.annotations.NotNull;
  11. import org.jetbrains.annotations.Nullable;
  12. import java.io.File;
  13. public class GitMavenPomAccessor extends MavenPomAccessorAbstract<GitRepository>
  14. {
  15. private static final Logger log = Logger.getLogger(GitRepository.class);
  16. // ------------------------------------------------------------------------------------------------------- Constants
  17. public static final String POM_XML = "pom.xml";
  18. // ------------------------------------------------------------------------------------------------- Type Properties
  19. private final GitRepository repository;
  20. private String pathToPom = POM_XML;
  21. @Nullable
  22. private final String gitCapability;
  23. // ---------------------------------------------------------------------------------------------------- Dependencies
  24. private final SshProxyService sshProxyService;
  25. private final I18nResolver i18nResolver;
  26. // ---------------------------------------------------------------------------------------------------- Constructors
  27. // ----------------------------------------------------------------------------------------------- Interface Methods
  28. // -------------------------------------------------------------------------------------------------- Action Methods
  29. // -------------------------------------------------------------------------------------------------- Public Methods
  30. // -------------------------------------------------------------------------------------- Basic Accessors / Mutators
  31. protected GitMavenPomAccessor(GitRepository repository,
  32. @NotNull final SshProxyService sshProxyService,
  33. @NotNull final I18nResolver i18nResolver,
  34. @Nullable String gitCapability)
  35. {
  36. super(repository);
  37. this.repository = repository;
  38. this.sshProxyService = sshProxyService;
  39. this.i18nResolver = i18nResolver;
  40. this.gitCapability = gitCapability;
  41. }
  42. GitMavenPomAccessor withPath(String pathToProjectRoot)
  43. {
  44. if (StringUtils.isNotBlank(pathToProjectRoot))
  45. {
  46. if (pathToProjectRoot.contains(".."))
  47. {
  48. throw new IllegalArgumentException(i18nResolver.getText("repository.git.messages.invalidPomPath"));
  49. }
  50. this.pathToPom = pathToProjectRoot;
  51. }
  52. return this;
  53. }
  54. @NotNull
  55. public String getMavenScmProviderKey()
  56. {
  57. return "git";
  58. }
  59. public void parseMavenScmUrl(@NotNull String mavenScmUrl) throws IllegalArgumentException
  60. {
  61. repository.setAccessData(GitRepositoryAccessData.builder(repository.getAccessData()).repositoryUrl(mavenScmUrl).build());
  62. }
  63. @NotNull
  64. public File checkoutMavenPom(@NotNull File destinationPath) throws RepositoryException
  65. {
  66. log.info("checkoutMavenPom to: " + destinationPath);
  67. GitOperationHelper helper = new JGitOperationHelper(repository.getSubstitutedAccessData(), new NullBuildLogger(), i18nResolver);
  68. String targetRevision = helper.obtainLatestRevision();
  69. helper.fetch(destinationPath, targetRevision, true);
  70. helper.checkout(null, destinationPath, targetRevision, helper.getRevisionIfExists(destinationPath, Constants.HEAD));
  71. final File pomLocation = new File(destinationPath, pathToPom);
  72. if (pomLocation.isFile())
  73. {
  74. return pomLocation;
  75. }
  76. if (pomLocation.isDirectory())
  77. {
  78. File candidate = new File(pomLocation, POM_XML);
  79. if (candidate.isFile())
  80. {
  81. return candidate;
  82. }
  83. }
  84. throw new RepositoryException(i18nResolver.getText("repository.git.messages.cannotFindPom", pathToPom));
  85. }
  86. }