history.jsp revision 02e645ec733e770161e50d8501797f81dc858e43
18c2aff776a775d34a4c9893a4c72e0434d68e36artem<%--
18c2aff776a775d34a4c9893a4c72e0434d68e36artemCDDL HEADER START
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemThe contents of this file are subject to the terms of the
18c2aff776a775d34a4c9893a4c72e0434d68e36artemCommon Development and Distribution License (the "License").
18c2aff776a775d34a4c9893a4c72e0434d68e36artemYou may not use this file except in compliance with the License.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemSee LICENSE.txt included in this distribution for the specific
18c2aff776a775d34a4c9893a4c72e0434d68e36artemlanguage governing permissions and limitations under the License.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemWhen distributing Covered Code, include this CDDL HEADER in each
18c2aff776a775d34a4c9893a4c72e0434d68e36artemfile and include the License file at LICENSE.txt.
18c2aff776a775d34a4c9893a4c72e0434d68e36artemIf applicable, add the following below this CDDL HEADER, with the
18c2aff776a775d34a4c9893a4c72e0434d68e36artemfields enclosed by brackets "[]" replaced with your own identifying
18c2aff776a775d34a4c9893a4c72e0434d68e36arteminformation: Portions Copyright [yyyy] [name of copyright owner]
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemCDDL HEADER END
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemCopyright 2005 Sun Microsystems, Inc. All rights reserved.
18c2aff776a775d34a4c9893a4c72e0434d68e36artemUse is subject to license terms.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemident "@(#)history.jsp 1.1 05/11/11 SMI"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem--%><%@ page import = "javax.servlet.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemjava.lang.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemjavax.servlet.http.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemjava.util.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemjava.io.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemjava.text.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemorg.opensolaris.opengrok.analysis.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemorg.opensolaris.opengrok.web.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemorg.opensolaris.opengrok.history.*,
18c2aff776a775d34a4c9893a4c72e0434d68e36artemjava.util.regex.*
18c2aff776a775d34a4c9893a4c72e0434d68e36artem"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem%><%@include file="mast.jsp"%><script type="text/javascript">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem// <![CDATA[
18c2aff776a775d34a4c9893a4c72e0434d68e36artemfunction toggle_filelist() {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem var spans = document.getElementsByTagName("span");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem for (var i = 0; i < spans.length; i++) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem var span = spans[i];
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (span.className == "filelist") {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem span.setAttribute("style", "display: none;");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem span.className = "filelist-hidden";
18c2aff776a775d34a4c9893a4c72e0434d68e36artem } else if (span.className == "filelist-hidden") {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem span.setAttribute("style", "display: inline;");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem span.className = "filelist";
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem}
18c2aff776a775d34a4c9893a4c72e0434d68e36artem// ]]>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem</script><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artemif (path.length() > 0 && valid) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem boolean striked = false;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String userPage = environment.getUserPage();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String bugPage = environment.getBugPage();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String bugRegex = environment.getBugPattern();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if(bugRegex == null || bugRegex.equals("")) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem bugRegex = "\\b([12456789][0-9]{6})\\b";
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem Pattern bugPattern = Pattern.compile(bugRegex);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String reviewPage = environment.getReviewPage();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String reviewRegex = environment.getReviewPattern();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if(reviewRegex == null || reviewRegex.equals("")) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem reviewRegex = "\\b(\\d{4}/\\d{3})\\b";
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem Pattern reviewPattern = Pattern.compile(reviewRegex);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem Format df = new SimpleDateFormat("dd-MMM-yyyy");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem Date tstart = new Date();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem File f = new File(rawSource + path);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (!HistoryGuru.getInstance().hasHistory(f)) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem response.sendError(404, "No history");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem return;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem History hist = HistoryGuru.getInstance().getHistory(f);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (hist == null) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem response.sendError(404, "No history");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem return;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem%><form action="<%=context%>/diff<%=path%>">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem<table cellspacing="0" cellpadding="2" border="0" width="100%" class="src">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem<tr>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem <td colspan="4"><span class="pagetitle">History log of <a href="<%= context +"/xref" + path %>"><%=path%></a></span></td>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem</tr>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem<tr class="thead">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem <td>Revision</td><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (!isDir) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %><th><input type="submit" value=" Compare "/></th><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %><td>Date</td><td>Author</td><td>Comments
18c2aff776a775d34a4c9893a4c72e0434d68e36artem <a href="#" onclick="javascript: toggle_filelist(); return false;">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem <span class="filelist-hidden" style="display: none;">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem (&lt;&lt;&lt; Hide modified files)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem </span>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem <span class="filelist" style="display: inline;">
18c2aff776a775d34a4c9893a4c72e0434d68e36artem (Show modified files &gt;&gt;&gt;)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem </span>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem </a></td>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem</tr><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artemboolean alt = true;
18c2aff776a775d34a4c9893a4c72e0434d68e36artemfor (HistoryEntry entry : hist.getHistoryEntries()) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String rev = entry.getRevision();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (rev == null || rev.length() == 0) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rev = "";
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem alt = !alt;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %><tr valign="top" <%= alt ? "class=\"alt\"" : "" %>><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (isDir) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %><td>&nbsp;<%=rev%>&nbsp;</td><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem } else {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (entry.isActive()) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem String rp = Util.URIEncodePath(path);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem%><td>&nbsp;<a name="<%=rev%>" href="<%= context +"/xref" + rp + "?r=" + Util.URIEncode(rev) %>"><%=rev%></a>&nbsp;</td><td align="center"><input type="radio" name="r1" value="<%=rp%>@<%=rev%>"/>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem<input type="radio" name="r2" value="<%=rp%>@<%=rev%>"/></td><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem } else {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem striked = true;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %><td><strike>&nbsp;<%=rev%>&nbsp; </strike></td><td>&nbsp;</td><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
18c2aff776a775d34a4c9893a4c72e0434d68e36artem}
18c2aff776a775d34a4c9893a4c72e0434d68e36artem%><td><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem Date date = entry.getDate();
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (date != null) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %><%=df.format(date)%><%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem } else {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem %>&nbsp;<%
18c2aff776a775d34a4c9893a4c72e0434d68e36artem }
%>&nbsp;</td>
<td>
<%
String author = entry.getAuthor();
if (author == null) {
%>(no author)<%
} else if (userPage != null && ! userPage.equals("")) {
%><a href="<%= userPage + author %>"><%= author %></a><%
} else {
%><%= author %><%
}
%>&nbsp;</td><td><%
String cout=Util.htmlize(entry.getMessage());
if (bugPage != null && ! bugPage.equals("")){
cout=bugPattern.matcher(cout).replaceAll("<a href=\"" + bugPage + "$1\">$1</a>"); }
if (reviewPage != null && ! reviewPage.equals("")) {
cout=reviewPattern.matcher(cout).replaceAll("<a href=\"" + reviewPage + "$1\">$1</a>"); }
%><%= cout %>
<%
Set<String> files = entry.getFiles();
if(files != null) {%><span class="filelist-hidden" style="display: none;"><br/><%
for (String ifile : files) {
String jfile = ifile;
if ("/".equals(path)) {
jfile = ifile.substring(1);
} else if (ifile.startsWith(path) && ifile.length() > (path.length()+1)) {
jfile = ifile.substring(path.length()+1);
}
if (rev == "") {
%><a class="h" href="<%=context%>/xref<%=ifile%>"><%=jfile%></a><br/><%
} else {
%><a class="h" href="<%=context%>/xref<%=ifile%>?r=<%=rev%>"><%=jfile%></a><br/><%
}
}%></span><%
}
%></td></tr><%
}
%></table></form><%
if(striked) {
%><p><b>Note:</b> No associated file changes are available for revisions with strike-through numbers (eg. <strike>1.45</strike>)</p><%
}
%><p class="rssbadge"><a href="<%=context%>/rss<%=Util.URIEncodePath(path)%>"><img src="<%=context%>/<%=environment.getWebappLAF()%>/img/rss.png" width="80" height="15" alt="RSS XML Feed" title="RSS XML Feed of latest changes"/></a></p><%
}
%><%@include file="foot.jspf"%>