James Moger
2011-04-27 166e6a131d0693d20b3cc08f252705608d24d5f0
Improve repo folder detection. Fail gracefully on create repo error.
2 files added
6 files modified
164 ■■■■■ changed files
src/com/gitblit/GitBlit.java 110 ●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlitException.java 10 ●●●●● patch | view | raw | blame | history
src/com/gitblit/utils/JGitUtils.java 9 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/BasePage.html 6 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/EditRepositoryPage.java 8 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoriesPage.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/resources/bullet_error.png patch | view | raw | blame | history
src/com/gitblit/wicket/resources/gitblit.css 19 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlit.java
@@ -2,6 +2,7 @@
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
@@ -30,7 +31,7 @@
    private FileResolver<Void> repositoryResolver;
    private File repositories;
    private File repositoriesFolder;
    private boolean exportAll;
@@ -93,13 +94,63 @@
        userCookie.setPath("/");
        response.addCookie(userCookie);
    }
    public List<String> getRepositoryList() {
        return JGitUtils.getRepositoryList(repositoriesFolder, exportAll, storedSettings.getBoolean(Keys.git.nestedRepositories, true));
    }
    public void editRepositoryModel(RepositoryModel repository, boolean isCreate) {
    public Repository getRepository(String repositoryName) {
        Repository r = null;
        try {
            r = repositoryResolver.open(null, repositoryName);
        } catch (RepositoryNotFoundException e) {
            r = null;
            logger.error("Failed to find repository " + repositoryName);
            e.printStackTrace();
        } catch (ServiceNotEnabledException e) {
            r = null;
            e.printStackTrace();
        }
        return r;
    }
    public List<RepositoryModel> getRepositoryModels() {
        List<String> list = getRepositoryList();
        List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
        for (String repo : list) {
            RepositoryModel model = getRepositoryModel(repo);
            repositories.add(model);
        }
        return repositories;
    }
    public RepositoryModel getRepositoryModel(String repositoryName) {
        Repository r = getRepository(repositoryName);
        RepositoryModel model = new RepositoryModel();
        model.name = repositoryName;
        model.lastChange = JGitUtils.getLastChange(r);
        StoredConfig config = JGitUtils.readConfig(r);
        if (config != null) {
            model.description = config.getString("gitblit", null, "description");
            model.owner = config.getString("gitblit", null, "owner");
            model.group = config.getString("gitblit", null, "group");
            model.useTickets = config.getBoolean("gitblit", "useTickets", false);
            model.useDocs = config.getBoolean("gitblit", "useDocs", false);
            model.useRestrictedAccess = config.getBoolean("gitblit", "restrictedAccess", false);
        }
        r.close();
        return model;
    }
    public void editRepositoryModel(RepositoryModel repository, boolean isCreate) throws GitBlitException {
        Repository r = null;
        if (isCreate) {
            // create repository
            if (new File(repositoriesFolder, repository.name).exists()) {
                throw new GitBlitException(MessageFormat.format("Can not create repository {0} because it already exists.", repository.name));
            }
            // create repository
            logger.info("create repository " + repository.name);
            r = JGitUtils.createRepository(repositories, repository.name, true);
            r = JGitUtils.createRepository(repositoriesFolder, repository.name, true);
        } else {
            // load repository
            logger.info("edit repository " + repository.name);
@@ -127,59 +178,12 @@
        r.close();
    }
    public List<String> getRepositoryList() {
        return JGitUtils.getRepositoryList(repositories, exportAll, storedSettings.getBoolean(Keys.git.nestedRepositories, true));
    }
    public List<RepositoryModel> getRepositories() {
        List<String> list = getRepositoryList();
        List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
        for (String repo : list) {
            RepositoryModel model = getRepositoryModel(repo);
            repositories.add(model);
        }
        return repositories;
    }
    public Repository getRepository(String repositoryName) {
        Repository r = null;
        try {
            r = repositoryResolver.open(null, repositoryName);
        } catch (RepositoryNotFoundException e) {
            r = null;
            logger.error("Failed to find repository " + repositoryName);
            e.printStackTrace();
        } catch (ServiceNotEnabledException e) {
            r = null;
            e.printStackTrace();
        }
        return r;
    }
    public RepositoryModel getRepositoryModel(String repositoryName) {
        Repository r = getRepository(repositoryName);
        RepositoryModel model = new RepositoryModel();
        model.name = repositoryName;
        model.lastChange = JGitUtils.getLastChange(r);
        StoredConfig config = JGitUtils.readConfig(r);
        if (config != null) {
            model.description = config.getString("gitblit", null, "description");
            model.owner = config.getString("gitblit", null, "owner");
            model.group = config.getString("gitblit", null, "group");
            model.useTickets = config.getBoolean("gitblit", "useTickets", false);
            model.useDocs = config.getBoolean("gitblit", "useDocs", false);
            model.useRestrictedAccess = config.getBoolean("gitblit", "restrictedAccess", false);
        }
        r.close();
        return model;
    }
    public void setupContext(IStoredSettings settings) {
        logger.info("Setting up GitBlit context from " + settings.toString());
        this.storedSettings = settings;
        repositories = new File(settings.getString(Keys.git.repositoriesFolder, "repos"));
        repositoriesFolder = new File(settings.getString(Keys.git.repositoriesFolder, "repos"));
        exportAll = settings.getBoolean(Keys.git.exportAll, true);
        repositoryResolver = new FileResolver(repositories, exportAll);
        repositoryResolver = new FileResolver<Void>(repositoriesFolder, exportAll);
    }
    @Override
src/com/gitblit/GitBlitException.java
New file
@@ -0,0 +1,10 @@
package com.gitblit;
public class GitBlitException extends Exception {
    private static final long serialVersionUID = 1L;
    public GitBlitException(String message) {
        super(message);
    }
}
src/com/gitblit/utils/JGitUtils.java
@@ -94,9 +94,10 @@
                File gitFolder = new File(file, Constants.DOT_GIT);
                boolean isGitRepository = gitFolder.exists() && gitFolder.isDirectory();
                
                // then look for folder.git/HEAD
                // then look for folder.git/HEAD or folder/HEAD and folder/config
                if (!isGitRepository) {
                    if (file.getName().endsWith(Constants.DOT_GIT_EXT) && new File(file, Constants.HEAD).exists()) {
                    if ((file.getName().endsWith(Constants.DOT_GIT_EXT) && new File(file, Constants.HEAD).exists())
                            || (new File(file, "config").exists() && new File(file, Constants.HEAD).exists())) {
                        gitFolder = file;
                        isGitRepository = true;
                    }
@@ -266,13 +267,13 @@
    public static String getRawContentAsString(Repository r, RevBlob blob) {
        byte [] content = getRawContent(r, blob);
        return new String(content, Charset.forName("UTF-8"));
        return new String(content, Charset.forName(Constants.CHARACTER_ENCODING));
    }
    public static String getRawContentAsString(Repository r, RevCommit commit, String blobPath) {
        RevObject obj = getRevObject(r, commit.getTree(), blobPath);
        byte [] content = getRawContent(r, (RevBlob) obj);
        return new String(content, Charset.forName("UTF-8"));
        return new String(content, Charset.forName(Constants.CHARACTER_ENCODING));
    }
    public static List<PathModel> getFilesInPath(Repository r, String basePath, String objectId) {
src/com/gitblit/wicket/BasePage.html
@@ -21,8 +21,10 @@
                    <img src="resources/gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/>
                </wicket:link>
            </a>
            <a href="/"><span wicket:id="siteName">[site name]</span></a> / <span wicket:id="repositoryName">[repository name]</span> <span wicket:id="pageName">[page name]</span>
            <div style="float:none;" wicket:id="feedback">[Feedback Panel]</div>
            <span>
                <a href="/"><span wicket:id="siteName">[site name]</span></a> / <span wicket:id="repositoryName">[repository name]</span> <span wicket:id="pageName">[page name]</span>
            </span>
            <span wicket:id="feedback">[Feedback Panel]</span>
        </div>
        <!-- page content -->
src/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -9,6 +9,7 @@
import org.apache.wicket.model.CompoundPropertyModel;
import com.gitblit.GitBlit;
import com.gitblit.GitBlitException;
import com.gitblit.wicket.AdminPage;
import com.gitblit.wicket.BasePage;
import com.gitblit.wicket.WicketUtils;
@@ -48,7 +49,12 @@
            @Override
            protected void onSubmit() {
                GitBlit.self().editRepositoryModel(repositoryModel, isCreate);
                try {
                    GitBlit.self().editRepositoryModel(repositoryModel, isCreate);
                } catch (GitBlitException e) {
                    error(e.getMessage());
                    return;
                }
                setRedirect(true);
                setResponsePage(RepositoriesPage.class);
            }
src/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -89,7 +89,7 @@
        }
        add(repositoriesMessage);
        List<RepositoryModel> rows = GitBlit.self().getRepositories();
        List<RepositoryModel> rows = GitBlit.self().getRepositoryModels();
        DataProvider dp = new DataProvider(rows);
        DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("repository", dp) {
            private static final long serialVersionUID = 1L;
src/com/gitblit/wicket/resources/bullet_error.png
src/com/gitblit/wicket/resources/gitblit.css
@@ -628,4 +628,23 @@
span .headRef {
    background-color: #ccffcc;
    border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
}
.feedbackPanelERROR {
    color: red;
    list-style-image: url(bullet_error.png);
    font-weight: bold;
    text-align:left;
    vertical-align: top;
    padding:0;
    margin:0;
}
.feedbackPanelINFO {
    color: green;
    list-style: none;
    font-weight: bold;
    text-align:center;
    padding:0;
    margin:0;
}