Fixes for dos/unix line endings BLD200507041800
authorblaukopf@netbeans.org
Mon, 04 Jul 2005 17:33:34 +0000
changeset 622294fa17ec0aa4
parent 6221 dfeb721243b8
child 6223 e44b956498dd
Fixes for dos/unix line endings
vcs.profiles.teamware/src/org/netbeans/modules/vcs/profiles/teamware/util/SFile.java
     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  }