Overview
SHA1 Hash: | 134e2aeccc0acc8a4ced04da5403df234ddc1397 |
---|---|
Date: | 2007-09-28 20:08:32 |
User: | drh |
Comment: | Combine the "config" and "setting" commands into a single "settings" command. |
Timelines: | ancestors | descendants | both | trunk |
Other Links: | files | ZIP archive | manifest |
Tags And Properties
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
Changes
[hide diffs]Modified ideas.txt from [555b72ded1] to [df889dde5c].
@@ -28,10 +28,19 @@ Other table columns: origintime lastchange + +Field Types: + + text width height + enum width valuelist + datetime width + cumulative-text width height + set-of-uuid width + set-of-checkin width Tables: tktrid(rid, tkid, mtime); index(tkid, mtime); ticket(tkid, tkuuid, title, com, status, ...);
Modified src/checkin.c from [a88de4d022] to [1fd79ac4b7].
@@ -222,11 +222,11 @@ blob_set(&text, "\n# Enter comments on this commit. Lines beginning with # are ignored\n" "#\n" ); status_report(&text, "# "); - zEditor = db_global_get("editor", 0); + zEditor = db_get("editor", 0); if( zEditor==0 ){ zEditor = getenv("VISUAL"); } if( zEditor==0 ){ zEditor = getenv("EDITOR");
Modified src/clearsign.c from [b83f245b62] to [b8ecd2533f].
@@ -34,11 +34,11 @@ */ int clearsign(Blob *pIn, Blob *pOut){ char *zRand; char *zIn; char *zOut; - char *zBase = db_global_get("clear-sign", "gpg --clearsign -o "); + char *zBase = db_get("clear-sign", "gpg --clearsign -o "); char *zCmd; int rc; zRand = db_text(0, "SELECT hex(randomblob(10))"); zOut = mprintf("out-%s", zRand); zIn = mprintf("in-%z", zRand);
Modified src/clone.c from [9cbe1bd6df] to [f1103d57a0].
@@ -49,14 +49,14 @@ db_create_repository(g.argv[3]); db_open_repository(g.argv[3]); db_begin_transaction(); db_initial_setup(0, 0); user_select(); - db_set("content-schema", CONTENT_SCHEMA); - db_set("aux-schema", AUX_SCHEMA); + db_set("content-schema", CONTENT_SCHEMA, 0); + db_set("aux-schema", AUX_SCHEMA, 0); if( !g.urlIsFile ){ - db_set("last-sync-url", g.argv[2]); + db_set("last-sync-url", g.argv[2], 0); } db_multi_exec( "INSERT INTO config(name,value)" " VALUES('server-code', lower(hex(randomblob(20))));" );
Modified src/db.c from [c13c02bc16] to [9a4a994425].
@@ -679,28 +679,28 @@ ** manifest is created. The makeServerCodes flag determines whether or ** not server and project codes are invented for this repository. */ void db_initial_setup (int makeInitialVersion, int makeServerCodes){ char *zDate; - char *zUser; + const char *zUser; Blob hash; Blob manifest; - db_set("content-schema", CONTENT_SCHEMA); - db_set("aux-schema", AUX_SCHEMA); + db_set("content-schema", CONTENT_SCHEMA, 0); + db_set("aux-schema", AUX_SCHEMA, 0); if( makeServerCodes ){ db_multi_exec( "INSERT INTO config(name,value)" " VALUES('server-code', lower(hex(randomblob(20))));" "INSERT INTO config(name,value)" " VALUES('project-code', lower(hex(randomblob(20))));" ); } - db_set_int("autosync", 1); - db_set_int("safemerge", 0); - db_set_int("localauth", 0); - zUser = db_global_get("default-user", 0); + if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0); + if( !db_is_global("safemerge") ) db_set_int("safemerge", 0, 0); + if( !db_is_global("localauth") ) db_set_int("localauth", 0, 0); + zUser = db_get("default-user", 0); if( zUser==0 ){ zUser = getenv("USER"); } if( zUser==0 ){ zUser = "root"; @@ -832,30 +832,62 @@ /* ** Get and set values from the CONFIG, GLOBAL_CONFIG and VVAR table in the ** repository and local databases. */ -char *db_get(const char *zName, const char *zDefault){ - return db_text((char*)zDefault, - "SELECT value FROM config WHERE name=%Q", zName); -} -void db_set(const char *zName, const char *zValue){ - db_multi_exec("REPLACE INTO config(name,value) VALUES(%Q,%Q)", zName, zValue); +const char *db_get(const char *zName, const char *zDefault){ + const char *z = 0; + if( g.repositoryOpen ){ + z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName); + } + if( z==0 ){ + z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName); + } + if( z==0 ){ + z = zDefault; + } + return z; +} +void db_set(const char *zName, const char *zValue, int globalFlag){ + db_begin_transaction(); + db_multi_exec("REPLACE INTO %sconfig(name,value) VALUES(%Q,%Q)", + globalFlag ? "global_" : "", zName, zValue); + if( globalFlag && g.repositoryOpen ){ + db_multi_exec("DELETE FROM config WHERE name=%Q", zName); + } + db_end_transaction(0); +} +int db_is_global(const char *zName){ + return db_exists("SELECT 1 FROM global_config WHERE name=%Q", zName); } int db_get_int(const char *zName, int dflt){ - return db_int(dflt, "SELECT value FROM config WHERE name=%Q", zName); -} -void db_set_int(const char *zName, int value){ - db_multi_exec("REPLACE INTO config(name,value) VALUES(%Q,%d)", zName, value); -} -char *db_global_get(const char *zName, const char *zDefault){ - return db_text((char*)zDefault, - "SELECT value FROM global_config WHERE name=%Q", zName); + int v; + int rc; + if( g.repositoryOpen ){ + Stmt q; + db_prepare(&q, "SELECT value FROM config WHERE name=%Q", zName); + rc = db_step(&q); + if( rc==SQLITE_ROW ){ + v = db_column_int(&q, 0); + } + db_finalize(&q); + }else{ + rc = SQLITE_DONE; + } + if( rc==SQLITE_DONE ){ + v = db_int(dflt, "SELECT value FROM global_config WHERE name=%Q", zName); + } + return v; } -void db_global_set(const char *zName, const char *zValue){ - db_multi_exec("REPLACE INTO global_config(name,value)" - "VALUES(%Q,%Q)", zName, zValue); +void db_set_int(const char *zName, int value, int globalFlag){ + db_begin_transaction(); + db_multi_exec("REPLACE INTO %sconfig(name,value) VALUES(%Q,%d)", + globalFlag ? "global_" : "", zName, value); + if( globalFlag && g.repositoryOpen ){ + db_multi_exec("DELETE FROM config WHERE name=%Q", zName); + } + db_end_transaction(0); } char *db_lget(const char *zName, const char *zDefault){ return db_text((char*)zDefault, "SELECT value FROM vvar WHERE name=%Q", zName); } @@ -904,104 +936,74 @@ update_cmd(); } } /* -** COMMAND: config -** -** Usage: %fossil config NAME=VALUE ... -** -** List or change the global configuration settings. With no arguments, -** all settings are listed. Arguments of simply NAME cause that setting -** to be displayed. Arguments of the form NAME=VALUE change the value of -** a setting. Arguments of the form NAME= delete a setting. -** -** Recognized settings include: -** -** editor Text editor command used for check-in comments. -** -** clear-sign Command used to clear-sign manifests at check-in. -** The default is "gpg --clearsign -o ". -** -** omit-sign When enabled, fossil will not attempt to sign any -** commit with gpg. All commits will be unsigned. +** Print the value of a setting named zName */ -void cmd_config(void){ - db_open_config(); - if( g.argc>2 ){ - int i; - db_begin_transaction(); - for(i=2; i<g.argc; i++){ - char *zName, *zValue; - int j, removed=0; +static void print_setting(const char *zName){ + Stmt q; + db_prepare(&q, + "SELECT '(local)', value FROM config WHERE name=%Q" + " UNION ALL " + "SELECT '(global)', value FROM global_config WHERE name=%Q", + zName, zName + ); + if( db_step(&q)==SQLITE_ROW ){ + printf("%-20s %-8s %s\n", zName, db_column_text(&q, 0), + db_column_text(&q, 1)); + }else{ + printf("%-20s\n", zName); + } + db_finalize(&q); +} + - zName = mprintf("%s", g.argv[i]); - for(j=0; zName[j] && zName[j]!='='; j++){} - if( zName[j] ){ - zName[j] = 0; - zValue = &zName[j+1]; - if( zValue[0] ){ - db_global_set(zName, zValue); - }else{ - db_multi_exec("DELETE FROM global_config WHERE name=%Q", zName); - removed=1; - } - } - zValue = db_global_get(zName, 0); - if( zValue ){ - printf("%s=%s\n", zName, zValue); - }else{ - if( removed==1 ){ - printf("%s has been removed from configuration\n", zName); - }else{ - printf("%s is undefined\n", zName); - } - } - } - db_end_transaction(0); - }else{ - Stmt q; - db_prepare(&q, "SELECT name, value FROM global_config ORDER BY name"); - while( db_step(&q)==SQLITE_ROW ){ - printf("%s=%s\n", db_column_text(&q, 0), db_column_text(&q, 1)); - } - db_finalize(&q); - } -} - /* -** COMMAND: setting -** %fossil setting ?PROPERTY? ?VALUE? +** COMMAND: settings +** %fossil setting ?PROPERTY? ?VALUE? ?-global? ** ** With no arguments, list all properties and their values. With just ** a property name, show the value of that property. With a value ** argument, change the property for the current repository. ** ** autosync If enabled, automatically pull prior to ** commit or update and automatically push ** after commit or tag or branch creation. ** +** clear-sign Command used to clear-sign manifests at check-in. +** The default is "gpg --clearsign -o ". +** +** editor Text editor command used for check-in comments. +** ** localauth If enabled, require that HTTP connections from ** 127.0.0.1 be authenticated by password. If ** false, all HTTP requests from localhost have ** unrestricted access to the repository. +** +** omit-sign When enabled, fossil will not attempt to sign any +** commit with gpg. All commits will be unsigned. ** ** safemerge If enabled, when commit will cause a fork, the ** commit will not abort with warning. Also update ** will not be allowed if local changes exist. */ void setting_cmd(void){ static const char *azName[] = { "autosync", + "clearsign", + "editor", "localauth", + "omitsig", "safemerge", }; int i; + int globalFlag = find_option("global","g",0)!=0; db_find_and_open_repository(); if( g.argc==2 ){ for(i=0; i<sizeof(azName)/sizeof(azName[0]); i++){ - printf("%-20s %d\n", azName[i], db_get_int(azName[i], 0)); + print_setting(azName[i]); } }else if( g.argc==3 || g.argc==4 ){ const char *zName = g.argv[2]; int n = strlen(zName); for(i=0; i<sizeof(azName)/sizeof(azName[0]); i++){ @@ -1009,13 +1011,13 @@ } if( i>=sizeof(azName)/sizeof(azName[0]) ){ fossil_fatal("no such setting: %s", zName); } if( g.argc==4 ){ - db_set(azName[i], g.argv[3]); + db_set(azName[i], g.argv[3], globalFlag); }else{ - printf("%-20s %d\n", azName[i], db_get_int(azName[i], 0)); + print_setting(azName[i]); } }else{ usage("?PROPERTY? ?VALUE?"); } }
Modified src/diffcmd.c from [e546baef8b] to [4cfcd3d811].
@@ -88,13 +88,13 @@ db_must_be_within_tree(); if( internalDiff==0 ){ const char *zExternalCommand; if( strcmp(g.argv[1], "diff")==0 ){ - zExternalCommand = db_global_get("diff-command", 0); + zExternalCommand = db_get("diff-command", 0); }else{ - zExternalCommand = db_global_get("gdiff-command", 0); + zExternalCommand = db_get("gdiff-command", 0); } if( zExternalCommand==0 ){ internalDiff=1; } blob_zero(&cmd);
Modified src/setup.c from [fcf807f096] to [da3da0885a].
@@ -429,11 +429,11 @@ zQ = "off"; } if( zQ ){ int iQ = strcmp(zQ,"on")==0 || atoi(zQ); if( iQ!=iVal ){ - db_set(zVar, iQ ? "1" : "0"); + db_set(zVar, iQ ? "1" : "0", 0); iVal = iQ; } } if( iVal ){ @ <input type="checkbox" name="%s(zQParm)" checked>%s(zLabel)</input> @@ -453,11 +453,11 @@ const char *zDflt /* Default value if VAR table entry does not exist */ ){ const char *zVal = db_get(zVar, zDflt); const char *zQ = P(zQParm); if( zQ && strcmp(zQ,zVal)!=0 ){ - db_set(zVar, zQ); + db_set(zVar, zQ, 0); zVal = zQ; } @ <input type="text" name="%s(zQParm)" value="%h(zVal)" size="%d(width)"> @ %s(zLabel) } @@ -474,11 +474,11 @@ const char *zDflt /* Default value if VAR table entry does not exist */ ){ const char *zVal = db_get(zVar, zDflt); const char *zQ = P(zQParm); if( zQ && strcmp(zQ,zVal)!=0 ){ - db_set(zVar, zQ); + db_set(zVar, zQ, 0); zVal = zQ; } @ <textarea name="%s(zQParm)" rows="%d(rows)" cols="%d(cols)">%h(zVal)</textarea> @ %s(zLabel) }
Modified src/style.c from [24a4432c1e] to [7864b9469a].
@@ -145,11 +145,11 @@ ** WEBPAGE: index ** WEBPAGE: home ** WEBPAGE: not_found */ void page_index(void){ - char *zHome = db_get("homepage", 0); + char *zHome = (char*)db_get("homepage", 0); if( zHome ){ g.zExtra = zHome; g.okRdWiki = 1; wiki_page(); }else{
Modified src/sync.c from [6476b9b83d] to [f3710d7eb5].
@@ -74,11 +74,11 @@ } url_parse(zUrl); if( g.urlIsFile ){ fossil_fatal("network sync only"); } - db_set("last-sync-url", zUrl); + db_set("last-sync-url", zUrl, 0); user_select(); if( g.argc==2 ){ if( g.urlPort!=80 ){ printf("Server: http://%s:%d%s\n", g.urlName, g.urlPort, g.urlPath); }else{
Modified src/user.c from [0bda709383] to [45a74402e3].
@@ -200,11 +200,11 @@ if( g.argc==3 ){ printf("%s\n", g.zLogin); }else if( g.localOpen ){ db_lset("default-user", g.zLogin); }else{ - db_set("default-user", g.zLogin); + db_set("default-user", g.zLogin, 0); } }else if( n>=2 && strncmp(g.argv[2],"list",n)==0 ){ Stmt q; db_prepare(&q, "SELECT login, info FROM user ORDER BY login"); while( db_step(&q)==SQLITE_ROW ){
Modified src/xfer.c from [70f34cd473] to [6ecd805cfb].
@@ -812,11 +812,11 @@ fossil_fatal("server loop"); } nMsg++; if( zPCode==0 ){ zPCode = mprintf("%b", &xfer.aToken[2]); - db_set("project-code", zPCode); + db_set("project-code", zPCode, 0); } cloneFlag = 0; pullFlag = 1; blob_appendf(&send, "pull %s %s\n", zSCode, zPCode); nMsg++; @@ -830,11 +830,11 @@ ** ** Each cookie received overwrites the prior cookie from the ** same server. */ if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){ - db_set("cookie", blob_str(&xfer.aToken[1])); + db_set("cookie", blob_str(&xfer.aToken[1]), 0); }else /* message MESSAGE ** ** Print a message. Similar to "error" but does not stop processing