Fossil SCM

Take positive cherrypick merges into account when computing the MLINK table for a check-in.

drh 2020-10-14 12:15 trunk
Commit e0d8f733b7f9a9d4c556dfd831fa5e2f2f9b0b695a917b1cba62393809adb9b4
1 file changed +14 -2
+14 -2
--- src/manifest.c
+++ src/manifest.c
@@ -1804,10 +1804,17 @@
18041804
for(i=1; i<pChild->nParent; i++){
18051805
pmid = uuid_to_rid(pChild->azParent[i], 0);
18061806
if( pmid<=0 ) continue;
18071807
add_mlink(pmid, 0, mid, pChild, 0);
18081808
}
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
+ }
18091816
}
18101817
}
18111818
18121819
/*
18131820
** For a check-in with RID "rid" that has nParent parent check-ins given
@@ -1826,10 +1833,11 @@
18261833
){
18271834
int i;
18281835
int parentid = 0;
18291836
char zBaseId[30]; /* Baseline manifest RID for deltas. "NULL" otherwise */
18301837
Stmt q;
1838
+ int nLink;
18311839
18321840
if( p->zBaseline ){
18331841
sqlite3_snprintf(sizeof(zBaseId), zBaseId, "%d",
18341842
uuid_to_rid(p->zBaseline,1));
18351843
}else{
@@ -1842,20 +1850,24 @@
18421850
"VALUES(%d, %d, %d, %.17g, %s)",
18431851
pid, rid, i==0, p->rDate, zBaseId/*safe-for-%s*/);
18441852
if( i==0 ) parentid = pid;
18451853
}
18461854
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 ){
18481860
/* Change MLINK.PID from 0 to -1 for files that are added by merge. */
18491861
db_multi_exec(
18501862
"UPDATE mlink SET pid=-1"
18511863
" WHERE mid=%d"
18521864
" AND pid=0"
18531865
" AND fnid IN "
18541866
" (SELECT fnid FROM mlink WHERE mid=%d GROUP BY fnid"
18551867
" HAVING count(*)<%d)",
1856
- rid, rid, nParent
1868
+ rid, rid, nLink
18571869
);
18581870
}
18591871
db_prepare(&q, "SELECT cid, isprim FROM plink WHERE pid=%d", rid);
18601872
while( db_step(&q)==SQLITE_ROW ){
18611873
int cid = db_column_int(&q, 0);
18621874
--- 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

Keyboard Shortcuts

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