From 9d29bcd7438b359ff48e099bbc17a583c6715af6 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 18 Jan 2012 19:14:01 +0100 Subject: [PATCH] added api to fetch a single changeset --- .../sonia/scm/repository/ChangesetViewer.java | 12 ++ .../scm/repository/ChangesetViewerUtil.java | 138 +++++++++++++++++- .../scm/repository/GitChangesetViewer.java | 14 ++ .../scm/repository/GitRepositoryHandler.java | 1 - .../scm/repository/HgChangesetViewer.java | 14 ++ .../scm/repository/SvnChangesetViewer.java | 14 ++ 6 files changed, 188 insertions(+), 5 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/ChangesetViewer.java b/scm-core/src/main/java/sonia/scm/repository/ChangesetViewer.java index c862cc52b6..6d7a886fc9 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ChangesetViewer.java +++ b/scm-core/src/main/java/sonia/scm/repository/ChangesetViewer.java @@ -44,6 +44,18 @@ import java.io.IOException; public interface ChangesetViewer { + /** + * Method description + * + * + * @param revision + * + * @return + * + * @since 1.12 + */ + public Changeset getChangeset(String revision); + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/repository/ChangesetViewerUtil.java b/scm-core/src/main/java/sonia/scm/repository/ChangesetViewerUtil.java index 04aca7f5f4..c9fbaa1a32 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ChangesetViewerUtil.java +++ b/scm-core/src/main/java/sonia/scm/repository/ChangesetViewerUtil.java @@ -50,6 +50,7 @@ import sonia.scm.util.Util; import java.io.IOException; +import java.util.Arrays; import java.util.Set; /** @@ -94,6 +95,100 @@ public class ChangesetViewerUtil extends PartCacheClearHook //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param repository + * @param revision + * + * @return + * + * @since 1.12 + * + * @throws NotSupportedFeatuerException + * @throws RepositoryException + */ + public Changeset getChangeset(Repository repository, String revision) + throws RepositoryException, NotSupportedFeatuerException + { + AssertUtil.assertIsNotNull(repository); + + ChangesetViewer viewer = repositoryManager.getChangesetViewer(repository); + + if (viewer == null) + { + throw new NotSupportedFeatuerException( + "ChangesetViewer is not supported for type ".concat( + repository.getType())); + } + + Changeset changeset = null; + ChangesetViewerCacheKey key = + new ChangesetViewerCacheKey(repository.getId(), -1, -1); + ChangesetPagingResult result = cache.get(key); + + if (result == null) + { + changeset = viewer.getChangeset(revision); + + if (changeset != null) + { + callPreProcessors(changeset); + callPreProcessorFactories(repository, changeset); + result = new ChangesetPagingResult(1, Arrays.asList(changeset)); + cache.put(key, result); + } + else + { + throw new RepositoryException("could not find changeset"); + } + } + else + { + if (logger.isDebugEnabled()) + { + logger.debug("fetch changesetviewer result from cache"); + } + + changeset = result.getChangesets().get(0); + } + + return changeset; + } + + /** + * Method description + * + * + * @param repositoryId + * @param revision + * + * @return + * + * @since 1.12 + * + * @throws NotSupportedFeatuerException + * @throws RepositoryException + * @throws RepositoryNotFoundException + */ + public Changeset getChangeset(String repositoryId, String revision) + throws RepositoryNotFoundException, RepositoryException, + NotSupportedFeatuerException + { + AssertUtil.assertIsNotEmpty(repositoryId); + + Repository repository = repositoryManager.get(repositoryId); + + if (repository == null) + { + throw new RepositoryNotFoundException( + "could not find repository with id ".concat(repositoryId)); + } + + return getChangeset(repository, revision); + } + /** * Method description * @@ -316,6 +411,30 @@ public class ChangesetViewerUtil extends PartCacheClearHook } } + /** + * Method description + * + * + * @param repository + * @param c + */ + private void callPreProcessorFactories(Repository repository, Changeset c) + { + if (Util.isNotEmpty(changesetPreProcessorFactorySet)) + { + for (ChangesetPreProcessorFactory factory : + changesetPreProcessorFactorySet) + { + ChangesetPreProcessor cpp = factory.createPreProcessor(repository); + + if (cpp != null) + { + cpp.process(c); + } + } + } + } + /** * Method description * @@ -328,14 +447,25 @@ public class ChangesetViewerUtil extends PartCacheClearHook { for (Changeset c : changesets.getChangesets()) { - for (ChangesetPreProcessor cpp : changesetPreProcessorSet) - { - cpp.process(c); - } + callPreProcessors(c); } } } + /** + * Method description + * + * + * @param c + */ + private void callPreProcessors(Changeset c) + { + for (ChangesetPreProcessor cpp : changesetPreProcessorSet) + { + cpp.process(c); + } + } + //~--- inner classes -------------------------------------------------------- /** diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java index fd24bf1e64..3aaf2b5439 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java @@ -81,6 +81,20 @@ public class GitChangesetViewer implements ChangesetViewer //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param revision + * + * @return + */ + @Override + public Changeset getChangeset(String revision) + { + throw new UnsupportedOperationException("Not supported yet."); + } + /** * Method description * diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java index 314309ea73..c62839c77f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java @@ -41,7 +41,6 @@ import com.google.inject.Singleton; import org.eclipse.jgit.storage.file.FileRepository; import org.eclipse.jgit.storage.file.FileRepositoryBuilder; -import sonia.scm.NotSupportedFeatuerException; import sonia.scm.Type; import sonia.scm.io.FileSystem; import sonia.scm.plugin.ext.Extension; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgChangesetViewer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgChangesetViewer.java index 82a27ac620..13d835a966 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgChangesetViewer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgChangesetViewer.java @@ -103,6 +103,20 @@ public class HgChangesetViewer extends AbstractHgHandler //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param revision + * + * @return + */ + @Override + public Changeset getChangeset(String revision) + { + throw new UnsupportedOperationException("Not supported yet."); + } + /** * * diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnChangesetViewer.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnChangesetViewer.java index 14707be99a..af34619303 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnChangesetViewer.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnChangesetViewer.java @@ -82,6 +82,20 @@ public class SvnChangesetViewer implements ChangesetViewer //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param revision + * + * @return + */ + @Override + public Changeset getChangeset(String revision) + { + throw new UnsupportedOperationException("Not supported yet."); + } + /** * Method description *