James Moger
2012-02-03 b86562942b1d4a498e337b28201e0db308fa51c8
Setting to control display/serving non-bare repositories (issue-49)
5 files modified
47 ■■■■■ changed files
distrib/gitblit.properties 11 ●●●●● patch | view | raw | blame | history
docs/04_releases.mkd 2 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlit.java 7 ●●●●● patch | view | raw | blame | history
src/com/gitblit/utils/JGitUtils.java 25 ●●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/JGitUtilsTest.java 2 ●●● patch | view | raw | blame | history
distrib/gitblit.properties
@@ -2,7 +2,9 @@
# Git Servlet Settings
#
# Base folder for repositories
# Base folder for repositories.
# This folder may contain bare and non-bare repositories but Gitblit will only
# allow you to push to bare repositories.
# Use forward slashes even on Windows!!
# e.g. c:/gitrepos
#
@@ -28,6 +30,13 @@
# SINCE 0.5.0
git.enableGitServlet = true
# Only serve/display bare repositories.
# If there are non-bare repositories in git.repositoriesFolder and this setting
# is true, they will be excluded from the ui.
#
# SINCE 0.9.0
git.onlyAccessBareRepositories = false
#
# Groovy Integration
#
docs/04_releases.mkd
@@ -11,6 +11,8 @@
#### additions
- New setting to prevent display/serving non-bare repositories
    **New:** *git.onlyAccessBareRepositories = false*
- Allow relinking HEAD to a branch or a tag (Github/plm)
#### fixes 
src/com/gitblit/GitBlit.java
@@ -123,8 +123,6 @@
    private File repositoriesFolder;
    private boolean exportAll = true;
    private IUserService userService;
    private IStoredSettings settings;
@@ -642,7 +640,8 @@
     * @return list of all repositories
     */
    public List<String> getRepositoryList() {
        return JGitUtils.getRepositoryList(repositoriesFolder, exportAll,
        return JGitUtils.getRepositoryList(repositoriesFolder,
                settings.getBoolean(Keys.git.onlyAccessBareRepositories, false),
                settings.getBoolean(Keys.git.searchRepositoriesSubfolders, true));
    }
@@ -1767,7 +1766,7 @@
        this.settings = settings;
        repositoriesFolder = getRepositoriesFolder();
        logger.info("Git repositories folder " + repositoriesFolder.getAbsolutePath());
        repositoryResolver = new FileResolver<Void>(repositoriesFolder, exportAll);
        repositoryResolver = new FileResolver<Void>(repositoriesFolder, true);
        serverStatus = new ServerStatus(isGO());
        String realm = settings.getString(Keys.realm.userService, "users.properties");
        IUserService loginService = null;
src/com/gitblit/utils/JGitUtils.java
@@ -290,21 +290,21 @@
     * Returns a list of repository names in the specified folder.
     * 
     * @param repositoriesFolder
     * @param exportAll
     *            if true, all repositories are listed. If false only the
     *            repositories with a "git-daemon-export-ok" file are included
     * @param onlyBare
     *            if true, only bare repositories repositories are listed. If
     *            false all repositories are included.
     * @param searchSubfolders
     *            recurse into subfolders to find grouped repositories
     * @return list of repository names
     */
    public static List<String> getRepositoryList(File repositoriesFolder, boolean exportAll,
    public static List<String> getRepositoryList(File repositoriesFolder, boolean onlyBare,
            boolean searchSubfolders) {
        List<String> list = new ArrayList<String>();
        if (repositoriesFolder == null || !repositoriesFolder.exists()) {
            return list;
        }
        list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder,
                exportAll, searchSubfolders));
                onlyBare, searchSubfolders));
        StringUtils.sortRepositorynames(list);
        return list;
    }
@@ -316,24 +316,21 @@
     *            basePath is stripped from the repository name as repositories
     *            are relative to this path
     * @param searchFolder
     * @param exportAll
     *            if true all repositories are listed. If false only the
     *            repositories with a "git-daemon-export-ok" file are included
     * @param onlyBare
     *            if true only bare repositories will be listed. if false all
     *            repositories are included.
     * @param searchSubfolders
     *            recurse into subfolders to find grouped repositories
     * @return
     */
    private static List<String> getRepositoryList(String basePath, File searchFolder,
            boolean exportAll, boolean searchSubfolders) {
            boolean onlyBare, boolean searchSubfolders) {
        List<String> list = new ArrayList<String>();
        for (File file : searchFolder.listFiles()) {
            if (file.isDirectory()) {
                File gitDir = FileKey.resolve(new File(searchFolder, file.getName()), FS.DETECTED);
                if (gitDir != null) {
                    boolean exportRepository = exportAll
                            || new File(gitDir, "git-daemon-export-ok").exists();
                    if (!exportRepository) {
                    if (onlyBare && gitDir.getName().equals(".git")) {
                        continue;
                    }
                    // determine repository name relative to base path
@@ -342,7 +339,7 @@
                    list.add(repository);
                } else if (searchSubfolders && file.canRead()) {
                    // look for repositories in subfolders
                    list.addAll(getRepositoryList(basePath, file, exportAll, searchSubfolders));
                    list.addAll(getRepositoryList(basePath, file, onlyBare, searchSubfolders));
                }
            }
        }
tests/com/gitblit/tests/JGitUtilsTest.java
@@ -66,7 +66,7 @@
    @Test
    public void testFindRepositories() {
        List<String> list = JGitUtils.getRepositoryList(null, true, true);
        List<String> list = JGitUtils.getRepositoryList(null, false, true);
        assertEquals(0, list.size());
        list.addAll(JGitUtils.getRepositoryList(new File("DoesNotExist"), true, true));
        assertEquals(0, list.size());