Fossil SCM
Detect old stashfile schema and recreate to allow file renames to be stashed in existing checkout databases.
Commit
a13217b8975276ab79d3dacce19d07f749ab6a4b
Parent
003b6581ef4336d…
1 file changed
+15
+15
| --- src/stash.c | ||
| +++ src/stash.c | ||
| @@ -481,16 +481,31 @@ | ||
| 481 | 481 | void stash_cmd(void){ |
| 482 | 482 | const char *zDb; |
| 483 | 483 | const char *zCmd; |
| 484 | 484 | int nCmd; |
| 485 | 485 | int stashid = 0; |
| 486 | + int rc; | |
| 486 | 487 | undo_capture_command_line(); |
| 487 | 488 | db_must_be_within_tree(); |
| 488 | 489 | db_open_config(0, 0); |
| 489 | 490 | db_begin_transaction(); |
| 490 | 491 | zDb = db_name("localdb"); |
| 491 | 492 | db_multi_exec(zStashInit /*works-like:"%w,%w"*/, zDb, zDb); |
| 493 | + rc = db_exists("SELECT 1 FROM sqlite_master" | |
| 494 | + " WHERE name='stashfile'" | |
| 495 | + " AND sql GLOB '* PRIMARY KEY(origname, stashid)*'"); | |
| 496 | + if( rc!=0 ){ | |
| 497 | + db_multi_exec( | |
| 498 | + "CREATE TABLE \"%w\".stashfile_tmp AS SELECT * FROM stashfile;" | |
| 499 | + "DROP TABLE stashfile;", zDb | |
| 500 | + ); | |
| 501 | + db_multi_exec(zStashInit /*works-like:"%w,%w"*/, zDb, zDb); | |
| 502 | + db_multi_exec( | |
| 503 | + "INSERT INTO stashfile SELECT * FROM stashfile_tmp;" | |
| 504 | + "DROP TABLE stashfile_tmp;" | |
| 505 | + ); | |
| 506 | + } | |
| 492 | 507 | if( g.argc<=2 ){ |
| 493 | 508 | zCmd = "save"; |
| 494 | 509 | }else{ |
| 495 | 510 | zCmd = g.argv[2]; |
| 496 | 511 | } |
| 497 | 512 |
| --- src/stash.c | |
| +++ src/stash.c | |
| @@ -481,16 +481,31 @@ | |
| 481 | void stash_cmd(void){ |
| 482 | const char *zDb; |
| 483 | const char *zCmd; |
| 484 | int nCmd; |
| 485 | int stashid = 0; |
| 486 | undo_capture_command_line(); |
| 487 | db_must_be_within_tree(); |
| 488 | db_open_config(0, 0); |
| 489 | db_begin_transaction(); |
| 490 | zDb = db_name("localdb"); |
| 491 | db_multi_exec(zStashInit /*works-like:"%w,%w"*/, zDb, zDb); |
| 492 | if( g.argc<=2 ){ |
| 493 | zCmd = "save"; |
| 494 | }else{ |
| 495 | zCmd = g.argv[2]; |
| 496 | } |
| 497 |
| --- src/stash.c | |
| +++ src/stash.c | |
| @@ -481,16 +481,31 @@ | |
| 481 | void stash_cmd(void){ |
| 482 | const char *zDb; |
| 483 | const char *zCmd; |
| 484 | int nCmd; |
| 485 | int stashid = 0; |
| 486 | int rc; |
| 487 | undo_capture_command_line(); |
| 488 | db_must_be_within_tree(); |
| 489 | db_open_config(0, 0); |
| 490 | db_begin_transaction(); |
| 491 | zDb = db_name("localdb"); |
| 492 | db_multi_exec(zStashInit /*works-like:"%w,%w"*/, zDb, zDb); |
| 493 | rc = db_exists("SELECT 1 FROM sqlite_master" |
| 494 | " WHERE name='stashfile'" |
| 495 | " AND sql GLOB '* PRIMARY KEY(origname, stashid)*'"); |
| 496 | if( rc!=0 ){ |
| 497 | db_multi_exec( |
| 498 | "CREATE TABLE \"%w\".stashfile_tmp AS SELECT * FROM stashfile;" |
| 499 | "DROP TABLE stashfile;", zDb |
| 500 | ); |
| 501 | db_multi_exec(zStashInit /*works-like:"%w,%w"*/, zDb, zDb); |
| 502 | db_multi_exec( |
| 503 | "INSERT INTO stashfile SELECT * FROM stashfile_tmp;" |
| 504 | "DROP TABLE stashfile_tmp;" |
| 505 | ); |
| 506 | } |
| 507 | if( g.argc<=2 ){ |
| 508 | zCmd = "save"; |
| 509 | }else{ |
| 510 | zCmd = g.argv[2]; |
| 511 | } |
| 512 |