@@ -52,20 +52,32 @@
52 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned syncFlags, /* Mask of SYNC_* flags */
53 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned configRcvMask, /* Receive these configuration items */
54 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned configSendMask, /* Send these configuration items */
55 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zAltPCode /* Alternative project code (usually NULL) */
56 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nErr;
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nOther;
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char **azOther;
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Stmt q;
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nErr; /* Number of errors seen */
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nOther; /* Number of extra remote URLs */
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char **azOther; /* Text of extra remote URLs */
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Loop counter */
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iEnd; /* Loop termination point */
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nextIEnd; /* Loop termination point for next pass */
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPass; /* Which pass through the remotes. 0 or 1 */
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPass; /* Number of passes to make. 1 or 2 */
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Stmt q; /* An SQL statement */
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UrlData baseUrl; /* Saved parse of the default remote */
62 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sync_explain(syncFlags);
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nErr = client_sync(syncFlags, configRcvMask, configSendMask, zAltPCode);
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nErr==0 ) url_remember();
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (syncFlags & SYNC_ALLURL)==0 ) return nErr;
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (syncFlags & SYNC_ALLURL)==0 ){
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Common-case: Only sync with the remote identified by g.url */
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nErr = client_sync(syncFlags, configRcvMask, configSendMask, zAltPCode, 0);
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nErr==0 ) url_remember();
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return nErr;
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If we reach this point, it means we want to sync with all remotes */
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&baseUrl, 0, sizeof(baseUrl));
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_move_parse(&baseUrl, &g.url);
67 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOther = 0;
68 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azOther = 0;
69 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
70 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT substr(name,10) FROM config"
71 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE name glob 'sync-url:*'"
@@ -75,30 +87,60 @@
75 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUrl = db_column_text(&q, 0);
76 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azOther = fossil_realloc(azOther, sizeof(*azOther)*(nOther+1));
77 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azOther[nOther++] = fossil_strdup(zUrl);
78 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nOther; i++){
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- url_unparse(&g.url);
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- url_parse(azOther[i], URL_PROMPT_PW|URL_ASK_REMEMBER_PW|URL_USE_CONFIG);
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sync_explain(syncFlags);
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = client_sync(syncFlags, configRcvMask, configSendMask, zAltPCode);
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nErr += rc;
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (g.url.flags & URL_REMEMBER_PW)!=0 && rc==0 ){
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zKey = mprintf("sync-pw:%s", azOther[i]);
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zPw = obscure(g.url.passwd);
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zPw && zPw[0] ){
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_set(zKey/*works-like:""*/, zPw, 0);
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zPw);
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zKey);
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iEnd = nOther+1;
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nextIEnd = 0;
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nPass = 1 + ((syncFlags & (SYNC_PUSH|SYNC_PULL))==(SYNC_PUSH|SYNC_PULL));
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iPass=0; iPass<nPass; iPass++){
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<iEnd; i++){
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRcvd;
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ){
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_move_parse(&g.url, &baseUrl); /* Load canonical URL */
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Load an auxiliary remote URL */
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_parse(azOther[i-1],
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ URL_PROMPT_PW|URL_ASK_REMEMBER_PW|URL_USE_CONFIG);
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>0 || iPass>0 ) sync_explain(syncFlags);
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = client_sync(syncFlags, configRcvMask, configSendMask,
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAltPCode, &nRcvd);
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRcvd>0 ){
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If new artifacts were received, we want to repeat all prior
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** remotes on the second pass */
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nextIEnd = i;
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nErr += rc;
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==0 && iPass==0 ){
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ){
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_remember();
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( (g.url.flags & URL_REMEMBER_PW)!=0 ){
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zKey = mprintf("sync-pw:%s", azOther[i-1]);
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zPw = obscure(g.url.passwd);
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zPw && zPw[0] ){
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_set(zKey/*works-like:""*/, zPw, 0);
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(zPw);
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(zKey);
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ){
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_move_parse(&baseUrl, &g.url); /* Don't forget canonical URL */
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_unparse(&g.url); /* Delete auxiliary URL parses */
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iEnd = nextIEnd;
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nOther; i++){
96 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(azOther[i]);
97 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azOther[i] = 0;
98 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99 140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(azOther);
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ url_move_parse(&g.url, &baseUrl); /* Restore the canonical URL parse */
100 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nErr;
101 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -149,11 +191,11 @@
149 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = client_sync_all_urls(flags|SYNC_ALLURL, configSync, 0, 0);
150 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
151 193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_remember();
152 194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sync_explain(flags);
153 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
url_enable_proxy("via proxy: ");
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = client_sync(flags, configSync, 0, 0);
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = client_sync(flags, configSync, 0, 0, 0);
155 197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
156 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
157 199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158 200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -480,11 +522,11 @@
480 522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void sync_unversioned(unsigned syncFlags){
481 523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned configFlags = 0;
482 524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)find_option("uv-noop",0,0);
483 525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
process_sync_args(&configFlags, &syncFlags, 1, 0);
484 526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
verify_all_options();
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- client_sync(syncFlags, 0, 0, 0);
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ client_sync(syncFlags, 0, 0, 0, 0);
486 528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
487 529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
488 530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
489 531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: remote
490 532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: remote-url*
491 533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!