File Diff:

String path = request.getParameter("path"); if (null == path) { response.sendRedirect(response.encodeRedirectURL("index.jsp")); return; } String r1 = request.getParameter("r1"); String r2 = request.getParameter("r2"); FileEntry fent = new FileEntry(env, path); fent.sync(); if (null == r1) r1 = String.valueOf(fent.getHeadRev()-1); if (null == r2) r2 = String.valueOf(fent.getHeadRev()); out.print("File: "+Utils.formatDepotPath(fent.getDepotPath(), "<A href=\"browse.jsp?path={0}\">{1}</A>", "<A href=\"file.jsp?path={0}\">{1}</A>",null, true)); out.print("<BR/>"); out.print("Versions: #"+r1+" to #"+r2); out.print("<HR/>"); String cmd[] = { "p4", "diff2", "-du", path+"#"+r1, path+"#"+r2 }; String l, c; out.println("<PRE style=\"diff\">"); try { P4Process p = new P4Process(env); p.setRawMode(true); p.exec(cmd); while (null != (l = p.readLine())) { if (l.startsWith("text: ")) { l = l.substring(6); } else { continue; } switch (l.charAt(0)) { case '@': c = "diffmacro"; break; case '+': c = "diffadd"; if (1 > l.length()) { l = ""; } else { l = l.substring(1); } break; case '-': c = "diffsub"; if (2 > l.length()) { l = "&nbsp;"; } else { l = l.substring(1); } break; default: c = "diff"; if (2 > l.length()) { l = "&nbsp;"; } else { l = l.substring(1); } break; } l = Utils.HTMLEncode(l); out.println("<SPAN class=\""+c+"\">"+l+"</SPAN>"); } p.close(); } catch (Exception ex) { /* Ignored. */ } out.println("</PRE>");