Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Better defaults for new databases and clones. Use *CURRENT* to identify the current checkout for TTY timelines. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
097479f99a066273a51e6c2444b2a4b7 |
| User & Date: | drh 2007-09-26 02:00:26.000 |
Context
|
2007-09-26
| ||
| 03:38 | Merged in new revision support for diff and revert commands into mainstream check-in: 8d55aa3597 user: jnc tags: trunk | |
| 02:00 | Better defaults for new databases and clones. Use *CURRENT* to identify the current checkout for TTY timelines. check-in: 097479f99a user: drh tags: trunk | |
|
2007-09-25
| ||
| 21:28 | Merged the compiler warning fixes into mainstream check-in: 92291035fe user: jnc tags: trunk | |
Changes
Changes to src/clone.c.
| ︙ | ︙ | |||
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
}
if( file_size(g.argv[3])>0 ){
fossil_panic("file already exists: %s", g.argv[3]);
}
url_parse(g.argv[2]);
db_create_repository(g.argv[3]);
db_open_repository(g.argv[3]);
user_select();
db_set("content-schema", CONTENT_SCHEMA);
db_set("aux-schema", AUX_SCHEMA);
if( !g.urlIsFile ){
db_set("last-sync-url", g.argv[2]);
}
db_multi_exec(
| > > | > < < > | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
}
if( file_size(g.argv[3])>0 ){
fossil_panic("file already exists: %s", g.argv[3]);
}
url_parse(g.argv[2]);
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);
if( !g.urlIsFile ){
db_set("last-sync-url", g.argv[2]);
}
db_multi_exec(
"INSERT INTO config(name,value)"
" VALUES('server-code', lower(hex(randomblob(20))));"
);
if( g.urlIsFile ){
Stmt q;
db_multi_exec("ATTACH DATABASE %Q AS orig", g.urlName);
db_prepare(&q,
"SELECT name FROM orig.sqlite_master"
" WHERE type='table'"
);
while( db_step(&q)==SQLITE_ROW ){
const char *zTab = db_column_text(&q, 0);
db_multi_exec("INSERT OR IGNORE INTO %Q SELECT * FROM orig.%Q",
zTab, zTab);
}
db_finalize(&q);
}else{
client_sync(0,0,1);
}
db_end_transaction(0);
}
|
Changes to src/construct.c.
| ︙ | ︙ | |||
138 139 140 141 142 143 144 | /* Create the foundation */ db_create_repository(zRepository); db_open_repository(zRepository); db_open_config(); db_begin_transaction(); | | | 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
/* Create the foundation */
db_create_repository(zRepository);
db_open_repository(zRepository);
db_open_config();
db_begin_transaction();
db_initial_setup(0, 1);
printf("project-id: %s\n", db_get("project-code", 0));
printf("server-id: %s\n", db_get("server-code", 0));
printf("admin-user: %s (no password set yet!)\n", g.zLogin);
printf("baseline: %s\n", db_text(0, "SELECT uuid FROM blob"));
/* Scan origin and insert all files found inside */
|
| ︙ | ︙ |
Changes to src/db.c.
| ︙ | ︙ | |||
671 672 673 674 675 676 677 |
/*
** Fill an empty repository database with the basic information for a
** repository. This function is shared between 'create_repository_cmd'
** ('new') and 'reconstruct_cmd' ('reconstruct'), both of which create
** new repositories.
**
| | | > < | | | | > | > | > > > | | 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 |
/*
** Fill an empty repository database with the basic information for a
** repository. This function is shared between 'create_repository_cmd'
** ('new') and 'reconstruct_cmd' ('reconstruct'), both of which create
** new repositories.
**
** The makeInitialVersion flag determines whether or not an initial
** 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;
Blob hash;
Blob manifest;
db_set("content-schema", CONTENT_SCHEMA);
db_set("aux-schema", AUX_SCHEMA);
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("localauth", 0);
zUser = db_global_get("default-user", 0);
if( zUser==0 ){
zUser = getenv("USER");
}
if( zUser==0 ){
zUser = "root";
}
db_multi_exec(
"INSERT INTO user(login, pw, cap, info)"
"VALUES(%Q,'','s','')", zUser
);
db_multi_exec(
"INSERT INTO user(login,pw,cap,info)"
" VALUES('anonymous','anonymous','hjkorw','Anon');"
"INSERT INTO user(login,pw,cap,info)"
" VALUES('nobody','','jor','Nobody');"
);
user_select();
if (makeInitialVersion){
blob_zero(&manifest);
blob_appendf(&manifest, "C initial\\sempty\\sbaseline\n");
zDate = db_text(0, "SELECT datetime('now')");
zDate[10]='T';
blob_appendf(&manifest, "D %s\n", zDate);
blob_appendf(&manifest, "P\n");
md5sum_init();
|
| ︙ | ︙ | |||
740 741 742 743 744 745 746 |
if( g.argc!=3 ){
usage("REPOSITORY-NAME");
}
db_create_repository(g.argv[2]);
db_open_repository(g.argv[2]);
db_open_config();
db_begin_transaction();
| | | 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 |
if( g.argc!=3 ){
usage("REPOSITORY-NAME");
}
db_create_repository(g.argv[2]);
db_open_repository(g.argv[2]);
db_open_config();
db_begin_transaction();
db_initial_setup(1, 1);
db_end_transaction(0);
printf("project-id: %s\n", db_get("project-code", 0));
printf("server-id: %s\n", db_get("server-code", 0));
printf("admin-user: %s (no password set yet!)\n", g.zLogin);
printf("baseline: %s\n", db_text(0, "SELECT uuid FROM blob"));
}
|
| ︙ | ︙ | |||
961 962 963 964 965 966 967 | /* ** COMMAND: setting ** %fossil setting ?PROPERTY? ?VALUE? ** ** With no arguments, list all properties and their values. With just ** a property name, show the value of that property. With a value | | > > > > > > > > > | | 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 |
/*
** COMMAND: setting
** %fossil setting ?PROPERTY? ?VALUE?
**
** 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.
**
** localauth If true, 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.
*/
void setting_cmd(void){
static const char *azName[] = {
"autosync",
"localauth"
};
int i;
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));
}
|
| ︙ | ︙ |
Changes to src/login.c.
| ︙ | ︙ | |||
226 227 228 229 230 231 232 |
/* If the HTTP connection is coming over 127.0.0.1 and if
** local login is disabled, then there is no need to check
** user credentials.
*/
zRemoteAddr = PD("REMOTE_ADDR","nil");
| | < | 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
/* If the HTTP connection is coming over 127.0.0.1 and if
** local login is disabled, then there is no need to check
** user credentials.
*/
zRemoteAddr = PD("REMOTE_ADDR","nil");
if( strcmp(zRemoteAddr, "127.0.0.1")==0 && db_get_int("localauth",0)==0 ){
uid = db_int(0, "SELECT uid FROM user WHERE cap LIKE '%%s%%'");
g.zLogin = db_text("?", "SELECT login FROM user WHERE uid=%d", uid);
zCap = "s";
g.noPswd = 1;
}
/* Check the login cookie to see if it matches a known valid user.
|
| ︙ | ︙ |
Changes to src/setup.c.
| ︙ | ︙ | |||
495 496 497 498 499 500 501 |
style_header("Access Control Settings");
db_begin_transaction();
@ <form action="%s(g.zBaseURL)/setup_access" method="POST">
@ <hr>
onoff_attribute("Require password for local access",
| | | 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 |
style_header("Access Control Settings");
db_begin_transaction();
@ <form action="%s(g.zBaseURL)/setup_access" method="POST">
@ <hr>
onoff_attribute("Require password for local access",
"localauth", "localauth", 1);
@ <p>When enabled, the password sign-in is required for
@ web access coming from 127.0.0.1. When disabled, web access
@ from 127.0.0.1 is allows without any login - the user id is selected
@ from the ~/.fossil database. Password login is always required
@ for incoming web connections on internet addresses other than
@ 127.0.0.1.</p></li>
|
| ︙ | ︙ |
Changes to src/sync.c.
| ︙ | ︙ | |||
35 36 37 38 39 40 41 |
*/
int autosync(int pullFlag){
const char *zUrl;
if( db_get_int("autosync", 0)==0 ){
return 0;
}
zUrl = db_get("last-sync-url", 0);
| | | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
*/
int autosync(int pullFlag){
const char *zUrl;
if( db_get_int("autosync", 0)==0 ){
return 0;
}
zUrl = db_get("last-sync-url", 0);
if( zUrl==0 ){
return 0; /* No default server */
}
url_parse(zUrl);
if( g.urlIsFile ){
return 0; /* Network sync only */
}
if( g.urlPort!=80 ){
|
| ︙ | ︙ |
Changes to src/timeline.c.
| ︙ | ︙ | |||
393 394 395 396 397 398 399 |
** 3. Comment string and user
** 4. Number of non-merge children
** 5. Number of parents
*/
void print_timeline(Stmt *q, int mxLine){
int nLine = 0;
char zPrevDate[20];
| < > > < < < < < < < < | | | | | | | | | > | | < < > | 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 |
** 3. Comment string and user
** 4. Number of non-merge children
** 5. Number of parents
*/
void print_timeline(Stmt *q, int mxLine){
int nLine = 0;
char zPrevDate[20];
const char *zCurrentUuid=0;
Stmt currentQ;
int rid = db_lget_int("checkout", 0);
zPrevDate[0] = 0;
db_prepare(¤tQ,
"SELECT uuid"
" FROM blob WHERE rid=%d", rid
);
if( db_step(¤tQ)==SQLITE_ROW ){
zCurrentUuid = db_column_text(¤tQ, 0);
}
while( db_step(q)==SQLITE_ROW && nLine<=mxLine ){
const char *zId = db_column_text(q, 1);
const char *zDate = db_column_text(q, 2);
const char *zCom = db_column_text(q, 3);
int nChild = db_column_int(q, 4);
int nParent = db_column_int(q, 5);
char *zFree = 0;
int n = 0;
char zPrefix[80];
char zUuid[UUID_SIZE+1];
sprintf(zUuid, "%.10s", zId);
if( memcmp(zDate, zPrevDate, 10) ){
printf("=== %.10s ===\n", zDate);
memcpy(zPrevDate, zDate, 10);
nLine++;
}
if( zCom==0 ) zCom = "";
printf("%.8s ", &zDate[11]);
zPrefix[0] = 0;
if( nParent>1 ){
sqlite3_snprintf(sizeof(zPrefix), zPrefix, "*MERGE* ");
n = strlen(zPrefix);
}
if( nChild>1 ){
sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*FORK* ");
n = strlen(zPrefix);
}
if( strcmp(zCurrentUuid,zId)==0 ){
sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*CURRENT* ");
n += strlen(zPrefix);
}
zFree = sqlite3_mprintf("[%.10s] %s%s", zUuid, zPrefix, zCom);
nLine += comment_print(zFree, 9, 79);
sqlite3_free(zFree);
}
db_finalize(¤tQ);
}
/*
|
| ︙ | ︙ |
Changes to src/user.c.
| ︙ | ︙ | |||
290 291 292 293 294 295 296 |
if( g.localOpen && attempt_user(db_lget("default-user",0)) ) return;
if( attempt_user(db_get("default-user", 0)) ) return;
if( attempt_user(getenv("USER")) ) return;
| | > | | 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 |
if( g.localOpen && attempt_user(db_lget("default-user",0)) ) return;
if( attempt_user(db_get("default-user", 0)) ) return;
if( attempt_user(getenv("USER")) ) return;
db_prepare(&s, "SELECT uid, login FROM user"
" WHERE login NOT IN ('anonymous','nobody')");
if( db_step(&s)==SQLITE_ROW ){
g.userUid = db_column_int(&s, 0);
g.zLogin = mprintf("%s", db_column_text(&s, 1));
}
db_finalize(&s);
if( g.userUid==0 ){
db_prepare(&s, "SELECT uid, login FROM user");
if( db_step(&s)==SQLITE_ROW ){
g.userUid = db_column_int(&s, 0);
g.zLogin = mprintf("%s", db_column_text(&s, 1));
}
db_finalize(&s);
}
if( g.userUid==0 ){
db_multi_exec(
"INSERT INTO user(login, pw, cap, info)"
"VALUES('anonymous', '', 'cfghjkmnoqw', '')"
);
g.userUid = db_last_insert_rowid();
g.zLogin = "anonymous";
}
}
|