Fossil SCM

Provide more options on the "2-way diff" drop-down menu on the "fossil merge-info --tk" GUI.

drh 2026-10-01 19:39 UTC trunk
Commit 90742e4c7ecceac8b40ade80f4c94ebd375682bad854e881f5733bd37a7ea137
2 files changed +102 -27 +6 -3
+102 -27
--- src/merge.c
+++ src/merge.c
@@ -143,20 +143,31 @@
143143
** The diffMode variable has these values:
144144
**
145145
** 0 Standard 3-way diff
146146
** 12 2-way diff between baseline and local
147147
** 13 2-way diff between baseline and merge-in
148
+** 14 2-way diff from baseline to checkout
148149
** 23 2-way diff between local and merge-in
150
+** 24 2-way diff from local to checkout
151
+** 34 2-way diff from merge-in to checkout
152
+**
153
+** For non-zero values of diffMode the two digits represent the left
154
+** and right content for a two-way merge, with these meanings:
155
+**
156
+** 1 The baseline or pivot of the 3-way (baseline)
157
+** 2 The local value of the file prior to merge (local)
158
+** 3 The file content being merged in (merge-in)
159
+** 4 The file content currently in the checkout (current)
149160
*/
150161
static void merge_info_tcl(const char *zFName, int nContext, int diffMode){
151
- const char *zTreename;/* Name of the file in the tree */
152
- Stmt q; /* To query the MERGESTAT table */
153
- MergeBuilder mb; /* The merge builder object */
154
- Blob pivot,v1,v2,out; /* Blobs for holding content */
155
- const char *zFN; /* A filename */
156
- int rid; /* RID value */
157
- int sz; /* File size value */
162
+ const char *zTreename; /* Name of the file in the tree */
163
+ Stmt q; /* To query the MERGESTAT table */
164
+ MergeBuilder mb; /* The merge builder object */
165
+ Blob pivot,v1,v2,cx,out; /* Blobs for holding content */
166
+ const char *zFN; /* A filename */
167
+ int rid; /* RID value */
168
+ int sz; /* File size value */
158169
159170
zTreename = zFName;
160171
db_prepare(&q,
161172
/* 0 1 2 3 4 5 6 7 */
162173
"SELECT fnp, ridp, fn, ridv, sz, fnm, ridm, fnr"
@@ -171,12 +182,12 @@
171182
}
172183
mergebuilder_init_tcl(&mb);
173184
mb.nContext = nContext;
174185
175186
blob_zero(&pivot);
176
- if( diffMode!=23 ){
177
- /* Set up the pivot or baseline */
187
+ if( diffMode<=14 ){
188
+ /* For modes 0, 12, 13, and 14, load the baseline content in pivot */
178189
zFN = db_column_text(&q, 0);
179190
if( zFN==0 ){
180191
/* No pivot because the file was added */
181192
mb.zPivot = "(no baseline)";
182193
}else{
@@ -183,15 +194,30 @@
183194
mb.zPivot = mprintf("%s (baseline)", file_tail(zFN));
184195
rid = db_column_int(&q, 1);
185196
content_get(rid, &pivot);
186197
}
187198
mb.pPivot = &pivot;
199
+ }else{
200
+ /* for modes 23, 24, and 34, pivot is not used */
201
+ }
202
+
203
+ blob_zero(&cx);
204
+ if( (diffMode % 10)==4 ){
205
+ /* For modes 14, 24, and 34, read current value of the file from
206
+ ** disk into out. */
207
+ char *zFile;
208
+ zFN = db_column_text(&q, 7);
209
+ zFile = mprintf("%s%s", g.zLocalRoot, zFN);
210
+ blob_read_from_file(&cx, zFile, ExtFILE);
211
+ fossil_free(zFile);
212
+ }else{
213
+ /* cx is uninitialized for modes 0, 12, 13, and 23. */
188214
}
189215
190216
blob_zero(&v2);
191
- if( diffMode!=12 ){
192
- /* Set up the merge-in as V2 */
217
+ if( diffMode==0 || diffMode==34 || (diffMode % 10)==3 ){
218
+ /* For modes 0, 13, 23, and 34 read the merge-in content into v2 */
193219
zFN = db_column_text(&q, 5);
194220
if( zFN==0 ){
195221
/* File deleted in the merged-in branch */
196222
mb.zV2 = "(deleted file)";
197223
}else{
@@ -198,15 +224,17 @@
198224
mb.zV2 = mprintf("%s (merge-in)", file_tail(zFN));
199225
rid = db_column_int(&q, 6);
200226
content_get(rid, &v2);
201227
}
202228
mb.pV2 = &v2;
229
+ }else{
230
+ /* v2 is uninitialized for modes 12, 14, and 24 */
203231
}
204232
205233
blob_zero(&v1);
206
- if( diffMode!=13 ){
207
- /* Set up the local content as V1 */
234
+ if( diffMode==0 || diffMode==12 || (diffMode/10)==2 ){
235
+ /* For modes 0, 12, 23, and 24, read the local content into v1 */
208236
zFN = db_column_text(&q, 2);
209237
if( zFN==0 ){
210238
/* File added by merge */
211239
mb.zV1 = "(no original)";
212240
}else{
@@ -233,12 +261,25 @@
233261
/* The origin file was unchanged when the merge first occurred */
234262
content_get(rid, &v1);
235263
}
236264
}
237265
mb.pV1 = &v1;
266
+ }else{
267
+ /* v1 is uninitialized for modes 12, 13, and 14 */
238268
}
239269
270
+ /* For two-way merges, here is where content is loaded
271
+ **
272
+ ** left right description
273
+ ** ----- ----- ---------------------------
274
+ ** 12 pivot v1 baseline vs local
275
+ ** 13 pivot v2 baseline vs merge-in
276
+ ** 14 pivot cx baseline vs current
277
+ ** 23 v1 v2 local vs merge-in
278
+ ** 24 v1 cx local vs current
279
+ ** 34 v2 cx merge-in vs current
280
+ */
240281
blob_zero(&out);
241282
if( diffMode==0 ){
242283
/* Set up the output and do a 3-way diff */
243284
zFN = db_column_text(&q, 7);
244285
if( zFN==0 ){
@@ -254,37 +295,59 @@
254295
const char *zTagLeft, *zTagRight;
255296
DiffConfig cfg;
256297
memset(&cfg, 0, sizeof(cfg));
257298
cfg.diffFlags = DIFF_TCL;
258299
cfg.nContext = mb.nContext;
259
- if( diffMode==12 || diffMode==13 ){
260
- pLeft = &pivot;
261
- zTagLeft = "baseline";
262
- }else{
263
- pLeft = &v1;
264
- zTagLeft = "local";
265
- }
266
- if( diffMode==12 ){
267
- pRight = &v1;
268
- zTagRight = "local";
269
- }else{
270
- pRight = &v2;
271
- zTagRight = "merge-in";
300
+ switch( diffMode/10 ){
301
+ case 1: {
302
+ pLeft = &pivot;
303
+ zTagLeft = "baseline";
304
+ break;
305
+ }
306
+ case 2: {
307
+ pLeft = &v1;
308
+ zTagLeft = "local";
309
+ break;
310
+ }
311
+ default:
312
+ case 3: {
313
+ pLeft = &v2;
314
+ zTagLeft = "merge-in";
315
+ break;
316
+ }
317
+ }
318
+ switch( diffMode % 10 ){
319
+ case 2: {
320
+ pRight = &v1;
321
+ zTagRight = "local";
322
+ break;
323
+ }
324
+ case 3: {
325
+ pRight = &v2;
326
+ zTagRight = "merge-in";
327
+ break;
328
+ }
329
+ default:
330
+ case 4: {
331
+ pRight = &cx;
332
+ zTagRight = "current";
333
+ break;
334
+ }
272335
}
273336
cfg.azLabel[0] = mprintf("%s (%s)", zFName, zTagLeft);
274337
cfg.azLabel[1] = mprintf("%s (%s)", zFName, zTagRight);
275338
diff_print_filenames("", "", &cfg, &out);
276339
text_diff(pLeft, pRight, &out, &cfg);
277340
fossil_free((char*)cfg.azLabel[0]);
278341
fossil_free((char*)cfg.azLabel[1]);
279342
}
280
-
281343
blob_write_to_file(&out, "-");
282344
mb.xDestroy(&mb);
283345
blob_reset(&pivot);
284346
blob_reset(&v1);
285347
blob_reset(&v2);
348
+ blob_reset(&cx);
286349
blob_reset(&out);
287350
db_finalize(&q);
288351
}
289352
290353
/*
@@ -308,11 +371,14 @@
308371
**
309372
** Options used internally by --tk:
310373
** --diff12 FILE Bring up a separate --tk diff for just the baseline
311374
** and local variants of FILE.
312375
** --diff13 FILE Like --diff12 but for baseline versus merge-in
376
+** --diff14 FILE Like --diff12 but for baseline versus current
313377
** --diff23 FILE Like --diff12 but for local versus merge-in
378
+** --diff24 FILE Like --diff12 but for local versus current
379
+** --diff34 FILE Like --diff12 but for merge-in versus current
314380
** --tcl FILE Generate (to stdout) a TCL list containing
315381
** information needed to display the changes to
316382
** FILE caused by the most recent merge. FILE must
317383
** be a pathname relative to the root of the check-out.
318384
**
@@ -344,13 +410,22 @@
344410
if( (zDiff2 = find_option("diff12", 0, 1))!=0 ){
345411
diffMode = 12;
346412
}else
347413
if( (zDiff2 = find_option("diff13", 0, 1))!=0 ){
348414
diffMode = 13;
415
+ }else
416
+ if( (zDiff2 = find_option("diff14", 0, 1))!=0 ){
417
+ diffMode = 14;
349418
}else
350419
if( (zDiff2 = find_option("diff23", 0, 1))!=0 ){
351420
diffMode = 23;
421
+ }else
422
+ if( (zDiff2 = find_option("diff24", 0, 1))!=0 ){
423
+ diffMode = 24;
424
+ }else
425
+ if( (zDiff2 = find_option("diff34", 0, 1))!=0 ){
426
+ diffMode = 34;
352427
}
353428
354429
if( zCnt ){
355430
nContext = atoi(zCnt);
356431
if( nContext<0 ) nContext = 0xfffffff;
357432
--- src/merge.c
+++ src/merge.c
@@ -143,20 +143,31 @@
143 ** The diffMode variable has these values:
144 **
145 ** 0 Standard 3-way diff
146 ** 12 2-way diff between baseline and local
147 ** 13 2-way diff between baseline and merge-in
 
148 ** 23 2-way diff between local and merge-in
 
 
 
 
 
 
 
 
 
 
149 */
150 static void merge_info_tcl(const char *zFName, int nContext, int diffMode){
151 const char *zTreename;/* Name of the file in the tree */
152 Stmt q; /* To query the MERGESTAT table */
153 MergeBuilder mb; /* The merge builder object */
154 Blob pivot,v1,v2,out; /* Blobs for holding content */
155 const char *zFN; /* A filename */
156 int rid; /* RID value */
157 int sz; /* File size value */
158
159 zTreename = zFName;
160 db_prepare(&q,
161 /* 0 1 2 3 4 5 6 7 */
162 "SELECT fnp, ridp, fn, ridv, sz, fnm, ridm, fnr"
@@ -171,12 +182,12 @@
171 }
172 mergebuilder_init_tcl(&mb);
173 mb.nContext = nContext;
174
175 blob_zero(&pivot);
176 if( diffMode!=23 ){
177 /* Set up the pivot or baseline */
178 zFN = db_column_text(&q, 0);
179 if( zFN==0 ){
180 /* No pivot because the file was added */
181 mb.zPivot = "(no baseline)";
182 }else{
@@ -183,15 +194,30 @@
183 mb.zPivot = mprintf("%s (baseline)", file_tail(zFN));
184 rid = db_column_int(&q, 1);
185 content_get(rid, &pivot);
186 }
187 mb.pPivot = &pivot;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188 }
189
190 blob_zero(&v2);
191 if( diffMode!=12 ){
192 /* Set up the merge-in as V2 */
193 zFN = db_column_text(&q, 5);
194 if( zFN==0 ){
195 /* File deleted in the merged-in branch */
196 mb.zV2 = "(deleted file)";
197 }else{
@@ -198,15 +224,17 @@
198 mb.zV2 = mprintf("%s (merge-in)", file_tail(zFN));
199 rid = db_column_int(&q, 6);
200 content_get(rid, &v2);
201 }
202 mb.pV2 = &v2;
 
 
203 }
204
205 blob_zero(&v1);
206 if( diffMode!=13 ){
207 /* Set up the local content as V1 */
208 zFN = db_column_text(&q, 2);
209 if( zFN==0 ){
210 /* File added by merge */
211 mb.zV1 = "(no original)";
212 }else{
@@ -233,12 +261,25 @@
233 /* The origin file was unchanged when the merge first occurred */
234 content_get(rid, &v1);
235 }
236 }
237 mb.pV1 = &v1;
 
 
238 }
239
 
 
 
 
 
 
 
 
 
 
 
240 blob_zero(&out);
241 if( diffMode==0 ){
242 /* Set up the output and do a 3-way diff */
243 zFN = db_column_text(&q, 7);
244 if( zFN==0 ){
@@ -254,37 +295,59 @@
254 const char *zTagLeft, *zTagRight;
255 DiffConfig cfg;
256 memset(&cfg, 0, sizeof(cfg));
257 cfg.diffFlags = DIFF_TCL;
258 cfg.nContext = mb.nContext;
259 if( diffMode==12 || diffMode==13 ){
260 pLeft = &pivot;
261 zTagLeft = "baseline";
262 }else{
263 pLeft = &v1;
264 zTagLeft = "local";
265 }
266 if( diffMode==12 ){
267 pRight = &v1;
268 zTagRight = "local";
269 }else{
270 pRight = &v2;
271 zTagRight = "merge-in";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272 }
273 cfg.azLabel[0] = mprintf("%s (%s)", zFName, zTagLeft);
274 cfg.azLabel[1] = mprintf("%s (%s)", zFName, zTagRight);
275 diff_print_filenames("", "", &cfg, &out);
276 text_diff(pLeft, pRight, &out, &cfg);
277 fossil_free((char*)cfg.azLabel[0]);
278 fossil_free((char*)cfg.azLabel[1]);
279 }
280
281 blob_write_to_file(&out, "-");
282 mb.xDestroy(&mb);
283 blob_reset(&pivot);
284 blob_reset(&v1);
285 blob_reset(&v2);
 
286 blob_reset(&out);
287 db_finalize(&q);
288 }
289
290 /*
@@ -308,11 +371,14 @@
308 **
309 ** Options used internally by --tk:
310 ** --diff12 FILE Bring up a separate --tk diff for just the baseline
311 ** and local variants of FILE.
312 ** --diff13 FILE Like --diff12 but for baseline versus merge-in
 
313 ** --diff23 FILE Like --diff12 but for local versus merge-in
 
 
314 ** --tcl FILE Generate (to stdout) a TCL list containing
315 ** information needed to display the changes to
316 ** FILE caused by the most recent merge. FILE must
317 ** be a pathname relative to the root of the check-out.
318 **
@@ -344,13 +410,22 @@
344 if( (zDiff2 = find_option("diff12", 0, 1))!=0 ){
345 diffMode = 12;
346 }else
347 if( (zDiff2 = find_option("diff13", 0, 1))!=0 ){
348 diffMode = 13;
 
 
 
349 }else
350 if( (zDiff2 = find_option("diff23", 0, 1))!=0 ){
351 diffMode = 23;
 
 
 
 
 
 
352 }
353
354 if( zCnt ){
355 nContext = atoi(zCnt);
356 if( nContext<0 ) nContext = 0xfffffff;
357
--- src/merge.c
+++ src/merge.c
@@ -143,20 +143,31 @@
143 ** The diffMode variable has these values:
144 **
145 ** 0 Standard 3-way diff
146 ** 12 2-way diff between baseline and local
147 ** 13 2-way diff between baseline and merge-in
148 ** 14 2-way diff from baseline to checkout
149 ** 23 2-way diff between local and merge-in
150 ** 24 2-way diff from local to checkout
151 ** 34 2-way diff from merge-in to checkout
152 **
153 ** For non-zero values of diffMode the two digits represent the left
154 ** and right content for a two-way merge, with these meanings:
155 **
156 ** 1 The baseline or pivot of the 3-way (baseline)
157 ** 2 The local value of the file prior to merge (local)
158 ** 3 The file content being merged in (merge-in)
159 ** 4 The file content currently in the checkout (current)
160 */
161 static void merge_info_tcl(const char *zFName, int nContext, int diffMode){
162 const char *zTreename; /* Name of the file in the tree */
163 Stmt q; /* To query the MERGESTAT table */
164 MergeBuilder mb; /* The merge builder object */
165 Blob pivot,v1,v2,cx,out; /* Blobs for holding content */
166 const char *zFN; /* A filename */
167 int rid; /* RID value */
168 int sz; /* File size value */
169
170 zTreename = zFName;
171 db_prepare(&q,
172 /* 0 1 2 3 4 5 6 7 */
173 "SELECT fnp, ridp, fn, ridv, sz, fnm, ridm, fnr"
@@ -171,12 +182,12 @@
182 }
183 mergebuilder_init_tcl(&mb);
184 mb.nContext = nContext;
185
186 blob_zero(&pivot);
187 if( diffMode<=14 ){
188 /* For modes 0, 12, 13, and 14, load the baseline content in pivot */
189 zFN = db_column_text(&q, 0);
190 if( zFN==0 ){
191 /* No pivot because the file was added */
192 mb.zPivot = "(no baseline)";
193 }else{
@@ -183,15 +194,30 @@
194 mb.zPivot = mprintf("%s (baseline)", file_tail(zFN));
195 rid = db_column_int(&q, 1);
196 content_get(rid, &pivot);
197 }
198 mb.pPivot = &pivot;
199 }else{
200 /* for modes 23, 24, and 34, pivot is not used */
201 }
202
203 blob_zero(&cx);
204 if( (diffMode % 10)==4 ){
205 /* For modes 14, 24, and 34, read current value of the file from
206 ** disk into out. */
207 char *zFile;
208 zFN = db_column_text(&q, 7);
209 zFile = mprintf("%s%s", g.zLocalRoot, zFN);
210 blob_read_from_file(&cx, zFile, ExtFILE);
211 fossil_free(zFile);
212 }else{
213 /* cx is uninitialized for modes 0, 12, 13, and 23. */
214 }
215
216 blob_zero(&v2);
217 if( diffMode==0 || diffMode==34 || (diffMode % 10)==3 ){
218 /* For modes 0, 13, 23, and 34 read the merge-in content into v2 */
219 zFN = db_column_text(&q, 5);
220 if( zFN==0 ){
221 /* File deleted in the merged-in branch */
222 mb.zV2 = "(deleted file)";
223 }else{
@@ -198,15 +224,17 @@
224 mb.zV2 = mprintf("%s (merge-in)", file_tail(zFN));
225 rid = db_column_int(&q, 6);
226 content_get(rid, &v2);
227 }
228 mb.pV2 = &v2;
229 }else{
230 /* v2 is uninitialized for modes 12, 14, and 24 */
231 }
232
233 blob_zero(&v1);
234 if( diffMode==0 || diffMode==12 || (diffMode/10)==2 ){
235 /* For modes 0, 12, 23, and 24, read the local content into v1 */
236 zFN = db_column_text(&q, 2);
237 if( zFN==0 ){
238 /* File added by merge */
239 mb.zV1 = "(no original)";
240 }else{
@@ -233,12 +261,25 @@
261 /* The origin file was unchanged when the merge first occurred */
262 content_get(rid, &v1);
263 }
264 }
265 mb.pV1 = &v1;
266 }else{
267 /* v1 is uninitialized for modes 12, 13, and 14 */
268 }
269
270 /* For two-way merges, here is where content is loaded
271 **
272 ** left right description
273 ** ----- ----- ---------------------------
274 ** 12 pivot v1 baseline vs local
275 ** 13 pivot v2 baseline vs merge-in
276 ** 14 pivot cx baseline vs current
277 ** 23 v1 v2 local vs merge-in
278 ** 24 v1 cx local vs current
279 ** 34 v2 cx merge-in vs current
280 */
281 blob_zero(&out);
282 if( diffMode==0 ){
283 /* Set up the output and do a 3-way diff */
284 zFN = db_column_text(&q, 7);
285 if( zFN==0 ){
@@ -254,37 +295,59 @@
295 const char *zTagLeft, *zTagRight;
296 DiffConfig cfg;
297 memset(&cfg, 0, sizeof(cfg));
298 cfg.diffFlags = DIFF_TCL;
299 cfg.nContext = mb.nContext;
300 switch( diffMode/10 ){
301 case 1: {
302 pLeft = &pivot;
303 zTagLeft = "baseline";
304 break;
305 }
306 case 2: {
307 pLeft = &v1;
308 zTagLeft = "local";
309 break;
310 }
311 default:
312 case 3: {
313 pLeft = &v2;
314 zTagLeft = "merge-in";
315 break;
316 }
317 }
318 switch( diffMode % 10 ){
319 case 2: {
320 pRight = &v1;
321 zTagRight = "local";
322 break;
323 }
324 case 3: {
325 pRight = &v2;
326 zTagRight = "merge-in";
327 break;
328 }
329 default:
330 case 4: {
331 pRight = &cx;
332 zTagRight = "current";
333 break;
334 }
335 }
336 cfg.azLabel[0] = mprintf("%s (%s)", zFName, zTagLeft);
337 cfg.azLabel[1] = mprintf("%s (%s)", zFName, zTagRight);
338 diff_print_filenames("", "", &cfg, &out);
339 text_diff(pLeft, pRight, &out, &cfg);
340 fossil_free((char*)cfg.azLabel[0]);
341 fossil_free((char*)cfg.azLabel[1]);
342 }
 
343 blob_write_to_file(&out, "-");
344 mb.xDestroy(&mb);
345 blob_reset(&pivot);
346 blob_reset(&v1);
347 blob_reset(&v2);
348 blob_reset(&cx);
349 blob_reset(&out);
350 db_finalize(&q);
351 }
352
353 /*
@@ -308,11 +371,14 @@
371 **
372 ** Options used internally by --tk:
373 ** --diff12 FILE Bring up a separate --tk diff for just the baseline
374 ** and local variants of FILE.
375 ** --diff13 FILE Like --diff12 but for baseline versus merge-in
376 ** --diff14 FILE Like --diff12 but for baseline versus current
377 ** --diff23 FILE Like --diff12 but for local versus merge-in
378 ** --diff24 FILE Like --diff12 but for local versus current
379 ** --diff34 FILE Like --diff12 but for merge-in versus current
380 ** --tcl FILE Generate (to stdout) a TCL list containing
381 ** information needed to display the changes to
382 ** FILE caused by the most recent merge. FILE must
383 ** be a pathname relative to the root of the check-out.
384 **
@@ -344,13 +410,22 @@
410 if( (zDiff2 = find_option("diff12", 0, 1))!=0 ){
411 diffMode = 12;
412 }else
413 if( (zDiff2 = find_option("diff13", 0, 1))!=0 ){
414 diffMode = 13;
415 }else
416 if( (zDiff2 = find_option("diff14", 0, 1))!=0 ){
417 diffMode = 14;
418 }else
419 if( (zDiff2 = find_option("diff23", 0, 1))!=0 ){
420 diffMode = 23;
421 }else
422 if( (zDiff2 = find_option("diff24", 0, 1))!=0 ){
423 diffMode = 24;
424 }else
425 if( (zDiff2 = find_option("diff34", 0, 1))!=0 ){
426 diffMode = 34;
427 }
428
429 if( zCnt ){
430 nContext = atoi(zCnt);
431 if( nContext<0 ) nContext = 0xfffffff;
432
+6 -3
--- src/merge.tcl
+++ src/merge.tcl
@@ -348,13 +348,16 @@
348348
}
349349
350350
frame .bb
351351
::ttk::menubutton .bb.diff2 -text {2-way diff} -menu .bb.diff2.m
352352
menu .bb.diff2.m -tearoff 0
353
-.bb.diff2.m add command -label {baseline vs. local} -command {two-way 12}
354
-.bb.diff2.m add command -label {baseline vs. merge-in} -command {two-way 13}
355
-.bb.diff2.m add command -label {local vs. merge-in} -command {two-way 23}
353
+.bb.diff2.m add command -label {baseline vs local} -command {two-way 12}
354
+.bb.diff2.m add command -label {baseline vs merge-in} -command {two-way 13}
355
+.bb.diff2.m add command -label {baseline vs current} -command {two-way 14}
356
+.bb.diff2.m add command -label {local vs merge-in} -command {two-way 23}
357
+.bb.diff2.m add command -label {local vs current} -command {two-way 24}
358
+.bb.diff2.m add command -label {merge-in vs current} -command {two-way 34}
356359
357360
# Bring up a separate two-way diff between a pair of columns
358361
# the argument is one of:
359362
# 12 Baseline versus Local
360363
# 13 Baseline versus Merge-in
361364
--- src/merge.tcl
+++ src/merge.tcl
@@ -348,13 +348,16 @@
348 }
349
350 frame .bb
351 ::ttk::menubutton .bb.diff2 -text {2-way diff} -menu .bb.diff2.m
352 menu .bb.diff2.m -tearoff 0
353 .bb.diff2.m add command -label {baseline vs. local} -command {two-way 12}
354 .bb.diff2.m add command -label {baseline vs. merge-in} -command {two-way 13}
355 .bb.diff2.m add command -label {local vs. merge-in} -command {two-way 23}
 
 
 
356
357 # Bring up a separate two-way diff between a pair of columns
358 # the argument is one of:
359 # 12 Baseline versus Local
360 # 13 Baseline versus Merge-in
361
--- src/merge.tcl
+++ src/merge.tcl
@@ -348,13 +348,16 @@
348 }
349
350 frame .bb
351 ::ttk::menubutton .bb.diff2 -text {2-way diff} -menu .bb.diff2.m
352 menu .bb.diff2.m -tearoff 0
353 .bb.diff2.m add command -label {baseline vs local} -command {two-way 12}
354 .bb.diff2.m add command -label {baseline vs merge-in} -command {two-way 13}
355 .bb.diff2.m add command -label {baseline vs current} -command {two-way 14}
356 .bb.diff2.m add command -label {local vs merge-in} -command {two-way 23}
357 .bb.diff2.m add command -label {local vs current} -command {two-way 24}
358 .bb.diff2.m add command -label {merge-in vs current} -command {two-way 34}
359
360 # Bring up a separate two-way diff between a pair of columns
361 # the argument is one of:
362 # 12 Baseline versus Local
363 # 13 Baseline versus Merge-in
364

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button