Fossil SCM

Fixes to the unversioned file sync protocol.

drh 2016-08-09 17:18 unversioned-files
Commit 5d913409b70a013d6fc7bd2463026f2bc0c86bd2
1 file changed +7 -5
+7 -5
--- src/xfer.c
+++ src/xfer.c
@@ -370,11 +370,11 @@
370370
);
371371
}
372372
db_bind_text(&q, ":name", blob_str(&pXfer->aToken[1]));
373373
db_bind_int(&q, ":rcvid", g.rcvid);
374374
db_bind_int64(&q, ":mtime", mtime);
375
- db_bind_text(&q, ":hash", blob_str(&pXfer->aToken[5]));
375
+ db_bind_text(&q, ":hash", blob_str(pHash));
376376
db_bind_int(&q, ":sz", blob_size(&content));
377377
if( !nullContent ){
378378
blob_compress(&content, &content);
379379
db_bind_blob(&q, ":content", &content);
380380
}
@@ -639,16 +639,16 @@
639639
*/
640640
static void send_unversioned_file(Xfer *pXfer, const char *zName, int noContent){
641641
Stmt q1;
642642
643643
if( noContent ){
644
- db_static_prepare(&q1,
644
+ db_prepare(&q1,
645645
"SELECT mtime, hash, encoding, sz FROM unversioned WHERE name=%Q",
646646
zName
647647
);
648648
}else{
649
- db_static_prepare(&q1,
649
+ db_prepare(&q1,
650650
"SELECT mtime, hash, encoding, sz, content FROM unversioned WHERE name=%Q",
651651
zName
652652
);
653653
}
654654
if( db_step(&q1)==SQLITE_ROW ){
@@ -1838,11 +1838,11 @@
18381838
if( uvDoPush ){
18391839
Stmt uvq;
18401840
assert( (syncFlags & SYNC_UNVERSIONED)!=0 );
18411841
assert( uvStatus==2 );
18421842
db_prepare(&uvq, "SELECT name, mtimeOnly FROM uv_tosend");
1843
- while( db_step(&uvq) ){
1843
+ while( db_step(&uvq)==SQLITE_ROW ){
18441844
send_unversioned_file(&xfer, db_column_text(&uvq,0), db_column_int(&uvq,1));
18451845
nCardSent++;
18461846
}
18471847
db_finalize(&uvq);
18481848
uvDoPush = 0;
@@ -1960,10 +1960,11 @@
19601960
**
19611961
** Accept an unversioned file from the client.
19621962
*/
19631963
if( blob_eq(&xfer.aToken[0], "uvfile") ){
19641964
xfer_accept_unversioned_file(&xfer, 1);
1965
+ nArtifactRcvd++;
19651966
}else
19661967
19671968
/* gimme UUID
19681969
**
19691970
** Server is requesting a file. If the file is a manifest, assume
@@ -2034,11 +2035,12 @@
20342035
int iStatus;
20352036
if( uvStatus==0 ) uvStatus = 2;
20362037
iStatus = unversioned_status(zName, mtime, zHash);
20372038
if( iStatus<=1 ){
20382039
if( zHash[0]!='-' ){
2039
- @ uvgimme %s(zName)
2040
+ blob_appendf(xfer.pOut, "uvgimme %s\n", zName);
2041
+ nCardSent++;
20402042
}else if( iStatus==1 ){
20412043
db_multi_exec(
20422044
"UPDATE unversioned"
20432045
" SET mtime=%lld, hash=NULL, sz=0, encoding=0, content=NULL"
20442046
" WHERE name=%Q", mtime, zName
20452047
--- src/xfer.c
+++ src/xfer.c
@@ -370,11 +370,11 @@
370 );
371 }
372 db_bind_text(&q, ":name", blob_str(&pXfer->aToken[1]));
373 db_bind_int(&q, ":rcvid", g.rcvid);
374 db_bind_int64(&q, ":mtime", mtime);
375 db_bind_text(&q, ":hash", blob_str(&pXfer->aToken[5]));
376 db_bind_int(&q, ":sz", blob_size(&content));
377 if( !nullContent ){
378 blob_compress(&content, &content);
379 db_bind_blob(&q, ":content", &content);
380 }
@@ -639,16 +639,16 @@
639 */
640 static void send_unversioned_file(Xfer *pXfer, const char *zName, int noContent){
641 Stmt q1;
642
643 if( noContent ){
644 db_static_prepare(&q1,
645 "SELECT mtime, hash, encoding, sz FROM unversioned WHERE name=%Q",
646 zName
647 );
648 }else{
649 db_static_prepare(&q1,
650 "SELECT mtime, hash, encoding, sz, content FROM unversioned WHERE name=%Q",
651 zName
652 );
653 }
654 if( db_step(&q1)==SQLITE_ROW ){
@@ -1838,11 +1838,11 @@
1838 if( uvDoPush ){
1839 Stmt uvq;
1840 assert( (syncFlags & SYNC_UNVERSIONED)!=0 );
1841 assert( uvStatus==2 );
1842 db_prepare(&uvq, "SELECT name, mtimeOnly FROM uv_tosend");
1843 while( db_step(&uvq) ){
1844 send_unversioned_file(&xfer, db_column_text(&uvq,0), db_column_int(&uvq,1));
1845 nCardSent++;
1846 }
1847 db_finalize(&uvq);
1848 uvDoPush = 0;
@@ -1960,10 +1960,11 @@
1960 **
1961 ** Accept an unversioned file from the client.
1962 */
1963 if( blob_eq(&xfer.aToken[0], "uvfile") ){
1964 xfer_accept_unversioned_file(&xfer, 1);
 
1965 }else
1966
1967 /* gimme UUID
1968 **
1969 ** Server is requesting a file. If the file is a manifest, assume
@@ -2034,11 +2035,12 @@
2034 int iStatus;
2035 if( uvStatus==0 ) uvStatus = 2;
2036 iStatus = unversioned_status(zName, mtime, zHash);
2037 if( iStatus<=1 ){
2038 if( zHash[0]!='-' ){
2039 @ uvgimme %s(zName)
 
2040 }else if( iStatus==1 ){
2041 db_multi_exec(
2042 "UPDATE unversioned"
2043 " SET mtime=%lld, hash=NULL, sz=0, encoding=0, content=NULL"
2044 " WHERE name=%Q", mtime, zName
2045
--- src/xfer.c
+++ src/xfer.c
@@ -370,11 +370,11 @@
370 );
371 }
372 db_bind_text(&q, ":name", blob_str(&pXfer->aToken[1]));
373 db_bind_int(&q, ":rcvid", g.rcvid);
374 db_bind_int64(&q, ":mtime", mtime);
375 db_bind_text(&q, ":hash", blob_str(pHash));
376 db_bind_int(&q, ":sz", blob_size(&content));
377 if( !nullContent ){
378 blob_compress(&content, &content);
379 db_bind_blob(&q, ":content", &content);
380 }
@@ -639,16 +639,16 @@
639 */
640 static void send_unversioned_file(Xfer *pXfer, const char *zName, int noContent){
641 Stmt q1;
642
643 if( noContent ){
644 db_prepare(&q1,
645 "SELECT mtime, hash, encoding, sz FROM unversioned WHERE name=%Q",
646 zName
647 );
648 }else{
649 db_prepare(&q1,
650 "SELECT mtime, hash, encoding, sz, content FROM unversioned WHERE name=%Q",
651 zName
652 );
653 }
654 if( db_step(&q1)==SQLITE_ROW ){
@@ -1838,11 +1838,11 @@
1838 if( uvDoPush ){
1839 Stmt uvq;
1840 assert( (syncFlags & SYNC_UNVERSIONED)!=0 );
1841 assert( uvStatus==2 );
1842 db_prepare(&uvq, "SELECT name, mtimeOnly FROM uv_tosend");
1843 while( db_step(&uvq)==SQLITE_ROW ){
1844 send_unversioned_file(&xfer, db_column_text(&uvq,0), db_column_int(&uvq,1));
1845 nCardSent++;
1846 }
1847 db_finalize(&uvq);
1848 uvDoPush = 0;
@@ -1960,10 +1960,11 @@
1960 **
1961 ** Accept an unversioned file from the client.
1962 */
1963 if( blob_eq(&xfer.aToken[0], "uvfile") ){
1964 xfer_accept_unversioned_file(&xfer, 1);
1965 nArtifactRcvd++;
1966 }else
1967
1968 /* gimme UUID
1969 **
1970 ** Server is requesting a file. If the file is a manifest, assume
@@ -2034,11 +2035,12 @@
2035 int iStatus;
2036 if( uvStatus==0 ) uvStatus = 2;
2037 iStatus = unversioned_status(zName, mtime, zHash);
2038 if( iStatus<=1 ){
2039 if( zHash[0]!='-' ){
2040 blob_appendf(xfer.pOut, "uvgimme %s\n", zName);
2041 nCardSent++;
2042 }else if( iStatus==1 ){
2043 db_multi_exec(
2044 "UPDATE unversioned"
2045 " SET mtime=%lld, hash=NULL, sz=0, encoding=0, content=NULL"
2046 " WHERE name=%Q", mtime, zName
2047

Keyboard Shortcuts

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