diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java index a840e89281..ab6ea607d8 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetViewer.java @@ -101,12 +101,13 @@ public class GitChangesetViewer implements ChangesetViewer { gr = GitUtil.open(directory); + int counter = 0; + List changesetList = new ArrayList(); + if (!gr.getAllRefs().isEmpty()) { converter = new GitChangesetConverter(gr, GitUtil.ID_LENGTH); Git git = new Git(gr); - List changesetList = new ArrayList(); - int counter = 0; for (RevCommit commit : git.log().call()) { @@ -117,9 +118,9 @@ public class GitChangesetViewer implements ChangesetViewer counter++; } - - changesets = new ChangesetPagingResult(counter, changesetList); } + + changesets = new ChangesetPagingResult(counter, changesetList); } catch (NoHeadException ex) { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryBrowser.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryBrowser.java index 6969d9b136..686220cfab 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryBrowser.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryBrowser.java @@ -117,12 +117,25 @@ public class GitRepositoryBrowser implements RepositoryBrowser ObjectId revId = GitUtil.getRevisionId(repo, revision); + if (logger.isDebugEnabled()) + { + logger.debug("load content for {} at {}", path, revId.name()); + } + revWalk = new RevWalk(repo); RevCommit entry = revWalk.parseCommit(revId); RevTree revTree = entry.getTree(); - treeWalk.addTree(revTree); + if (revTree != null) + { + treeWalk.addTree(revTree); + } + else + { + logger.error("could not find tree for {}", revId.name()); + } + treeWalk.setFilter(PathFilter.create(path)); if (treeWalk.next()) @@ -175,62 +188,33 @@ public class GitRepositoryBrowser implements RepositoryBrowser BrowserResult result = null; File directory = handler.getDirectory(repository); org.eclipse.jgit.lib.Repository repo = GitUtil.open(directory); - RevWalk revWalk = null; - TreeWalk treeWalk = null; try { ObjectId revId = GitUtil.getRevisionId(repo, revision); - treeWalk = new TreeWalk(repo); - revWalk = new RevWalk(repo); - treeWalk.addTree(revWalk.parseTree(revId)); - result = new BrowserResult(); - - List files = new ArrayList(); - - if (Util.isEmpty(path)) + if (revId != null) { - while (treeWalk.next()) - { - files.add(createFileObject(repo, revId, treeWalk)); - } + result = getResult(repo, revId, path); } else { - String[] parts = path.split("/"); - int current = 0; - int limit = parts.length; - - while (treeWalk.next()) + if (Util.isNotEmpty(revision)) { - String name = treeWalk.getNameString(); - - if (current >= limit) - { - String p = treeWalk.getPathString(); - - if (p.split("/").length > limit) - { - files.add(createFileObject(repo, revId, treeWalk)); - } - } - else if (name.equalsIgnoreCase(parts[current])) - { - current++; - treeWalk.enterSubtree(); - } + logger.error("could not find revision {}", revision); + } + else if (logger.isWarnEnabled()) + { + logger.warn("coul not find head of repository, empty?"); } - } - result.setFiles(files); - result.setRevision(revId.getName()); + result = new BrowserResult(Constants.HEAD, null, null, + new ArrayList()); + } } finally { GitUtil.close(repo); - GitUtil.release(revWalk); - GitUtil.release(treeWalk); } return result; @@ -328,6 +312,97 @@ public class GitRepositoryBrowser implements RepositoryBrowser return result; } + /** + * Method description + * + * + * @param repo + * @param revId + * @param path + * + * @return + * + * @throws IOException + */ + private BrowserResult getResult(org.eclipse.jgit.lib.Repository repo, + ObjectId revId, String path) + throws IOException + { + BrowserResult result = null; + RevWalk revWalk = null; + TreeWalk treeWalk = null; + + try + { + if (logger.isDebugEnabled()) + { + logger.debug("load repository browser for revision {}", revId.name()); + } + + treeWalk = new TreeWalk(repo); + revWalk = new RevWalk(repo); + + RevTree tree = revWalk.parseTree(revId); + + if (tree != null) + { + treeWalk.addTree(tree); + } + else + { + logger.error("could not find tree for {}", revId.name()); + } + + result = new BrowserResult(); + + List files = new ArrayList(); + + if (Util.isEmpty(path)) + { + while (treeWalk.next()) + { + files.add(createFileObject(repo, revId, treeWalk)); + } + } + else + { + String[] parts = path.split("/"); + int current = 0; + int limit = parts.length; + + while (treeWalk.next()) + { + String name = treeWalk.getNameString(); + + if (current >= limit) + { + String p = treeWalk.getPathString(); + + if (p.split("/").length > limit) + { + files.add(createFileObject(repo, revId, treeWalk)); + } + } + else if (name.equalsIgnoreCase(parts[current])) + { + current++; + treeWalk.enterSubtree(); + } + } + } + + result.setFiles(files); + result.setRevision(revId.getName()); + } + finally + { + GitUtil.release(revWalk); + GitUtil.release(treeWalk); + } + + return result; + } + //~--- fields --------------------------------------------------------------- /** Field description */ diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java index f41cbac55e..31658127eb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java @@ -35,20 +35,20 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- -import java.io.File; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.RepositoryCache; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.util.FS; import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ +import java.io.File; import java.io.IOException; -import org.eclipse.jgit.lib.RepositoryCache; -import org.eclipse.jgit.util.FS; /** * @@ -74,6 +74,23 @@ public class GitUtil } } + /** + * Method description + * + * + * @param directory + * + * @return + * + * @throws IOException + */ + public static org.eclipse.jgit.lib.Repository open(File directory) + throws IOException + { + return RepositoryCache.open(RepositoryCache.FileKey.lenient(directory, + FS.DETECTED), true); + } + /** * Method description * @@ -121,24 +138,6 @@ public class GitUtil return date; } - - /** - * Method description - * - * - * @param directory - * - * @return - * - * @throws IOException - */ - public static org.eclipse.jgit.lib.Repository open(File directory) - throws IOException - { - return RepositoryCache.open(RepositoryCache.FileKey.lenient(directory, - FS.DETECTED), true); - } - /** * Method description * diff --git a/scm-webapp/src/main/webapp/resources/js/i18n/de.js b/scm-webapp/src/main/webapp/resources/js/i18n/de.js index 08ab9047c2..6895fe5259 100644 --- a/scm-webapp/src/main/webapp/resources/js/i18n/de.js +++ b/scm-webapp/src/main/webapp/resources/js/i18n/de.js @@ -224,10 +224,21 @@ if (Sonia.repository.ExtendedInfoPanel){ } if (Sonia.repository.RepositoryBrowser){ + Ext.override(Sonia.repository.RepositoryBrowser, { // german ?? - repositoryBrowserTitleText: 'Source: {0}' + repositoryBrowserTitleText: 'Source: {0}', + emptyText: 'In diesem Verzeichnis befinden sich keine Dateien' }); + +} + +if (Sonia.repository.ChangesetViewerGrid){ + + Ext.override(Sonia.repository.ChangesetViewerGrid, { + emptyText: 'Es konnten keine Commits gefunden werden' + }); + } // sonia.config.js diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js index 71ccc5d4d5..a45d2da6d6 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js @@ -48,7 +48,8 @@ Sonia.repository.ChangesetViewerGrid = Ext.extend(Ext.grid.GridPanel, {
Tree: {0}
', tagsAndBranchesTemplate: '
{0}
\
{1}
', - + + emptyText: 'No commits available', initComponent: function(){ @@ -88,6 +89,10 @@ Sonia.repository.ChangesetViewerGrid = Ext.extend(Ext.grid.GridPanel, { hideHeaders: true, colModel: changesetColModel, loadMask: true, + viewConfig: { + deferEmptyText: false, + emptyText: this.emptyText + }, listeners: { click: { fn: this.onClick, diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js index 7bb5137808..17f3eb7c0c 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js @@ -40,6 +40,8 @@ Sonia.repository.RepositoryBrowser = Ext.extend(Ext.grid.GridPanel, { iconDocument: 'resources/images/document.gif', templateIcon: '{1}', templateLink: '{0}', + + emptyText: 'This directory is empty', initComponent: function(){ @@ -113,6 +115,10 @@ Sonia.repository.RepositoryBrowser = Ext.extend(Ext.grid.GridPanel, { store: browserStore, colModel: browserColModel, loadMask: true, + viewConfig: { + deferEmptyText: false, + emptyText: this.emptyText + }, listeners: { click: { fn: this.onClick,