The difference now have the text of the conflict, BLD200204240100
authormentlicher@netbeans.org
Tue, 23 Apr 2002 18:59:35 +0000
changeset 2196ed1e224bce5e
parent 2195 154ebeb17a4b
child 2197 0b2869701509
The difference now have the text of the conflict,
Writting of a file with unresolved conflicts implemented.
vcs.profiles.cvsprofiles/src/org/netbeans/modules/vcs/profiles/cvsprofiles/commands/CvsResolveConflicts.java
     1.1 --- a/vcs.profiles.cvsprofiles/src/org/netbeans/modules/vcs/profiles/cvsprofiles/commands/CvsResolveConflicts.java	Tue Apr 23 15:35:12 2002 +0000
     1.2 +++ b/vcs.profiles.cvsprofiles/src/org/netbeans/modules/vcs/profiles/cvsprofiles/commands/CvsResolveConflicts.java	Tue Apr 23 18:59:35 2002 +0000
     1.3 @@ -63,8 +63,8 @@
     1.4      private static final String CHANGE_DELIMETER = "======="; // NOI18N
     1.5  
     1.6      private VcsFileSystem fileSystem = null;
     1.7 -    private String leftFileRev = null;
     1.8 -    private String rightFileRev = null;
     1.9 +    private String leftFileRevision = null;
    1.10 +    private String rightFileRevision = null;
    1.11  
    1.12      public void setFileSystem(VcsFileSystem fileSystem) {
    1.13          this.fileSystem = fileSystem;
    1.14 @@ -119,22 +119,28 @@
    1.15          }
    1.16          copyParts(false, file, f2, false);
    1.17          //GraphicalMergeVisualizer merge = new GraphicalMergeVisualizer();
    1.18 +        String originalLeftFileRevision = leftFileRevision;
    1.19 +        String originalRightFileRevision = rightFileRevision;
    1.20 +        if (leftFileRevision != null) leftFileRevision.trim();
    1.21 +        if (rightFileRevision != null) rightFileRevision.trim();
    1.22          java.awt.Component c;
    1.23 -        if (leftFileRev == null || leftFileRev.equals(file.getName())) {
    1.24 -            leftFileRev = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleWorkingFile");
    1.25 +        if (leftFileRevision == null || leftFileRevision.equals(file.getName())) {
    1.26 +            leftFileRevision = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleWorkingFile");
    1.27          } else {
    1.28 -            leftFileRev = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleRevision", leftFileRev);
    1.29 +            leftFileRevision = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleRevision", leftFileRevision);
    1.30          }
    1.31 -        if (rightFileRev == null || rightFileRev.equals(file.getName())) {
    1.32 -            rightFileRev = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleWorkingFile");
    1.33 +        if (rightFileRevision == null || rightFileRevision.equals(file.getName())) {
    1.34 +            rightFileRevision = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleWorkingFile");
    1.35          } else {
    1.36 -            rightFileRev = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleRevision", rightFileRev);
    1.37 +            rightFileRevision = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Diff.titleRevision", rightFileRevision);
    1.38          }
    1.39          String resultTitle = org.openide.util.NbBundle.getMessage(CvsResolveConflicts.class, "Merge.titleResult");
    1.40 -        c = merge.createView(diffs, StreamSource.createSource(file.getName(), leftFileRev, mimeType, f1),
    1.41 -                             StreamSource.createSource(file.getName(), rightFileRev, mimeType, f2),
    1.42 +        c = merge.createView(diffs, StreamSource.createSource(file.getName(), leftFileRevision, mimeType, f1),
    1.43 +                             StreamSource.createSource(file.getName(), rightFileRevision, mimeType, f2),
    1.44                               /*file.getName(), resultTitle,*/
    1.45 -                             new MergeResultWriterInfo(f1, f2, f3, file, mimeType)/*, new VetoableChangeListener() {
    1.46 +                             new MergeResultWriterInfo(f1, f2, f3, file, mimeType,
    1.47 +                                                       originalLeftFileRevision,
    1.48 +                                                       originalRightFileRevision)/*, new VetoableChangeListener() {
    1.49                                   public void vetoableChange(PropertyChangeEvent evt) {
    1.50                                       if ("OK".equals(evt.getActionCommand())) {
    1.51                                           try {
    1.52 @@ -168,19 +174,32 @@
    1.53              boolean isChangeLeft = false;
    1.54              boolean isChangeRight = false;
    1.55              int f1l1 = 0, f1l2 = 0, f2l1 = 0, f2l2 = 0;
    1.56 +            StringBuffer text1 = new StringBuffer();
    1.57 +            StringBuffer text2 = new StringBuffer();
    1.58              int i = 1, j = 1;
    1.59              while ((line = r.readLine()) != null) {
    1.60                  if (line.startsWith(CHANGE_LEFT)) {
    1.61                      if (generateDiffs) {
    1.62 -                        if (leftFileRev == null) {
    1.63 -                            leftFileRev = line.substring(CHANGE_LEFT.length()).trim();
    1.64 +                        if (leftFileRevision == null) {
    1.65 +                            leftFileRevision = line.substring(CHANGE_LEFT.length());
    1.66                          }
    1.67                          if (isChangeLeft) {
    1.68                              f1l2 = i - 1;
    1.69 -                            diffList.add((f1l1 > f1l2) ? new Difference(Difference.ADD, f1l1 - 1, 0, f2l1, f2l2) :
    1.70 -                                         (f2l1 > f2l2) ? new Difference(Difference.DELETE, f1l1, f1l2, f2l1 - 1, 0)
    1.71 -                                                       : new Difference(Difference.CHANGE, f1l1, f1l2, f2l1, f2l2));
    1.72 +                            diffList.add((f1l1 > f1l2) ? new Difference(Difference.ADD,
    1.73 +                                                                        f1l1 - 1, 0, f2l1, f2l2,
    1.74 +                                                                        text1.toString(),
    1.75 +                                                                        text2.toString()) :
    1.76 +                                         (f2l1 > f2l2) ? new Difference(Difference.DELETE,
    1.77 +                                                                        f1l1, f1l2, f2l1 - 1, 0,
    1.78 +                                                                        text1.toString(),
    1.79 +                                                                        text2.toString())
    1.80 +                                                       : new Difference(Difference.CHANGE,
    1.81 +                                                                        f1l1, f1l2, f2l1, f2l2,
    1.82 +                                                                        text1.toString(),
    1.83 +                                                                        text2.toString()));
    1.84                              f1l1 = f1l2 = f2l1 = f2l2 = 0;
    1.85 +                            text1.delete(0, text1.length());
    1.86 +                            text2.delete(0, text2.length());
    1.87                          } else {
    1.88                              f1l1 = i;
    1.89                          }
    1.90 @@ -189,14 +208,23 @@
    1.91                      continue;
    1.92                  } else if (line.startsWith(CHANGE_RIGHT)) {
    1.93                      if (generateDiffs) {
    1.94 -                        if (rightFileRev == null) {
    1.95 -                            rightFileRev = line.substring(CHANGE_RIGHT.length()).trim();
    1.96 +                        if (rightFileRevision == null) {
    1.97 +                            rightFileRevision = line.substring(CHANGE_RIGHT.length());
    1.98                          }
    1.99                          if (isChangeRight) {
   1.100                              f2l2 = j - 1;
   1.101 -                            diffList.add((f1l1 > f1l2) ? new Difference(Difference.ADD, f1l1 - 1, 0, f2l1, f2l2) :
   1.102 -                                         (f2l1 > f2l2) ? new Difference(Difference.DELETE, f1l1, f1l2, f2l1 - 1, 0)
   1.103 -                                                       : new Difference(Difference.CHANGE, f1l1, f1l2, f2l1, f2l2));
   1.104 +                            diffList.add((f1l1 > f1l2) ? new Difference(Difference.ADD,
   1.105 +                                                                        f1l1 - 1, 0, f2l1, f2l2,
   1.106 +                                                                        text1.toString(),
   1.107 +                                                                        text2.toString()) :
   1.108 +                                         (f2l1 > f2l2) ? new Difference(Difference.DELETE,
   1.109 +                                                                        f1l1, f1l2, f2l1 - 1, 0,
   1.110 +                                                                        text1.toString(),
   1.111 +                                                                        text2.toString())
   1.112 +                                                       : new Difference(Difference.CHANGE,
   1.113 +                                                                        f1l1, f1l2, f2l1, f2l2,
   1.114 +                                                                        text1.toString(),
   1.115 +                                                                        text2.toString()));
   1.116                                                         /*
   1.117                              diffList.add(new Difference((f1l1 > f1l2) ? Difference.ADD :
   1.118                                                          (f2l1 > f2l2) ? Difference.DELETE :
   1.119 @@ -204,6 +232,8 @@
   1.120                                                          f1l1, f1l2, f2l1, f2l2));
   1.121                                                          */
   1.122                              f1l1 = f1l2 = f2l1 = f2l2 = 0;
   1.123 +                            text1.delete(0, text1.length());
   1.124 +                            text2.delete(0, text2.length());
   1.125                          } else {
   1.126                              f2l1 = j;
   1.127                          }
   1.128 @@ -229,6 +259,8 @@
   1.129                      w.write(line);
   1.130                      w.newLine();
   1.131                  }
   1.132 +                if (isChangeLeft) text1.append(line + "\n");
   1.133 +                if (isChangeRight) text2.append(line + "\n");
   1.134                  if (generateDiffs) {
   1.135                      if (isChangeLeft) i++;
   1.136                      else if (isChangeRight) j++;
   1.137 @@ -256,14 +288,19 @@
   1.138          
   1.139          private File tempf1, tempf2, tempf3, outputFile;
   1.140          private String mimeType;
   1.141 +        private String leftFileRevision;
   1.142 +        private String rightFileRevision;
   1.143          
   1.144          public MergeResultWriterInfo(File tempf1, File tempf2, File tempf3,
   1.145 -                                     File outputFile, String mimeType) {
   1.146 +                                     File outputFile, String mimeType,
   1.147 +                                     String leftFileRevision, String rightFileRevision) {
   1.148              this.tempf1 = tempf1;
   1.149              this.tempf2 = tempf2;
   1.150              this.tempf3 = tempf3;
   1.151              this.outputFile = outputFile;
   1.152              this.mimeType = mimeType;
   1.153 +            this.leftFileRevision = leftFileRevision;
   1.154 +            this.rightFileRevision = rightFileRevision;
   1.155          }
   1.156          
   1.157          public String getName() {
   1.158 @@ -289,10 +326,11 @@
   1.159           * @return The writer or <code>null</code>, when no writer can be created.
   1.160           */
   1.161          public Writer createWriter(Difference[] conflicts) throws IOException {
   1.162 -            if (conflicts == null) {
   1.163 +            if (conflicts == null || conflicts.length == 0) {
   1.164                  return new FileWriter(outputFile);
   1.165              } else {
   1.166 -                return new MergeConflictFileWriter(outputFile, conflicts);
   1.167 +                return new MergeConflictFileWriter(outputFile, conflicts,
   1.168 +                                                   leftFileRevision, rightFileRevision);
   1.169              }
   1.170          }
   1.171          
   1.172 @@ -311,10 +349,51 @@
   1.173      private static class MergeConflictFileWriter extends FileWriter {
   1.174          
   1.175          private Difference[] conflicts;
   1.176 +        private int lineNumber;
   1.177 +        private int currentConflict;
   1.178 +        private String leftName;
   1.179 +        private String rightName;
   1.180          
   1.181 -        public MergeConflictFileWriter(File file, Difference[] conflicts) throws IOException {
   1.182 +        public MergeConflictFileWriter(File file, Difference[] conflicts,
   1.183 +                                       String leftName, String rightName) throws IOException {
   1.184              super(file);
   1.185              this.conflicts = conflicts;
   1.186 +            this.leftName = leftName;
   1.187 +            this.rightName = rightName;
   1.188 +            this.lineNumber = 1;
   1.189 +            this.currentConflict = 0;
   1.190 +            if (lineNumber == conflicts[currentConflict].getFirstStart()) {
   1.191 +                writeConflict(conflicts[currentConflict]);
   1.192 +                currentConflict++;
   1.193 +            }
   1.194 +        }
   1.195 +        
   1.196 +        public void write(String str) throws IOException {
   1.197 +            //System.out.println("MergeConflictFileWriter.write("+str+")");
   1.198 +            super.write(str);
   1.199 +            lineNumber += numChars('\n', str);
   1.200 +            //System.out.println("  lineNumber = "+lineNumber+", current conflict start = "+conflicts[currentConflict].getFirstStart());
   1.201 +            if (currentConflict < conflicts.length && lineNumber >= conflicts[currentConflict].getFirstStart()) {
   1.202 +                writeConflict(conflicts[currentConflict]);
   1.203 +                currentConflict++;
   1.204 +            }
   1.205 +        }
   1.206 +        
   1.207 +        private void writeConflict(Difference conflict) throws IOException {
   1.208 +            //System.out.println("MergeConflictFileWriter.writeConflict('"+conflict.getFirstText()+"', '"+conflict.getSecondText()+"')");
   1.209 +            super.write(CHANGE_LEFT + leftName + "\n");
   1.210 +            super.write(conflict.getFirstText());
   1.211 +            super.write(CHANGE_DELIMETER + "\n");
   1.212 +            super.write(conflict.getSecondText());
   1.213 +            super.write(CHANGE_RIGHT + rightName + "\n");
   1.214 +        }
   1.215 +        
   1.216 +        private static int numChars(char c, String str) {
   1.217 +            int n = 0;
   1.218 +            for (int pos = str.indexOf(c); pos >= 0 && pos < str.length(); pos = str.indexOf(c, pos + 1)) {
   1.219 +                n++;
   1.220 +            }
   1.221 +            return n;
   1.222          }
   1.223      }
   1.224  }