mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-01-01 21:29:47 +01:00
Put repository in git context to create proper exceptions
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 --------------------------------------------------------------
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user