Browse Source

Improve repo folder detection. Fail gracefully on create repo error.

tags/v0.5.0
James Moger 13 years ago
parent
commit
166e6a131d

+ 53
- 49
src/com/gitblit/GitBlit.java View File

@@ -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<Void> 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<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;
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<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();
@@ -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<Void>(repositoriesFolder, exportAll);
}
@Override

+ 10
- 0
src/com/gitblit/GitBlitException.java View 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);
}
}

+ 5
- 4
src/com/gitblit/utils/JGitUtils.java View File

@@ -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<PathModel> getFilesInPath(Repository r, String basePath, String objectId) {

+ 4
- 2
src/com/gitblit/wicket/BasePage.html View File

@@ -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 -->

+ 7
- 1
src/com/gitblit/wicket/pages/EditRepositoryPage.java View File

@@ -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);
}

+ 1
- 1
src/com/gitblit/wicket/pages/RepositoriesPage.java View File

@@ -89,7 +89,7 @@ public class RepositoriesPage extends BasePage {
}
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;

BIN
src/com/gitblit/wicket/resources/bullet_error.png View File


+ 19
- 0
src/com/gitblit/wicket/resources/gitblit.css View File

@@ -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;
}

Loading…
Cancel
Save