Fossil SCM

Verify that the project-code on resume hasn't changed per discussion in [forum:d1a2ed56271602fa|forum post d1a2ed56271602fa] and rollback changes if they are different.

andybradford 2023-12-01 03:53 clone-resume
Commit ee5b942080cda0a92444f8b4ec2c6a355314ec6e40f0aeb837835ee0cb72c902
1 file changed +16 -2
+16 -2
--- src/clone.c
+++ src/clone.c
@@ -152,10 +152,12 @@
152152
int syncFlags = SYNC_CLONE;
153153
int noCompress = find_option("nocompress",0,0)!=0;
154154
int noOpen = find_option("no-open",0,0)!=0;
155155
int allowNested = find_option("nested",0,0)!=0; /* Used by open */
156156
int bResume = 0; /* Set if a previous clone failed */
157
+ const char *zNewProjCode; /* New Project code obtained during clone */
158
+ const char *zOldProjCode; /* Old project code stored in resuming clone */
157159
const char *zRepo = 0; /* Name of the new local repository file */
158160
const char *zWorkDir = 0; /* Open in this directory, if not zero */
159161
160162
161163
/* Also clone private branches */
@@ -239,10 +241,12 @@
239241
if( bResume ){
240242
db_open_repository(zRepo);
241243
db_open_config(0,0);
242244
db_begin_transaction();
243245
db_unprotect(PROTECT_CONFIG);
246
+ zOldProjCode = db_get("project-code",0);
247
+ fossil_print("Resuming clone of project-id %s\n",zOldProjCode);
244248
db_multi_exec(
245249
"DELETE FROM config WHERE name = 'project-code';"
246250
"DELETE FROM config WHERE name = 'server-code';"
247251
);
248252
db_protect_pop();
@@ -302,12 +306,22 @@
302306
}else{
303307
db_unprotect(PROTECT_CONFIG);
304308
db_multi_exec("DELETE FROM config WHERE name = 'aux-clone-seqno';");
305309
db_protect_pop();
306310
}
307
- db_end_transaction(0);
308
- db_close(1);
311
+ zNewProjCode = db_get("project-code",0);
312
+ if( bResume && zOldProjCode && zOldProjCode[0]
313
+ && fossil_strcmp(zOldProjCode, zNewProjCode)!=0 ){
314
+ fossil_warning("project-id changed\nwas %s\nis %s\nrolling back changes",
315
+ zOldProjCode, zNewProjCode);
316
+ db_end_transaction(1);
317
+ db_close(1);
318
+ fossil_exit(1);
319
+ }else{
320
+ db_end_transaction(0);
321
+ db_close(1);
322
+ }
309323
db_open_repository(zRepo);
310324
#if !defined(_WIN32)
311325
signal(SIGINT, SIG_DFL);
312326
#endif
313327
}
314328
--- src/clone.c
+++ src/clone.c
@@ -152,10 +152,12 @@
152 int syncFlags = SYNC_CLONE;
153 int noCompress = find_option("nocompress",0,0)!=0;
154 int noOpen = find_option("no-open",0,0)!=0;
155 int allowNested = find_option("nested",0,0)!=0; /* Used by open */
156 int bResume = 0; /* Set if a previous clone failed */
 
 
157 const char *zRepo = 0; /* Name of the new local repository file */
158 const char *zWorkDir = 0; /* Open in this directory, if not zero */
159
160
161 /* Also clone private branches */
@@ -239,10 +241,12 @@
239 if( bResume ){
240 db_open_repository(zRepo);
241 db_open_config(0,0);
242 db_begin_transaction();
243 db_unprotect(PROTECT_CONFIG);
 
 
244 db_multi_exec(
245 "DELETE FROM config WHERE name = 'project-code';"
246 "DELETE FROM config WHERE name = 'server-code';"
247 );
248 db_protect_pop();
@@ -302,12 +306,22 @@
302 }else{
303 db_unprotect(PROTECT_CONFIG);
304 db_multi_exec("DELETE FROM config WHERE name = 'aux-clone-seqno';");
305 db_protect_pop();
306 }
307 db_end_transaction(0);
308 db_close(1);
 
 
 
 
 
 
 
 
 
 
309 db_open_repository(zRepo);
310 #if !defined(_WIN32)
311 signal(SIGINT, SIG_DFL);
312 #endif
313 }
314
--- src/clone.c
+++ src/clone.c
@@ -152,10 +152,12 @@
152 int syncFlags = SYNC_CLONE;
153 int noCompress = find_option("nocompress",0,0)!=0;
154 int noOpen = find_option("no-open",0,0)!=0;
155 int allowNested = find_option("nested",0,0)!=0; /* Used by open */
156 int bResume = 0; /* Set if a previous clone failed */
157 const char *zNewProjCode; /* New Project code obtained during clone */
158 const char *zOldProjCode; /* Old project code stored in resuming clone */
159 const char *zRepo = 0; /* Name of the new local repository file */
160 const char *zWorkDir = 0; /* Open in this directory, if not zero */
161
162
163 /* Also clone private branches */
@@ -239,10 +241,12 @@
241 if( bResume ){
242 db_open_repository(zRepo);
243 db_open_config(0,0);
244 db_begin_transaction();
245 db_unprotect(PROTECT_CONFIG);
246 zOldProjCode = db_get("project-code",0);
247 fossil_print("Resuming clone of project-id %s\n",zOldProjCode);
248 db_multi_exec(
249 "DELETE FROM config WHERE name = 'project-code';"
250 "DELETE FROM config WHERE name = 'server-code';"
251 );
252 db_protect_pop();
@@ -302,12 +306,22 @@
306 }else{
307 db_unprotect(PROTECT_CONFIG);
308 db_multi_exec("DELETE FROM config WHERE name = 'aux-clone-seqno';");
309 db_protect_pop();
310 }
311 zNewProjCode = db_get("project-code",0);
312 if( bResume && zOldProjCode && zOldProjCode[0]
313 && fossil_strcmp(zOldProjCode, zNewProjCode)!=0 ){
314 fossil_warning("project-id changed\nwas %s\nis %s\nrolling back changes",
315 zOldProjCode, zNewProjCode);
316 db_end_transaction(1);
317 db_close(1);
318 fossil_exit(1);
319 }else{
320 db_end_transaction(0);
321 db_close(1);
322 }
323 db_open_repository(zRepo);
324 #if !defined(_WIN32)
325 signal(SIGINT, SIG_DFL);
326 #endif
327 }
328

Keyboard Shortcuts

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