history.jsp revision 1470
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley<%--
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley$Id$
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyCDDL HEADER START
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyThe contents of this file are subject to the terms of the
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyCommon Development and Distribution License (the "License").
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyYou may not use this file except in compliance with the License.
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleySee LICENSE.txt included in this distribution for the specific
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleylanguage governing permissions and limitations under the License.
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyWhen distributing Covered Code, include this CDDL HEADER in each
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyfile and include the License file at LICENSE.txt.
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyIf applicable, add the following below this CDDL HEADER, with the
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyfields enclosed by brackets "[]" replaced with your own identifying
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyinformation: Portions Copyright [yyyy] [name of copyright owner]
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyCDDL HEADER END
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
b4d79725458782ce4ae781255fc7a22614a8b484Bob HalleyCopyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob HalleyPortions Copyright 2011, 2012 Jens Elkner.
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley--%><%@page import="
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyjava.io.File,
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halleyjava.text.Format,
ecd4a905ec5e62293f5ad8dff47129364be61b7dBob Halleyjava.text.SimpleDateFormat,
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyjava.util.Date,
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halleyjava.util.Set,
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halleyjava.util.regex.Pattern,
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyorg.opensolaris.opengrok.history.History,
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halleyorg.opensolaris.opengrok.history.HistoryEntry,
a7de9416692bf7bd36e53aeae8e0ec23d06a5f16Bob Halleyorg.opensolaris.opengrok.history.HistoryGuru,
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halleyorg.opensolaris.opengrok.configuration.Configuration,
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halleyorg.opensolaris.opengrok.configuration.RuntimeEnvironment"
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley%><%@
9ab8a7477d6a31275ca7d1f6b5f37c23a8a7e6cbBob Halley
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halleyinclude file="mast.jsp"
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley%><%/* ---------------------- history.jsp start --------------------- */
173b32c660c1e4d5141b5ca740e8fab3c593652fBob Halley{
90ace4c9e063e67fb452907d11bf29eae618a355Brian Wellington PageConfig cfg = PageConfig.get(request);
d60f5b9bc8c1e1f7ddebc6c7834f7550a8e8be6fBob Halley String path = cfg.getPath();
d60f5b9bc8c1e1f7ddebc6c7834f7550a8e8be6fBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley if (path.length() > 0) {
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley String context = request.getContextPath();
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley Configuration conf = cfg.getConfig();
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley String uriEncodedName = cfg.getUriEncodedPath();
d662fd77ecb875663f3d7510a8dd03f369697da2Andreas Gustafsson
ecd4a905ec5e62293f5ad8dff47129364be61b7dBob Halley boolean striked = false;
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley String userPage = conf.getUserPage();
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley String userPageSuffix = conf.getUserPageSuffix();
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley if (userPageSuffix == null) {
b77cab68c65633bc534090b09fbac743b161f9b7Bob Halley // Set to empty string so we can append it to the URL
b77cab68c65633bc534090b09fbac743b161f9b7Bob Halley // unconditionally later.
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley userPageSuffix = "";
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley }
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley String bugPage = conf.getBugPage();
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley String bugRegex = conf.getBugPattern();
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley if (bugRegex == null || bugRegex.equals("")) {
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley bugRegex = "\\b([12456789][0-9]{6})\\b";
bf336d569445bfe2c9f37fd58864e2cac7bef1ffBob Halley }
bf336d569445bfe2c9f37fd58864e2cac7bef1ffBob Halley Pattern bugPattern = Pattern.compile(bugRegex);
b77cab68c65633bc534090b09fbac743b161f9b7Bob Halley String reviewPage = conf.getReviewPage();
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley String reviewRegex = conf.getReviewPattern();
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley if(reviewRegex == null || reviewRegex.equals("")) {
93fa7f307828c4a411e922062c7d4417fdd5e251Bob Halley reviewRegex = "\\b(\\d{4}/\\d{3})\\b";
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley }
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley Pattern reviewPattern = Pattern.compile(reviewRegex);
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley Format df = new SimpleDateFormat("dd-MMM-yyyy");
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley History hist = null;
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley try {
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley hist = HistoryGuru.getInstance()
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley .getHistory(new File(cfg.getSourceRootPath(), path),
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley true, cfg.isDir());
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley } catch (Exception e) {
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley // should not happen
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley %><h3>Problem</h3><p class="error"><%= e.getMessage() %></p><%
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley }
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley if (hist != null) {
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley%><script type="text/javascript">/* <![CDATA[ */
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob HalleyO.hasFileList=<%= hist.hasFileList() %>;
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob HalleyO.domReady.push(O.domReadyHistory);
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley/* ]]> */</script>
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley<form action="<%= context + Prefix.DIFF_P + uriEncodedName %>">
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley<table class="src" id="revisions">
d680c5e7d5a10feb6208a5582ca0dbd30ec69fb9Bob Halley <caption>History log of <a href="<%= context + Prefix.XREF_P
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley + uriEncodedName %>"><%= Util.htmlize(path) %></a></caption>
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley <thead>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley <tr>
4e37c87da13906d11385700776111f207ee1fb2bBob Halley <th>Revision</th><%
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff if (!cfg.isDir()) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <th><button type="submit">Compare</button></th><%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley }
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley %>
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley <th>Date</th>
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley <th>Author</th>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <th>Comments <a><span id="expand"></span> Expand </a></th>
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley </tr>
d3376f4cf5fbaac629e37c0d247c8bf84677fa87Bob Halley </thead>
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley <tbody>
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley <%
d3376f4cf5fbaac629e37c0d247c8bf84677fa87Bob Halley int count=0;
d3376f4cf5fbaac629e37c0d247c8bf84677fa87Bob Halley String subdir = path;
d3376f4cf5fbaac629e37c0d247c8bf84677fa87Bob Halley if (!subdir.endsWith("/")) {
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley int idx = subdir.lastIndexOf('/');
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley assert(idx != 0);
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley subdir = subdir.substring(0, idx+1);
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley }
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley String htmlPath = Util.formQuoteEscape(path);
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley for (HistoryEntry entry : hist.getHistoryEntries()) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley String rev = entry.getRevision();
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley String encodedRev;
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley if (rev == null || rev.length() == 0) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley rev = "";
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley encodedRev = "";
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley } else {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley encodedRev = "?r=" + Util.uriEncodeQueryValue(rev);
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley }
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <tr><%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley if (cfg.isDir()) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <td><%= rev %></td><%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley } else if (entry.isActive()) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <td><a name="<%= rev %>" href="<%=
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley context + Prefix.XREF_P + uriEncodedName + encodedRev %>"><%= rev %></a></td>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <td>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <input type="radio"<%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley if (count == 0 ) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %> disabled="disabled"<%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley } else if (count == 1) {
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %> checked="checked"<%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley }
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley %> name="r1" value="<%= htmlPath %>@<%= rev %>"/>
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley <input type="radio"
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley name="r2"<%
9d308c623699ec4f2eb38515e9350698ae0151fcBob Halley if (count == 0) {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %> checked="checked"<%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %> value="<%= htmlPath %>@<%= rev %>"/></td><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley } else {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley striked = true;
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley <td><del><%= rev %></del></td>
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff <td></td><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %>
daf60b760441a51dbadd2ba70f8e370d21a44a7bBob Halley <td><%
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley Date date = entry.getDate();
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley if (date != null) {
4e37c87da13906d11385700776111f207ee1fb2bBob Halley %><%= df.format(date) %><%
4e37c87da13906d11385700776111f207ee1fb2bBob Halley }
15b1d6235189f12d75ead41edd9677c440d2f41dBob Halley %></td>
a7de9416692bf7bd36e53aeae8e0ec23d06a5f16Bob Halley <td><%
d680c5e7d5a10feb6208a5582ca0dbd30ec69fb9Bob Halley String author = entry.getAuthor();
e24ae70756d8462bcc05ec13e35742d683581d41Bob Halley if (author == null) {
4e37c87da13906d11385700776111f207ee1fb2bBob Halley %>(no author)<%
6674b5827d3cc1f2869d301972b44635a74f4482Bob Halley } else if (userPage != null && userPage.length() > 0) {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley String alink = Util.getEmail(author);
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %><a href="<%= userPage + Util.uriEncodePath(alink) + userPageSuffix
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %>"><%= Util.htmlize(author)%></a><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley } else {
4e37c87da13906d11385700776111f207ee1fb2bBob Halley %><%= Util.htmlize(author) %><%
4e37c87da13906d11385700776111f207ee1fb2bBob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %></td>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley <td><p><%
4e37c87da13906d11385700776111f207ee1fb2bBob Halley String cout = Util.htmlize(entry.getMessage());
4e37c87da13906d11385700776111f207ee1fb2bBob Halley if (bugPage != null && bugPage.length() > 0) {
4e37c87da13906d11385700776111f207ee1fb2bBob Halley cout = bugPattern.matcher(cout).replaceAll("<a href=\""
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley + bugPage + "$1\">$1</a>");
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley if (reviewPage != null && reviewPage.length() > 0) {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley cout = reviewPattern.matcher(cout).replaceAll("<a href=\""
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff + reviewPage + "$1\">$1</a>");
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %><%= cout %></p><%
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley Set<String> files = entry.getFiles();
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley if (files != null) {
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley %><div style='display: none'><%
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley for (String ifile : files) {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley String jfile = ifile;
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff if (ifile.startsWith(subdir)
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff && ifile.length() > subdir.length())
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley jfile = ifile.substring(subdir.length());
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley %>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley<a class="revh" href="<%= context + Prefix.XREF_P + Util.uriEncodePath(ifile)
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley + encodedRev %>"><%= Util.htmlize(jfile) %></a><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff %></div><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff %></td>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley </tr><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley count++;
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley %>
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley </tbody>
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley</table>
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley</form><%
3f185361a4ca047fbce4ca20c9b080ebace89b01Bob Halley if (striked) {
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley%><p><b>Note:</b> No associated file changes are available for
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halleyrevisions with strike-through numbers (eg. <del>1.45</del>)</p><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley%>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley<p class="rssbadge"><a href="<%=context + Prefix.RSS_P + uriEncodedName
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley%>" title="RSS XML Feed of latest changes"><span id="rssi"></span></a></p><%
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley }
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff}
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley/* ---------------------- history.jsp end --------------------- */
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley%><%@
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halleyinclude file="foot.jspf"
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley
4556681e191b7c1654639895ce719d98f2822ee2Michael Graff%>
5debbf1189c145db2da3cbf69a8c01379c5c68a3Bob Halley