@@ -1473,33 +1473,44 @@
1473 1473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zDbName is a valid local database file, open it and return
1474 1474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** true. If it is not a valid local database file, return 0.
1475 1475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1476 1476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int isValidLocalDb(const char *zDbName){
1477 1477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 lsize;
1478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zVFileDef;
1479 1478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1480 1479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( file_access(zDbName, F_OK) ) return 0;
1481 1480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lsize = file_size(zDbName, ExtFILE);
1482 1481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( lsize%1024!=0 || lsize<4096 ) return 0;
1483 1482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_open_or_attach(zDbName, "localdb");
1484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zVFileDef = db_text(0, "SELECT sql FROM localdb.sqlite_master"
1485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE name=='vfile'");
1486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zVFileDef==0 ) return 0;
1483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check to see if the checkout database has the lastest schema changes.
1485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The most recent schema change (2019-01-19) is the addition of the
1486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** vmerge.mhash field. If the schema has that one column, assume
1487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** everything else is up-to-date.
1488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_table_has_column("localdb","vmerge","mhash") ){
1490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1; /* This is a checkout database with the latest schema */
1491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there is no vfile table, then assume we have picked up something
1494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that is not even close to being a valid checkout database */
1495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !db_table_exists("localdb","vfile") ){
1496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0; /* Not a DB */
1497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1487 1498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1488 1499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the "isexe" column is missing from the vfile table, then
1489 1500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** add it now. This code added on 2010-03-06. After all users have
1490 1501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** upgraded, this code can be safely deleted.
1491 1502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_strglob("* isexe *", zVFileDef)!=0 ){
1503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !db_table_has_column("localdb","vfile","isexe") ){
1493 1504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("ALTER TABLE vfile ADD COLUMN isexe BOOLEAN DEFAULT 0");
1494 1505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1495 1506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1496 1507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If "islink"/"isLink" columns are missing from tables, then
1497 1508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** add them now. This code added on 2011-01-17 and 2011-08-27.
1498 1509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** After all users have upgraded, this code can be safely deleted.
1499 1510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_strglob("* islink *", zVFileDef)!=0 ){
1511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !db_table_has_column("localdb","vfile","isLink") ){
1501 1512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("ALTER TABLE vfile ADD COLUMN islink BOOLEAN DEFAULT 0");
1502 1513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_local_table_exists_but_lacks_column("stashfile", "isLink") ){
1503 1514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("ALTER TABLE stashfile ADD COLUMN isLink BOOL DEFAULT 0");
1504 1515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1505 1516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_local_table_exists_but_lacks_column("undo", "isLink") ){
@@ -1507,11 +1518,15 @@
1507 1518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1508 1519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_local_table_exists_but_lacks_column("undo_vfile", "islink") ){
1509 1520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("ALTER TABLE undo_vfile ADD COLUMN islink BOOL DEFAULT 0");
1510 1521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1511 1522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_free(zVFileDef);
1523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The design of the vmerge table changed on 2019-01-19, adding the mhash
1525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column and changing the UNIQUE index. However, we must ahve the
1526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** repository database at hand in order to do the migration, so that
1527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** step is deferred. */
1513 1528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
1514 1529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1515 1530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1516 1531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1517 1532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Locate the root directory of the local repository tree. The root
@@ -1656,41 +1671,59 @@
1656 1671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make a change to the CHECK constraint on the BLOB table for
1657 1672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** version 2.0 and later.
1658 1673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1659 1674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rebuild_schema_update_2_0(); /* Do the Fossil-2.0 schema updates */
1660 1675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the checkout database was opened first, then check to make
1662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sure that the repository database that was just opened has not
1663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be replaced by a clone of the same project, with different RID
1664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** values.
1665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
1666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.localOpen && !db_fingerprint_ok() ){
1667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Uncomment the following when we are ready for automatic recovery: */
1676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Additional checks that occur when opening the checkout database */
1677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.localOpen ){
1678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Ensure that the repository database that was just opened has not
1680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be replaced by a clone of the same project, with different RID
1681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** values.
1682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !db_fingerprint_ok() ){
1684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Uncomment the following when we are ready for automatic recovery: */
1668 1685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0
1669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- stash_rid_renumbering_event();
1686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stash_rid_renumbering_event();
1670 1687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
1671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print(
1672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "Oops. It looks like the repository database file located at\n"
1673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " \"%s\"\n", zDbName
1674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
1675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print(
1676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "has been swapped with a clone that may have different\n"
1677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "integer keys for the various artifacts. As of 2019-01-11,\n"
1678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "we are working on enhancing Fossil to be able to deal with\n"
1679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "that automatically, but we are not there yet. Sorry.\n\n"
1680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
1681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print(
1682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "As an interim workaround, try:\n"
1683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " %s close --force\n"
1684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " %s open \"%s\" --keep\n"
1685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "Noting that any STASH and UNDO information "
1686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "WILL BE IRREVOCABLY LOST.\n\n",
1687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- g.argv[0],
1688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- g.argv[0], zDbName
1689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
1690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_fatal("bad fingerprint");
1688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(
1689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "Oops. It looks like the repository database file located at\n"
1690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " \"%s\"\n", zDbName
1691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(
1693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "has been swapped with a clone that may have different\n"
1694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "integer keys for the various artifacts. As of 2019-01-11,\n"
1695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "we are working on enhancing Fossil to be able to deal with\n"
1696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "that automatically, but we are not there yet. Sorry.\n\n"
1697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(
1699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "As an interim workaround, try:\n"
1700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " %s close --force\n"
1701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " %s open \"%s\" --keep\n"
1702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "Noting that any STASH and UNDO information "
1703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "WILL BE IRREVOCABLY LOST.\n\n",
1704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.argv[0],
1705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.argv[0], zDbName
1706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("bad fingerprint");
1691 1708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
1709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
1710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Make sure the checkout database schema migration of 2019-01-19
1712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (the addition of the vmerge.mhash column and making that columns
1713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** part of the PRIMARY KEY) has occurred.
1714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !db_table_has_column("localdb", "vmerge", "mhash") ){
1716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec("ALTER TABLE vmerge RENAME TO old_vmerge;");
1717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec(zLocalSchemaVmerge /*works-like:""*/);
1718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec(
1719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT OR IGNORE INTO vmerge(id,merge,mhash)"
1720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SELECT id, merge, blob.uuid FROM old_vmerge, blob"
1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE old_vmerge.merge=blob.rid;"
1722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DROP TABLE old_vmerge;"
1723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1692 1725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1693 1726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1694 1727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1695 1728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1696 1729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if there have been any changes to the repository
@@ -2880,11 +2913,11 @@
2880 2913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(_WIN32) || defined(__CYGWIN__)
2881 2914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define LOCALDB_NAME "./_FOSSIL_"
2882 2915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
2883 2916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define LOCALDB_NAME "./.fslckout"
2884 2917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_init_database(LOCALDB_NAME, zLocalSchema,
2918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_init_database(LOCALDB_NAME, zLocalSchema, zLocalSchemaVmerge,
2886 2919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef FOSSIL_LOCAL_WAL
2887 2920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"COMMIT; PRAGMA journal_mode=WAL; BEGIN;",
2888 2921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2889 2922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char*)0);
2890 2923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_delete_on_failure(LOCALDB_NAME);
2891 2924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!