-/*\r
- * Copyright 2011 gitblit.com.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-package com.gitblit.wicket.pages;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.apache.wicket.PageParameters;\r
-import org.apache.wicket.markup.html.basic.Label;\r
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;\r
-import org.apache.wicket.markup.repeater.Item;\r
-import org.apache.wicket.markup.repeater.data.DataView;\r
-import org.apache.wicket.markup.repeater.data.ListDataProvider;\r
-import org.eclipse.jgit.diff.DiffEntry.ChangeType;\r
-import org.eclipse.jgit.lib.Repository;\r
-import org.eclipse.jgit.revwalk.RevCommit;\r
-\r
-import com.gitblit.GitBlit;\r
-import com.gitblit.Keys;\r
-import com.gitblit.models.PathModel.PathChangeModel;\r
-import com.gitblit.models.SubmoduleModel;\r
-import com.gitblit.utils.DiffUtils;\r
-import com.gitblit.utils.DiffUtils.DiffOutputType;\r
-import com.gitblit.utils.JGitUtils;\r
-import com.gitblit.wicket.WicketUtils;\r
-import com.gitblit.wicket.panels.CommitHeaderPanel;\r
-import com.gitblit.wicket.panels.CommitLegendPanel;\r
-import com.gitblit.wicket.panels.LinkPanel;\r
-\r
-public class CommitDiffPage extends RepositoryPage {\r
-\r
- public CommitDiffPage(PageParameters params) {\r
- super(params);\r
-\r
- Repository r = getRepository();\r
- RevCommit commit = getCommit();\r
- DiffOutputType diffType = DiffOutputType.forName(GitBlit.getString(Keys.web.diffStyle,\r
- DiffOutputType.GITBLIT.name()));\r
- String diff = DiffUtils.getCommitDiff(r, commit, diffType);\r
-\r
- List<String> parents = new ArrayList<String>();\r
- if (commit.getParentCount() > 0) {\r
- for (RevCommit parent : commit.getParents()) {\r
- parents.add(parent.name());\r
- }\r
- }\r
-\r
- // commit page links\r
- if (parents.size() == 0) {\r
- add(new Label("parentLink", getString("gb.none")));\r
- } else {\r
- add(new LinkPanel("parentLink", null, parents.get(0).substring(0, 8),\r
- CommitDiffPage.class, newCommitParameter(parents.get(0))));\r
- }\r
- add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class,\r
- WicketUtils.newObjectParameter(repositoryName, objectId)));\r
- add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class,\r
- WicketUtils.newObjectParameter(repositoryName, objectId)));\r
-\r
- add(new CommitHeaderPanel("commitHeader", repositoryName, commit));\r
-\r
- // changed paths list\r
- List<PathChangeModel> paths = JGitUtils.getFilesInCommit(r, commit);\r
- add(new CommitLegendPanel("commitLegend", paths));\r
- ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(paths);\r
- DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {\r
- private static final long serialVersionUID = 1L;\r
- int counter;\r
-\r
- public void populateItem(final Item<PathChangeModel> item) {\r
- final PathChangeModel entry = item.getModelObject();\r
- Label changeType = new Label("changeType", "");\r
- WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);\r
- setChangeTypeTooltip(changeType, entry.changeType);\r
- item.add(changeType);\r
-\r
- boolean hasSubmodule = false;\r
- String submodulePath = null;\r
- if (entry.isTree()) {\r
- // tree\r
- item.add(new LinkPanel("pathName", null, entry.path, TreePage.class,\r
- WicketUtils\r
- .newPathParameter(repositoryName, entry.commitId, entry.path)));\r
- } else if (entry.isSubmodule()) {\r
- // submodule\r
- String submoduleId = entry.objectId; \r
- SubmoduleModel submodule = getSubmodule(entry.path);\r
- submodulePath = submodule.gitblitPath;\r
- hasSubmodule = submodule.hasSubmodule;\r
- \r
- item.add(new LinkPanel("pathName", "list", entry.path + " @ " +\r
- getShortObjectId(submoduleId), TreePage.class,\r
- WicketUtils\r
- .newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule));\r
- } else {\r
- // blob\r
- item.add(new LinkPanel("pathName", "list", entry.path, BlobPage.class,\r
- WicketUtils\r
- .newPathParameter(repositoryName, entry.commitId, entry.path)));\r
- }\r
-\r
- // quick links\r
- if (entry.isSubmodule()) {\r
- // submodule \r
- item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class, WicketUtils\r
- .newPathParameter(submodulePath, entry.objectId, entry.path)).setEnabled(false));\r
- item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, WicketUtils\r
- .newObjectParameter(submodulePath, entry.objectId)).setEnabled(hasSubmodule));\r
- item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils\r
- .newPathParameter(submodulePath, entry.objectId, entry.path)).setEnabled(false));\r
- item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils\r
- .newPathParameter(submodulePath, entry.objectId, entry.path))\r
- .setEnabled(hasSubmodule));\r
- } else {\r
- // tree or blob\r
- item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class, WicketUtils\r
- .newPathParameter(repositoryName, entry.commitId, entry.path)));\r
- item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, WicketUtils\r
- .newPathParameter(repositoryName, entry.commitId, entry.path)));\r
- item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils\r
- .newPathParameter(repositoryName, entry.commitId, entry.path)));\r
- item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils\r
- .newPathParameter(repositoryName, entry.commitId, entry.path))\r
- .setEnabled(!entry.changeType.equals(ChangeType.ADD)));\r
- }\r
- WicketUtils.setAlternatingBackground(item, counter);\r
- counter++;\r
- }\r
- };\r
- add(pathsView);\r
- add(new Label("diffText", diff).setEscapeModelStrings(false));\r
- }\r
-\r
- @Override\r
- protected String getPageName() {\r
- return getString("gb.commitdiff");\r
- }\r
-}\r
+/*
+ * Copyright 2011 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.wicket.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import java.text.MessageFormat;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.diff.DiffEntry.ChangeType;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.GitBlit;
+import com.gitblit.Keys;
+import com.gitblit.models.PathModel.PathChangeModel;
+import com.gitblit.models.SubmoduleModel;
+import com.gitblit.utils.DiffUtils;
+import com.gitblit.utils.DiffUtils.DiffOutputType;
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.panels.CommitHeaderPanel;
+import com.gitblit.wicket.panels.CommitLegendPanel;
+import com.gitblit.wicket.panels.LinkPanel;
+
+public class CommitDiffPage extends RepositoryPage {
+
+ public CommitDiffPage(PageParameters params) {
+ super(params);
+
+ Repository r = getRepository();
+
+ DiffOutputType diffType = DiffOutputType.forName(GitBlit.getString(Keys.web.diffStyle,
+ DiffOutputType.GITBLIT.name()));
+
+ RevCommit commit = null, otherCommit = null;
+
+ if( objectId.contains("..") )
+ {
+ String[] parts = objectId.split("\\.\\.");
+ commit = getCommit(r, parts[0]);
+ otherCommit = getCommit(r, parts[1]);
+ }
+ else
+ {
+ commit = getCommit();
+ }
+
+ String diff;
+
+ if(otherCommit == null)
+ {
+ diff = DiffUtils.getCommitDiff(r, commit, diffType);
+ }
+ else
+ {
+ diff = DiffUtils.getDiff(r, commit, otherCommit, diffType);
+ }
+
+ List<String> parents = new ArrayList<String>();
+ if (commit.getParentCount() > 0) {
+ for (RevCommit parent : commit.getParents()) {
+ parents.add(parent.name());
+ }
+ }
+
+ // commit page links
+ if (parents.size() == 0) {
+ add(new Label("parentLink", getString("gb.none")));
+ } else {
+ add(new LinkPanel("parentLink", null, parents.get(0).substring(0, 8),
+ CommitDiffPage.class, newCommitParameter(parents.get(0))));
+ }
+ add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class,
+ WicketUtils.newObjectParameter(repositoryName, objectId)));
+ add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class,
+ WicketUtils.newObjectParameter(repositoryName, objectId)));
+
+ add(new CommitHeaderPanel("commitHeader", repositoryName, commit));
+
+ // changed paths list
+ List<PathChangeModel> paths;
+
+ if( otherCommit == null )
+ {
+ paths = JGitUtils.getFilesInCommit(r, commit);
+ }
+ else
+ {
+ paths = JGitUtils.getFilesInCommit(r, otherCommit);
+ }
+
+ add(new CommitLegendPanel("commitLegend", paths));
+ ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(paths);
+ DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter;
+
+ public void populateItem(final Item<PathChangeModel> item) {
+ final PathChangeModel entry = item.getModelObject();
+ Label changeType = new Label("changeType", "");
+ WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);
+ setChangeTypeTooltip(changeType, entry.changeType);
+ item.add(changeType);
+
+ boolean hasSubmodule = false;
+ String submodulePath = null;
+ if (entry.isTree()) {
+ // tree
+ item.add(new LinkPanel("pathName", null, entry.path, TreePage.class,
+ WicketUtils
+ .newPathParameter(repositoryName, entry.commitId, entry.path)));
+ } else if (entry.isSubmodule()) {
+ // submodule
+ String submoduleId = entry.objectId;
+ SubmoduleModel submodule = getSubmodule(entry.path);
+ submodulePath = submodule.gitblitPath;
+ hasSubmodule = submodule.hasSubmodule;
+
+ item.add(new LinkPanel("pathName", "list", entry.path + " @ " +
+ getShortObjectId(submoduleId), TreePage.class,
+ WicketUtils
+ .newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule));
+ } else {
+ // blob
+ item.add(new LinkPanel("pathName", "list", entry.path, BlobPage.class,
+ WicketUtils
+ .newPathParameter(repositoryName, entry.commitId, entry.path)));
+ }
+
+ // quick links
+ if (entry.isSubmodule()) {
+ // submodule
+ item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class, WicketUtils
+ .newPathParameter(submodulePath, entry.objectId, entry.path)).setEnabled(false));
+ item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, WicketUtils
+ .newObjectParameter(submodulePath, entry.objectId)).setEnabled(hasSubmodule));
+ item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
+ .newPathParameter(submodulePath, entry.objectId, entry.path)).setEnabled(false));
+ item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils
+ .newPathParameter(submodulePath, entry.objectId, entry.path))
+ .setEnabled(hasSubmodule));
+ } else {
+ // tree or blob
+ item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class, WicketUtils
+ .newPathParameter(repositoryName, entry.commitId, entry.path)));
+ item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, WicketUtils
+ .newPathParameter(repositoryName, entry.commitId, entry.path)));
+ item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
+ .newPathParameter(repositoryName, entry.commitId, entry.path)));
+ item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils
+ .newPathParameter(repositoryName, entry.commitId, entry.path))
+ .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
+ }
+ WicketUtils.setAlternatingBackground(item, counter);
+ counter++;
+ }
+ };
+ add(pathsView);
+ add(new Label("diffText", diff).setEscapeModelStrings(false));
+ }
+
+ @Override
+ protected String getPageName() {
+ return getString("gb.commitdiff");
+ }
+
+ private RevCommit getCommit(Repository r, String rev)
+ {
+ RevCommit otherCommit = JGitUtils.getCommit(r, rev);
+ if (otherCommit == null) {
+ error(MessageFormat.format(getString("gb.failedToFindCommit"), rev, repositoryName, getPageName()), true);
+ }
+ return otherCommit;
+ }
+}