1.1 --- a/vcs.profiles.teamware/src/org/netbeans/modules/vcs/profiles/teamware/util/SFile.java Sun Jul 03 20:05:11 2005 +0000
1.2 +++ b/vcs.profiles.teamware/src/org/netbeans/modules/vcs/profiles/teamware/util/SFile.java Mon Jul 04 17:33:34 2005 +0000
1.3 @@ -183,11 +183,10 @@
1.4 SRevisionItem oldRevision =
1.5 getRevisions().getRevisionByName(pFileData[0]);
1.6 BufferedReader br1 =
1.7 - new BufferedReader(new StringReader(getAsString(oldRevision, false)));
1.8 - BufferedReader br2 = new BufferedReader(new StringReader(fileContents));
1.9 - DiffProvider dp =
1.10 - (DiffProvider) Lookup.getDefault().lookup(DiffProvider.class);
1.11 - final Difference[] diffs = dp.computeDiff(br1, br2);
1.12 + new LineReader(new StringReader(getAsString(oldRevision, false)));
1.13 + BufferedReader br2 = new LineReader(new StringReader(fileContents));
1.14 +
1.15 + final Difference[] diffs = getBuiltInDiffProvider().computeDiff(br1, br2);
1.16 if (diffs.length == 0) {
1.17 unedit();
1.18 return;
1.19 @@ -488,13 +487,36 @@
1.20 File baseFile = getBaseFile();
1.21 byte[] currentBaseFileData = readFileData(baseFile);
1.22 if (!dataMatches(newBaseFileData, currentBaseFileData)) {
1.23 + String testCase = createDelGetTestCase();
1.24 + File tmpFile = File.createTempFile("s.test.", ".case");
1.25 + tmpFile.deleteOnExit();
1.26 + FileWriter tmpFileWriter = new FileWriter(tmpFile);
1.27 + tmpFileWriter.write(testCase);
1.28 + tmpFileWriter.close();
1.29 +
1.30 + File oldFile = File.createTempFile("test.", ".old");
1.31 + File newFile = File.createTempFile("test.", ".new");
1.32 + File sFile2 = File.createTempFile("test.", ".s");
1.33 + oldFile.deleteOnExit();
1.34 + newFile.deleteOnExit();
1.35 + sFile2.deleteOnExit();
1.36 + FileOutputStream oldFileOut = new FileOutputStream(oldFile);
1.37 + oldFileOut.write(currentBaseFileData);
1.38 + oldFileOut.close();
1.39 + FileOutputStream newFileOut = new FileOutputStream(newFile);
1.40 + newFileOut.write(newBaseFileData);
1.41 + newFileOut.close();
1.42 + FileOutputStream sFileOut = new FileOutputStream(sFile2);
1.43 + sFileOut.write(sFileContents);
1.44 + sFileOut.close();
1.45 +
1.46 String reportThis =
1.47 "Algorithm exception; this operation would corrupt your SCCS data.\n\n"
1.48 + "\nYour data has been preserved. You should use the command line"
1.49 + " sccs on this file.\n\n"
1.50 + "Please report this bug at http://www.netbeans.org/issues/enter_bug.cgi?component=vcsgeneric\n"
1.51 - + "attaching the following test case:\n\n"
1.52 - + createDelGetTestCase();
1.53 + + "attaching the file\n\n"
1.54 + + tmpFile;
1.55 throw new IOException(reportThis);
1.56 }
1.57 newSFile.sFile.delete();
1.58 @@ -621,6 +643,7 @@
1.59 in = new LineReader(new FileReader(sFile));
1.60 readHeader(in);
1.61 } catch (Exception e) {
1.62 + e.printStackTrace(System.err);
1.63 // return an empty list
1.64 return new SRevisionList();
1.65 } finally {
1.66 @@ -645,6 +668,9 @@
1.67 boolean done = false;
1.68 while (!done) {
1.69 String s = in.readLine();
1.70 + if (s.endsWith("\r")) {
1.71 + s = s.substring(0, s.length() - 1);
1.72 + }
1.73 if (s == null || s.length() < 2 || s.charAt(0) != (char) 1) {
1.74 done = true;
1.75 continue;
1.76 @@ -703,7 +729,7 @@
1.77 case 'd': {
1.78 String[] data = s.split(" ");
1.79 int sn1 = Integer.parseInt(data[6]);
1.80 - int sn2 = Integer.parseInt(data[7]);
1.81 + int sn2 = Integer.parseInt(data[7].trim());
1.82 this.greatestSerialNumber =
1.83 Math.max(this.greatestSerialNumber, sn1);
1.84 if (data[1].equals("D")) {
1.85 @@ -1062,6 +1088,20 @@
1.86 .format(new Date(time));
1.87 }
1.88
1.89 + private static DiffProvider getBuiltInDiffProvider() {
1.90 + // The built-in diff provider works better with dos/unix line endings,
1.91 + // so use that if it is available
1.92 + Lookup.Template template = new Lookup.Template(DiffProvider.class,
1.93 + "SL[/DiffProviders/org-netbeans-modules-diff-builtin-provider-BuiltInDiffProvider", null);
1.94 + DiffProvider provider = (DiffProvider)
1.95 + Lookup.getDefault().lookupItem(template).getInstance();
1.96 + if (provider == null) {
1.97 + provider = (DiffProvider)
1.98 + Lookup.getDefault().lookup(DiffProvider.class);
1.99 + }
1.100 + return provider;
1.101 + }
1.102 +
1.103 private String createDelGetTestCase() throws IOException {
1.104 File baseFile = getBaseFile();
1.105 byte[] fileData = readFileData(baseFile);
1.106 @@ -1079,10 +1119,8 @@
1.107 getRevisions().getRevisionByName(pFileData[0]);
1.108 BufferedReader br1 =
1.109 new BufferedReader(new StringReader(getAsString(oldRevision, false)));
1.110 - BufferedReader br2 = new BufferedReader(new StringReader(fileContents));
1.111 - DiffProvider dp =
1.112 - (DiffProvider) Lookup.getDefault().lookup(DiffProvider.class);
1.113 - final Difference[] diffs = dp.computeDiff(br1, br2);
1.114 + BufferedReader br2 = new LineReader(new StringReader(fileContents));
1.115 + final Difference[] diffs = getBuiltInDiffProvider().computeDiff(br1, br2);
1.116 final StringBuffer sb = new StringBuffer();
1.117 for (int i = 0; i < diffs.length; i++) {
1.118 if (i > 0) {
1.119 @@ -1166,6 +1204,9 @@
1.120 int lineNumber = 1;
1.121 public void includeLine(String line) {
1.122 sb.append("Line " + (lineNumber++));
1.123 + if (line.endsWith("\r")) {
1.124 + sb.append("\r");
1.125 + }
1.126 sb.append("\n");
1.127 }
1.128 public void excludeLine(String line) {
1.129 @@ -1181,5 +1222,5 @@
1.130 String checksum = new String(checksum(s.getBytes()));
1.131 return "\u0001h" + checksum + "\n" + sb.toString();
1.132 }
1.133 -
1.134 +
1.135 }