From 166e6a131d0693d20b3cc08f252705608d24d5f0 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 27 Apr 2011 21:56:56 -0400
Subject: [PATCH] Improve repo folder detection. Fail gracefully on create repo error.
---
src/com/gitblit/wicket/BasePage.html | 6 +
src/com/gitblit/GitBlit.java | 110 +++++++++++++++++++-----------------
src/com/gitblit/wicket/pages/RepositoriesPage.java | 2
src/com/gitblit/wicket/pages/EditRepositoryPage.java | 8 ++
src/com/gitblit/GitBlitException.java | 10 +++
src/com/gitblit/wicket/resources/gitblit.css | 19 ++++++
src/com/gitblit/utils/JGitUtils.java | 9 +-
src/com/gitblit/wicket/resources/bullet_error.png | 0
8 files changed, 103 insertions(+), 61 deletions(-)
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index a626be8..e557c93 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/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
diff --git a/src/com/gitblit/GitBlitException.java b/src/com/gitblit/GitBlitException.java
new file mode 100644
index 0000000..15e38e1
--- /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 4cfed0d..70a938f 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/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) {
diff --git a/src/com/gitblit/wicket/BasePage.html b/src/com/gitblit/wicket/BasePage.html
index b88192b..69183b6 100644
--- a/src/com/gitblit/wicket/BasePage.html
+++ b/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 -->
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
index 6201b22..45fe9e2 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.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);
}
diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java
index c834604..768cea1 100644
--- a/src/com/gitblit/wicket/pages/RepositoriesPage.java
+++ b/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;
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 0000000..b2e6b75
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/bullet_error.png
Binary files differ
diff --git a/src/com/gitblit/wicket/resources/gitblit.css b/src/com/gitblit/wicket/resources/gitblit.css
index 5384546..8317e36 100644
--- a/src/com/gitblit/wicket/resources/gitblit.css
+++ b/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;
}
\ No newline at end of file
--
Gitblit v1.9.1