/* * Copyright 2013 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.manager; import java.io.File; import java.util.Collection; import java.util.Date; import java.util.List; import org.eclipse.jgit.lib.Repository; import com.gitblit.GitBlitException; import com.gitblit.models.ForkModel; import com.gitblit.models.Metric; import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.RepositoryModel; import com.gitblit.models.SearchResult; import com.gitblit.models.UserModel; public interface IRepositoryManager extends IManager { /** * Returns the path of the repositories folder. This method checks to see if * Gitblit is running on a cloud service and may return an adjusted path. * * @return the repositories folder path * @since 1.4.0 */ File getRepositoriesFolder(); /** * Returns the path of the hooks folder. This method checks to see if * Gitblit is running on a cloud service and may return an adjusted path. * * @return the Groovy hook scripts folder path * @since 1.4.0 */ File getHooksFolder(); /** * Returns the path of the grapes folder. This method checks to see if * Gitblit is running on a cloud service and may return an adjusted path. * * @return the Groovy grapes folder path * @since 1.4.0 */ File getGrapesFolder(); /** * Returns the most recent change date of any repository served by Gitblit. * * @return a date * @since 1.4.0 */ Date getLastActivityDate(); /** * Returns the effective list of permissions for this user, taking into account * team memberships, ownerships. * * @param user * @return the effective list of permissions for the user * @since 1.4.0 */ List<RegistrantAccessPermission> getUserAccessPermissions(UserModel user); /** * Returns the list of users and their access permissions for the specified * repository including permission source information such as the team or * regular expression which sets the permission. * * @param repository * @return a list of RegistrantAccessPermissions * @since 1.4.0 */ List<RegistrantAccessPermission> getUserAccessPermissions(RepositoryModel repository); /** * Sets the access permissions to the specified repository for the specified users. * * @param repository * @param permissions * @return true if the user models have been updated * @since 1.4.0 */ boolean setUserAccessPermissions(RepositoryModel repository, Collection<RegistrantAccessPermission> permissions); /** * Returns the list of all users who have an explicit access permission * for the specified repository. * * @see IUserService.getUsernamesForRepositoryRole(String) * @param repository * @return list of all usernames that have an access permission for the repository * @since 1.4.0 */ List<String> getRepositoryUsers(RepositoryModel repository); /** * Returns the list of teams and their access permissions for the specified * repository including the source of the permission such as the admin flag * or a regular expression. * * @param repository * @return a list of RegistrantAccessPermissions * @since 1.4.0 */ List<RegistrantAccessPermission> getTeamAccessPermissions(RepositoryModel repository); /** * Sets the access permissions to the specified repository for the specified teams. * * @param repository * @param permissions * @return true if the team models have been updated * @since 1.4.0 */ boolean setTeamAccessPermissions(RepositoryModel repository, Collection<RegistrantAccessPermission> permissions); /** * Returns the list of all teams who have an explicit access permission for * the specified repository. * * @see IUserService.getTeamnamesForRepositoryRole(String) * @param repository * @return list of all teamnames with explicit access permissions to the repository * @since 1.4.0 */ List<String> getRepositoryTeams(RepositoryModel repository); /** * Adds the repository to the list of cached repositories if Gitblit is * configured to cache the repository list. * * @param model * @since 1.4.0 */ void addToCachedRepositoryList(RepositoryModel model); /** * Resets the repository list cache. * * @since 1.4.0 * */ void resetRepositoryListCache(); /** * Reset all caches for this repository. * * @param repositoryName * @since 1.5.1 */ void resetRepositoryCache(String repositoryName); /** * Returns the list of all repositories available to Gitblit. This method * does not consider user access permissions. * * @return list of all repositories * @since 1.4.0 */ List<String> getRepositoryList(); /** * Returns the JGit repository for the specified name. * * @param repositoryName * @return repository or null * @since 1.4.0 */ Repository getRepository(String repositoryName); /** * Returns the JGit repository for the specified name. * * @param repositoryName * @param logError * @return repository or null * @since 1.4.0 */ Repository getRepository(String repositoryName, boolean logError); /** * Returns the list of all repository models. * * @return list of all repository models * @since 1.6.1 */ List<RepositoryModel> getRepositoryModels(); /** * Returns the list of repository models that are accessible to the user. * * @param user * @return list of repository models accessible to user * @since 1.4.0 */ List<RepositoryModel> getRepositoryModels(UserModel user); /** * Returns a repository model if the repository exists and the user may * access the repository. * * @param user * @param repositoryName * @return repository model or null * @since 1.4.0 */ RepositoryModel getRepositoryModel(UserModel user, String repositoryName); /** * Returns the repository model for the specified repository. This method * does not consider user access permissions. * * @param repositoryName * @return repository model or null * @since 1.4.0 */ RepositoryModel getRepositoryModel(String repositoryName); /** * Returns the star count of the repository. * * @param repository * @return the star count * @since 1.4.0 */ long getStarCount(RepositoryModel repository); /** * Determines if this server has the requested repository. * * @param n * @return true if the repository exists * @since 1.4.0 */ boolean hasRepository(String repositoryName); /** * Determines if this server has the requested repository. * * @param n * @param caseInsensitive * @return true if the repository exists * @since 1.4.0 */ boolean hasRepository(String repositoryName, boolean caseSensitiveCheck); /** * Determines if the specified user has a fork of the specified origin * repository. * * @param username * @param origin * @return true the if the user has a fork * @since 1.4.0 */ boolean hasFork(String username, String origin); /** * Gets the name of a user's fork of the specified origin * repository. * * @param username * @param origin * @return the name of the user's fork, null otherwise * @since 1.4.0 */ String getFork(String username, String origin); /** * 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 * @since 1.4.0 */ ForkModel getForkNetwork(String repository); /** * Updates the last changed fields and optionally calculates the size of the * repository. Gitblit caches the repository sizes to reduce the performance * penalty of recursive calculation. The cache is updated if the repository * has been changed since the last calculation. * * @param model * @return size in bytes of the repository * @since 1.4.0 */ long updateLastChangeFields(Repository r, RepositoryModel model); /** * Returns the metrics for the default branch of the specified repository. * This method builds a metrics cache. The cache is updated if the * repository is updated. A new copy of the metrics list is returned on each * call so that modifications to the list are non-destructive. * * @param model * @param repository * @return a new array list of metrics * @since 1.4.0 */ List<Metric> getRepositoryDefaultMetrics(RepositoryModel model, Repository repository); /** * Creates/updates the repository model keyed by reopsitoryName. Saves all * repository settings in .git/config. This method allows for renaming * repositories and will update user access permissions accordingly. * * All repositories created by this method are bare and automatically have * .git appended to their names, which is the standard convention for bare * repositories. * * @param repositoryName * @param repository * @param isCreate * @throws GitBlitException * @since 1.4.0 */ void updateRepositoryModel(String repositoryName, RepositoryModel repository, boolean isCreate) throws GitBlitException; /** * Updates the Gitblit configuration for the specified repository. * * @param r * the Git repository * @param repository * the Gitblit repository model * @since 1.4.0 */ void updateConfiguration(Repository r, RepositoryModel repository); /** * Returns true if the repository can be deleted. * * @param model * @return true if the repository can be deleted * @since 1.6.0 */ boolean canDelete(RepositoryModel model); /** * Deletes the repository from the file system and removes the repository * permission from all repository users. * * @param model * @return true if successful * @since 1.4.0 */ boolean deleteRepositoryModel(RepositoryModel model); /** * Deletes the repository from the file system and removes the repository * permission from all repository users. * * @param repositoryName * @return true if successful * @since 1.4.0 */ boolean deleteRepository(String repositoryName); /** * Returns the list of all Groovy push hook scripts. Script files must have * .groovy extension * * @return list of available hook scripts * @since 1.4.0 */ List<String> getAllScripts(); /** * Returns the list of pre-receive scripts the repository inherited from the * global settings and team affiliations. * * @param repository * if null only the globally specified scripts are returned * @return a list of scripts * @since 1.4.0 */ List<String> getPreReceiveScriptsInherited(RepositoryModel repository); /** * Returns the list of all available Groovy pre-receive push hook scripts * that are not already inherited by the repository. Script files must have * .groovy extension * * @param repository * optional parameter * @return list of available hook scripts * @since 1.4.0 */ List<String> getPreReceiveScriptsUnused(RepositoryModel repository); /** * Returns the list of post-receive scripts the repository inherited from * the global settings and team affiliations. * * @param repository * if null only the globally specified scripts are returned * @return a list of scripts * @since 1.4.0 */ List<String> getPostReceiveScriptsInherited(RepositoryModel repository); /** * Returns the list of unused Groovy post-receive push hook scripts that are * not already inherited by the repository. Script files must have .groovy * extension * * @param repository * optional parameter * @return list of available hook scripts * @since 1.4.0 */ List<String> getPostReceiveScriptsUnused(RepositoryModel repository); /** * Search the specified repositories using the Lucene query. * * @param query * @param page * @param pageSize * @param repositories * @return a list of search results * @since 1.4.0 */ List<SearchResult> search(String query, int page, int pageSize, List<String> repositories); /** * * @return true if we are running the gc executor * @since 1.4.0 */ boolean isCollectingGarbage(); /** * Returns true if Gitblit is actively collecting garbage in this repository. * * @param repositoryName * @return true if actively collecting garbage * @since 1.4.0 */ boolean isCollectingGarbage(String repositoryName); /** * Ensures that all cached repositories are completely closed and their resources * are properly released. * @since 1.4.0 */ void closeAll(); /** * Ensures that a cached repository is completely closed and it's resources * are properly released. * @since 1.4.0 */ void close(String repository); /** * Returns true if the repository is idle (not being accessed). * * @param repository * @return true if the repository is idle * @since 1.4.0 */ boolean isIdle(Repository repository); }