Fossil SCM
Take positive cherrypick merges into account when computing the MLINK table for a check-in.
Commit
e0d8f733b7f9a9d4c556dfd831fa5e2f2f9b0b695a917b1cba62393809adb9b4
Parent
9e816f0aa91bc39…
1 file changed
+14
-2
+14
-2
| --- src/manifest.c | ||
| +++ src/manifest.c | ||
| @@ -1804,10 +1804,17 @@ | ||
| 1804 | 1804 | for(i=1; i<pChild->nParent; i++){ |
| 1805 | 1805 | pmid = uuid_to_rid(pChild->azParent[i], 0); |
| 1806 | 1806 | if( pmid<=0 ) continue; |
| 1807 | 1807 | add_mlink(pmid, 0, mid, pChild, 0); |
| 1808 | 1808 | } |
| 1809 | + for(i=0; i<pChild->nCherrypick; i++){ | |
| 1810 | + if( pChild->aCherrypick[i].zCPTarget[0]=='+' | |
| 1811 | + && (pmid = uuid_to_rid(pChild->aCherrypick[i].zCPTarget+1, 0))>0 | |
| 1812 | + ){ | |
| 1813 | + add_mlink(pmid, 0, mid, pChild, 0); | |
| 1814 | + } | |
| 1815 | + } | |
| 1809 | 1816 | } |
| 1810 | 1817 | } |
| 1811 | 1818 | |
| 1812 | 1819 | /* |
| 1813 | 1820 | ** For a check-in with RID "rid" that has nParent parent check-ins given |
| @@ -1826,10 +1833,11 @@ | ||
| 1826 | 1833 | ){ |
| 1827 | 1834 | int i; |
| 1828 | 1835 | int parentid = 0; |
| 1829 | 1836 | char zBaseId[30]; /* Baseline manifest RID for deltas. "NULL" otherwise */ |
| 1830 | 1837 | Stmt q; |
| 1838 | + int nLink; | |
| 1831 | 1839 | |
| 1832 | 1840 | if( p->zBaseline ){ |
| 1833 | 1841 | sqlite3_snprintf(sizeof(zBaseId), zBaseId, "%d", |
| 1834 | 1842 | uuid_to_rid(p->zBaseline,1)); |
| 1835 | 1843 | }else{ |
| @@ -1842,20 +1850,24 @@ | ||
| 1842 | 1850 | "VALUES(%d, %d, %d, %.17g, %s)", |
| 1843 | 1851 | pid, rid, i==0, p->rDate, zBaseId/*safe-for-%s*/); |
| 1844 | 1852 | if( i==0 ) parentid = pid; |
| 1845 | 1853 | } |
| 1846 | 1854 | add_mlink(parentid, 0, rid, p, 1); |
| 1847 | - if( nParent>1 ){ | |
| 1855 | + nLink = nParent; | |
| 1856 | + for(i=0; i<p->nCherrypick; i++){ | |
| 1857 | + if( p->aCherrypick[i].zCPTarget[0]=='+' ) nLink++; | |
| 1858 | + } | |
| 1859 | + if( nLink>1 ){ | |
| 1848 | 1860 | /* Change MLINK.PID from 0 to -1 for files that are added by merge. */ |
| 1849 | 1861 | db_multi_exec( |
| 1850 | 1862 | "UPDATE mlink SET pid=-1" |
| 1851 | 1863 | " WHERE mid=%d" |
| 1852 | 1864 | " AND pid=0" |
| 1853 | 1865 | " AND fnid IN " |
| 1854 | 1866 | " (SELECT fnid FROM mlink WHERE mid=%d GROUP BY fnid" |
| 1855 | 1867 | " HAVING count(*)<%d)", |
| 1856 | - rid, rid, nParent | |
| 1868 | + rid, rid, nLink | |
| 1857 | 1869 | ); |
| 1858 | 1870 | } |
| 1859 | 1871 | db_prepare(&q, "SELECT cid, isprim FROM plink WHERE pid=%d", rid); |
| 1860 | 1872 | while( db_step(&q)==SQLITE_ROW ){ |
| 1861 | 1873 | int cid = db_column_int(&q, 0); |
| 1862 | 1874 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -1804,10 +1804,17 @@ | |
| 1804 | for(i=1; i<pChild->nParent; i++){ |
| 1805 | pmid = uuid_to_rid(pChild->azParent[i], 0); |
| 1806 | if( pmid<=0 ) continue; |
| 1807 | add_mlink(pmid, 0, mid, pChild, 0); |
| 1808 | } |
| 1809 | } |
| 1810 | } |
| 1811 | |
| 1812 | /* |
| 1813 | ** For a check-in with RID "rid" that has nParent parent check-ins given |
| @@ -1826,10 +1833,11 @@ | |
| 1826 | ){ |
| 1827 | int i; |
| 1828 | int parentid = 0; |
| 1829 | char zBaseId[30]; /* Baseline manifest RID for deltas. "NULL" otherwise */ |
| 1830 | Stmt q; |
| 1831 | |
| 1832 | if( p->zBaseline ){ |
| 1833 | sqlite3_snprintf(sizeof(zBaseId), zBaseId, "%d", |
| 1834 | uuid_to_rid(p->zBaseline,1)); |
| 1835 | }else{ |
| @@ -1842,20 +1850,24 @@ | |
| 1842 | "VALUES(%d, %d, %d, %.17g, %s)", |
| 1843 | pid, rid, i==0, p->rDate, zBaseId/*safe-for-%s*/); |
| 1844 | if( i==0 ) parentid = pid; |
| 1845 | } |
| 1846 | add_mlink(parentid, 0, rid, p, 1); |
| 1847 | if( nParent>1 ){ |
| 1848 | /* Change MLINK.PID from 0 to -1 for files that are added by merge. */ |
| 1849 | db_multi_exec( |
| 1850 | "UPDATE mlink SET pid=-1" |
| 1851 | " WHERE mid=%d" |
| 1852 | " AND pid=0" |
| 1853 | " AND fnid IN " |
| 1854 | " (SELECT fnid FROM mlink WHERE mid=%d GROUP BY fnid" |
| 1855 | " HAVING count(*)<%d)", |
| 1856 | rid, rid, nParent |
| 1857 | ); |
| 1858 | } |
| 1859 | db_prepare(&q, "SELECT cid, isprim FROM plink WHERE pid=%d", rid); |
| 1860 | while( db_step(&q)==SQLITE_ROW ){ |
| 1861 | int cid = db_column_int(&q, 0); |
| 1862 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -1804,10 +1804,17 @@ | |
| 1804 | for(i=1; i<pChild->nParent; i++){ |
| 1805 | pmid = uuid_to_rid(pChild->azParent[i], 0); |
| 1806 | if( pmid<=0 ) continue; |
| 1807 | add_mlink(pmid, 0, mid, pChild, 0); |
| 1808 | } |
| 1809 | for(i=0; i<pChild->nCherrypick; i++){ |
| 1810 | if( pChild->aCherrypick[i].zCPTarget[0]=='+' |
| 1811 | && (pmid = uuid_to_rid(pChild->aCherrypick[i].zCPTarget+1, 0))>0 |
| 1812 | ){ |
| 1813 | add_mlink(pmid, 0, mid, pChild, 0); |
| 1814 | } |
| 1815 | } |
| 1816 | } |
| 1817 | } |
| 1818 | |
| 1819 | /* |
| 1820 | ** For a check-in with RID "rid" that has nParent parent check-ins given |
| @@ -1826,10 +1833,11 @@ | |
| 1833 | ){ |
| 1834 | int i; |
| 1835 | int parentid = 0; |
| 1836 | char zBaseId[30]; /* Baseline manifest RID for deltas. "NULL" otherwise */ |
| 1837 | Stmt q; |
| 1838 | int nLink; |
| 1839 | |
| 1840 | if( p->zBaseline ){ |
| 1841 | sqlite3_snprintf(sizeof(zBaseId), zBaseId, "%d", |
| 1842 | uuid_to_rid(p->zBaseline,1)); |
| 1843 | }else{ |
| @@ -1842,20 +1850,24 @@ | |
| 1850 | "VALUES(%d, %d, %d, %.17g, %s)", |
| 1851 | pid, rid, i==0, p->rDate, zBaseId/*safe-for-%s*/); |
| 1852 | if( i==0 ) parentid = pid; |
| 1853 | } |
| 1854 | add_mlink(parentid, 0, rid, p, 1); |
| 1855 | nLink = nParent; |
| 1856 | for(i=0; i<p->nCherrypick; i++){ |
| 1857 | if( p->aCherrypick[i].zCPTarget[0]=='+' ) nLink++; |
| 1858 | } |
| 1859 | if( nLink>1 ){ |
| 1860 | /* Change MLINK.PID from 0 to -1 for files that are added by merge. */ |
| 1861 | db_multi_exec( |
| 1862 | "UPDATE mlink SET pid=-1" |
| 1863 | " WHERE mid=%d" |
| 1864 | " AND pid=0" |
| 1865 | " AND fnid IN " |
| 1866 | " (SELECT fnid FROM mlink WHERE mid=%d GROUP BY fnid" |
| 1867 | " HAVING count(*)<%d)", |
| 1868 | rid, rid, nLink |
| 1869 | ); |
| 1870 | } |
| 1871 | db_prepare(&q, "SELECT cid, isprim FROM plink WHERE pid=%d", rid); |
| 1872 | while( db_step(&q)==SQLITE_ROW ){ |
| 1873 | int cid = db_column_int(&q, 0); |
| 1874 |