From 78da8c743fc56943484eb38dcd319f8eb65b73cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 8 Nov 2018 16:42:45 +0100 Subject: [PATCH] Put repository in git context to create proper exceptions --- .../sonia/scm/repository/spi/GitContext.java | 20 +++++++++++++------ .../scm/repository/spi/GitMergeCommand.java | 14 ++++++------- .../spi/GitRepositoryServiceProvider.java | 2 +- .../spi/SimpleGitWorkdirFactory.java | 4 ++-- .../spi/AbstractGitCommandTestBase.java | 2 +- .../spi/GitIncomingCommandTest.java | 4 ++-- .../spi/GitModificationsCommandTest.java | 8 ++++---- .../spi/GitOutgoingCommandTest.java | 4 ++-- .../repository/spi/GitPushCommandTest.java | 2 +- 9 files changed, 34 insertions(+), 26 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContext.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContext.java index a10e16e200..b0dd8f1fd6 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContext.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContext.java @@ -38,6 +38,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitUtil; +import sonia.scm.repository.Repository; //~--- JDK imports ------------------------------------------------------------ @@ -65,10 +66,12 @@ public class GitContext implements Closeable * * * @param directory + * @param repository */ - public GitContext(File directory) + public GitContext(File directory, Repository repository) { this.directory = directory; + this.repository = repository; } //~--- methods -------------------------------------------------------------- @@ -82,8 +85,8 @@ public class GitContext implements Closeable { logger.trace("close git repository {}", directory); - GitUtil.close(repository); - repository = null; + GitUtil.close(gitRepository); + gitRepository = null; } /** @@ -96,13 +99,17 @@ public class GitContext implements Closeable */ public org.eclipse.jgit.lib.Repository open() throws IOException { - if (repository == null) + if (gitRepository == null) { logger.trace("open git repository {}", directory); - repository = GitUtil.open(directory); + gitRepository = GitUtil.open(directory); } + return gitRepository; + } + + Repository getRepository() { return repository; } @@ -114,7 +121,8 @@ public class GitContext implements Closeable /** Field description */ private final File directory; + private final Repository repository; /** Field description */ - private org.eclipse.jgit.lib.Repository repository; + private org.eclipse.jgit.lib.Repository gitRepository; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 05541e8295..5e9eac5230 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -45,7 +45,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand logger.debug("cloned repository to folder {}", repository.getWorkTree()); return new MergeWorker(repository, request).merge(); } catch (IOException e) { - throw new InternalRepositoryException("could not clone repository for merge", e); + throw new InternalRepositoryException(context.getRepository(), "could not clone repository for merge", e); } } @@ -56,11 +56,11 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(repository, true); return new MergeDryRunCommandResult(merger.merge(repository.resolve(request.getBranchToMerge()), repository.resolve(request.getTargetBranch()))); } catch (IOException e) { - throw new InternalRepositoryException("could not clone repository for merge", e); + throw new InternalRepositoryException(context.getRepository(), "could not clone repository for merge", e); } } - private static class MergeWorker { + private class MergeWorker { private final String target; private final String toMerge; @@ -92,7 +92,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand try { clone.checkout().setName(target).call(); } catch (GitAPIException e) { - throw new InternalRepositoryException("could not checkout target branch for merge: " + target, e); + throw new InternalRepositoryException(context.getRepository(), "could not checkout target branch for merge: " + target, e); } } @@ -104,7 +104,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand .include(toMerge, resolveRevision(toMerge)) .call(); } catch (GitAPIException e) { - throw new InternalRepositoryException("could not merge branch " + toMerge + " into " + target, e); + throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + toMerge + " into " + target, e); } return result; } @@ -118,7 +118,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand .setMessage(MessageFormat.format(determineMessageTemplate(), toMerge, target)) .call(); } catch (GitAPIException e) { - throw new InternalRepositoryException("could not commit merge between branch " + toMerge + " and " + target, e); + throw new InternalRepositoryException(context.getRepository(), "could not commit merge between branch " + toMerge + " and " + target, e); } } @@ -147,7 +147,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand try { clone.push().call(); } catch (GitAPIException e) { - throw new InternalRepositoryException("could not push merged branch " + toMerge + " to origin", e); + throw new InternalRepositoryException(context.getRepository(), "could not push merged branch " + toMerge + " to origin", e); } logger.debug("pushed merged branch {}", target); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java index a0a3074014..bda0d87b21 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java @@ -73,7 +73,7 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider public GitRepositoryServiceProvider(GitRepositoryHandler handler, Repository repository) { this.handler = handler; this.repository = repository; - this.context = new GitContext(handler.getDirectory(repository)); + this.context = new GitContext(handler.getDirectory(repository), repository); } //~--- methods -------------------------------------------------------------- diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java index a8a54d3c0c..22fce5f330 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java @@ -33,9 +33,9 @@ public class SimpleGitWorkdirFactory implements GitWorkdirFactory { Repository clone = cloneRepository(gitContext.getDirectory(), createNewWorkdir()); return new WorkingCopy(clone, this::close); } catch (GitAPIException e) { - throw new InternalRepositoryException("could not clone working copy of repository", e); + throw new InternalRepositoryException(gitContext.getRepository(), "could not clone working copy of repository", e); } catch (IOException e) { - throw new InternalRepositoryException("could not create temporary directory for clone of repository", e); + throw new InternalRepositoryException(gitContext.getRepository(), "could not create temporary directory for clone of repository", e); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTestBase.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTestBase.java index 7d56db00d7..0b3c1d6e9d 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTestBase.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTestBase.java @@ -65,7 +65,7 @@ public class AbstractGitCommandTestBase extends ZippedRepositoryTestBase { if (context == null) { - context = new GitContext(repositoryDirectory); + context = new GitContext(repositoryDirectory, repository); } return context; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java index e3d36601e7..9c4c8573ab 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java @@ -105,7 +105,7 @@ public class GitIncomingCommandTest commit(outgoing, "added a"); - GitPullCommand pull = new GitPullCommand(handler, new GitContext(incomingDirectory), incomingRepository); + GitPullCommand pull = new GitPullCommand(handler, new GitContext(incomingDirectory, null), incomingRepository); PullCommandRequest req = new PullCommandRequest(); req.setRemoteRepository(outgoingRepository); pull.pull(req); @@ -191,7 +191,7 @@ public class GitIncomingCommandTest */ private GitIncomingCommand createCommand() { - return new GitIncomingCommand(handler, new GitContext(incomingDirectory), + return new GitIncomingCommand(handler, new GitContext(incomingDirectory, null), incomingRepository); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java index fb982f6f0c..41a516a124 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java @@ -18,8 +18,8 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase { @Before public void init() { - incomingModificationsCommand = new GitModificationsCommand(new GitContext(incomingDirectory), incomingRepository); - outgoingModificationsCommand = new GitModificationsCommand(new GitContext(outgoingDirectory), outgoingRepository); + incomingModificationsCommand = new GitModificationsCommand(new GitContext(incomingDirectory, null), incomingRepository); + outgoingModificationsCommand = new GitModificationsCommand(new GitContext(outgoingDirectory, null), outgoingRepository); } @Test @@ -63,12 +63,12 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase { } void pushOutgoingAndPullIncoming() throws IOException { - GitPushCommand cmd = new GitPushCommand(handler, new GitContext(outgoingDirectory), + GitPushCommand cmd = new GitPushCommand(handler, new GitContext(outgoingDirectory, null), outgoingRepository); PushCommandRequest request = new PushCommandRequest(); request.setRemoteRepository(incomingRepository); cmd.push(request); - GitPullCommand pullCommand = new GitPullCommand(handler, new GitContext(incomingDirectory), + GitPullCommand pullCommand = new GitPullCommand(handler, new GitContext(incomingDirectory, null), incomingRepository); PullCommandRequest pullRequest = new PullCommandRequest(); pullRequest.setRemoteRepository(incomingRepository); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java index 3510650fb4..f51c4a94eb 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java @@ -106,7 +106,7 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase commit(outgoing, "added a"); GitPushCommand push = new GitPushCommand(handler, - new GitContext(outgoingDirectory), + new GitContext(outgoingDirectory, null), outgoingRepository); PushCommandRequest req = new PushCommandRequest(); @@ -161,7 +161,7 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase */ private GitOutgoingCommand createCommand() { - return new GitOutgoingCommand(handler, new GitContext(outgoingDirectory), + return new GitOutgoingCommand(handler, new GitContext(outgoingDirectory, null), outgoingRepository); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java index 4f3d7e933d..17c06556b8 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java @@ -99,7 +99,7 @@ public class GitPushCommandTest extends AbstractRemoteCommandTestBase */ private GitPushCommand createCommand() { - return new GitPushCommand(handler, new GitContext(outgoingDirectory), + return new GitPushCommand(handler, new GitContext(outgoingDirectory, null), outgoingRepository); } }