From 22b181154c11cb250a2f7ad9eb7820a462cf3079 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 01 Oct 2012 22:29:42 -0400 Subject: [PATCH] Method to generate fork network graph --- src/com/gitblit/GitBlit.java | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index f86c66a..51c44f6 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -82,6 +82,7 @@ import com.gitblit.models.FederationModel; import com.gitblit.models.FederationProposal; import com.gitblit.models.FederationSet; +import com.gitblit.models.ForkModel; import com.gitblit.models.Metric; import com.gitblit.models.ProjectModel; import com.gitblit.models.RepositoryModel; @@ -1401,6 +1402,38 @@ // user does not have a fork return null; } + + /** + * Returns the fork network for a repository by traversing up the fork graph + * to discover the root and then down through all children of the root node. + * + * @param repository + * @return a ForkModel + */ + public ForkModel getForkNetwork(String repository) { + if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) { + // find the root + RepositoryModel model = repositoryListCache.get(repository); + while (model.originRepository != null) { + model = repositoryListCache.get(model.originRepository); + } + ForkModel root = getForkModel(model.name); + return root; + } + return null; + } + + private ForkModel getForkModel(String repository) { + RepositoryModel model = repositoryListCache.get(repository); + ForkModel fork = new ForkModel(model.originRepository, model.name); + if (!ArrayUtils.isEmpty(model.forks)) { + for (String aFork : model.forks) { + ForkModel fm = getForkModel(aFork); + fork.forks.add(fm); + } + } + return fork; + } /** * Returns the size in bytes of the repository. Gitblit caches the -- Gitblit v1.9.1