From 394af52f9aa150f89092acf830d96b6fee27ba72 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 03 Oct 2012 09:19:54 -0400 Subject: [PATCH] Hide some repository page header elements on phones and tablets --- src/com/gitblit/GitBlit.java | 98 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 66 insertions(+), 32 deletions(-) diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index f86c66a..1ebc4c7 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); + 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 @@ -2604,44 +2637,45 @@ * * @param repository * @param user - * @return true, if successful + * @return the repository model of the fork, if successful + * @throws GitBlitException */ - public boolean fork(RepositoryModel repository, UserModel user) { + public RepositoryModel fork(RepositoryModel repository, UserModel user) throws GitBlitException { String cloneName = MessageFormat.format("~{0}/{1}.git", user.username, StringUtils.stripDotGit(StringUtils.getLastPathElement(repository.name))); String fromUrl = MessageFormat.format("file://{0}/{1}", repositoriesFolder.getAbsolutePath(), repository.name); + + // clone the repository try { - // clone the repository JGitUtils.cloneRepository(repositoriesFolder, cloneName, fromUrl, true, null); - - // create a Gitblit repository model for the clone - RepositoryModel cloneModel = repository.cloneAs(cloneName); - cloneModel.owner = user.username; - updateRepositoryModel(cloneName, cloneModel, false); - - if (AuthorizationControl.NAMED.equals(cloneModel.authorizationControl)) { - // add the owner of the source repository to the clone's access list - if (!StringUtils.isEmpty(repository.owner)) { - UserModel owner = getUserModel(repository.owner); - if (owner != null) { - owner.repositories.add(cloneName); - updateUserModel(owner.username, owner, false); - } - } - - // inherit origin's access lists - List<String> users = getRepositoryUsers(repository); - setRepositoryUsers(cloneModel, users); - - List<String> teams = getRepositoryTeams(repository); - setRepositoryTeams(cloneModel, teams); - } - - // add this clone to the cached model - addToCachedRepositoryList(cloneModel.name, cloneModel); - return true; } catch (Exception e) { - logger.error("failed to fork", e); + throw new GitBlitException(e); } - return false; + + // create a Gitblit repository model for the clone + RepositoryModel cloneModel = repository.cloneAs(cloneName); + cloneModel.owner = user.username; + updateRepositoryModel(cloneName, cloneModel, false); + + if (AuthorizationControl.NAMED.equals(cloneModel.authorizationControl)) { + // add the owner of the source repository to the clone's access list + if (!StringUtils.isEmpty(repository.owner)) { + UserModel owner = getUserModel(repository.owner); + if (owner != null) { + owner.repositories.add(cloneName); + updateUserModel(owner.username, owner, false); + } + } + + // inherit origin's access lists + List<String> users = getRepositoryUsers(repository); + setRepositoryUsers(cloneModel, users); + + List<String> teams = getRepositoryTeams(repository); + setRepositoryTeams(cloneModel, teams); + } + + // add this clone to the cached model + addToCachedRepositoryList(cloneModel.name, cloneModel); + return cloneModel; } } -- Gitblit v1.9.1