Differences From Artifact [7108d4748b111d23]:
- File
src/db.c
- 2011-08-12 11:54:34 - part of checkin [9515143de5] on branch trunk - When forcing a rollback following an error, reset all SQL statement first so that the rollback can be successful. (user: drh
To Artifact [2303a98525b39d19]:
- File
src/db.c
- 2011-08-14 17:54:22 - part of checkin [3113f7b18f] on branch ben-testing - Remove the seperate versionable version of db_get(), which now uses ctrlSettings to determine whether a setting is versionable or not. (user: ben
- 2011-08-14 23:14:04 - part of checkin [9a0c995826] on branch trunk - Merge the ben-testing branch into trunk. (user: drh
- 2011-08-16 18:35:08 - part of checkin [84e6f172af] on branch venks-emacs - update branch before making changes (user: venkat
1397 void db_swap_connections(void){ 1397 void db_swap_connections(void){
1398 if( !g.useAttach ){ 1398 if( !g.useAttach ){
1399 sqlite3 *dbTemp = g.db; 1399 sqlite3 *dbTemp = g.db;
1400 g.db = g.dbConfig; 1400 g.db = g.dbConfig;
1401 g.dbConfig = dbTemp; 1401 g.dbConfig = dbTemp;
1402 } 1402 }
1403 } 1403 }
1404 1404
1405 /* 1405 /*
> 1406 ** Logic for reading potentially versioned settings from
> 1407 ** .fossil-settings/<name> , and emits warnings if necessary.
> 1408 ** Returns the non-versioned value without modification if there is no
> 1409 ** versioned value.
> 1410 */
> 1411 static char *db_get_do_versionable(const char *zName, char *zNonVersionedSetting
> 1412 /* Attempt to load the versioned setting from a checked out file */
> 1413 char *zVersionedSetting = 0;
> 1414 int noWarn = 0;
> 1415
> 1416 if( db_open_local() ){
> 1417 Blob versionedPathname;
> 1418 char *zVersionedPathname;
> 1419 blob_zero(&versionedPathname);
> 1420 blob_appendf(&versionedPathname, "%s/.fossil-settings/%s",
> 1421 g.zLocalRoot, zName);
> 1422 zVersionedPathname = blob_str(&versionedPathname);
> 1423 if( file_size(zVersionedPathname)>=0 ){
> 1424 /* File exists, and contains the value for this setting. Load from
> 1425 ** the file. */
> 1426 Blob setting;
> 1427 blob_zero(&setting);
> 1428 if( blob_read_from_file(&setting, zVersionedPathname) >= 0 ){
> 1429 blob_trim(&setting); /* Avoid non-obvious problems with line endings
> 1430 ** on boolean properties */
> 1431 zVersionedSetting = strdup(blob_str(&setting));
> 1432 }
> 1433 blob_reset(&setting);
> 1434 /* See if there's a no-warn flag */
> 1435 blob_append(&versionedPathname, ".no-warn", -1);
> 1436 if( file_size(blob_str(&versionedPathname))>=0 ){
> 1437 noWarn = 1;
> 1438 }
> 1439 }
> 1440 blob_reset(&versionedPathname);
> 1441 }
> 1442 /* Display a warning? */
> 1443 if( zVersionedSetting!=0 && zNonVersionedSetting!=0
> 1444 && zNonVersionedSetting[0]!='\0' && !noWarn
> 1445 ){
> 1446 /* There's a versioned setting, and a non-versioned setting. Tell
> 1447 ** the user about the conflict */
> 1448 fossil_warning(
> 1449 "setting %s has both versioned and non-versioned values: using "
> 1450 "versioned value from file .fossil-settings/%s (to silence this "
> 1451 "warning, either create an empty file named "
> 1452 ".fossil-settings/%s.no-warn or delete the non-versioned setting "
> 1453 " with \"fossil unset %s\")", zName, zName, zName, zName
> 1454 );
> 1455 }
> 1456 /* Prefer the versioned setting */
> 1457 return ( zVersionedSetting!=0 ) ? zVersionedSetting : zNonVersionedSetting;
> 1458 }
> 1459
> 1460
> 1461 /*
1406 ** Get and set values from the CONFIG, GLOBAL_CONFIG and VVAR table in the 1462 ** Get and set values from the CONFIG, GLOBAL_CONFIG and VVAR table in the
1407 ** repository and local databases. 1463 ** repository and local databases.
1408 */ 1464 */
1409 char *db_get(const char *zName, char *zDefault){ 1465 char *db_get(const char *zName, char *zDefault){
1410 char *z = 0; 1466 char *z = 0;
> 1467 int i;
> 1468 const struct stControlSettings *ctrlSetting = 0;
> 1469 /* Is this a setting? */
> 1470 for(i=0; ctrlSettings[i].name; i++){
> 1471 if( strcmp(ctrlSettings[i].name, zName)==0 ){
> 1472 ctrlSetting = &(ctrlSettings[i]);
> 1473 break;
> 1474 }
> 1475 }
1411 if( g.repositoryOpen ){ 1476 if( g.repositoryOpen ){
1412 z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName); 1477 z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName);
1413 } 1478 }
1414 if( z==0 && g.configOpen ){ 1479 if( z==0 && g.configOpen ){
1415 db_swap_connections(); 1480 db_swap_connections();
1416 z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName); 1481 z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName);
1417 db_swap_connections(); 1482 db_swap_connections();
> 1483 }
> 1484 if( ctrlSetting!=0 && ctrlSetting->versionable ){
> 1485 /* This is a versionable setting, try and get the info from a checked out fi
> 1486 z = db_get_do_versionable(zName, z);
1418 } 1487 }
1419 if( z==0 ){ 1488 if( z==0 ){
1420 z = zDefault; 1489 z = zDefault;
1421 } 1490 }
1422 return z; 1491 return z;
1423 } 1492 }
1424 void db_set(const char *zName, const char *zValue, int globalFlag){ 1493 void db_set(const char *zName, const char *zValue, int globalFlag){
................................................................................................................................................................................
1601 info_cmd(); 1670 info_cmd();
1602 } 1671 }
1603 } 1672 }
1604 1673
1605 /* 1674 /*
1606 ** Print the value of a setting named zName 1675 ** Print the value of a setting named zName
1607 */ 1676 */
1608 static void print_setting(const char *zName){ | 1677 static void print_setting(const struct stControlSettings *ctrlSetting, int local
1609 Stmt q; 1678 Stmt q;
1610 if( g.repositoryOpen ){ 1679 if( g.repositoryOpen ){
1611 db_prepare(&q, 1680 db_prepare(&q,
1612 "SELECT '(local)', value FROM config WHERE name=%Q" 1681 "SELECT '(local)', value FROM config WHERE name=%Q"
1613 " UNION ALL " 1682 " UNION ALL "
1614 "SELECT '(global)', value FROM global_config WHERE name=%Q", 1683 "SELECT '(global)', value FROM global_config WHERE name=%Q",
1615 zName, zName | 1684 ctrlSetting->name, ctrlSetting->name
1616 ); 1685 );
1617 }else{ 1686 }else{
1618 db_prepare(&q, 1687 db_prepare(&q,
1619 "SELECT '(global)', value FROM global_config WHERE name=%Q", 1688 "SELECT '(global)', value FROM global_config WHERE name=%Q",
1620 zName | 1689 ctrlSetting->name
1621 ); 1690 );
1622 } 1691 }
1623 if( db_step(&q)==SQLITE_ROW ){ 1692 if( db_step(&q)==SQLITE_ROW ){
1624 fossil_print("%-20s %-8s %s\n", zName, db_column_text(&q, 0), | 1693 fossil_print("%-20s %-8s %s\n", ctrlSetting->name, db_column_text(&q, 0),
1625 db_column_text(&q, 1)); 1694 db_column_text(&q, 1));
1626 }else{ 1695 }else{
1627 fossil_print("%-20s\n", zName); | 1696 fossil_print("%-20s\n", ctrlSetting->name);
> 1697 }
> 1698 if( ctrlSetting->versionable && localOpen ){
> 1699 /* Check to see if this is overridden by a versionable settings file */
> 1700 Blob versionedPathname;
> 1701 blob_zero(&versionedPathname);
> 1702 blob_appendf(&versionedPathname, "%s/.fossil-settings/%s", g.zLocalRoot, ctr
> 1703 if( file_size(blob_str(&versionedPathname))>=0 ){
> 1704 fossil_print(" (overridden by contents of file .fossil-settings/%s)\n", c
> 1705 }
1628 } 1706 }
1629 db_finalize(&q); 1707 db_finalize(&q);
1630 } 1708 }
1631 1709
1632 1710
1633 /* 1711 /*
1634 ** define all settings, which can be controlled via the set/unset 1712 ** define all settings, which can be controlled via the set/unset
................................................................................................................................................................................
1640 ** set-commands and displays the 'set'-help as info. 1718 ** set-commands and displays the 'set'-help as info.
1641 */ 1719 */
1642 #if INTERFACE 1720 #if INTERFACE
1643 struct stControlSettings { 1721 struct stControlSettings {
1644 char const *name; /* Name of the setting */ 1722 char const *name; /* Name of the setting */
1645 char const *var; /* Internal variable name used by db_set() */ 1723 char const *var; /* Internal variable name used by db_set() */
1646 int width; /* Width of display. 0 for boolean values */ 1724 int width; /* Width of display. 0 for boolean values */
> 1725 int versionable; /* Is this setting versionable? */
1647 char const *def; /* Default value */ 1726 char const *def; /* Default value */
1648 }; 1727 };
1649 #endif /* INTERFACE */ 1728 #endif /* INTERFACE */
1650 struct stControlSettings const ctrlSettings[] = { 1729 struct stControlSettings const ctrlSettings[] = {
1651 { "access-log", 0, 0, "off" }, | 1730 { "access-log", 0, 0, 0, "off" },
1652 { "auto-captcha", "autocaptcha", 0, "on" }, | 1731 { "auto-captcha", "autocaptcha", 0, 0, "on" },
1653 { "auto-shun", 0, 0, "on" }, | 1732 { "auto-shun", 0, 0, 0, "on" },
1654 { "autosync", 0, 0, "on" }, | 1733 { "autosync", 0, 0, 0, "on" },
1655 { "binary-glob", 0, 32, "" }, | 1734 { "binary-glob", 0, 32, 1, "" },
1656 { "case-sensitive",0, 0, "on" }, <
1657 { "clearsign", 0, 0, "off" }, | 1735 { "clearsign", 0, 0, 0, "off" },
> 1736 { "case-sensitive",0, 0, 0, "on" },
1658 { "crnl-glob", 0, 16, "" }, | 1737 { "crnl-glob", 0, 16, 1, "" },
1659 { "default-perms", 0, 16, "u" }, | 1738 { "default-perms", 0, 16, 0, "u" },
1660 { "diff-command", 0, 16, "" }, | 1739 { "diff-command", 0, 16, 0, "" },
1661 { "dont-push", 0, 0, "off" }, | 1740 { "dont-push", 0, 0, 0, "off" },
1662 { "editor", 0, 16, "" }, | 1741 { "editor", 0, 16, 0, "" },
1663 { "gdiff-command", 0, 16, "gdiff" }, | 1742 { "gdiff-command", 0, 16, 0, "gdiff" },
1664 { "gmerge-command",0, 40, "" }, | 1743 { "gmerge-command",0, 40, 0, "" },
1665 { "https-login", 0, 0, "off" }, | 1744 { "https-login", 0, 0, 0, "off" },
1666 { "ignore-glob", 0, 40, "" }, | 1745 { "ignore-glob", 0, 40, 1, "" },
> 1746 { "empty-dirs", 0, 40, 1, "" },
1667 { "http-port", 0, 16, "8080" }, | 1747 { "http-port", 0, 16, 0, "8080" },
1668 { "localauth", 0, 0, "off" }, | 1748 { "localauth", 0, 0, 0, "off" },
1669 { "main-branch", 0, 40, "trunk" }, | 1749 { "main-branch", 0, 40, 0, "trunk" },
1670 { "manifest", 0, 0, "off" }, | 1750 { "manifest", 0, 0, 1, "off" },
1671 { "max-upload", 0, 25, "250000" }, | 1751 { "max-upload", 0, 25, 0, "250000" },
1672 { "mtime-changes", 0, 0, "on" }, | 1752 { "mtime-changes", 0, 0, 0, "on" },
1673 { "pgp-command", 0, 32, "gpg --clearsign -o " }, | 1753 { "pgp-command", 0, 32, 0, "gpg --clearsign -o " },
1674 { "proxy", 0, 32, "off" }, | 1754 { "proxy", 0, 32, 0, "off" },
> 1755 { "relative-paths",0, 0, 0, "on" },
1675 { "repo-cksum", 0, 0, "on" }, | 1756 { "repo-cksum", 0, 0, 0, "on" },
1676 { "self-register", 0, 0, "off" }, | 1757 { "self-register", 0, 0, 0, "off" },
> 1758 { "ssl-ca-location",0, 40, 0, "" },
> 1759 { "ssl-identity", 0, 40, 0, "" },
1677 { "ssh-command", 0, 32, "" }, | 1760 { "ssh-command", 0, 32, 0, "" },
1678 { "web-browser", 0, 32, "" }, | 1761 { "web-browser", 0, 32, 0, "" },
1679 { "white-foreground", 0, 0, "off" }, | 1762 { "white-foreground", 0, 0, 0, "off" },
1680 { 0,0,0,0 } | 1763 { 0,0,0,0,0 }
1681 }; 1764 };
1682 1765
1683 /* 1766 /*
1684 ** COMMAND: settings 1767 ** COMMAND: settings
1685 ** COMMAND: unset 1768 ** COMMAND: unset
1686 ** 1769 **
1687 ** %fossil settings ?PROPERTY? ?VALUE? ?-global? 1770 ** %fossil settings ?PROPERTY? ?VALUE? ?-global?
1688 ** %fossil unset PROPERTY ?-global? 1771 ** %fossil unset PROPERTY ?-global?
1689 ** 1772 **
1690 ** The "settings" command with no arguments lists all properties and their 1773 ** The "settings" command with no arguments lists all properties and their
1691 ** values. With just a property name it shows the value of that property. 1774 ** values. With just a property name it shows the value of that property.
1692 ** With a value argument it changes the property for the current repository. 1775 ** With a value argument it changes the property for the current repository.
> 1776 **
> 1777 ** Settings marked as versionable are overridden by the contents of the
> 1778 ** file named .fossil-settings/PROPERTY in the checked out files, if that
> 1779 ** file exists.
1693 ** 1780 **
1694 ** The "unset" command clears a property setting. 1781 ** The "unset" command clears a property setting.
1695 ** 1782 **
1696 ** 1783 **
1697 ** auto-captcha If enabled, the Login page provides a button to 1784 ** auto-captcha If enabled, the Login page provides a button to
1698 ** fill in the captcha password. Default: on 1785 ** fill in the captcha password. Default: on
1699 ** 1786 **
................................................................................................................................................................................
1703 ** 1790 **
1704 ** autosync If enabled, automatically pull prior to commit 1791 ** autosync If enabled, automatically pull prior to commit
1705 ** or update and automatically push after commit or 1792 ** or update and automatically push after commit or
1706 ** tag or branch creation. If the value is "pullonly" 1793 ** tag or branch creation. If the value is "pullonly"
1707 ** then only pull operations occur automatically. 1794 ** then only pull operations occur automatically.
1708 ** Default: on 1795 ** Default: on
1709 ** 1796 **
1710 ** binary-glob The VALUE is a comma-separated list of GLOB patterns | 1797 ** binary-glob The VALUE is a comma or newline-separated list of
1711 ** that should be treated as binary files for merging | 1798 ** (versionable) GLOB patterns that should be treated as binary files
1712 ** purposes. Example: *.xml | 1799 ** for merging purposes. Example: *.xml
1713 ** 1800 **
1714 ** case-sensitive If TRUE, the files whose names differ only in case 1801 ** case-sensitive If TRUE, the files whose names differ only in case
1715 ** care considered distinct. If FALSE files whose names 1802 ** care considered distinct. If FALSE files whose names
1716 ** differ only in case are the same file. Defaults to 1803 ** differ only in case are the same file. Defaults to
1717 ** TRUE for unix and FALSE for windows and mac. 1804 ** TRUE for unix and FALSE for windows and mac.
1718 ** 1805 **
1719 ** clearsign When enabled, fossil will attempt to sign all commits 1806 ** clearsign When enabled, fossil will attempt to sign all commits
1720 ** with gpg. When disabled (the default), commits will 1807 ** with gpg. When disabled (the default), commits will
1721 ** be unsigned. Default: off 1808 ** be unsigned. Default: off
1722 ** 1809 **
1723 ** crnl-glob A comma-separated list of GLOB patterns for text files | 1810 ** crnl-glob A comma or newline-separated list of GLOB patterns for
1724 ** in which it is ok to have CR+NL line endings. | 1811 ** (versionable) text files in which it is ok to have CR+NL line endings.
1725 ** Set to "*" to disable CR+NL checking. 1812 ** Set to "*" to disable CR+NL checking.
1726 ** 1813 **
1727 ** default-perms Permissions given automatically to new users. For more 1814 ** default-perms Permissions given automatically to new users. For more
1728 ** information on permissions see Users page in Server 1815 ** information on permissions see Users page in Server
1729 ** Administration of the HTTP UI. Default: u. 1816 ** Administration of the HTTP UI. Default: u.
1730 ** 1817 **
1731 ** diff-command External command to run when performing a diff. 1818 ** diff-command External command to run when performing a diff.
1732 ** If undefined, the internal text diff will be used. 1819 ** If undefined, the internal text diff will be used.
1733 ** 1820 **
1734 ** dont-push Prevent this repository from pushing from client to 1821 ** dont-push Prevent this repository from pushing from client to
1735 ** server. Useful when setting up a private branch. 1822 ** server. Useful when setting up a private branch.
> 1823 **
> 1824 ** empty-dirs A comma or newline-separated list of pathnames. On
> 1825 ** (versionable) update and checkout commands, if no file or directory
> 1826 ** exists with that name, an empty directory will be
> 1827 ** created.
1736 ** 1828 **
1737 ** editor Text editor command used for check-in comments. 1829 ** editor Text editor command used for check-in comments.
1738 ** 1830 **
1739 ** gdiff-command External command to run when performing a graphical 1831 ** gdiff-command External command to run when performing a graphical
1740 ** diff. If undefined, text diff will be used. 1832 ** diff. If undefined, text diff will be used.
1741 ** 1833 **
1742 ** gmerge-command A graphical merge conflict resolver command operating 1834 ** gmerge-command A graphical merge conflict resolver command operating
................................................................................................................................................................................
1747 ** 1839 **
1748 ** http-port The TCP/IP port number to use by the "server" 1840 ** http-port The TCP/IP port number to use by the "server"
1749 ** and "ui" commands. Default: 8080 1841 ** and "ui" commands. Default: 8080
1750 ** 1842 **
1751 ** https-login Send login creditials using HTTPS instead of HTTP 1843 ** https-login Send login creditials using HTTPS instead of HTTP
1752 ** even if the login page request came via HTTP. 1844 ** even if the login page request came via HTTP.
1753 ** 1845 **
1754 ** ignore-glob The VALUE is a comma-separated list of GLOB patterns | 1846 ** ignore-glob The VALUE is a comma or newline-separated list of GLOB
1755 ** specifying files that the "extra" command will ignore. | 1847 ** (versionable) patterns specifying files that the "extra" command will
1756 ** Example: *.o,*.obj,*.exe | 1848 ** ignore. Example: *.o,*.obj,*.exe
1757 ** 1849 **
1758 ** localauth If enabled, require that HTTP connections from 1850 ** localauth If enabled, require that HTTP connections from
1759 ** 127.0.0.1 be authenticated by password. If 1851 ** 127.0.0.1 be authenticated by password. If
1760 ** false, all HTTP requests from localhost have 1852 ** false, all HTTP requests from localhost have
1761 ** unrestricted access to the repository. 1853 ** unrestricted access to the repository.
1762 ** 1854 **
1763 ** main-branch The primary branch for the project. Default: trunk 1855 ** main-branch The primary branch for the project. Default: trunk
1764 ** 1856 **
1765 ** manifest If enabled, automatically create files "manifest" and 1857 ** manifest If enabled, automatically create files "manifest" and
1766 ** "manifest.uuid" in every checkout. The SQLite and | 1858 ** (versionable) "manifest.uuid" in every checkout. The SQLite and
1767 ** Fossil repositories both require this. Default: off. 1859 ** Fossil repositories both require this. Default: off.
1768 ** 1860 **
1769 ** max-upload A limit on the size of uplink HTTP requests. The 1861 ** max-upload A limit on the size of uplink HTTP requests. The
1770 ** default is 250000 bytes. 1862 ** default is 250000 bytes.
1771 ** 1863 **
1772 ** mtime-changes Use file modification times (mtimes) to detect when 1864 ** mtime-changes Use file modification times (mtimes) to detect when
1773 ** files have been modified. (Default "on".) 1865 ** files have been modified. (Default "on".)
................................................................................................................................................................................
1775 ** pgp-command Command used to clear-sign manifests at check-in. 1867 ** pgp-command Command used to clear-sign manifests at check-in.
1776 ** The default is "gpg --clearsign -o ". 1868 ** The default is "gpg --clearsign -o ".
1777 ** 1869 **
1778 ** proxy URL of the HTTP proxy. If undefined or "off" then 1870 ** proxy URL of the HTTP proxy. If undefined or "off" then
1779 ** the "http_proxy" environment variable is consulted. 1871 ** the "http_proxy" environment variable is consulted.
1780 ** If the http_proxy environment variable is undefined 1872 ** If the http_proxy environment variable is undefined
1781 ** then a direct HTTP connection is used. 1873 ** then a direct HTTP connection is used.
> 1874 **
> 1875 ** relative-paths When showing changes and extras, report paths relative
> 1876 ** to the current working directory. Default: "on"
1782 ** 1877 **
1783 ** repo-cksum Compute checksums over all files in each checkout 1878 ** repo-cksum Compute checksums over all files in each checkout
1784 ** as a double-check of correctness. Defaults to "on". 1879 ** as a double-check of correctness. Defaults to "on".
1785 ** Disable on large repositories for a performance 1880 ** Disable on large repositories for a performance
1786 ** improvement. 1881 ** improvement.
1787 ** 1882 **
1788 ** self-register Allow users to register themselves through the HTTP UI. 1883 ** self-register Allow users to register themselves through the HTTP UI.
1789 ** This is useful if you want to see other names than 1884 ** This is useful if you want to see other names than
1790 ** "Anonymous" in e.g. ticketing system. On the other hand 1885 ** "Anonymous" in e.g. ticketing system. On the other hand
1791 ** users can not be deleted. Default: off. 1886 ** users can not be deleted. Default: off.
> 1887 **
> 1888 ** ssl-ca-location The full pathname to a file containing PEM encoded
> 1889 ** CA root certificates, or a directory of certificates
> 1890 ** with filenames formed from the certificate hashes as
> 1891 ** required by OpenSSL.
> 1892 ** If set, this will override the OS default list of
> 1893 ** OpenSSL CAs. If unset, the default list will be used.
> 1894 ** Some platforms may add additional certificates.
> 1895 ** Check your platform behaviour is as required if the
> 1896 ** exact contents of the CA root is critical for your
> 1897 ** application.
> 1898 **
> 1899 ** ssl-identity The full pathname to a file containing a certificate
> 1900 ** and private key in PEM format. Create by concatenating
> 1901 ** the certificate and private key files.
> 1902 ** This identity will be presented to SSL servers to
> 1903 ** authenticate this client, in addition to the normal
> 1904 ** password authentication.
1792 ** 1905 **
1793 ** ssh-command Command used to talk to a remote machine with 1906 ** ssh-command Command used to talk to a remote machine with
1794 ** the "ssh://" protocol. 1907 ** the "ssh://" protocol.
1795 ** 1908 **
1796 ** web-browser A shell command used to launch your preferred 1909 ** web-browser A shell command used to launch your preferred
1797 ** web browser when given a URL as an argument. 1910 ** web browser when given a URL as an argument.
1798 ** Defaults to "start" on windows, "open" on Mac, 1911 ** Defaults to "start" on windows, "open" on Mac,
................................................................................................................................................................................
1809 if( !g.repositoryOpen ){ 1922 if( !g.repositoryOpen ){
1810 globalFlag = 1; 1923 globalFlag = 1;
1811 } 1924 }
1812 if( unsetFlag && g.argc!=3 ){ 1925 if( unsetFlag && g.argc!=3 ){
1813 usage("PROPERTY ?-global?"); 1926 usage("PROPERTY ?-global?");
1814 } 1927 }
1815 if( g.argc==2 ){ 1928 if( g.argc==2 ){
> 1929 int openLocal = db_open_local();
1816 for(i=0; ctrlSettings[i].name; i++){ 1930 for(i=0; ctrlSettings[i].name; i++){
1817 print_setting(ctrlSettings[i].name); | 1931 print_setting(&ctrlSettings[i], openLocal);
1818 } 1932 }
1819 }else if( g.argc==3 || g.argc==4 ){ 1933 }else if( g.argc==3 || g.argc==4 ){
1820 const char *zName = g.argv[2]; 1934 const char *zName = g.argv[2];
1821 int isManifest; 1935 int isManifest;
1822 int n = strlen(zName); 1936 int n = strlen(zName);
1823 for(i=0; ctrlSettings[i].name; i++){ 1937 for(i=0; ctrlSettings[i].name; i++){
1824 if( strncmp(ctrlSettings[i].name, zName, n)==0 ) break; 1938 if( strncmp(ctrlSettings[i].name, zName, n)==0 ) break;
................................................................................................................................................................................
1832 } 1946 }
1833 if( unsetFlag ){ 1947 if( unsetFlag ){
1834 db_unset(ctrlSettings[i].name, globalFlag); 1948 db_unset(ctrlSettings[i].name, globalFlag);
1835 }else if( g.argc==4 ){ 1949 }else if( g.argc==4 ){
1836 db_set(ctrlSettings[i].name, g.argv[3], globalFlag); 1950 db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
1837 }else{ 1951 }else{
1838 isManifest = 0; 1952 isManifest = 0;
1839 print_setting(ctrlSettings[i].name); | 1953 print_setting(&ctrlSettings[i], db_open_local());
1840 } 1954 }
1841 if( isManifest && g.localOpen ){ 1955 if( isManifest && g.localOpen ){
1842 manifest_to_disk(db_lget_int("checkout", 0)); 1956 manifest_to_disk(db_lget_int("checkout", 0));
1843 } 1957 }
1844 }else{ 1958 }else{
1845 usage("?PROPERTY? ?VALUE?"); 1959 usage("?PROPERTY? ?VALUE?");
1846 } 1960 }