diff.jsp revision 830
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenCDDL HEADER START
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenThe contents of this file are subject to the terms of the
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenCommon Development and Distribution License (the "License").
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenYou may not use this file except in compliance with the License.
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenSee LICENSE.txt included in this distribution for the specific
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlenlanguage governing permissions and limitations under the License.
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenWhen distributing Covered Code, include this CDDL HEADER in each
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlenfile and include the License file at LICENSE.txt.
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenIf applicable, add the following below this CDDL HEADER, with the
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlenfields enclosed by brackets "[]" replaced with your own identifying
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatleninformation: Portions Copyright [yyyy] [name of copyright owner]
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenCDDL HEADER END
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenCopyright 2009 Sun Microsystems, Inc. All rights reserved.
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenUse is subject to license terms.
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlenident "@(#)diff.jsp 1.2 05/12/01 SMI"
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen--%><%@ page import = "javax.servlet.*,
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlenorg.opensolaris.opengrok.analysis.FileAnalyzer.Genre,
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen%><%@include file="mast.jsp"%><%!
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenString readableLine(int n) {
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen return " " + n;
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders HatlenString[] diffline(String line1, String line2) {
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen String[] ret = new String[2];
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen while (i < l1 && i < l2 && (line1.charAt(i) == line2.charAt(i)))
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen while (j < l1 && j < l2 && (line1.charAt(l1 - j) == line2.charAt(l2 - j)))
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen StringBuilder sb = new StringBuilder(line1);
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen if(i <= l1 - j) {
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen sb.insert(i, "<span class=\"d\">");
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen ret[0] = line1;
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen if(i <= l2 - j) {
a336a7912ecb62fb9310c4f3e50dc622aea4951cKnut Anders Hatlen sb = new StringBuilder(line2);
sb.insert(i, "<span class=\"a\">");
ret[1] = sb.toString();
final String rp1 = request.getParameter("r1");
final String rp2 = request.getParameter("r2");
String srcRoot = environment.getSourceRootFile().getAbsolutePath();
tmp = rp1.split("@");
if (tmp != null && tmp.length == 2) {
rpath1 = new File(srcRoot+URLDecoder.decode(tmp[0], "UTF-8"));
r1 = URLDecoder.decode(tmp[1], "UTF-8");
tmp = rp2.split("@");
if (tmp != null && tmp.length == 2) {
if (tmp != null && tmp.length == 2) {
rpath2 = new File(srcRoot+URLDecoder.decode(tmp[0], "UTF-8"));
r2 = URLDecoder.decode(tmp[1], "UTF-8");
Please pick two revisions to compare the changed from the <a href="<%=context%>/history<%=path%>">history</a>
Genre g = AnalyzerGuru.getGenre(basename);
g = AnalyzerGuru.getGenre(basename);
g = AnalyzerGuru.getGenre(in1);
if (g == Genre.IMAGE) {
<table rules="cols" cellpadding="5"><tr><th><%=basename%> (revision <%=r1%>)</th><th><%=basename%> (revision <%=r2%>)</th></tr>
<tr><td><img src="<%=context%>/raw<%=path%>?r=<%=r1%>"/></td><td><img src="<%=context%>/raw<%=path%>?r=<%=r2%>"/></td></tr></table></div><%
while ((line = reader1.readLine()) != null) {
l1.add(line);
while ((line = reader2.readLine()) != null) {
l2.add(line);
Object[] file1 = l1.toArray();
Object[] file2 = l2.toArray();
Revision rev = Diff.diff(file1, file2);
if(rev.size() == 0) {
String format = request.getParameter("format");
if(format == null || (!format.equals("o") && !format.equals("n") && !format.equals("u") && !format.equals("t")))
String pfull = request.getParameter("full");
boolean full = pfull != null && pfull.equals("1");
%><div id="difftable"><div id="diffbar"><span class="tabsel"> <span class="d"> Deleted </span> <span class="a"> Added </span> </span> | <%
if(format.equals("s")) {
%><span class="tab"><a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=s&full=<%=pfull%>">sdiff</a></span> <%
if(format.equals("u")) {
%><span class="tab"><a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=u&full=<%=pfull%>">udiff</a></span> <%
if(format.equals("t")) {
%><span class="tab"><a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=t&full=<%=pfull%>">text</a></span> <%
if(format.equals("o")) {
%><span class="tab"><a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=o&full=<%=pfull%>">old (<%=r1%>)</a></span> <%
if(format.equals("n")) {
%><span class="tab"><a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=n&full=<%=pfull%>">new (<%=r2%>)</a></span> | <%
%><span class="tab"><a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=1"> full </a></span> <span class="tabsel"><b>compact</b></span><%
%><span class="tabsel"><b> full </b> </span> <span class="tab"> <a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=0">compact</a></span><%
if(format.equals("s")) {
for (int i=0; i < rev.size(); i++) {
Delta d = rev.getDelta(i);
if(format.equals("t")) {
Chunk c1 = d.getOriginal();
Chunk c2 = d.getRevised();
int cn1 = c1.first();
int cl1 = c1.last();
int cn2 = c2.first();
int cl2 = c2.last();
file1[h] = Util.htmlize((String)file1[h]);
file2[h] = Util.htmlize((String)file2[h]);
if (format.equals("u")) {
%><i><%=readableLine(++ln2)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><i><%=readableLine(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><br/>--- <b><%=cn2 - ln2 - 16%> unchanged lines hidden</b> (<a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=1#<%=ln2%>">view full</a>) --- <br/><br/><%
%><i><%=readableLine(++ln2)%></i><%=Util.htmlize((String)file2[j])%><br/><%
} else if(format.equals("s")) {
%><i><%=readableLine(++ln1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><i><%=readableLine(++ln2)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><i><%=readableLine(j+1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><br/>--- <b><%=cn1 - ln1 - 16%> unchanged lines hidden</b> (<a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=1#<%=ln2%>">view full</a>) --- <br/><br/><%
%><i><%=readableLine(++ln1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><i><%=readableLine(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><br/>--- <b><%=cn2 - ln2 - 16%> unchanged lines hidden</b> (<a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=1#<%=ln2%>">view full</a>) --- <br/><br/><%
%><i><%=readableLine(++ln2)%></i><%=Util.htmlize((String)file2[j])%><br/><%
} else if ( format.equals("o")) {
%><i><%=readableLine(++ln1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><i><%=readableLine(j+1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><br/>--- <b><%=cn1 - ln1 - 16%> unchanged lines hidden</b> (<a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=1#<%=ln1%>">view full</a>) --- <br/><br/><%
%><i><%=readableLine(++ln1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
} else if ( format.equals("n")) {
%><i><%=readableLine(++ln2)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><i><%=readableLine(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><br/>--- <b><%=cn2 - ln2 - 16%> unchanged lines hidden</b> (<a href="<%=reqURI%>?r1=<%=rp1%>&r2=<%=rp2%>&format=<%=format%>&full=1#<%=ln2%>">view full</a>) --- <br/><br/><%
%><i><%=readableLine(++ln2)%></i><%=Util.htmlize((String)file2[j])%><br/><%
if (file1.length >= ln1) {
if (format.equals("s")) {
if (full || file1.length - ln1 < 20) {
for (int j = ln1; j < file1.length ; j++) {
%><i><%=(j+1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
for (int j = ln2; j < file2.length ; j++) {
%><i><%=(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><i><%=(j+1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><br/> --- <b><%=file1.length - ln1 - 8%> unchanged lines hidden</b> --- </td><td><%
%><i><%=(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><br/>--- <b><%=file1.length - ln1 - 8%> unchanged lines hidden</b> ---</td></tr></table><%
} else if (format.equals("u")) {
if (full || file2.length - ln2 < 20) {
for (int j = ln2; j < file2.length ; j++) {
%><i><%=(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><i><%=(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><br/>--- <b><%=file2.length - ln2 - 8%> unchanged lines hidden</b> ---</td></tr></table><%
} else if (format.equals("o")) {
if (full || file1.length - ln1 < 20) {
for (int j = ln1; j < file1.length ; j++) {
%><i><%=(j+1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><i><%=(j+1)%></i><%=Util.htmlize((String)file1[j])%><br/><%
%><br/> --- <b><%=file1.length - ln1 - 8%> unchanged lines hidden</b> ---<br/><%
} else if (format.equals("n")) {
if (full || file2.length - ln2 < 20) {
for (int j = ln2; j < file2.length ; j++) {
%><i><%=(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><i><%=(j+1)%></i><%=Util.htmlize((String)file2[j])%><br/><%
%><br/> --- <b><%=file2.length - ln2 - 8%> unchanged lines hidden</b> ---<br/><%
%> <div id="src">Diffs for binary files cannot be displayed! Files are <a href="<%=context%>/raw<%=path%>?r=<%=r1%>"><%=basename%>(revision <%=r1%>)</a> and
%><div class="src"><h3 class="error">Error Opening files! <%=Util.htmlize(e.getMessage())%></h3></div><%
in1.close();
in2.close();
} else if (g == Genre.IMAGE) {
<table rules="cols" cellpadding="5"><tr><th><%=basename%> (revision <%=r1%>)</th><th><%=basename%> (revision <%=r2%>)</th></tr>
<tr><td><img src="<%=context%>/raw<%=path%>?r=<%=r1%>"/></td><td><img src="<%=context%>/raw<%=path%>?r=<%=r2%>"/></td></tr></table></div><%
%> <div class="src">Diffs for binary files cannot be displayed. Files are <a href="<%=context%>/raw<%=path%>?r=<%=r1%>"><%=basename%>(revision <%=r1%>)</a> and
%><%@include file="foot.jspf"%><%