From: James Moger Date: Thu, 28 Apr 2011 01:56:56 +0000 (-0400) Subject: Improve repo folder detection. Fail gracefully on create repo error. X-Git-Tag: v0.5.0~61 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=166e6a131d0693d20b3cc08f252705608d24d5f0;p=gitblit.git Improve repo folder detection. Fail gracefully on create repo error. --- diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index a626be84..e557c934 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -2,6 +2,7 @@ package com.gitblit; import java.io.File; import java.io.IOException; +import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; @@ -30,7 +31,7 @@ public class GitBlit implements ServletContextListener { private FileResolver repositoryResolver; - private File repositories; + private File repositoriesFolder; private boolean exportAll; @@ -93,52 +94,9 @@ public class GitBlit implements ServletContextListener { userCookie.setPath("/"); response.addCookie(userCookie); } - - public void editRepositoryModel(RepositoryModel repository, boolean isCreate) { - Repository r = null; - if (isCreate) { - // create repository - logger.info("create repository " + repository.name); - r = JGitUtils.createRepository(repositories, repository.name, true); - } else { - // load repository - logger.info("edit repository " + repository.name); - try { - r = repositoryResolver.open(null, repository.name); - } catch (RepositoryNotFoundException e) { - logger.error("Repository not found", e); - } catch (ServiceNotEnabledException e) { - logger.error("Service not enabled", e); - } - } - - // update settings - StoredConfig config = JGitUtils.readConfig(r); - config.setString("gitblit", null, "description", repository.description); - config.setString("gitblit", null, "owner", repository.owner); - config.setBoolean("gitblit", null, "useTickets", repository.useTickets); - config.setBoolean("gitblit", null, "useDocs", repository.useDocs); - config.setBoolean("gitblit", null, "restrictedAccess", repository.useRestrictedAccess); - try { - config.save(); - } catch (IOException e) { - logger.error("Failed to save repository config!", e); - } - r.close(); - } - + public List getRepositoryList() { - return JGitUtils.getRepositoryList(repositories, exportAll, storedSettings.getBoolean(Keys.git.nestedRepositories, true)); - } - - public List getRepositories() { - List list = getRepositoryList(); - List repositories = new ArrayList(); - for (String repo : list) { - RepositoryModel model = getRepositoryModel(repo); - repositories.add(model); - } - return repositories; + return JGitUtils.getRepositoryList(repositoriesFolder, exportAll, storedSettings.getBoolean(Keys.git.nestedRepositories, true)); } public Repository getRepository(String repositoryName) { @@ -155,7 +113,17 @@ public class GitBlit implements ServletContextListener { } return r; } - + + public List getRepositoryModels() { + List list = getRepositoryList(); + List repositories = new ArrayList(); + 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(); @@ -174,12 +142,48 @@ public class GitBlit implements ServletContextListener { return model; } + public void editRepositoryModel(RepositoryModel repository, boolean isCreate) throws GitBlitException { + Repository r = null; + if (isCreate) { + 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(repositoriesFolder, repository.name, true); + } else { + // load repository + logger.info("edit repository " + repository.name); + try { + r = repositoryResolver.open(null, repository.name); + } catch (RepositoryNotFoundException e) { + logger.error("Repository not found", e); + } catch (ServiceNotEnabledException e) { + logger.error("Service not enabled", e); + } + } + + // update settings + StoredConfig config = JGitUtils.readConfig(r); + config.setString("gitblit", null, "description", repository.description); + config.setString("gitblit", null, "owner", repository.owner); + config.setBoolean("gitblit", null, "useTickets", repository.useTickets); + config.setBoolean("gitblit", null, "useDocs", repository.useDocs); + config.setBoolean("gitblit", null, "restrictedAccess", repository.useRestrictedAccess); + try { + config.save(); + } catch (IOException e) { + logger.error("Failed to save repository config!", e); + } + r.close(); + } + 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(repositoriesFolder, exportAll); } @Override diff --git a/src/com/gitblit/GitBlitException.java b/src/com/gitblit/GitBlitException.java new file mode 100644 index 00000000..15e38e16 --- /dev/null +++ b/src/com/gitblit/GitBlitException.java @@ -0,0 +1,10 @@ +package com.gitblit; + +public class GitBlitException extends Exception { + + private static final long serialVersionUID = 1L; + + public GitBlitException(String message) { + super(message); + } +} diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index 4cfed0da..70a938ff 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -94,9 +94,10 @@ public class JGitUtils { 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 class JGitUtils { 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 getFilesInPath(Repository r, String basePath, String objectId) { diff --git a/src/com/gitblit/wicket/BasePage.html b/src/com/gitblit/wicket/BasePage.html index b88192b5..69183b68 100644 --- a/src/com/gitblit/wicket/BasePage.html +++ b/src/com/gitblit/wicket/BasePage.html @@ -21,8 +21,10 @@ - [site name] / [repository name] [page name] -
[Feedback Panel]
+ + [site name] / [repository name] [page name] + + [Feedback Panel] diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java index 6201b22b..45fe9e2e 100644 --- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java +++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java @@ -9,6 +9,7 @@ import org.apache.wicket.markup.html.form.TextField; 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 @@ public class EditRepositoryPage extends BasePage { @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); } diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java index c834604d..768cea14 100644 --- a/src/com/gitblit/wicket/pages/RepositoriesPage.java +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java @@ -89,7 +89,7 @@ public class RepositoriesPage extends BasePage { } add(repositoriesMessage); - List rows = GitBlit.self().getRepositories(); + List rows = GitBlit.self().getRepositoryModels(); DataProvider dp = new DataProvider(rows); DataView dataView = new DataView("repository", dp) { private static final long serialVersionUID = 1L; diff --git a/src/com/gitblit/wicket/resources/bullet_error.png b/src/com/gitblit/wicket/resources/bullet_error.png new file mode 100644 index 00000000..b2e6b752 Binary files /dev/null and b/src/com/gitblit/wicket/resources/bullet_error.png differ diff --git a/src/com/gitblit/wicket/resources/gitblit.css b/src/com/gitblit/wicket/resources/gitblit.css index 53845466..8317e363 100644 --- a/src/com/gitblit/wicket/resources/gitblit.css +++ b/src/com/gitblit/wicket/resources/gitblit.css @@ -628,4 +628,23 @@ span .tagRef { 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; } \ No newline at end of file