Fossil SCM
Produce merge conflict mark during merge when file exist in current version and in version to be merged, but not in common ancestor.
Commit
7c75e47b3c130ff12e37c2a0790a2fdd089ebe7f65d9eedcbf6206c79748ddea
Parent
3f6aa94641ad928…
1 file changed
+6
-19
+6
-19
| --- src/merge.c | ||
| +++ src/merge.c | ||
| @@ -762,28 +762,11 @@ | ||
| 762 | 762 | |
| 763 | 763 | /************************************************************************ |
| 764 | 764 | ** All of the information needed to do the merge is now contained in the |
| 765 | 765 | ** FV table. Starting here, we begin to actually carry out the merge. |
| 766 | 766 | ** |
| 767 | - ** First, find files in M and V but not in P and report conflicts. | |
| 768 | - ** The file in M will be ignored. It will be treated as if it | |
| 769 | - ** does not exist. | |
| 770 | - */ | |
| 771 | - db_prepare(&q, | |
| 772 | - "SELECT idm FROM fv WHERE idp=0 AND idv>0 AND idm>0" | |
| 773 | - ); | |
| 774 | - while( db_step(&q)==SQLITE_ROW ){ | |
| 775 | - int idm = db_column_int(&q, 0); | |
| 776 | - char *zName = db_text(0, "SELECT pathname FROM vfile WHERE id=%d", idm); | |
| 777 | - fossil_warning("WARNING: no common ancestor for %s", zName); | |
| 778 | - free(zName); | |
| 779 | - db_multi_exec("UPDATE fv SET idm=0 WHERE idm=%d", idm); | |
| 780 | - } | |
| 781 | - db_finalize(&q); | |
| 782 | - | |
| 783 | - /* | |
| 784 | - ** Find files that have changed from P->M but not P->V. | |
| 767 | + ** First, find files that have changed from P->M but not P->V. | |
| 785 | 768 | ** Copy the M content over into V. |
| 786 | 769 | */ |
| 787 | 770 | db_prepare(&q, |
| 788 | 771 | "SELECT idv, ridm, fn, islinkm FROM fv" |
| 789 | 772 | " WHERE idp>0 AND idv>0 AND idm>0" |
| @@ -809,14 +792,18 @@ | ||
| 809 | 792 | } |
| 810 | 793 | db_finalize(&q); |
| 811 | 794 | |
| 812 | 795 | /* |
| 813 | 796 | ** Do a three-way merge on files that have changes on both P->M and P->V. |
| 797 | + ** | |
| 798 | + ** Proceed even if the file doesn't exist on P, just like the common ancestor | |
| 799 | + ** of M and V is an empty file. In this case, merge conflict marks will be | |
| 800 | + ** added to the file and user will be forced to take a decision. | |
| 814 | 801 | */ |
| 815 | 802 | db_prepare(&q, |
| 816 | 803 | "SELECT ridm, idv, ridp, ridv, %s, fn, isexe, islinkv, islinkm FROM fv" |
| 817 | - " WHERE idp>0 AND idv>0 AND idm>0" | |
| 804 | + " WHERE idv>0 AND idm>0" | |
| 818 | 805 | " AND ridm!=ridp AND (ridv!=ridp OR chnged)", |
| 819 | 806 | glob_expr("fv.fn", zBinGlob) |
| 820 | 807 | ); |
| 821 | 808 | while( db_step(&q)==SQLITE_ROW ){ |
| 822 | 809 | int ridm = db_column_int(&q, 0); |
| 823 | 810 |
| --- src/merge.c | |
| +++ src/merge.c | |
| @@ -762,28 +762,11 @@ | |
| 762 | |
| 763 | /************************************************************************ |
| 764 | ** All of the information needed to do the merge is now contained in the |
| 765 | ** FV table. Starting here, we begin to actually carry out the merge. |
| 766 | ** |
| 767 | ** First, find files in M and V but not in P and report conflicts. |
| 768 | ** The file in M will be ignored. It will be treated as if it |
| 769 | ** does not exist. |
| 770 | */ |
| 771 | db_prepare(&q, |
| 772 | "SELECT idm FROM fv WHERE idp=0 AND idv>0 AND idm>0" |
| 773 | ); |
| 774 | while( db_step(&q)==SQLITE_ROW ){ |
| 775 | int idm = db_column_int(&q, 0); |
| 776 | char *zName = db_text(0, "SELECT pathname FROM vfile WHERE id=%d", idm); |
| 777 | fossil_warning("WARNING: no common ancestor for %s", zName); |
| 778 | free(zName); |
| 779 | db_multi_exec("UPDATE fv SET idm=0 WHERE idm=%d", idm); |
| 780 | } |
| 781 | db_finalize(&q); |
| 782 | |
| 783 | /* |
| 784 | ** Find files that have changed from P->M but not P->V. |
| 785 | ** Copy the M content over into V. |
| 786 | */ |
| 787 | db_prepare(&q, |
| 788 | "SELECT idv, ridm, fn, islinkm FROM fv" |
| 789 | " WHERE idp>0 AND idv>0 AND idm>0" |
| @@ -809,14 +792,18 @@ | |
| 809 | } |
| 810 | db_finalize(&q); |
| 811 | |
| 812 | /* |
| 813 | ** Do a three-way merge on files that have changes on both P->M and P->V. |
| 814 | */ |
| 815 | db_prepare(&q, |
| 816 | "SELECT ridm, idv, ridp, ridv, %s, fn, isexe, islinkv, islinkm FROM fv" |
| 817 | " WHERE idp>0 AND idv>0 AND idm>0" |
| 818 | " AND ridm!=ridp AND (ridv!=ridp OR chnged)", |
| 819 | glob_expr("fv.fn", zBinGlob) |
| 820 | ); |
| 821 | while( db_step(&q)==SQLITE_ROW ){ |
| 822 | int ridm = db_column_int(&q, 0); |
| 823 |
| --- src/merge.c | |
| +++ src/merge.c | |
| @@ -762,28 +762,11 @@ | |
| 762 | |
| 763 | /************************************************************************ |
| 764 | ** All of the information needed to do the merge is now contained in the |
| 765 | ** FV table. Starting here, we begin to actually carry out the merge. |
| 766 | ** |
| 767 | ** First, find files that have changed from P->M but not P->V. |
| 768 | ** Copy the M content over into V. |
| 769 | */ |
| 770 | db_prepare(&q, |
| 771 | "SELECT idv, ridm, fn, islinkm FROM fv" |
| 772 | " WHERE idp>0 AND idv>0 AND idm>0" |
| @@ -809,14 +792,18 @@ | |
| 792 | } |
| 793 | db_finalize(&q); |
| 794 | |
| 795 | /* |
| 796 | ** Do a three-way merge on files that have changes on both P->M and P->V. |
| 797 | ** |
| 798 | ** Proceed even if the file doesn't exist on P, just like the common ancestor |
| 799 | ** of M and V is an empty file. In this case, merge conflict marks will be |
| 800 | ** added to the file and user will be forced to take a decision. |
| 801 | */ |
| 802 | db_prepare(&q, |
| 803 | "SELECT ridm, idv, ridp, ridv, %s, fn, isexe, islinkv, islinkm FROM fv" |
| 804 | " WHERE idv>0 AND idm>0" |
| 805 | " AND ridm!=ridp AND (ridv!=ridp OR chnged)", |
| 806 | glob_expr("fv.fn", zBinGlob) |
| 807 | ); |
| 808 | while( db_step(&q)==SQLITE_ROW ){ |
| 809 | int ridm = db_column_int(&q, 0); |
| 810 |