| | @@ -618,28 +618,49 @@ |
| 618 | 618 | ** to B and B is renamed to A. |
| 619 | 619 | ** The Fossil merge algorithm breaks down in those cases. It will need |
| 620 | 620 | ** to be completely rewritten to handle such complex cases. Such cases |
| 621 | 621 | ** appear to be rare, and also confusing to humans. |
| 622 | 622 | */ |
| 623 | + db_multi_exec( |
| 624 | + "UPDATE OR IGNORE fv SET fnp=vfile.pathname FROM vfile" |
| 625 | + " WHERE fnp IS NULL" |
| 626 | + " AND vfile.pathname = fv.fnn" |
| 627 | + " AND vfile.vid=%d;", |
| 628 | + pid |
| 629 | + ); |
| 623 | 630 | db_multi_exec( |
| 624 | 631 | "UPDATE OR IGNORE fv SET fn=vfile.pathname FROM vfile" |
| 625 | 632 | " WHERE fn IS NULL" |
| 626 | | - " AND vfile.pathname IN (fv.fnm,fv.fnp,fv.fnn)" |
| 633 | + " AND vfile.pathname = coalesce(fv.fnp,fv.fnn)" |
| 627 | 634 | " AND vfile.vid=%d;", |
| 628 | 635 | vid |
| 636 | + ); |
| 637 | + db_multi_exec( |
| 638 | + "UPDATE OR IGNORE fv SET fnm=vfile.pathname FROM vfile" |
| 639 | + " WHERE fnm IS NULL" |
| 640 | + " AND vfile.pathname = coalesce(fv.fnp,fv.fnn)" |
| 641 | + " AND vfile.vid=%d;", |
| 642 | + mid |
| 629 | 643 | ); |
| 630 | 644 | db_multi_exec( |
| 631 | 645 | "UPDATE OR IGNORE fv SET fnp=vfile.pathname FROM vfile" |
| 632 | 646 | " WHERE fnp IS NULL" |
| 633 | | - " AND vfile.pathname IN (fv.fn,fv.fnm,fv.fnn)" |
| 647 | + " AND vfile.pathname IN (fv.fnm,fv.fn)" |
| 634 | 648 | " AND vfile.vid=%d;", |
| 635 | 649 | pid |
| 650 | + ); |
| 651 | + db_multi_exec( |
| 652 | + "UPDATE OR IGNORE fv SET fn=vfile.pathname FROM vfile" |
| 653 | + " WHERE fn IS NULL" |
| 654 | + " AND vfile.pathname = fv.fnm" |
| 655 | + " AND vfile.vid=%d;", |
| 656 | + vid |
| 636 | 657 | ); |
| 637 | 658 | db_multi_exec( |
| 638 | 659 | "UPDATE OR IGNORE fv SET fnm=vfile.pathname FROM vfile" |
| 639 | 660 | " WHERE fnm IS NULL" |
| 640 | | - " AND vfile.pathname IN (fv.fn,fv.fnp,fv.fnn)" |
| 661 | + " AND vfile.pathname = fv.fn" |
| 641 | 662 | " AND vfile.vid=%d;", |
| 642 | 663 | mid |
| 643 | 664 | ); |
| 644 | 665 | } |
| 645 | 666 | if( debugFlag ){ |
| | @@ -702,25 +723,25 @@ |
| 702 | 723 | db_multi_exec( |
| 703 | 724 | "UPDATE fv SET idp=idv, ridp=ridv WHERE ridv>0 AND chnged NOT IN (3,5)" |
| 704 | 725 | ); |
| 705 | 726 | }else{ |
| 706 | 727 | db_multi_exec( |
| 707 | | - "UPDATE fv SET" |
| 708 | | - " idp=coalesce((SELECT id FROM vfile WHERE vid=%d AND fnp=pathname),0)," |
| 709 | | - " ridp=coalesce((SELECT rid FROM vfile WHERE vid=%d AND fnp=pathname),0)", |
| 710 | | - pid, pid |
| 728 | + "UPDATE fv SET idp=coalesce(vfile.id,0), ridp=coalesce(vfile.rid,0)" |
| 729 | + " FROM vfile" |
| 730 | + " WHERE vfile.vid=%d AND fv.fnp=vfile.pathname", |
| 731 | + pid |
| 711 | 732 | ); |
| 712 | 733 | } |
| 713 | 734 | db_multi_exec( |
| 714 | 735 | "UPDATE fv SET" |
| 715 | | - " idm=coalesce((SELECT id FROM vfile WHERE vid=%d AND fnm=pathname),0)," |
| 716 | | - " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND fnm=pathname),0)," |
| 717 | | - " islinkm=coalesce((SELECT islink FROM vfile" |
| 718 | | - " WHERE vid=%d AND fnm=pathname),0)," |
| 719 | | - " isexe=coalesce((SELECT isexe FROM vfile WHERE vid=%d AND fnm=pathname)," |
| 720 | | - " isexe)", |
| 721 | | - mid, mid, mid, mid |
| 736 | + " idm=coalesce(vfile.id,0)," |
| 737 | + " ridm=coalesce(vfile.rid,0)," |
| 738 | + " islinkm=coalesce(vfile.islink,0)," |
| 739 | + " isexe=coalesce(vfile.isexe,fv.isexe)" |
| 740 | + " FROM vfile" |
| 741 | + " WHERE vid=%d AND fnm=pathname", |
| 742 | + mid |
| 722 | 743 | ); |
| 723 | 744 | |
| 724 | 745 | /* |
| 725 | 746 | ** Update the execute bit on files where it's changed from P->M but not P->V |
| 726 | 747 | */ |
| 727 | 748 | |
| 728 | 749 | ADDED test/merge_renames_2.test |