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 }