1*0d40e9d0SAdam Hornáček<%-- 2*0d40e9d0SAdam Hornáček$Id$ 3*0d40e9d0SAdam Hornáček 4*0d40e9d0SAdam HornáčekCDDL HEADER START 5*0d40e9d0SAdam Hornáček 6*0d40e9d0SAdam HornáčekThe contents of this file are subject to the terms of the 7*0d40e9d0SAdam HornáčekCommon Development and Distribution License (the "License"). 8*0d40e9d0SAdam HornáčekYou may not use this file except in compliance with the License. 9*0d40e9d0SAdam Hornáček 10*0d40e9d0SAdam HornáčekSee LICENSE.txt included in this distribution for the specific 11*0d40e9d0SAdam Hornáčeklanguage governing permissions and limitations under the License. 12*0d40e9d0SAdam Hornáček 13*0d40e9d0SAdam HornáčekWhen distributing Covered Code, include this CDDL HEADER in each 14*0d40e9d0SAdam Hornáčekfile and include the License file at LICENSE.txt. 15*0d40e9d0SAdam HornáčekIf applicable, add the following below this CDDL HEADER, with the 16*0d40e9d0SAdam Hornáčekfields enclosed by brackets "[]" replaced with your own identifying 17*0d40e9d0SAdam Hornáčekinformation: Portions Copyright [yyyy] [name of copyright owner] 18*0d40e9d0SAdam Hornáček 19*0d40e9d0SAdam HornáčekCDDL HEADER END 20*0d40e9d0SAdam Hornáček 21*0d40e9d0SAdam HornáčekCopyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. 22*0d40e9d0SAdam Hornáček 23*0d40e9d0SAdam HornáčekPortions Copyright 2011 Jens Elkner. 24*0d40e9d0SAdam Hornáček--%><%@page errorPage="error.jsp" import=" 25*0d40e9d0SAdam Hornáčekjava.io.ByteArrayInputStream, 26*0d40e9d0SAdam Hornáčekjava.io.OutputStream, 27*0d40e9d0SAdam Hornáčekjava.io.BufferedReader, 28*0d40e9d0SAdam Hornáčekjava.io.FileNotFoundException, 29*0d40e9d0SAdam Hornáčekjava.io.InputStream, 30*0d40e9d0SAdam Hornáčekjava.io.InputStreamReader, 31*0d40e9d0SAdam Hornáčekjava.io.UnsupportedEncodingException, 32*0d40e9d0SAdam Hornáčekjava.net.URLDecoder, 33*0d40e9d0SAdam Hornáčekjava.util.ArrayList, 34*0d40e9d0SAdam Hornáček 35*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Chunk, 36*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Delta, 37*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Diff, 38*0d40e9d0SAdam Hornáčekorg.apache.commons.jrcs.diff.Revision, 39*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.analysis.AnalyzerGuru, 40*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.analysis.FileAnalyzer.Genre, 41*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.DiffData, 42*0d40e9d0SAdam Hornáčekorg.opensolaris.opengrok.web.DiffType" 43*0d40e9d0SAdam Hornáček%><%! 44*0d40e9d0SAdam Hornáčekprivate String getAnnotateRevision(DiffData data) { 45*0d40e9d0SAdam Hornáček if (data.type == DiffType.OLD || data.type == DiffType.NEW) { 46*0d40e9d0SAdam Hornáček String rev = data.rev[data.type == DiffType.NEW ? 1 : 0]; 47*0d40e9d0SAdam Hornáček return "<script type=\"text/javascript\">/* <![CDATA[ */ " 48*0d40e9d0SAdam Hornáček + "document.rev = function() { return " + Util.htmlize(Util.jsStringLiteral(rev)) 49*0d40e9d0SAdam Hornáček + "; } /* ]]> */</script>"; 50*0d40e9d0SAdam Hornáček } 51*0d40e9d0SAdam Hornáček return ""; 52*0d40e9d0SAdam Hornáček} 53*0d40e9d0SAdam Hornáček%> 54*0d40e9d0SAdam Hornáček<% 55*0d40e9d0SAdam Hornáček{ 56*0d40e9d0SAdam Hornáček PageConfig cfg = PageConfig.get(request); 57*0d40e9d0SAdam Hornáček cfg.addScript("diff"); 58*0d40e9d0SAdam Hornáček cfg.checkSourceRootExistence(); 59*0d40e9d0SAdam Hornáček /** 60*0d40e9d0SAdam Hornáček * This block must be the first block before any other output in the 61*0d40e9d0SAdam Hornáček * response. 62*0d40e9d0SAdam Hornáček * 63*0d40e9d0SAdam Hornáček * If there is already any output written into the response and we 64*0d40e9d0SAdam Hornáček * use the same response and reset the content and the headers then we have 65*0d40e9d0SAdam Hornáček * a collision with the response streams and the "getOutputStream() has 66*0d40e9d0SAdam Hornáček * already been called" exception occurs. 67*0d40e9d0SAdam Hornáček */ 68*0d40e9d0SAdam Hornáček DiffData data = cfg.getDiffData(); 69*0d40e9d0SAdam Hornáček request.setAttribute("diff.jsp-data", data); 70*0d40e9d0SAdam Hornáček if (data.type == DiffType.TEXT 71*0d40e9d0SAdam Hornáček && request.getParameter("action") != null 72*0d40e9d0SAdam Hornáček && request.getParameter("action").equals("download")) { 73*0d40e9d0SAdam Hornáček try (OutputStream o = response.getOutputStream()) { 74*0d40e9d0SAdam Hornáček for (int i = 0; i < data.revision.size(); i++) { 75*0d40e9d0SAdam Hornáček Delta d = data.revision.getDelta(i); 76*0d40e9d0SAdam Hornáček try (InputStream in = new ByteArrayInputStream(d.toString().getBytes("UTF-8"))) { 77*0d40e9d0SAdam Hornáček response.setHeader("content-disposition", "attachment; filename=" 78*0d40e9d0SAdam Hornáček + cfg.getResourceFile().getName() + "@" + data.rev[0] 79*0d40e9d0SAdam Hornáček + "-" + data.rev[1] + ".diff"); 80*0d40e9d0SAdam Hornáček byte[] buffer = new byte[8192]; 81*0d40e9d0SAdam Hornáček int nr; 82*0d40e9d0SAdam Hornáček while ((nr = in.read(buffer)) > 0) { 83*0d40e9d0SAdam Hornáček o.write(buffer, 0, nr); 84*0d40e9d0SAdam Hornáček } 85*0d40e9d0SAdam Hornáček } 86*0d40e9d0SAdam Hornáček } 87*0d40e9d0SAdam Hornáček o.flush(); 88*0d40e9d0SAdam Hornáček o.close(); 89*0d40e9d0SAdam Hornáček return; 90*0d40e9d0SAdam Hornáček } 91*0d40e9d0SAdam Hornáček } 92*0d40e9d0SAdam Hornáček} 93*0d40e9d0SAdam Hornáček%><%@ 94*0d40e9d0SAdam Hornáček 95*0d40e9d0SAdam Hornáčekinclude file="mast.jsp" 96*0d40e9d0SAdam Hornáček 97*0d40e9d0SAdam Hornáček%><% 98*0d40e9d0SAdam Hornáček/* ---------------------- diff.jsp start --------------------- */ 99*0d40e9d0SAdam Hornáček{ 100*0d40e9d0SAdam Hornáček PageConfig cfg = PageConfig.get(request); 101*0d40e9d0SAdam Hornáček DiffData data = (DiffData) request.getAttribute("diff.jsp-data"); 102*0d40e9d0SAdam Hornáček 103*0d40e9d0SAdam Hornáček // the data is never null as the getDiffData always return valid object 104*0d40e9d0SAdam Hornáček if (data.errorMsg != null) { 105*0d40e9d0SAdam Hornáček 106*0d40e9d0SAdam Hornáček%> 107*0d40e9d0SAdam Hornáček<div class="src"> 108*0d40e9d0SAdam Hornáček <h3 class="error">Error:</h3> 109*0d40e9d0SAdam Hornáček <p><%= data.errorMsg %></p> 110*0d40e9d0SAdam Hornáček</div><% 111*0d40e9d0SAdam Hornáček } else if (data.genre == Genre.IMAGE) { 112*0d40e9d0SAdam Hornáček 113*0d40e9d0SAdam Hornáček String link = request.getContextPath() + Prefix.DOWNLOAD_P 114*0d40e9d0SAdam Hornáček + Util.htmlize(cfg.getPath()); 115*0d40e9d0SAdam Hornáček%> 116*0d40e9d0SAdam Hornáček<div id="difftable"> 117*0d40e9d0SAdam Hornáček <table class="image"> 118*0d40e9d0SAdam Hornáček <thead> 119*0d40e9d0SAdam Hornáček <tr><th><%= data.filename %> (revision <%= data.rev[0] %>)</th> 120*0d40e9d0SAdam Hornáček <th><%= data.filename %> (revision <%= data.rev[1] %>)</th> 121*0d40e9d0SAdam Hornáček </tr> 122*0d40e9d0SAdam Hornáček </thead> 123*0d40e9d0SAdam Hornáček <tbody> 124*0d40e9d0SAdam Hornáček <tr><td><img src="<%= link %>?r=<%= data.rev[0] %>"/></td> 125*0d40e9d0SAdam Hornáček <td><img src="<%= link %>?r=<%= data.rev[1] %>"/></td> 126*0d40e9d0SAdam Hornáček </tr> 127*0d40e9d0SAdam Hornáček </tbody> 128*0d40e9d0SAdam Hornáček </table> 129*0d40e9d0SAdam Hornáček</div><% 130*0d40e9d0SAdam Hornáček 131*0d40e9d0SAdam Hornáček } else if (data.genre != Genre.PLAIN && data.genre != Genre.HTML) { 132*0d40e9d0SAdam Hornáček 133*0d40e9d0SAdam Hornáček String link = request.getContextPath() + Prefix.DOWNLOAD_P 134*0d40e9d0SAdam Hornáček + Util.htmlize(cfg.getPath()); 135*0d40e9d0SAdam Hornáček%> 136*0d40e9d0SAdam Hornáček<div id="src">Diffs for binary files cannot be displayed! Files are <a 137*0d40e9d0SAdam Hornáček href="<%= link %>?r=<%= data.rev[0] %>"><%= 138*0d40e9d0SAdam Hornáček data.filename %>(revision <%= data.rev[0] %>)</a> and <a 139*0d40e9d0SAdam Hornáček href="<%= link %>?r=<%= data.rev[1] %>"><%= 140*0d40e9d0SAdam Hornáček data.filename %>(revision <%= data.rev[1] %>)</a>. 141*0d40e9d0SAdam Hornáček</div><% 142*0d40e9d0SAdam Hornáček 143*0d40e9d0SAdam Hornáček } else if (data.revision.size() == 0) { 144*0d40e9d0SAdam Hornáček %> 145*0d40e9d0SAdam Hornáček <%= getAnnotateRevision(data) %> 146*0d40e9d0SAdam Hornáček <b>No differences found!</b><% 147*0d40e9d0SAdam Hornáček 148*0d40e9d0SAdam Hornáček } else { 149*0d40e9d0SAdam Hornáček //-------- Do THE DIFFS ------------ 150*0d40e9d0SAdam Hornáček int ln1 = 0; 151*0d40e9d0SAdam Hornáček int ln2 = 0; 152*0d40e9d0SAdam Hornáček String rp1 = data.param[0]; 153*0d40e9d0SAdam Hornáček String rp2 = data.param[1]; 154*0d40e9d0SAdam Hornáček String reqURI = request.getRequestURI(); 155*0d40e9d0SAdam Hornáček String[] file1 = data.file[0]; 156*0d40e9d0SAdam Hornáček String[] file2 = data.file[1]; 157*0d40e9d0SAdam Hornáček 158*0d40e9d0SAdam Hornáček DiffType type = data.type; 159*0d40e9d0SAdam Hornáček boolean full = data.full; 160*0d40e9d0SAdam Hornáček%> 161*0d40e9d0SAdam Hornáček<%= getAnnotateRevision(data) %> 162*0d40e9d0SAdam Hornáček<div id="diffbar"> 163*0d40e9d0SAdam Hornáček <div class="legend"> 164*0d40e9d0SAdam Hornáček <span class="d">Deleted</span> 165*0d40e9d0SAdam Hornáček <span class="a">Added</span> 166*0d40e9d0SAdam Hornáček </div> 167*0d40e9d0SAdam Hornáček <div class="tabs"><% 168*0d40e9d0SAdam Hornáček for (DiffType t : DiffType.values()) { 169*0d40e9d0SAdam Hornáček if (type == t) { 170*0d40e9d0SAdam Hornáček %> <span class="active"><%= t.toString() %><% 171*0d40e9d0SAdam Hornáček if (t == DiffType.OLD) { 172*0d40e9d0SAdam Hornáček %> ( <%= data.rev[0] %> )<% 173*0d40e9d0SAdam Hornáček } else if (t == DiffType.NEW) { 174*0d40e9d0SAdam Hornáček %> ( <%= data.rev[1] %> )<% 175*0d40e9d0SAdam Hornáček } 176*0d40e9d0SAdam Hornáček %></span><% 177*0d40e9d0SAdam Hornáček } else { 178*0d40e9d0SAdam Hornáček %> <span><a href="<%= reqURI %>?r1=<%= rp1 %>&r2=<%= rp2 179*0d40e9d0SAdam Hornáček %>&format=<%= t.getAbbrev() %>&full=<%= full ? '1' : '0' 180*0d40e9d0SAdam Hornáček %>"><%= t.toString() %><% 181*0d40e9d0SAdam Hornáček if (t == DiffType.OLD) { 182*0d40e9d0SAdam Hornáček %> ( <%= data.rev[0] %> )<% 183*0d40e9d0SAdam Hornáček } else if (t == DiffType.NEW) { 184*0d40e9d0SAdam Hornáček %> ( <%= data.rev[1] %> )<% 185*0d40e9d0SAdam Hornáček } 186*0d40e9d0SAdam Hornáček %></a></span><% 187*0d40e9d0SAdam Hornáček } 188*0d40e9d0SAdam Hornáček } 189*0d40e9d0SAdam Hornáček %></div> 190*0d40e9d0SAdam Hornáček <div class="ctype"><% 191*0d40e9d0SAdam Hornáček if (!full) { 192*0d40e9d0SAdam Hornáček %> 193*0d40e9d0SAdam Hornáček <span><a href="<%= reqURI %>?r1=<%= rp1 %>&r2=<%= rp2 194*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() %>&full=1">full</a></span> 195*0d40e9d0SAdam Hornáček <span class="active">compact</span><% 196*0d40e9d0SAdam Hornáček } else { 197*0d40e9d0SAdam Hornáček %> 198*0d40e9d0SAdam Hornáček <span class="active">full</span> 199*0d40e9d0SAdam Hornáček <span> <a href="<%= reqURI %>?r1=<%= rp1 %>&r2=<%= rp2 200*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() %>&full=0">compact</a></span><% 201*0d40e9d0SAdam Hornáček } 202*0d40e9d0SAdam Hornáček %><span><a href="#" id="toggle-jumper">jumper</a></span> 203*0d40e9d0SAdam Hornáček <span><a href="<%= reqURI %>?r1=<%= rp1 %>&r2=<%= rp2 %>&format=<%= DiffType.TEXT %>&action=download">download diff</a></span><% 204*0d40e9d0SAdam Hornáček %></div> 205*0d40e9d0SAdam Hornáček</div> 206*0d40e9d0SAdam Hornáček 207*0d40e9d0SAdam Hornáček<div id="difftable"> 208*0d40e9d0SAdam Hornáček <div class="pre"><% 209*0d40e9d0SAdam Hornáček if (type == DiffType.SIDEBYSIDE || type == DiffType.UNIFIED) { 210*0d40e9d0SAdam Hornáček %><table class="plain"><% 211*0d40e9d0SAdam Hornáček if (type == DiffType.SIDEBYSIDE) { 212*0d40e9d0SAdam Hornáček %> 213*0d40e9d0SAdam Hornáček <thead><tr> 214*0d40e9d0SAdam Hornáček <th><%= data.filename %> (<%= data.rev[0] %>)</th> 215*0d40e9d0SAdam Hornáček <th><%= data.filename %> (<%= data.rev[1] %>)</th> 216*0d40e9d0SAdam Hornáček </tr></thead><% 217*0d40e9d0SAdam Hornáček } 218*0d40e9d0SAdam Hornáček %> 219*0d40e9d0SAdam Hornáček <tbody><% 220*0d40e9d0SAdam Hornáček } 221*0d40e9d0SAdam Hornáček 222*0d40e9d0SAdam Hornáček for (int i=0; i < data.revision.size(); i++) { 223*0d40e9d0SAdam Hornáček Delta d = data.revision.getDelta(i); 224*0d40e9d0SAdam Hornáček if (type == DiffType.TEXT) { 225*0d40e9d0SAdam Hornáček %><%= Util.htmlize(d.toString()) %><% 226*0d40e9d0SAdam Hornáček } else { 227*0d40e9d0SAdam Hornáček Chunk c1 = d.getOriginal(); 228*0d40e9d0SAdam Hornáček Chunk c2 = d.getRevised(); 229*0d40e9d0SAdam Hornáček int cn1 = c1.first(); 230*0d40e9d0SAdam Hornáček int cl1 = c1.last(); 231*0d40e9d0SAdam Hornáček int cn2 = c2.first(); 232*0d40e9d0SAdam Hornáček int cl2 = c2.last(); 233*0d40e9d0SAdam Hornáček 234*0d40e9d0SAdam Hornáček int i1 = cn1, i2 = cn2; 235*0d40e9d0SAdam Hornáček StringBuilder bl1 = new StringBuilder(80); 236*0d40e9d0SAdam Hornáček StringBuilder bl2 = new StringBuilder(80); 237*0d40e9d0SAdam Hornáček for (; i1 <= cl1 && i2 <= cl2; i1++, i2++) { 238*0d40e9d0SAdam Hornáček String[] ss = Util.diffline( 239*0d40e9d0SAdam Hornáček new StringBuilder(file1[i1]), 240*0d40e9d0SAdam Hornáček new StringBuilder(file2[i2])); 241*0d40e9d0SAdam Hornáček file1[i1] = ss[0]; 242*0d40e9d0SAdam Hornáček file2[i2] = ss[1]; 243*0d40e9d0SAdam Hornáček } 244*0d40e9d0SAdam Hornáček // deleted 245*0d40e9d0SAdam Hornáček for (; i1 <= cl1; i1++) { 246*0d40e9d0SAdam Hornáček bl1.setLength(0); 247*0d40e9d0SAdam Hornáček bl1.append("<span class=\"d\">"); 248*0d40e9d0SAdam Hornáček Util.htmlize(file1[i1], bl1); 249*0d40e9d0SAdam Hornáček file1[i1] = bl1.append("</span>").toString(); 250*0d40e9d0SAdam Hornáček } 251*0d40e9d0SAdam Hornáček // added 252*0d40e9d0SAdam Hornáček for (; i2 <= cl2; i2++) { 253*0d40e9d0SAdam Hornáček bl2.setLength(0); 254*0d40e9d0SAdam Hornáček bl2.append("<span class=\"a\">"); 255*0d40e9d0SAdam Hornáček Util.htmlize(file2[i2], bl2); 256*0d40e9d0SAdam Hornáček file2[i2] = bl2.append("</span>").toString(); 257*0d40e9d0SAdam Hornáček } 258*0d40e9d0SAdam Hornáček 259*0d40e9d0SAdam Hornáček if (type == DiffType.UNIFIED) { 260*0d40e9d0SAdam Hornáček// UDIFF 261*0d40e9d0SAdam Hornáček if (cn1 > ln1 || cn2 > ln2) { 262*0d40e9d0SAdam Hornáček %> 263*0d40e9d0SAdam Hornáček <tr class="k"><td><% 264*0d40e9d0SAdam Hornáček if (full || (cn2 - ln2 < 20)) { 265*0d40e9d0SAdam Hornáček for (int j = ln2; j < cn2; j++) { 266*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= 267*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 268*0d40e9d0SAdam Hornáček } 269*0d40e9d0SAdam Hornáček } else { 270*0d40e9d0SAdam Hornáček for (int j = ln2; j < ln2 + 8; j++) { 271*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= 272*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 273*0d40e9d0SAdam Hornáček } 274*0d40e9d0SAdam Hornáček %><br/>--- <b><%= cn2 - ln2 - 16 275*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> (<a href="<%= reqURI 276*0d40e9d0SAdam Hornáček %>?r1=<%= rp1 %>&r2=<%= rp2 277*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() 278*0d40e9d0SAdam Hornáček %>&full=1#<%= ln2 %>">view full</a>) --- <br/><br/><% 279*0d40e9d0SAdam Hornáček ln2 = cn2 - 8; 280*0d40e9d0SAdam Hornáček for (int j = ln2; j < cn2; j++) { 281*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= Util.htmlize(file2[j]) %><br/><% 282*0d40e9d0SAdam Hornáček } 283*0d40e9d0SAdam Hornáček } 284*0d40e9d0SAdam Hornáček %></td> 285*0d40e9d0SAdam Hornáček </tr><% 286*0d40e9d0SAdam Hornáček ln1 = cn1; 287*0d40e9d0SAdam Hornáček } 288*0d40e9d0SAdam Hornáček if (cn1 <= cl1) { 289*0d40e9d0SAdam Hornáček %> 290*0d40e9d0SAdam Hornáček <tr class="chunk"><td><% 291*0d40e9d0SAdam Hornáček for (int j = cn1; j <= cl1 ; j++) { 292*0d40e9d0SAdam Hornáček %><del class="d"><%= ++ln1 %></del><%= file1[j] 293*0d40e9d0SAdam Hornáček %><br/><% 294*0d40e9d0SAdam Hornáček } 295*0d40e9d0SAdam Hornáček %></td> 296*0d40e9d0SAdam Hornáček </tr><% 297*0d40e9d0SAdam Hornáček } 298*0d40e9d0SAdam Hornáček if (cn2 <= cl2) { 299*0d40e9d0SAdam Hornáček %> 300*0d40e9d0SAdam Hornáček <tr class="k<% 301*0d40e9d0SAdam Hornáček if (cn1 > cl1) { 302*0d40e9d0SAdam Hornáček %> chunk<% 303*0d40e9d0SAdam Hornáček } 304*0d40e9d0SAdam Hornáček %>"><td><% 305*0d40e9d0SAdam Hornáček for (int j = cn2; j < cl2; j++) { 306*0d40e9d0SAdam Hornáček %><i class="a"><%= ++ln2 %></i><%= file2[j] 307*0d40e9d0SAdam Hornáček %><br/><% 308*0d40e9d0SAdam Hornáček } 309*0d40e9d0SAdam Hornáček %><i class="a"><%= ++ln2 %></i><%= file2[cl2] %><% 310*0d40e9d0SAdam Hornáček if(full) { 311*0d40e9d0SAdam Hornáček %><a name="<%= ln2 %>" /><% 312*0d40e9d0SAdam Hornáček } 313*0d40e9d0SAdam Hornáček %></td> 314*0d40e9d0SAdam Hornáček </tr><% 315*0d40e9d0SAdam Hornáček } 316*0d40e9d0SAdam Hornáček } else if (type == DiffType.SIDEBYSIDE) { 317*0d40e9d0SAdam Hornáček// SDIFF 318*0d40e9d0SAdam Hornáček if (cn1 > ln1 || cn2 > ln2) { 319*0d40e9d0SAdam Hornáček %> 320*0d40e9d0SAdam Hornáček <tr class="k"><td><% 321*0d40e9d0SAdam Hornáček if (full || cn2 - ln2 < 20) { 322*0d40e9d0SAdam Hornáček for (int j = ln1; j < cn1; j++) { 323*0d40e9d0SAdam Hornáček %><i><%= ++ln1 %></i><%= 324*0d40e9d0SAdam Hornáček Util.htmlize(file1[j]) %><br/><% 325*0d40e9d0SAdam Hornáček } 326*0d40e9d0SAdam Hornáček %></td><td><% 327*0d40e9d0SAdam Hornáček for (int j = ln2; j < cn2 ; j++) { 328*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= 329*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 330*0d40e9d0SAdam Hornáček } 331*0d40e9d0SAdam Hornáček } else { 332*0d40e9d0SAdam Hornáček for (int j = ln1; j < ln1 + 8; j++) { 333*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= 334*0d40e9d0SAdam Hornáček Util.htmlize(file1[j]) %><br/><% 335*0d40e9d0SAdam Hornáček } 336*0d40e9d0SAdam Hornáček %><br/>--- <b><%= cn1 - ln1 - 16 337*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> (<a href="<%= reqURI 338*0d40e9d0SAdam Hornáček %>?r1=<%= rp1 %>&r2=<%= rp2 339*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() 340*0d40e9d0SAdam Hornáček %>&full=1#<%= ln2 %>">view full</a>) --- <br/><br/><% 341*0d40e9d0SAdam Hornáček ln1 = cn1 - 8; 342*0d40e9d0SAdam Hornáček for (int j = ln1; j < cn1; j++) { 343*0d40e9d0SAdam Hornáček %><i><%= ++ln1 %></i><%= 344*0d40e9d0SAdam Hornáček Util.htmlize(file1[j]) %><br/><% 345*0d40e9d0SAdam Hornáček } 346*0d40e9d0SAdam Hornáček %></td><td><% 347*0d40e9d0SAdam Hornáček for (int j = ln2; j < ln2 + 8; j++) { 348*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= 349*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 350*0d40e9d0SAdam Hornáček } 351*0d40e9d0SAdam Hornáček %><br/>--- <b><%= cn2 - ln2 - 16 352*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> (<a href="<%= reqURI 353*0d40e9d0SAdam Hornáček %>?r1=<%= rp1 %>&r2=<%= rp2 354*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() 355*0d40e9d0SAdam Hornáček %>&full=1#<%= ln2 %>">view full</a>) --- <br/><br/><% 356*0d40e9d0SAdam Hornáček ln2 = cn2 - 8; 357*0d40e9d0SAdam Hornáček for (int j = ln2; j < cn2; j++) { 358*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= 359*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 360*0d40e9d0SAdam Hornáček } 361*0d40e9d0SAdam Hornáček } 362*0d40e9d0SAdam Hornáček %></td> 363*0d40e9d0SAdam Hornáček </tr><% 364*0d40e9d0SAdam Hornáček } 365*0d40e9d0SAdam Hornáček %> 366*0d40e9d0SAdam Hornáček <tr class="k chunk"><td><% 367*0d40e9d0SAdam Hornáček for (int j = cn1; j <= cl1; j++) { 368*0d40e9d0SAdam Hornáček %><i><%= ++ln1 %></i><%= file1[j] %><br/><% 369*0d40e9d0SAdam Hornáček } 370*0d40e9d0SAdam Hornáček %></td><td><% 371*0d40e9d0SAdam Hornáček for (int j = cn2; j <= cl2; j++) { 372*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><a name="<%= ln2 %>"></a><%= 373*0d40e9d0SAdam Hornáček file2[j] %><br/><% 374*0d40e9d0SAdam Hornáček } 375*0d40e9d0SAdam Hornáček %></td> 376*0d40e9d0SAdam Hornáček </tr><% 377*0d40e9d0SAdam Hornáček// OLD 378*0d40e9d0SAdam Hornáček } else if (type == DiffType.OLD) { 379*0d40e9d0SAdam Hornáček // OLD 380*0d40e9d0SAdam Hornáček if (cn1 > ln1) { 381*0d40e9d0SAdam Hornáček if (full || cn1 - ln1 < 20) { 382*0d40e9d0SAdam Hornáček for (int j = ln1; j < cn1; j++) { 383*0d40e9d0SAdam Hornáček %><i><%= ++ln1 %></i><%= 384*0d40e9d0SAdam Hornáček Util.htmlize(file1[j]) %><br/><% 385*0d40e9d0SAdam Hornáček } 386*0d40e9d0SAdam Hornáček } else { 387*0d40e9d0SAdam Hornáček for (int j = ln1; j < ln1 + 8; j++) { 388*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= 389*0d40e9d0SAdam Hornáček Util.htmlize(file1[j]) %><br/><% 390*0d40e9d0SAdam Hornáček } 391*0d40e9d0SAdam Hornáček %><br/>--- <b><%= cn1 - ln1 - 16 392*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> (<a href="<%= reqURI 393*0d40e9d0SAdam Hornáček %>?r1=<%= rp1 %>&r2=<%= rp2 394*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() 395*0d40e9d0SAdam Hornáček %>&full=1#<%=ln1%>">view full</a>) --- <br/><br/><% 396*0d40e9d0SAdam Hornáček ln1 = cn1 - 8; 397*0d40e9d0SAdam Hornáček for (int j = ln1; j < cn1; j++) { 398*0d40e9d0SAdam Hornáček %><i><%= ++ln1 %></i><%= 399*0d40e9d0SAdam Hornáček Util.htmlize(file1[j]) %><br/><% 400*0d40e9d0SAdam Hornáček } 401*0d40e9d0SAdam Hornáček } 402*0d40e9d0SAdam Hornáček } 403*0d40e9d0SAdam Hornáček for (int j = cn1; j <= cl1 ; j++) { 404*0d40e9d0SAdam Hornáček %><i><%= ++ln1 %></i><%= file1[j] %><br/><% 405*0d40e9d0SAdam Hornáček } 406*0d40e9d0SAdam Hornáček if (full) { 407*0d40e9d0SAdam Hornáček %><a name="<%=ln1%>" ></a><% 408*0d40e9d0SAdam Hornáček } 409*0d40e9d0SAdam Hornáček// NEW 410*0d40e9d0SAdam Hornáček } else if (type == DiffType.NEW) { 411*0d40e9d0SAdam Hornáček if (cn2 > ln2) { 412*0d40e9d0SAdam Hornáček if (full || cn2 - ln2 < 20) { 413*0d40e9d0SAdam Hornáček for (int j = ln2; j < cn2 ; j++) { 414*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= 415*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 416*0d40e9d0SAdam Hornáček } 417*0d40e9d0SAdam Hornáček } else { 418*0d40e9d0SAdam Hornáček for (int j = ln2; j < ln2 + 8; j++) { 419*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= 420*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 421*0d40e9d0SAdam Hornáček } 422*0d40e9d0SAdam Hornáček %><br/>--- <b><%= cn2 - ln2 - 16 423*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> (<a href="<%= reqURI 424*0d40e9d0SAdam Hornáček %>?r1=<%= rp1 %>&r2=<%= rp2 425*0d40e9d0SAdam Hornáček %>&format=<%= type.getAbbrev() 426*0d40e9d0SAdam Hornáček %>&full=1#<%= ln2 %>">view full</a>) --- <br/><br/><% 427*0d40e9d0SAdam Hornáček ln2 = cn2 - 8; 428*0d40e9d0SAdam Hornáček for (int j = ln2; j < cn2; j++) { 429*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= 430*0d40e9d0SAdam Hornáček Util.htmlize(file2[j]) %><br/><% 431*0d40e9d0SAdam Hornáček } 432*0d40e9d0SAdam Hornáček } 433*0d40e9d0SAdam Hornáček } 434*0d40e9d0SAdam Hornáček for (int j = cn2; j <= cl2 ; j++) { 435*0d40e9d0SAdam Hornáček %><i><%= ++ln2 %></i><%= file2[j] %><br/><% 436*0d40e9d0SAdam Hornáček } 437*0d40e9d0SAdam Hornáček if (full) { 438*0d40e9d0SAdam Hornáček %><a name="<%= ln2 %>"></a><% 439*0d40e9d0SAdam Hornáček } 440*0d40e9d0SAdam Hornáček } 441*0d40e9d0SAdam Hornáček } // else 442*0d40e9d0SAdam Hornáček } // for 443*0d40e9d0SAdam Hornáček// deltas done, dump the remaining 444*0d40e9d0SAdam Hornáček if (file1.length >= ln1) { 445*0d40e9d0SAdam Hornáček if (type == DiffType.SIDEBYSIDE) { 446*0d40e9d0SAdam Hornáček if (full || file1.length - ln1 < 20) { 447*0d40e9d0SAdam Hornáček %> 448*0d40e9d0SAdam Hornáček <tr><td><% 449*0d40e9d0SAdam Hornáček for (int j = ln1; j < file1.length ; j++) { 450*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><% 451*0d40e9d0SAdam Hornáček } 452*0d40e9d0SAdam Hornáček %></td><td><% 453*0d40e9d0SAdam Hornáček for (int j = ln2; j < file2.length ; j++) { 454*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><% 455*0d40e9d0SAdam Hornáček } 456*0d40e9d0SAdam Hornáček %></td> 457*0d40e9d0SAdam Hornáček </tr> 458*0d40e9d0SAdam Hornáček </tbody> 459*0d40e9d0SAdam Hornáček </table><% 460*0d40e9d0SAdam Hornáček } else { 461*0d40e9d0SAdam Hornáček %> 462*0d40e9d0SAdam Hornáček <tr><td><% 463*0d40e9d0SAdam Hornáček for (int j = ln1; j < ln1 + 8 ; j++) { 464*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><% 465*0d40e9d0SAdam Hornáček } 466*0d40e9d0SAdam Hornáček %><br/> --- <b><%= file1.length - ln1 - 8 467*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> --- </td><td><% 468*0d40e9d0SAdam Hornáček for (int j = ln2; j < ln2 + 8 ; j++) { 469*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><% 470*0d40e9d0SAdam Hornáček } 471*0d40e9d0SAdam Hornáček %><br/>--- <b><%= file1.length - ln1 - 8 472*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> ---</td> 473*0d40e9d0SAdam Hornáček </tr> 474*0d40e9d0SAdam Hornáček </tbody> 475*0d40e9d0SAdam Hornáček </table><% 476*0d40e9d0SAdam Hornáček } 477*0d40e9d0SAdam Hornáček } else if (type == DiffType.UNIFIED) { 478*0d40e9d0SAdam Hornáček if (full || file2.length - ln2 < 20) { 479*0d40e9d0SAdam Hornáček %> 480*0d40e9d0SAdam Hornáček <tr><td><% 481*0d40e9d0SAdam Hornáček for (int j = ln2; j < file2.length ; j++) { 482*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><% 483*0d40e9d0SAdam Hornáček } 484*0d40e9d0SAdam Hornáček %></td> 485*0d40e9d0SAdam Hornáček </tr> 486*0d40e9d0SAdam Hornáček </tbody> 487*0d40e9d0SAdam Hornáček </table><% 488*0d40e9d0SAdam Hornáček } else { 489*0d40e9d0SAdam Hornáček %> 490*0d40e9d0SAdam Hornáček <tr><td><% 491*0d40e9d0SAdam Hornáček for (int j = ln2; j < ln2 + 8 ; j++) { 492*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><% 493*0d40e9d0SAdam Hornáček } 494*0d40e9d0SAdam Hornáček %><br/>--- <b><%= file2.length - ln2 - 8 495*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> ---</td> 496*0d40e9d0SAdam Hornáček </tr> 497*0d40e9d0SAdam Hornáček </tbody> 498*0d40e9d0SAdam Hornáček </table><% 499*0d40e9d0SAdam Hornáček } 500*0d40e9d0SAdam Hornáček } else if (type == DiffType.OLD) { 501*0d40e9d0SAdam Hornáček if (full || file1.length - ln1 < 20) { 502*0d40e9d0SAdam Hornáček for (int j = ln1; j < file1.length ; j++) { 503*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><% 504*0d40e9d0SAdam Hornáček } 505*0d40e9d0SAdam Hornáček } else { 506*0d40e9d0SAdam Hornáček for (int j = ln1; j < ln1 + 8 ; j++) { 507*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file1[j]) %><br/><% 508*0d40e9d0SAdam Hornáček } 509*0d40e9d0SAdam Hornáček %><br/> --- <b><%= file1.length - ln1 - 8 510*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> ---<br/><% 511*0d40e9d0SAdam Hornáček } 512*0d40e9d0SAdam Hornáček } else if (type == DiffType.NEW) { 513*0d40e9d0SAdam Hornáček if (full || file2.length - ln2 < 20) { 514*0d40e9d0SAdam Hornáček for (int j = ln2; j < file2.length ; j++) { 515*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%=Util.htmlize(file2[j])%><br/><% 516*0d40e9d0SAdam Hornáček } 517*0d40e9d0SAdam Hornáček } else { 518*0d40e9d0SAdam Hornáček for (int j = ln2; j < ln2 + 8 ; j++) { 519*0d40e9d0SAdam Hornáček %><i><%= j+1 %></i><%= Util.htmlize(file2[j]) %><br/><% 520*0d40e9d0SAdam Hornáček } 521*0d40e9d0SAdam Hornáček %><br/> --- <b><%= file2.length - ln2 - 8 522*0d40e9d0SAdam Hornáček %> unchanged lines hidden</b> ---<br/><% 523*0d40e9d0SAdam Hornáček } 524*0d40e9d0SAdam Hornáček } 525*0d40e9d0SAdam Hornáček } 526*0d40e9d0SAdam Hornáček 527*0d40e9d0SAdam Hornáček//----DIFFS Done-------- 528*0d40e9d0SAdam Hornáček %></div> 529*0d40e9d0SAdam Hornáček</div><% 530*0d40e9d0SAdam Hornáček } 531*0d40e9d0SAdam Hornáček} 532*0d40e9d0SAdam Hornáček/* ---------------------- diff.jsp end --------------------- */ 533*0d40e9d0SAdam Hornáček%><%@ 534*0d40e9d0SAdam Hornáček 535*0d40e9d0SAdam Hornáčekinclude file="foot.jspf" 536*0d40e9d0SAdam Hornáček 537*0d40e9d0SAdam Hornáček%>