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.
Commit
ee5b942080cda0a92444f8b4ec2c6a355314ec6e40f0aeb837835ee0cb72c902
Parent
333a89bf9675c2a…
1 file changed
+16
-2
+16
-2
| --- src/clone.c | ||
| +++ src/clone.c | ||
| @@ -152,10 +152,12 @@ | ||
| 152 | 152 | int syncFlags = SYNC_CLONE; |
| 153 | 153 | int noCompress = find_option("nocompress",0,0)!=0; |
| 154 | 154 | int noOpen = find_option("no-open",0,0)!=0; |
| 155 | 155 | int allowNested = find_option("nested",0,0)!=0; /* Used by open */ |
| 156 | 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 */ | |
| 157 | 159 | const char *zRepo = 0; /* Name of the new local repository file */ |
| 158 | 160 | const char *zWorkDir = 0; /* Open in this directory, if not zero */ |
| 159 | 161 | |
| 160 | 162 | |
| 161 | 163 | /* Also clone private branches */ |
| @@ -239,10 +241,12 @@ | ||
| 239 | 241 | if( bResume ){ |
| 240 | 242 | db_open_repository(zRepo); |
| 241 | 243 | db_open_config(0,0); |
| 242 | 244 | db_begin_transaction(); |
| 243 | 245 | db_unprotect(PROTECT_CONFIG); |
| 246 | + zOldProjCode = db_get("project-code",0); | |
| 247 | + fossil_print("Resuming clone of project-id %s\n",zOldProjCode); | |
| 244 | 248 | db_multi_exec( |
| 245 | 249 | "DELETE FROM config WHERE name = 'project-code';" |
| 246 | 250 | "DELETE FROM config WHERE name = 'server-code';" |
| 247 | 251 | ); |
| 248 | 252 | db_protect_pop(); |
| @@ -302,12 +306,22 @@ | ||
| 302 | 306 | }else{ |
| 303 | 307 | db_unprotect(PROTECT_CONFIG); |
| 304 | 308 | db_multi_exec("DELETE FROM config WHERE name = 'aux-clone-seqno';"); |
| 305 | 309 | db_protect_pop(); |
| 306 | 310 | } |
| 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 | + } | |
| 309 | 323 | db_open_repository(zRepo); |
| 310 | 324 | #if !defined(_WIN32) |
| 311 | 325 | signal(SIGINT, SIG_DFL); |
| 312 | 326 | #endif |
| 313 | 327 | } |
| 314 | 328 |
| --- 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 |