history.jsp revision 0dafcea0c31887f3a3b35be121d3f35ff19ec4b4
4070N/A<%--
4070N/ACDDL HEADER START
4070N/A
4070N/AThe contents of this file are subject to the terms of the
4070N/ACommon Development and Distribution License (the "License").
4070N/AYou may not use this file except in compliance with the License.
4070N/A
4070N/ASee LICENSE.txt included in this distribution for the specific
4070N/Alanguage governing permissions and limitations under the License.
4070N/A
4070N/AWhen distributing Covered Code, include this CDDL HEADER in each
4070N/Afile and include the License file at LICENSE.txt.
4070N/AIf applicable, add the following below this CDDL HEADER, with the
4070N/Afields enclosed by brackets "[]" replaced with your own identifying
4070N/Ainformation: Portions Copyright [yyyy] [name of copyright owner]
4070N/A
4070N/ACDDL HEADER END
4070N/A
4070N/ACopyright 2005 Sun Microsystems, Inc. All rights reserved.
4070N/AUse is subject to license terms.
4070N/A
4070N/Aident "@(#)history.jsp 1.1 05/11/11 SMI"
6033N/A
4070N/A--%><%@ page import = "javax.servlet.*,
4070N/Ajava.lang.*,
4070N/Ajavax.servlet.http.*,
4070N/Ajava.util.*,
4070N/Ajava.io.*,
6033N/Ajava.text.*,
4070N/Aorg.opensolaris.opengrok.analysis.*,
4070N/Aorg.opensolaris.opengrok.web.*,
4070N/Aorg.opensolaris.opengrok.history.*,
6033N/Ajava.util.regex.*
4070N/A"
4070N/A%><%@include file="mast.jsp"%><% String hcontext = request.getContextPath(); %>
4070N/A<script type="text/javascript" src="<%=hcontext%>/jquery-1.4.2.min.js"></script>
4070N/A<script type="text/javascript">
6033N/A// <![CDATA[
4070N/Afunction toggle_filelist() {
4070N/A $("span").each(function() {
4070N/A if (this.className == "filelist") {
4070N/A this.setAttribute("style", "display: none;");
4070N/A this.className = "filelist-hidden";
4070N/A } else if (this.className == "filelist-hidden") {
4070N/A this.setAttribute("style", "display: inline;");
4070N/A this.className = "filelist";
4070N/A }
4070N/A }
4070N/A );
4070N/A}
4070N/A
4070N/Afunction togglediffs() {
4070N/A var cr2 = false;
4070N/A var cr1 = false;
4070N/A $("#revisions input[type=radio]").each(function() {
4070N/A if (this.name=="r1") { if (this.checked) {cr1=true;return true;};
if (cr2) { this.disabled = ''}
else {this.disabled = 'true'} }
else if (this.name=="r2") { if (this.checked) {cr2=true;return true;}
if (!cr1) { this.disabled = ''}
else {this.disabled = 'true'} }
}
);
}
$(document).ready(function(){
// start state should ALWAYS be: first row: r1 hidden, r2 checked ; second row: r1 clicked, (r2 hidden)(optionally)
// I cannot say what will happen if they are not like that, togglediffs will go mad !
$("#revisions input[type=radio]").bind("click",togglediffs);
togglediffs();
});
// ]]>
</script><%
if (path.length() > 0 && valid) {
boolean striked = false;
String userPage = environment.getUserPage();
String bugPage = environment.getBugPage();
String bugRegex = environment.getBugPattern();
if(bugRegex == null || bugRegex.equals("")) {
bugRegex = "\\b([12456789][0-9]{6})\\b";
}
Pattern bugPattern = Pattern.compile(bugRegex);
String reviewPage = environment.getReviewPage();
String reviewRegex = environment.getReviewPattern();
if(reviewRegex == null || reviewRegex.equals("")) {
reviewRegex = "\\b(\\d{4}/\\d{3})\\b";
}
Pattern reviewPattern = Pattern.compile(reviewRegex);
Format df = new SimpleDateFormat("dd-MMM-yyyy");
Date tstart = new Date();
File f = new File(rawSource + path);
if (!HistoryGuru.getInstance().hasHistory(f)) {
response.sendError(404, "No history");
return;
}
History hist=null;
try {
hist = HistoryGuru.getInstance().getHistory(f);
} catch (Exception e) {
%>Problem: <%=e.getMessage()%><%
}
if (hist == null) {
// response.sendError(404, "No history");
%><%@include file="foot.jspf"%><%
return;
}
%><form action="<%=context%>/diff<%=path%>">
<table cellspacing="0" cellpadding="2" border="0" width="100%" class="src" id="revisions">
<tr>
<td colspan="5"><span class="pagetitle">History log of <a href="<%= context +"/xref" + path %>"><%=path%></a></span></td>
</tr>
<tr class="thead">
<td>Revision</td><%
if (!isDir) {
%><th><input type="submit" value=" Compare "/></th><%
}
%><td>Date</td><td>Author</td><td>Comments<%
if (hist.hasFileList()) {
%> <a href="#" onclick="javascript: toggle_filelist(); return false;">
<span class="filelist-hidden" style="display: none;">
(&lt;&lt;&lt; Hide modified files)
</span>
<span class="filelist" style="display: inline;">
(Show modified files &gt;&gt;&gt;)
</span>
</a><%
}
%></td>
</tr><%
boolean alt = true;int count=0;
for (HistoryEntry entry : hist.getHistoryEntries()) {
String rev = entry.getRevision();
if (rev == null || rev.length() == 0) {
rev = "";
}
alt = !alt;
%><tr valign="top" <%= alt ? "class=\"alt\"" : "" %>><%
if (isDir) {
%><td>&nbsp;<%=rev%>&nbsp;</td><%
} else {
if (entry.isActive()) {
String rp = Util.URIEncodePath(path);
%><td>&nbsp;<a name="<%=rev%>" href="<%= context +"/xref" + rp + "?r=" + Util.URIEncode(rev) %>"><%=rev%></a>&nbsp;</td><td align="center">
<input type="radio" <% if (count==0) {%>disabled<% } else if (count==1) {%>checked<%} %> name="r1" value="<%=rp%>@<%=rev%>"/>
<input type="radio" name="r2" <% if (count==0) {%>checked<% } %> value="<%=rp%>@<%=rev%>"/></td><%
} else {
striked = true;
%><td><strike>&nbsp;<%=rev%>&nbsp; </strike></td><td>&nbsp;</td><%
}
}
%><td><%
Date date = entry.getDate();
if (date != null) {
%><%=df.format(date)%><%
} else {
%>&nbsp;<%
}
%>&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><%
count++;
}
%></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"%>