Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Back out changes in [9978d2aba603d94]. Instead, simply modify checkout so that it never overwrites "manifest" and "manifest.uuid" if those files are explicitly checked in. Ticket [22a59e9a3455d8e]. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | wolfgangFormat2CSS_2 |
| Files: | files | file ages | folders |
| SHA1: |
4208b3b47915c33039680f28d65156d2 |
| User & Date: | drh 2010-09-29 13:18:47.000 |
Context
|
2010-09-29
| ||
| 13:29 | Code formatting tweaks. ... (check-in: 8fce80ea99 user: drh tags: wolfgangFormat2CSS_2) | |
| 13:18 | Back out changes in [9978d2aba603d94]. Instead, simply modify checkout so that it never overwrites "manifest" and "manifest.uuid" if those files are explicitly checked in. Ticket [22a59e9a3455d8e]. ... (check-in: 4208b3b479 user: drh tags: wolfgangFormat2CSS_2) | |
| 12:48 | Better handling of /dir pages with unknown checkins. Rework of check-in [872f6a45e3338b77ed10ec49598343ff2ae7741d] for ticket [cc4cd990165317f38618f5b784befd3e9ff3fe61]. ... (check-in: e01f7e6db2 user: drh tags: wolfgangFormat2CSS_2) | |
|
2010-09-27
| ||
| 15:56 | length of short checkin uuid for dir page restored to 10 ... (check-in: b72065df2f user: wolfgang tags: wolfgangFormat2CSS_2) | |
Changes
Changes to src/add.c.
| ︙ | ︙ | |||
34 35 36 37 38 39 40 |
*/
static void add_one_file(const char *zName, int vid, Blob *pOmit){
Blob pathname;
const char *zPath;
file_tree_name(zName, &pathname, 1);
zPath = blob_str(&pathname);
| < | < | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
*/
static void add_one_file(const char *zName, int vid, Blob *pOmit){
Blob pathname;
const char *zPath;
file_tree_name(zName, &pathname, 1);
zPath = blob_str(&pathname);
if( strcmp(zPath, "_FOSSIL_")==0
|| strcmp(zPath, "_FOSSIL_-journal")==0
|| strcmp(zPath, "_FOSSIL_-wal")==0
|| strcmp(zPath, "_FOSSIL_-shm")==0
|| strcmp(zPath, ".fos")==0
|| strcmp(zPath, ".fos-journal")==0
|| strcmp(zPath, ".fos-wal")==0
|| strcmp(zPath, ".fos-shm")==0
|| blob_compare(&pathname, pOmit)==0
){
fossil_warning("cannot add %s", zPath);
}else{
if( !file_is_simple_pathname(zPath) ){
fossil_fatal("filename contains illegal characters: %s", zPath);
}
|
| ︙ | ︙ |
Changes to src/checkin.c.
| ︙ | ︙ | |||
533 534 535 536 537 538 539 540 541 542 543 544 545 546 |
zInputDate);
}
assert( strlen(zDate)==19 );
assert( zDate[10]==' ' );
zDate[10] = 'T';
return zDate;
}
/*
** COMMAND: ci
** COMMAND: commit
**
** Usage: %fossil commit ?OPTIONS? ?FILE...?
**
| > > > > > > > > > > > > > | 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 |
zInputDate);
}
assert( strlen(zDate)==19 );
assert( zDate[10]==' ' );
zDate[10] = 'T';
return zDate;
}
/*
** Return TRUE (non-zero) if a file named "zFilename" exists in
** the checkout identified by vid.
**
** The original purpose of this routine was to check for the presence of
** a "checked-in" file named "manifest" or "manifest.uuid" so as to avoid
** overwriting that file with automatically generated files.
*/
int file_exists_in_checkout(int vid, const char *zFilename){
return db_exists("SELECT 1 FROM vfile WHERE vid=%d AND pathname=%Q",
vid, zFilename);
}
/*
** COMMAND: ci
** COMMAND: commit
**
** Usage: %fossil commit ?OPTIONS? ?FILE...?
**
|
| ︙ | ︙ | |||
842 843 844 845 846 847 848 |
blob_appendf(&manifest, "T -%F *\n", zTag);
}
db_finalize(&q);
}
blob_appendf(&manifest, "U %F\n", zUserOvrd ? zUserOvrd : g.zLogin);
md5sum_blob(&manifest, &mcksum);
blob_appendf(&manifest, "Z %b\n", &mcksum);
| < > > | | | | > > | | | | | | > | 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 |
blob_appendf(&manifest, "T -%F *\n", zTag);
}
db_finalize(&q);
}
blob_appendf(&manifest, "U %F\n", zUserOvrd ? zUserOvrd : g.zLogin);
md5sum_blob(&manifest, &mcksum);
blob_appendf(&manifest, "Z %b\n", &mcksum);
if( !noSign && !g.markPrivate && clearsign(&manifest, &manifest) ){
Blob ans;
blob_zero(&ans);
prompt_user("unable to sign manifest. continue (y/N)? ", &ans);
if( blob_str(&ans)[0]!='y' ){
fossil_exit(1);
}
}
if( !file_exists_in_checkout(vid, "manifest") ){
zManifestFile = mprintf("%smanifest", g.zLocalRoot);
blob_write_to_file(&manifest, zManifestFile);
blob_reset(&manifest);
blob_read_from_file(&manifest, zManifestFile);
free(zManifestFile);
}
nvid = content_put(&manifest, 0, 0);
if( nvid==0 ){
fossil_panic("trouble committing manifest: %s", g.zErrMsg);
}
db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nvid);
manifest_crosslink(nvid, &manifest);
content_deltify(vid, nvid, 0);
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nvid);
printf("New_Version: %s\n", zUuid);
if( !file_exists_in_checkout(vid, "manifest.uuid") ){
zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot);
blob_zero(&muuid);
blob_appendf(&muuid, "%s\n", zUuid);
blob_write_to_file(&muuid, zManifestFile);
free(zManifestFile);
blob_reset(&muuid);
}
/* Update the vfile and vmerge tables */
db_multi_exec(
"DELETE FROM vfile WHERE (vid!=%d OR deleted) AND file_is_selected(id);"
"DELETE FROM vmerge WHERE file_is_selected(id) OR id=0;"
"UPDATE vfile SET vid=%d;"
|
| ︙ | ︙ |
Changes to src/checkout.c.
| ︙ | ︙ | |||
95 96 97 98 99 100 101 |
*/
static void set_or_clear_isexe(const char *zFilename, int vid, int onoff){
db_multi_exec("UPDATE vfile SET isexe=%d WHERE vid=%d and pathname=%Q",
onoff, vid, zFilename);
}
/*
| > > > > > | | > > > > < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
*/
static void set_or_clear_isexe(const char *zFilename, int vid, int onoff){
db_multi_exec("UPDATE vfile SET isexe=%d WHERE vid=%d and pathname=%Q",
onoff, vid, zFilename);
}
/*
** Set or clear the execute permission bit (as appropriate) for all
** files in the current check-out.
**
** If the checkout does not have explicit files named "manifest" and
** "manifest.uuid" then automatically generate files with those names
** containing, respectively, the text of the manifest and the artifact
** ID of the manifest.
*/
void manifest_to_disk(int vid){
char *zManFile;
Blob manifest;
Blob hash;
Blob filename;
int baseLen;
int i;
int seenManifest = 0;
int seenManifestUuid = 0;
Manifest m;
/* Check the EXE permission status of all files
*/
blob_zero(&manifest);
content_get(vid, &manifest);
manifest_parse(&m, &manifest);
blob_zero(&filename);
blob_appendf(&filename, "%s/", g.zLocalRoot);
baseLen = blob_size(&filename);
for(i=0; i<m.nFile; i++){
int isExe;
blob_append(&filename, m.aFile[i].zName, -1);
isExe = m.aFile[i].zPerm && strstr(m.aFile[i].zPerm, "x");
file_setexe(blob_str(&filename), isExe);
set_or_clear_isexe(m.aFile[i].zName, vid, isExe);
blob_resize(&filename, baseLen);
if( memcmp(m.aFile[i].zName, "manifest", 8)==0 ){
if( m.aFile[i].zName[8]==0 ) seenManifest = 1;
if( strcmp(&m.aFile[i].zName[8], ".uuid")==0 ) seenManifestUuid = 1;
}
}
blob_reset(&filename);
manifest_clear(&m);
blob_zero(&manifest);
content_get(vid, &manifest);
if( !seenManifest ){
zManFile = mprintf("%smanifest", g.zLocalRoot);
blob_write_to_file(&manifest, zManFile);
free(zManFile);
}
if( !seenManifestUuid ){
blob_zero(&hash);
sha1sum_blob(&manifest, &hash);
zManFile = mprintf("%smanifest.uuid", g.zLocalRoot);
blob_append(&hash, "\n", 1);
blob_write_to_file(&hash, zManFile);
free(zManFile);
blob_reset(&hash);
}
}
/*
** COMMAND: checkout
** COMMAND: co
**
** Usage: %fossil checkout VERSION ?-f|--force? ?--keep?
|
| ︙ | ︙ |
Changes to src/db.c.
| ︙ | ︙ | |||
47 48 49 50 51 52 53 | Blob sql; /* The SQL for this statement */ sqlite3_stmt *pStmt; /* The results of sqlite3_prepare() */ Stmt *pNext, *pPrev; /* List of all unfinalized statements */ int nStep; /* Number of sqlite3_step() calls */ }; #endif /* INTERFACE */ | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
Blob sql; /* The SQL for this statement */
sqlite3_stmt *pStmt; /* The results of sqlite3_prepare() */
Stmt *pNext, *pPrev; /* List of all unfinalized statements */
int nStep; /* Number of sqlite3_step() calls */
};
#endif /* INTERFACE */
/*
** Call this routine when a database error occurs.
*/
static void db_err(const char *zFormat, ...){
va_list ap;
char *z;
static const char zRebuildMsg[] =
|
| ︙ | ︙ | |||
823 824 825 826 827 828 829 |
/* Found a valid checkout database file */
zPwd[n] = 0;
while( n>1 && zPwd[n-1]=='/' ){
n--;
zPwd[n] = 0;
}
g.zLocalRoot = mprintf("%s/", zPwd);
| < < | 781 782 783 784 785 786 787 788 789 790 791 792 793 794 |
/* Found a valid checkout database file */
zPwd[n] = 0;
while( n>1 && zPwd[n-1]=='/' ){
n--;
zPwd[n] = 0;
}
g.zLocalRoot = mprintf("%s/", zPwd);
return 1;
}
}
n--;
while( n>0 && zPwd[n]!='/' ){ n--; }
while( n>0 && zPwd[n-1]=='/' ){ n--; }
zPwd[n] = 0;
|
| ︙ | ︙ | |||
1564 1565 1566 1567 1568 1569 1570 |
{ "diff-command", 0, 16, "diff" },
{ "dont-push", 0, 0, "0" },
{ "editor", 0, 16, "" },
{ "gdiff-command", 0, 16, "gdiff" },
{ "ignore-glob", 0, 40, "" },
{ "http-port", 0, 16, "8080" },
{ "localauth", 0, 0, "0" },
| < | 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 |
{ "diff-command", 0, 16, "diff" },
{ "dont-push", 0, 0, "0" },
{ "editor", 0, 16, "" },
{ "gdiff-command", 0, 16, "gdiff" },
{ "ignore-glob", 0, 40, "" },
{ "http-port", 0, 16, "8080" },
{ "localauth", 0, 0, "0" },
{ "mtime-changes", 0, 0, "0" },
{ "pgp-command", 0, 32, "gpg --clearsign -o " },
{ "proxy", 0, 32, "off" },
{ "ssh-command", 0, 32, "" },
{ "web-browser", 0, 32, "" },
{ 0,0,0,0 }
};
|
| ︙ | ︙ | |||
1628 1629 1630 1631 1632 1633 1634 | ** Example: *.o,*.obj,*.exe ** ** 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. ** | < < | 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | ** Example: *.o,*.obj,*.exe ** ** 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. ** ** mtime-changes Use file modification times (mtimes) to detect when ** files have been modified. (Default "on".) ** ** pgp-command Command used to clear-sign manifests at check-in. ** The default is "gpg --clearsign -o ". ** ** proxy URL of the HTTP proxy. If undefined or "off" then |
| ︙ | ︙ | |||
1684 1685 1686 1687 1688 1689 1690 |
db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
}else{
print_setting(ctrlSettings[i].name);
}
}else{
usage("?PROPERTY? ?VALUE?");
}
| < | 1637 1638 1639 1640 1641 1642 1643 1644 |
db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
}else{
print_setting(ctrlSettings[i].name);
}
}else{
usage("?PROPERTY? ?VALUE?");
}
}
|
Changes to src/main.c.
| ︙ | ︙ | |||
57 58 59 60 61 62 63 | long long int now; /* Seconds since 1970 */ int repositoryOpen; /* True if the main repository database is open */ char *zRepositoryName; /* Name of the repository database */ char *zRepoDb; /* SQLite database name for the repository */ const char *zHome; /* Name of user home directory */ int localOpen; /* True if the local database is open */ char *zLocalRoot; /* The directory holding the local database */ | < < | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | long long int now; /* Seconds since 1970 */ int repositoryOpen; /* True if the main repository database is open */ char *zRepositoryName; /* Name of the repository database */ char *zRepoDb; /* SQLite database name for the repository */ const char *zHome; /* Name of user home directory */ int localOpen; /* True if the local database is open */ char *zLocalRoot; /* The directory holding the local database */ int minPrefix; /* Number of digits needed for a distinct UUID */ int fSqlTrace; /* True if -sqltrace flag is present */ int fSqlPrint; /* True if -sqlprint flag is present */ int fQuiet; /* True if -quiet flag is present */ int fHttpTrace; /* Trace outbound HTTP requests */ int fNoSync; /* Do not do an autosync even. --nosync */ char *zPath; /* Name of webpage being served */ |
| ︙ | ︙ |
Changes to src/setup.c.
| ︙ | ︙ | |||
864 865 866 867 868 869 870 |
login_check_credentials();
if( !g.okSetup ){
login_needed();
}
style_header("Settings");
| < | 864 865 866 867 868 869 870 871 872 873 874 875 876 877 |
login_check_credentials();
if( !g.okSetup ){
login_needed();
}
style_header("Settings");
db_begin_transaction();
@ <p>This page provides a simple interface to the "fossil setting" command.
@ See the "fossil help setting" output below for further information on
@ the meaning of each setting.</p><hr />
@ <form action="%s(g.zBaseURL)/setup_settings" method="post"><div>
@ <table border="0"><tr><td valign="top">
login_insert_csrf_secret();
|
| ︙ | ︙ |
Changes to src/zip.c.
| ︙ | ︙ | |||
336 337 338 339 340 341 342 |
blob_appendf(&filename, "%s/", zDir);
}
nPrefix = blob_size(&filename);
if( manifest_parse(&m, &mfile) ){
char *zName;
zip_set_timedate(m.rDate);
| | | | 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 |
blob_appendf(&filename, "%s/", zDir);
}
nPrefix = blob_size(&filename);
if( manifest_parse(&m, &mfile) ){
char *zName;
zip_set_timedate(m.rDate);
blob_append(&filename, "manifest", -1);
zName = blob_str(&filename);
zip_add_folders(zName);
zip_add_file(zName, &file);
sha1sum_blob(&file, &hash);
blob_reset(&file);
blob_append(&hash, "\n", 1);
blob_resize(&filename, nPrefix);
blob_append(&filename, "manifest.uuid", -1);
zName = blob_str(&filename);
zip_add_file(zName, &hash);
blob_reset(&hash);
for(i=0; i<m.nFile; i++){
int fid = uuid_to_rid(m.aFile[i].zUuid, 0);
if( fid ){
content_get(fid, &file);
|
| ︙ | ︙ |