-------\r
\r
Gitblit is distributed under the terms of the Apache Software Foundation\r
-license, version 2.0. The text is included in the file LICENSE in the root\r
+license, version 2.0. The text of the license is included in the file LICENSE in the root\r
of the project.\r
\r
Java/Application server requirements\r
-set JVM=C:\Program Files\Java\JVM1.6.0_21\r
+set JVM=C:\Program Files\Java\jdk1.6.0_26\r
JavaService.exe -install gitblit "%JVM%\jre\bin\server\jvm.dll" -Xmx1024M -Djava.class.path=%CD%\gitblit.jar;"%JVM%\lib\tools.jar" -start com.gitblit.Launcher -params --storePassword dosomegit -stop com.gitblit.Launcher -params --stop -out %CD%\logs\stdout.log -err %CD%\logs\stderr.log -current %CD%
\ No newline at end of file
-set JVM=C:\Program Files\Java\JVM1.6.0_21\r
+set JVM=C:\Program Files\Java\jdk1.6.0_26\r
JavaService64.exe -install gitblit "%JVM%\jre\bin\server\jvm.dll" -Djava.class.path=%CD%\gitblit.jar;"%JVM%\lib\tools.jar" -start com.gitblit.Launcher -params --storePassword dosomegit -stop com.gitblit.Launcher -params --stop -out %CD%\logs\stdout.log -err %CD%\logs\stderr.log -current %CD%
\ No newline at end of file
## Git:Blit realm file format: username=password,\#permission,repository1,repository2...\r
-#Sat Jun 04 14:21:04 EDT 2011\r
+#Tue Jun 07 20:57:42 EDT 2011\r
admin=admin,\#admin\r
- Repository Owners may edit repositories through the web UI\r
- Automatically generates a self-signed certificate for https communications\r
- Git-notes support\r
-- Branch-selectable metrics\r
+- Branch metrics\r
+- Blame annotations view\r
- Dates can optionally be displayed using the browser's reported timezone\r
- Author and Committer email address display can be controlled\r
+- Search commit messages, authors, and committers\r
- Dynamic zip downloads feature\r
- Markdown view support\r
- Syntax highlighting\r
</ul>\r
\r
### Limitations\r
+- [%JGIT%][jgit] does not [garbage collect or repack](http://www.kernel.org/pub/software/scm/git/docs/git-gc.html)\r
- HTTP/HTTPS are the only supported protocols\r
- Access controls are not path-based, they are repository-based\r
- Only Administrators can create, rename or delete repositories\r
- Gitblit is an integrated, full-stack solution. There is no WAR build at this time.\r
\r
+### Caveats\r
+- I don't know everything there is to know about [Git][git] nor [JGit][jgit].\r
+- Gitblit may eat your data. Use at your own risk.\r
+- Gitblit may have security holes. Patches welcome. :)\r
+\r
### Todo List\r
- Code documentation\r
- Unit testing\r
-- Blame\r
+- Finish Blame (waiting for JGit 1.0.0 release)\r
- Clone remote repository\r
\r
### Idea List\r
-- Ticgit activity/timeline\r
-- Ticgit query feature with paging support\r
-- Ticgit ticket change history\r
-- View images on Blob page\r
-- View other binary files on Blob page\r
+- Consider [Apache Shiro](http://shiro.apache.org) for authentication\r
+- Stronger Ticgit read-only integration\r
+ - activity/timeline\r
+ - query feature with paging support\r
+ - change history\r
+- Ticgit write integration\r
+- Blob page improvements\r
+ - view images\r
+ - view other binary files (pdf, doc, etc)\r
- Markdown editing feature\r
\r
### License\r
-Licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\r
+Gitblit is distributed under the terms of the [Apache Software Foundation license, version 2.0][apachelicense]\r
\r
### Inspirations\r
- [Gitweb](http://www.git-scm.com)\r
- If running on Linux you may have to change the served port(s) to > 1024 unless you are developing as the root user. \r
6. Execute the *com.gitblit.Launcher* class to start Gitblit.\r
\r
+\r
+## Contributing\r
+Patches welcome in any form.\r
+\r
+Contributions must be your own original work and must licensed under the [Apache License, Version 2.0][apachelicense], the same license used by Gitblit.\r
+\r
[jgit]: http://eclipse.org/jgit "Eclipse JGit Site"\r
[git]: http://git-scm.com "Official Git Site"\r
-[gitbltsrc]: http://somewhere.com "gitblit git repository"
\ No newline at end of file
+[gitbltsrc]: http://somewhere.com "gitblit git repository"\r
+[apachelicense]: http://www.apache.org/licenses/LICENSE-2.0 "Apache License, Version 2.0"
\ No newline at end of file
As a Java developer I prefer that as much of my tooling as possible is Java.<br/>\r
Originally, I was going to use [Mercurial](http://mercurial.selenic.com) but...\r
\r
-- MercurialEclipse [shells to Python and captures System.in](http://mercurial.808500.n3.nabble.com/Hg4J-Mercurial-pure-Java-library-tp2693090p2694555.html)<br/>\r
+- MercurialEclipse [shells to Python, writes to System.out, and captures System.in](http://mercurial.808500.n3.nabble.com/Hg4J-Mercurial-pure-Java-library-tp2693090p2694555.html)<br/>\r
Parsing command-line output is fragile and suboptimal.<br/>Unfortunately this is necessary because Mercurial is an application, not a library.\r
-- Mercurial seems to [frown](http://mercurial.808500.n3.nabble.com/Hg4J-Mercurial-pure-Java-library-tp2693090p2695051.html) on the fledgling [Hg4j][hg4j] (pure Java Mercurial) project.\r
- Mercurial HTTP/HTTPS needs to run as CGI through Apache/IIS/etc, as mod_python through Apache, or served with a built-in http server.<br/>\r
This requires setup and maintenance of multiple, mixed 3rd party components.\r
\r
No. Gitblit is based on [JGit][jgit] which is a pure Java implementation of the [Git version control system][git].<br/>\r
Everything you need for Gitblit is either in the zip distribution file or automatically downloaded on execution.\r
\r
+### What about periodic Git garbage collection (git-gc)?\r
+Good question. I'm not sure.\r
+\r
+Git repositories grow and grow and periodically need to be repacked every once in a while. Git calls this process [garbage collection](http://www.kernel.org/pub/software/scm/git/docs/git-gc.html) (which is not to be confused with [garbage collection](http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)).)\r
+\r
+[JGit's][jgit] documentation is sparse and its unclear whether or not JGit performs this function.\r
+\r
### Can I run Gitblit in conjunction with my existing Git tooling?\r
Yes. You can configure Gitblit to only be a repository viewer.\r
\r
\r
### Why doesn't Gitblit support SSH?\r
Gitblit could integrate [Apache Mina][mina] to provide SSH access. However, doing so violates Gitblit's first design principle: [KISS](http://en.wikipedia.org/wiki/KISS_principle).<br/>\r
-SSH support requires creating, exchanging, and managing SSH keys. While this is possible, JGit's SmartHTTP implementation is a simpler and universal transport mechanism.\r
+SSH support requires creating, exchanging, and managing SSH keys (arguably not more complicated than managing users). While this is possible, JGit's SmartHTTP implementation is a simpler and universal transport mechanism.\r
\r
You might consider running [Gerrit](http://gerrit.googlecode.org) which does integrate [Apache Mina][mina] and supports SSH or you might consider serving [Git][git] on Linux which would offer real SSH support and also allow use of [many other compelling Git solutions](https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools).\r
\r
\r
Alternatively, you could enable the search type dropdown list in your `gitblit.properties` file.\r
\r
-### I see a disabled "blame" link. How do I enable it? \r
-Currently blame is not implemented. Those links are placeholders to remind me where Gitweb offers blame.\r
+### Can Gitblit be translated?\r
+\r
+Yes. Most messages are localized to a standard Java properties file.\r
\r
[bitblt]: http://en.wikipedia.org/wiki/Bit_blit "Wikipedia Bitblt"\r
[jgit]: http://eclipse.org/jgit "Eclipse JGit Site"\r
<script type="text/javascript" src="prettify/prettify.js"></script>\r
<link href="prettify/prettify.css" type="text/css" rel="stylesheet" /> \r
</head>\r
- <body onload="prettyPrint()">\r
+ <body style="width:900px" onload="prettyPrint()">\r
+ <a href="http://github.com/gitblit"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://d3nwyuy0nl342s.cloudfront.net/img/30f550e0d38ceb6ef5b81500c64d970b7fb0f028/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67" alt="Fork me on GitHub"></a>\r
<div class="page_header">\r
<a title="gitblit homepage" href="http://gitblit.com/">\r
<img src="./gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/>\r
\r
import com.gitblit.GitBlit;\r
import com.gitblit.Keys;\r
+import com.gitblit.wicket.pages.BlamePage;\r
import com.gitblit.wicket.pages.BlobDiffPage;\r
import com.gitblit.wicket.pages.BlobPage;\r
import com.gitblit.wicket.pages.BranchesPage;\r
import com.gitblit.wicket.pages.LoginPage;\r
import com.gitblit.wicket.pages.LogoutPage;\r
import com.gitblit.wicket.pages.MarkdownPage;\r
+import com.gitblit.wicket.pages.MetricsPage;\r
import com.gitblit.wicket.pages.PatchPage;\r
import com.gitblit.wicket.pages.RawPage;\r
import com.gitblit.wicket.pages.RepositoriesPage;\r
import com.gitblit.wicket.pages.SearchPage;\r
-import com.gitblit.wicket.pages.MetricsPage;\r
import com.gitblit.wicket.pages.SummaryPage;\r
import com.gitblit.wicket.pages.TagPage;\r
import com.gitblit.wicket.pages.TagsPage;\r
mount("/history", HistoryPage.class, "r", "h", "f");\r
mount("/search", SearchPage.class);\r
mount("/metrics", MetricsPage.class, "r");\r
+ mount("/blame", BlamePage.class, "r", "h", "f");\r
\r
// setup ticket urls\r
mount("/tickets", TicketsPage.class, "r");\r
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" \r
+ xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" \r
+ xml:lang="en" \r
+ lang="en"> \r
+\r
+<body>\r
+<wicket:extend>\r
+ \r
+ <!-- blame nav links --> \r
+ <div class="page_nav2">\r
+ <a wicket:id="blobLink"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a> | <a wicket:id="commitLink"><wicket:message key="gb.commit"></wicket:message></a> | <a wicket:id="commitDiffLink"><wicket:message key="gb.commitdiff"></wicket:message></a>\r
+ </div> \r
+ \r
+ <!-- commit header -->\r
+ <div wicket:id="commitHeader">[commit header]</div>\r
+\r
+ <!-- breadcrumbs -->\r
+ <div wicket:id="breadcrumbs">[breadcrumbs]</div>\r
+ \r
+ <!-- blame content -->\r
+ <table>\r
+ <tbody>\r
+ <tr>\r
+ <th>Commit</th>\r
+ <th>Line</th>\r
+ <th>Data</th>\r
+ </tr>\r
+ <tr wicket:id="annotation">\r
+ <td><span wicket:id="commit"></span></td>\r
+ <td><span wicket:id="line"></span></td>\r
+ <td><span wicket:id="data"></span></td>\r
+ </tr>\r
+ </tbody>\r
+ </table>\r
+ \r
+</wicket:extend>\r
+</body>\r
+</html>
\ No newline at end of file
--- /dev/null
+/*\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.io.Serializable;\r
+import java.util.Arrays;\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.lib.Constants;\r
+import org.eclipse.jgit.revwalk.RevCommit;\r
+\r
+import com.gitblit.wicket.WicketUtils;\r
+import com.gitblit.wicket.panels.CommitHeaderPanel;\r
+import com.gitblit.wicket.panels.LinkPanel;\r
+import com.gitblit.wicket.panels.PathBreadcrumbsPanel;\r
+\r
+public class BlamePage extends RepositoryPage {\r
+\r
+ public BlamePage(PageParameters params) {\r
+ super(params);\r
+\r
+ final String blobPath = WicketUtils.getPath(params);\r
+\r
+ RevCommit commit = getCommit();\r
+\r
+ add(new BookmarkablePageLink<Void>("blobLink", BlobPage.class,\r
+ WicketUtils.newPathParameter(repositoryName, objectId,\r
+ blobPath)));\r
+ add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class,\r
+ WicketUtils.newObjectParameter(repositoryName, objectId)));\r
+ add(new BookmarkablePageLink<Void>("commitDiffLink", CommitDiffPage.class,\r
+ WicketUtils.newObjectParameter(repositoryName, objectId)));\r
+\r
+ // blame page links\r
+ add(new BookmarkablePageLink<Void>("headLink", BlamePage.class,\r
+ WicketUtils.newPathParameter(repositoryName, Constants.HEAD, blobPath)));\r
+ add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,\r
+ WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));\r
+\r
+ add(new CommitHeaderPanel("commitHeader", repositoryName, commit));\r
+\r
+ add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, blobPath, objectId));\r
+\r
+ List<BlameLine> blame = Arrays.asList(new BlameLine("HEAD", "1", "Under Construction"));\r
+ ListDataProvider<BlameLine> blameDp = new ListDataProvider<BlameLine>(blame);\r
+ DataView<BlameLine> blameView = new DataView<BlameLine>("annotation", blameDp) {\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ public void populateItem(final Item<BlameLine> item) {\r
+ BlameLine entry = item.getModelObject();\r
+ item.add(new LinkPanel("commit", "list", entry.objectId, CommitPage.class,\r
+ newCommitParameter(entry.objectId)));\r
+ item.add(new Label("line", entry.line));\r
+ item.add(new Label("data", entry.data));\r
+ }\r
+ };\r
+ add(blameView);\r
+ }\r
+\r
+ @Override\r
+ protected String getPageName() {\r
+ return getString("gb.blame");\r
+ }\r
+ \r
+ private class BlameLine implements Serializable {\r
+ \r
+ private static final long serialVersionUID = 1L;\r
+ \r
+ final String objectId;\r
+ final String line;\r
+ final String data;\r
+ BlameLine(String objectId, String line, String data) {\r
+ this.objectId = objectId;\r
+ this.line = line;\r
+ this.data = data;\r
+ }\r
+ }\r
+}\r
\r
<!-- blob nav links --> \r
<div class="page_nav2">\r
- <span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="patchLink"><wicket:message key="gb.patch"></wicket:message></a> | <a wicket:id="commitLink"><wicket:message key="gb.commit"></wicket:message></a> | <a wicket:id="commitDiffLink"><wicket:message key="gb.commitdiff"></wicket:message></a>\r
+ <a wicket:id="blameLink"><wicket:message key="gb.blame"></wicket:message></a> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="patchLink"><wicket:message key="gb.patch"></wicket:message></a> | <a wicket:id="commitLink"><wicket:message key="gb.commit"></wicket:message></a> | <a wicket:id="commitDiffLink"><wicket:message key="gb.commitdiff"></wicket:message></a>\r
</div> \r
\r
<!-- commit header -->\r
WicketUtils.newObjectParameter(repositoryName, objectId)));\r
\r
// diff page links\r
- add(new Label("blameLink", getString("gb.blame")));\r
+ add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,\r
+ WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));\r
add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,\r
WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));\r
\r
\r
<!-- blob nav links --> \r
<div class="page_nav2">\r
- <span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a>\r
+ <a wicket:id="blameLink"><wicket:message key="gb.blame"></wicket:message></a> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a>\r
</div> \r
\r
<!-- commit header -->\r
if (StringUtils.isEmpty(blobPath)) {\r
// blob by objectid\r
\r
- add(new Label("blameLink", getString("gb.blame")).setEnabled(false));\r
+ add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,\r
+ WicketUtils.newPathParameter(repositoryName, objectId, blobPath)).setEnabled(false));\r
add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class).setEnabled(false));\r
add(new BookmarkablePageLink<Void>("rawLink", RawPage.class,\r
WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));\r
RevCommit commit = JGitUtils.getCommit(r, objectId);\r
\r
// blob page links\r
- add(new Label("blameLink", getString("gb.blame")));\r
+ add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,\r
+ WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));\r
add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,\r
WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));\r
add(new BookmarkablePageLink<Void>("rawLink", RawPage.class,\r
newPathParameter(entry.path)));\r
item.add(new BookmarkablePageLink<Void>("view", BlobPage.class,\r
newPathParameter(entry.path)));\r
- item.add(new BookmarkablePageLink<Void>("blame", BlobPage.class).setEnabled(false));\r
+ item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,\r
+ newPathParameter(entry.path)));\r
item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,\r
- newPathParameter(entry.path)).setEnabled(!entry.changeType.equals(ChangeType.ADD) && !entry.changeType.equals(ChangeType.DELETE)));\r
+ newPathParameter(entry.path)).setEnabled(!entry.changeType.equals(ChangeType.ADD)));\r
\r
WicketUtils.setAlternatingBackground(item, counter);\r
counter++;\r
public void populateItem(final Item<GitNote> item) {\r
GitNote entry = item.getModelObject();\r
item.add(new RefsPanel("refName", repositoryName, Arrays.asList(entry.notesRef)));\r
- item.add(createPersonPanel("authorName", entry.notesRef.getAuthorIdent(), SearchType.AUTHOR));\r
- item.add(WicketUtils.createTimestampLabel("authorDate",\r
- entry.notesRef.getAuthorIdent().getWhen(), getTimeZone()));\r
- item.add(new Label("noteContent", StringUtils.breakLinesForHtml(entry.content)).setEscapeModelStrings(false));\r
+ item.add(createPersonPanel("authorName", entry.notesRef.getAuthorIdent(),\r
+ SearchType.AUTHOR));\r
+ item.add(WicketUtils.createTimestampLabel("authorDate", entry.notesRef\r
+ .getAuthorIdent().getWhen(), getTimeZone()));\r
+ item.add(new Label("noteContent", StringUtils.breakLinesForHtml(entry.content))\r
+ .setEscapeModelStrings(false));\r
}\r
};\r
add(notesView.setVisible(notes.size() > 0));\r
- \r
- \r
+\r
// changed paths list\r
List<PathChangeModel> paths = JGitUtils.getFilesInCommit(r, c);\r
add(new CommitLegendPanel("commitLegend", paths));\r
}\r
\r
item.add(new BookmarkablePageLink<Void>("diff", BlobDiffPage.class,\r
- newPathParameter(entry.path)).setEnabled(!entry.changeType.equals(ChangeType.ADD) && !entry.changeType.equals(ChangeType.DELETE)));\r
+ newPathParameter(entry.path)).setEnabled(!entry.changeType\r
+ .equals(ChangeType.ADD) && !entry.changeType.equals(ChangeType.DELETE)));\r
item.add(new BookmarkablePageLink<Void>("view", BlobPage.class,\r
newPathParameter(entry.path)));\r
- item.add(new BookmarkablePageLink<Void>("blame", BlobPage.class).setEnabled(false));\r
+ item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,\r
+ newPathParameter(entry.path)));\r
item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,\r
- newPathParameter(entry.path)).setEnabled(!entry.changeType.equals(ChangeType.ADD)));\r
+ newPathParameter(entry.path)).setEnabled(!entry.changeType\r
+ .equals(ChangeType.ADD)));\r
\r
WicketUtils.setAlternatingBackground(item, counter);\r
counter++;\r
metrics.get(metrics.size() / 2).name, metrics.get(metrics.size() - 1).name });\r
provider.addAxis(dateAxis);\r
\r
- ChartAxis commitAxis = new ChartAxis(ChartAxisType.LEFT);\r
+ ChartAxis commitAxis = new ChartAxis(ChartAxisType.LEFT); \r
commitAxis.setLabels(new String[] { "",\r
String.valueOf((int) WicketUtils.maxValue(metrics)) });\r
provider.addAxis(commitAxis);\r
-\r
provider.setLineStyles(new LineStyle[] { new LineStyle(2, 4, 0), new LineStyle(0, 4, 1) });\r
provider.addShapeMarker(new ShapeMarker(MarkerType.CIRCLE, Color.BLUE, 1, -1, 5));\r
\r
entry.path)));\r
links.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils\r
.newPathParameter(repositoryName, entry.commitId, entry.path)));\r
- links.add(new BookmarkablePageLink<Void>("blame", BlobPage.class)\r
- .setEnabled(false));\r
+ links.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,\r
+ WicketUtils.newPathParameter(repositoryName, entry.commitId,\r
+ entry.path)));\r
links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,\r
WicketUtils.newPathParameter(repositoryName, entry.commitId,\r
entry.path)));\r
}\r
\r
span .otherRef {\r
- background-color: #80ccdd;\r
+ background-color: #b0e0f0;\r
border-color: #80aaaa; \r
}\r
\r