1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
|
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
|
-
+
+
+
+
+
+
-
-
+
+
|
/* Send the send-private pragma if we are trying to sync private data */
if( syncFlags & SYNC_PRIVATE ){
blob_append(&send, "pragma send-private\n", -1);
}
/* When syncing unversioned files, create a TEMP table in which to store
** the names of files that do not need to be sent from client to server.
** the names of files that need to be sent from client to server.
**
** The initial assumption is that all unversioned files need to be sent
** to the other side. But "uvigot" cards received back from the remote
** side will normally cause many of these entries to be removed since they
** do not really need to be sent.
*/
if( (syncFlags & SYNC_UNVERSIONED)!=0 ){
unversioned_schema();
db_multi_exec(
"CREATE TEMP TABLE uv_tosend("
" name TEXT PRIMARY KEY,"
" mtimeOnly BOOLEAN"
" name TEXT PRIMARY KEY," /* Name of file to send client->server */
" mtimeOnly BOOLEAN" /* True to only send mtime, not content */
") WITHOUT ROWID;"
"INSERT INTO uv_toSend(name,mtimeOnly)"
" SELECT name, 0 FROM unversioned WHERE hash IS NOT NULL;"
);
}
/*
|
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
|
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
|
+
+
+
+
|
}
/* Send unversioned files present here on the client but missing or
** obsolete on the server.
**
** Or, if the SYNC_UV_REVERT flag is set, delete the local unversioned
** files that do not exist on the server.
**
** This happens on the second exchange, since we do not know what files
** need to be sent until after the uvigot cards from the first exchange
** have been processed.
*/
if( uvDoPush ){
assert( (syncFlags & SYNC_UNVERSIONED)!=0 );
if( syncFlags & SYNC_UV_REVERT ){
db_multi_exec(
"DELETE FROM unversioned"
" WHERE name IN (SELECT name FROM uv_tosend);"
|
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
|
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
|
-
+
+
+
+
+
|
&& blob_is_int(&xfer.aToken[4], &size)
&& (blob_eq(&xfer.aToken[3],"-") || blob_is_uuid(&xfer.aToken[3]))
){
const char *zName = blob_str(&xfer.aToken[1]);
const char *zHash = blob_str(&xfer.aToken[3]);
int iStatus;
iStatus = unversioned_status(zName, mtime, zHash);
if( (syncFlags & SYNC_UV_REVERT)!=0 && iStatus==4 ) iStatus = 2;
if( (syncFlags & SYNC_UV_REVERT)!=0 ){
if( iStatus==4 ) iStatus = 2;
if( iStatus==5 ) iStatus = 1;
}
if( iStatus<=1 ){
if( zHash[0]!='-' ){
blob_appendf(xfer.pOut, "uvgimme %s\n", zName);
nCardSent++;
nUvGimmeSent++;
db_multi_exec("DELETE FROM unversioned WHERE name=%Q", zName);
}else if( iStatus==1 ){
db_multi_exec(
"UPDATE unversioned"
" SET mtime=%lld, hash=NULL, sz=0, encoding=0, content=NULL"
" WHERE name=%Q", mtime, zName
);
db_unset("uv-hash", 0);
|