| | @@ -687,10 +687,11 @@ |
| 687 | 687 | ** -K|--keep-merge-files On merge conflict, retain the temporary files |
| 688 | 688 | ** used for merging, named *-baseline, *-original, |
| 689 | 689 | ** and *-merge. |
| 690 | 690 | ** -n|--dry-run Do not actually change files on disk |
| 691 | 691 | ** --nosync Do not auto-sync prior to merging |
| 692 | +** --noundo Do not changes in the undo log |
| 692 | 693 | ** -v|--verbose Show additional details of the merge |
| 693 | 694 | */ |
| 694 | 695 | void merge_cmd(void){ |
| 695 | 696 | int vid; /* Current version "V" */ |
| 696 | 697 | int mid; /* Version we are merging from "M" */ |
| | @@ -712,10 +713,11 @@ |
| 712 | 713 | int nOverwrite = 0; /* Number of unmanaged files overwritten */ |
| 713 | 714 | char vAncestor = 'p'; /* If P is an ancestor of V then 'p', else 'n' */ |
| 714 | 715 | const char *zVersion; /* The VERSION argument */ |
| 715 | 716 | int bMultiMerge = 0; /* True if there are two or more VERSION arguments */ |
| 716 | 717 | int nMerge = 0; /* Number of prior merges processed */ |
| 718 | + int useUndo = 1; /* True to record changes in the undo log */ |
| 717 | 719 | Stmt q; /* SQL statment used for merge processing */ |
| 718 | 720 | |
| 719 | 721 | |
| 720 | 722 | /* Notation: |
| 721 | 723 | ** |
| | @@ -760,10 +762,12 @@ |
| 760 | 762 | ** * The --dry-run option is also useful in combination with --debug. |
| 761 | 763 | */ |
| 762 | 764 | debugFlag = find_option("debug",0,0)!=0; |
| 763 | 765 | if( debugFlag && verboseFlag ) debugFlag = 2; |
| 764 | 766 | showVfileFlag = find_option("show-vfile",0,0)!=0; |
| 767 | + useUndo = find_option("noundo",0,0)==0; |
| 768 | + if( dryRunFlag ) useUndo = 0; |
| 765 | 769 | |
| 766 | 770 | verify_all_options(); |
| 767 | 771 | db_must_be_within_tree(); |
| 768 | 772 | if( zBinGlob==0 ) zBinGlob = db_get("binary-glob",0); |
| 769 | 773 | vid = db_lget_int("checkout", 0); |
| | @@ -926,11 +930,11 @@ |
| 926 | 930 | integrateFlag ? "integrate:" : "merge-from:"); |
| 927 | 931 | print_checkin_description(pid, 12, "baseline:"); |
| 928 | 932 | } |
| 929 | 933 | vfile_check_signature(vid, CKSIG_ENOTFILE); |
| 930 | 934 | if( nMerge==0 ) db_begin_transaction(); |
| 931 | | - if( !dryRunFlag ) undo_begin(); |
| 935 | + if( useUndo ) undo_begin(); |
| 932 | 936 | if( load_vfile_from_rid(mid) && !forceMissingFlag ){ |
| 933 | 937 | fossil_fatal("missing content, unable to merge"); |
| 934 | 938 | } |
| 935 | 939 | if( load_vfile_from_rid(pid) && !forceMissingFlag ){ |
| 936 | 940 | fossil_fatal("missing content, unable to merge"); |
| | @@ -1183,12 +1187,12 @@ |
| 1183 | 1187 | int ridm = db_column_int(&q, 1); |
| 1184 | 1188 | const char *zName = db_column_text(&q, 2); |
| 1185 | 1189 | int islinkm = db_column_int(&q, 3); |
| 1186 | 1190 | /* Copy content from idm over into idv. Overwrite idv. */ |
| 1187 | 1191 | fossil_print("UPDATE %s\n", zName); |
| 1192 | + if( useUndo ) undo_save(zName); |
| 1188 | 1193 | if( !dryRunFlag ){ |
| 1189 | | - undo_save(zName); |
| 1190 | 1194 | db_multi_exec( |
| 1191 | 1195 | "UPDATE vfile SET mtime=0, mrid=%d, chnged=%d, islink=%d," |
| 1192 | 1196 | " mhash=CASE WHEN rid<>%d" |
| 1193 | 1197 | " THEN (SELECT uuid FROM blob WHERE blob.rid=%d) END" |
| 1194 | 1198 | " WHERE id=%d", ridm, integrateFlag?4:2, islinkm, ridm, ridm, idv |
| | @@ -1265,11 +1269,11 @@ |
| 1265 | 1269 | }else{ |
| 1266 | 1270 | i64 sz; |
| 1267 | 1271 | const char *zErrMsg = 0; |
| 1268 | 1272 | int nc = 0; |
| 1269 | 1273 | |
| 1270 | | - if( !dryRunFlag ) undo_save(zName); |
| 1274 | + if( useUndo ) undo_save(zName); |
| 1271 | 1275 | zFullPath = mprintf("%s/%s", g.zLocalRoot, zName); |
| 1272 | 1276 | sz = file_size(zFullPath, ExtFILE); |
| 1273 | 1277 | content_get(ridp, &p); |
| 1274 | 1278 | content_get(ridm, &m); |
| 1275 | 1279 | if( isBinary ){ |
| | @@ -1352,11 +1356,11 @@ |
| 1352 | 1356 | zErrMsg = "local edits lost"; |
| 1353 | 1357 | zFullPath = mprintf("%s/%s", g.zLocalRoot, zName); |
| 1354 | 1358 | sz = file_size(zFullPath, ExtFILE); |
| 1355 | 1359 | fossil_free(zFullPath); |
| 1356 | 1360 | } |
| 1357 | | - if( !dryRunFlag ) undo_save(zName); |
| 1361 | + if( useUndo ) undo_save(zName); |
| 1358 | 1362 | db_multi_exec( |
| 1359 | 1363 | "UPDATE vfile SET deleted=1 WHERE id=%d", idv |
| 1360 | 1364 | ); |
| 1361 | 1365 | if( !dryRunFlag ){ |
| 1362 | 1366 | char *zFullPath = mprintf("%s%s", g.zLocalRoot, zName); |
| | @@ -1399,12 +1403,12 @@ |
| 1399 | 1403 | int idv = db_column_int(&q, 0); |
| 1400 | 1404 | const char *zOldName = db_column_text(&q, 1); |
| 1401 | 1405 | const char *zNewName = db_column_text(&q, 2); |
| 1402 | 1406 | int isExe = db_column_int(&q, 3); |
| 1403 | 1407 | fossil_print("RENAME %s -> %s\n", zOldName, zNewName); |
| 1404 | | - if( !dryRunFlag ) undo_save(zOldName); |
| 1405 | | - if( !dryRunFlag ) undo_save(zNewName); |
| 1408 | + if( useUndo ) undo_save(zOldName); |
| 1409 | + if( useUndo ) undo_save(zNewName); |
| 1406 | 1410 | db_multi_exec( |
| 1407 | 1411 | "UPDATE mergestat SET fnr=fnm WHERE fnp=%Q", |
| 1408 | 1412 | zOldName |
| 1409 | 1413 | ); |
| 1410 | 1414 | db_multi_exec( |
| | @@ -1498,12 +1502,12 @@ |
| 1498 | 1502 | "VALUES('ADDED',%Q,%d,%Q)", |
| 1499 | 1503 | /* fnm */ zName, |
| 1500 | 1504 | /* ridm */ db_column_int(&q,2), |
| 1501 | 1505 | /* fnr */ zName |
| 1502 | 1506 | ); |
| 1507 | + if( useUndo ) undo_save(zName); |
| 1503 | 1508 | if( !dryRunFlag ){ |
| 1504 | | - undo_save(zName); |
| 1505 | 1509 | vfile_to_disk(0, idm, 0, 0); |
| 1506 | 1510 | } |
| 1507 | 1511 | } |
| 1508 | 1512 | db_finalize(&q); |
| 1509 | 1513 | |
| | @@ -1558,9 +1562,9 @@ |
| 1558 | 1562 | } |
| 1559 | 1563 | if( bMultiMerge && nConflict==0 ){ |
| 1560 | 1564 | nMerge++; |
| 1561 | 1565 | goto merge_next_child; |
| 1562 | 1566 | } |
| 1563 | | - if( !dryRunFlag ) undo_finish(); |
| 1567 | + if( useUndo ) undo_finish(); |
| 1564 | 1568 | |
| 1565 | 1569 | db_end_transaction(dryRunFlag); |
| 1566 | 1570 | } |
| 1567 | 1571 | |