Fossil SCM
Merge the new DBP-workflow commands into trunk: bundle, purge, publish, and unpublished.
Commit
a81a47f66cbfb9ee16cadd5cc186881ab4bd7d50
Parent
5e598cec4426392…
24 files changed
+307
+4
-4
+44
-1
+4
-4
+1
-3
+6
-1
+36
+3
+9
-2
+265
-35
+2
+1
+10
-5
+2
-2
+3
-3
+41
-13
+21
-20
+27
-8
+22
-4
+36
+36
+30
+21
~
src/bundle.c
~
src/content.c
~
src/db.c
~
src/descendants.c
~
src/finfo.c
~
src/foci.c
~
src/info.c
~
src/main.mk
~
src/makemake.tcl
~
src/mkversion.c
~
src/name.c
~
src/publish.c
~
src/purge.c
~
src/rebuild.c
~
src/schema.c
~
src/setup.c
~
src/shun.c
~
src/sqlcmd.c
~
src/timeline.c
~
win/Makefile.dmc
~
win/Makefile.mingw
~
win/Makefile.mingw
~
win/Makefile.msc
~
www/checkin_names.wiki
+307
| --- a/src/bundle.c | ||
| +++ b/src/bundle.c | ||
| @@ -0,0 +1,307 @@ | ||
| 1 | +/* | |
| 2 | +** Copyright (==40** Copyright (c) 2014 D/* | |
| 3 | +** Copyright (c) 2014 D. Richard Hipp | |
| 4 | +** | |
| 5 | +** This program is free software; you can redistribute it and/or | |
| 6 | +** modify it under the terms of the Simplified BSD License (also | |
| 7 | +** known as the "2-Clause License" or "FreeBSD License".) | |
| 8 | + | |
| 9 | +** This program is distributed in the hope that it will be useful, | |
| 10 | +** but without any warranty; without even the implied warranty of | |
| 11 | +** merchantability or fitness for a particular purpose. | |
| 12 | +** | |
| 13 | +** Author contact information: | |
| 14 | +** [email protected] | |
| 15 | +** http://www.hwaci.com/drh/ | |
| 16 | +** | |
| 17 | +******************************************************************************* | |
| 18 | +** | |
| 19 | +** This file containused to implement and manage a "bundle" file. | |
| 20 | +*/ | |
| 21 | +#include "config.h" | |
| 22 | +#include "bundle.h" | |
| 23 | +#include <assert.h> | |
| 24 | + | |
| 25 | +/* | |
| 26 | +** SQL code used to initialize the schema of a bundle. | |
| 27 | +** | |
| 28 | +** The bblob.delta field can be an integer, a text string, or NULL. | |
| 29 | +** If an integer, then the corresponding blobid is the delta basis. | |
| 30 | +** If a text string, then that string is a SHA1 hash for the delta | |
| 31 | +** basis, whister is ainory. If NULL, then | |
| 32 | +** data contains content without delta compression. | |
| 33 | +*/ | |
| 34 | +static const cha r zBundleInit[] = | |
| 35 | +@ CREATE TABLE IF NOT EXISTS "%w".bconfig( | |
| 36 | +@ bcname TEXT, | |
| 37 | +@ bcvalue ANY | |
| 38 | +@ ); | |
| 39 | +@ CREATE TABLE IF NOT EXISTS "%w".bblob( | |
| 40 | +@ blobid INTEGER PRIMARY KEY, -- Blob ID | |
| 41 | +@ uuid TEXT SHA1 NOT NULL, -- hash of expanded blob | |
| 42 | +@ sz INT NOT NULL, -- Size of blob after expansion | |
| 43 | +@ delta ANY, -- Delta compression basis, or NULL | |
| 44 | +@ notes TEXT, -- Description of content | |
| 45 | +@ data BLOB -- compressed content | |
| 46 | +@ ); | |
| 47 | +; | |
| 48 | + | |
| 49 | +/* | |
| 50 | +** Attach a bundle file to the current database connection using the | |
| 51 | +** attachment name zBName. | |
| 52 | +*/ | |
| 53 | +static void bundle_attach_file( | |
| 54 | + const char *zFile, /* Name of the file that contains the bundle */ | |
| 55 | + const char *zBName, /* Attachment name */ | |
| 56 | + int doInit /* Initialize a new bundle, if true */ | |
| 57 | +){ | |
| 58 | + int rc; | |
| 59 | + char *zErrMsg = 0; | |
| 60 | + char *zSql; | |
| 61 | + if( )<0 ){blob.rid=tobundle.rid" | |
| 62 | + _size(zFile, ExtFILE)<0 ){ | |
| 63 | + fossil_fatal("no such file: %s", zFile); | |
| 64 | + } | |
| 65 | + assert( g.db ); | |
| 66 | + zSql = sqlite3_mprintf("ATTAfatalhat string is a SHA1 c = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); | |
| 67 | + sqlite3_free(zSql); | |
| 68 | + if( rc!=SQLITE_OK || zErrMsg ){ | |
| 69 | + if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); | |
| 70 | + fossil_fatal("not a valid bundle: %s", zFile); | |
| 71 | + } | |
| 72 | + if( doInit ){ | |
| 73 | + db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); | |
| 74 | + }else{ | |
| 75 | + sqlite3_stmt *pStmt; | |
| 76 | + zSql = sqlite3_mprintf("SELECT bcname, bcvalue" | |
| 77 | + " FROM \"%w\".bconfig", zBName);panic that string is a SHA1fatalhat string is a SHA1 hash for the delta | |
| 78 | +** basis, whister is presumably in the main repository. If NULL, then | |
| 79 | +** data contains content without delta compression. | |
| 80 | +*/ | |
| 81 | +static const char zBundleInit[] = | |
| 82 | +@ CREATE TABLE IF NOT EXISTS "%w".bconfig( | |
| 83 | +@ bcname TEXT, | |
| 84 | +@ bcvalue ANY | |
| 85 | +@ ); | |
| 86 | +@ CREATE TABLE IF NOT EXISTS "%w".bblob( | |
| 87 | +@ blobid INTEGER Pfatalhat string is a SHA1 hash for the delta | |
| 88 | +** basis, whister is presumably in the main repository. If NULL, then | |
| 89 | +** data contains content without delta compressio} | |
| 90 | +} | |
| 91 | + | |
| 92 | +/* | |
| 93 | +**sociates("ok", 1); | |
| 94 | + | |
| 95 | + /* NULL | |
| 96 | +@ notes TEXT, -- Description of content | |
| 97 | +@ data BLOB -- compressed content | |
| 98 | +@ ); | |
| 99 | +; | |
| 100 | + | |
| 101 | +/* | |
| 102 | +** Attac ter is presumably iHipp | |
| 103 | +** | |
| 104 | +** This program is free software; you can redistribute it and/or | |
| 105 | +** modify it under the terms of the Simplified BSD License (also | |
| 106 | +** known as the "2-Clause License" or "FreeBSD License".) | |
| 107 | + | |
| 108 | +** This program is distributed in the hope that it will be useful, | |
| 109 | +** but without any warranty; without even the implied warranty of | |
| 110 | +** merchantability or fitness for a particular purpose. | |
| 111 | +** | |
| 112 | +** Author contact information: | |
| 113 | +** [email protected] | |
| 114 | +** http://www.hwaci.com/drh/ | |
| 115 | +** | |
| 116 | +******************************************************************************* | |
| 117 | +** | |
| 118 | +** This file contains code used to implement and manage a "bundle" file. | |
| 119 | +*/ | |
| 120 | +#include "config.h" | |
| 121 | +#include "bundle.h" | |
| 122 | +#include <assert.h> | |
| 123 | + | |
| 124 | +/* | |
| 125 | +** SQL code used to initialize the schema of a bundle. | |
| 126 | +** | |
| 127 | +** The bblob.delta field can be an integer, a text string, or NULL. | |
| 128 | +** If an integer, then the corresponding blobid is the delta basis. | |
| 129 | +** If a text string, then that string is a SHA1 hash for the delta | |
| 130 | +** basis, whister is ainory. If NULL, then | |
| 131 | +** data contains content without delta compression. | |
| 132 | +*/ | |
| 133 | +static const char zBundleInit[] = | |
| 134 | +@ CREATE TABLE IF NOT EXISTS "%w/mpressed content | |
| 135 | +@ ); | |
| 136 | +; | |
| 137 | + | |
| 138 | +/* | |
| 139 | +** Attach a bundle file to the current database connection using the | |
| 140 | +** attachment name zBName. | |
| 141 | +*/ | |
| 142 | +static void bundle_attach_file( | |
| 143 | + const char *zFile, /* Name of the file that contains the bundle */ | |
| 144 | + const char *zBName, /* Attachment name */ | |
| 145 | + int doInit /* Initialize a new bundle, if true */ | |
| 146 | +){ | |
| 147 | + int rc; | |
| 148 | + char *zErrMsg = 0; | |
| 149 | + char *zSql; | |
| 150 | + if( )<0 ){blob.rid=tobundle.rid" | |
| 151 | + _size(zFile, ExtFILE)<0 ){ | |
| 152 | + fossil_fatal("no such file: %s", zFile); | |
| 153 | + } | |
| 154 | + assert( g.db ); | |
| 155 | + zSql = sqlite3_mprintf("ATTAfatalhat string is a SHA1 c = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); | |
| 156 | + sqlite3_free(zSql); | |
| 157 | + if( rc!=SQLITE_OK || zErrMsg ){ | |
| 158 | + if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); | |
| 159 | + fossil_fatal("not a valid bundle: %s", zFile); | |
| 160 | + } | |
| 161 | + if( doInit ){ | |
| 162 | + db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); | |
| 163 | + }else{ | |
| 164 | + sqlite3_stmt *pStmt; | |
| 165 | + zSql = sqlite3_mprintf("SELECT bcname, bcvalue" | |
| 166 | + " FROM \"%w\".bconfig", zBName);panic that string is a SHA1fatalhat string is a SHA1 hash for the delta | |
| 167 | +** basis, whister is presumably in the main repository. If NULL, then | |
| 168 | +** data contains content without delta compression. | |
| 169 | +*/ | |
| 170 | +statc const char zBundleInit[] = | |
| 171 | +@ CREATE TABLE IF NOT EXISTS "%w".bconfig( | |
| 172 | +@ bcname TEXT, | |
| 173 | +@ bcvalue ANY | |
| 174 | +@ ); | |
| 175 | +@ CREATE TABLE IF NOT EXISTS "% Pfatalhat string is a SHA1 hash for the delta | |
| 176 | +** basis, whister is presumably in the main reposa contains content without delta compressio} | |
| 177 | +} | |
| 178 | + | |
| 179 | +/* | |
| 180 | +**sociates("ok", 1); | |
| 181 | + | |
| 182 | + /* NULL | |
| 183 | +@ notes TEXT, -- Description of ontent | |
| 184 | +@ data BLOB content | |
| 185 | +@ ); | |
| 186 | +; | |
| 187 | + | |
| 188 | +/* | |
| 189 | +** Attach a bundle file to the current database connection using the | |
| 190 | +** attachment name zBName. | |
| 191 | +*/ | |
| 192 | +static void bundle_attach_file( | |
| 193 | + const char *zFile, /* Name of the file that contains the bundle */ | |
| 194 | + const char *zBName, */ | |
| 195 | +){ | |
| 196 | + int rc; | |
| 197 | + char *zErrMsg = 0; | |
| 198 | + char *zSql; | |
| 199 | + if( !doInit && file_size(zFile, ExtFILE)<0 ){ | |
| 200 | + fossil_fatal("no such file: %s", zFile); | |
| 201 | + } | |
| 202 | + assert( g.db ); | |
| 203 | + zSql = sqlite3_mprintf("ATTACH %Q AS %Q", zFile, zBName); | |
| 204 | + if( zSql==0 ) fossil_fatal("out of memory"); | |
| 205 | + rc = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); | |
| 206 | + sqlite3_free(zSql); | |
| 207 | + if( rc!=SQLITE_OK || zErrMsg ){ | |
| 208 | + if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); | |
| 209 | + fossil_fatal("not a valid bundle: %s", zFile); | |
| 210 | + } | |
| 211 | + if( doInit ){ | |
| 212 | + db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); | |
| 213 | + }else{ | |
| 214 | + sqlite3_stmt *pStmt; | |
| 215 | + zSql = sqlite3_mprintf("SELECT bcname, bcvalue" | |
| 216 | + " FROM \"%w\".bconfig", zBName); | |
| 217 | + if( zSql==0 ) fossil_fatal("out of memory"); | |
| 218 | + rc = sqlite3_prepare(g.db, zSql, -1, &pStmt, 0); | |
| 219 | + if( rc ) fossil_fatal("not a valid bundle: %s", zFile); | |
| 220 | + sqlite3_free(zSql); | |
| 221 | + sqlite3_finalize(pStmt); | |
| 222 | + zSql = sqlite3_mprintf("SELECT blobid, uuid, | |
| 223 | +**makesright (==40** Copyright (c) 2014 D/* | |
| 224 | +** Copyright (c) 2014 D. Richard Hipp | |
| 225 | +** | |
| 226 | +** This program is free software; you can redistribute it and/or | |
| 227 | +** modify it under the terms of the Simplified BSD License (also | |
| 228 | +** known as the "2-Clause License" or "FreeBSD License".) | |
| 229 | + | |
| 230 | +** This program is distributed in the hope that it will be useful, | |
| 231 | +** but without any warranty; without even the implied warranty of | |
| 232 | +** merchantability or fitness for a particular purpose. | |
| 233 | +** | |
| 234 | +** Author contact information: | |
| 235 | +** [email protected] | |
| 236 | +** http://www.hwaci.com/drh/ | |
| 237 | +** | |
| 238 | +******************************************************************************* | |
| 239 | +** | |
| 240 | +** This file contains code used to implement and manage a "bundle" file. | |
| 241 | +*/ | |
| 242 | +#include "config.h" | |
| 243 | +#include "bundle.h" | |
| 244 | +#include <assert.h> | |
| 245 | + | |
| 246 | +/* | |
| 247 | +** SQe schema of a bundle. | |
| 248 | +** | |
| 249 | +** The bblob.delta field can be an integer, a text string, or NULL. | |
| 250 | +** If an integer, then the corresponding blobid is the delta basis. | |
| 251 | +** If a text string, then that string is a SHA1 hash for the delta | |
| 252 | +** basis, whister is presumably in the ain repository. If NULL, then | |
| 253 | +** data contains content without delta compression. | |
| 254 | +*/ | |
| 255 | +static const char zBundleInit[] = | |
| 256 | +@ CREATE TABLE IF NOT EXISTS "%w".bconfig(e ANY | |
| 257 | +@ ); | |
| 258 | +@ CREATE TABLE IF NOT EXISTS "%w".bblob( | |
| 259 | +@ blobid INTEGER PRIMARY KEY, -- Blob ID | |
| 260 | +@ uuid TEXT SHA1 NOT NULL, -- hash of expanded blob | |
| 261 | +@ sz INT NOT NULL, -- Size of blob after expansion | |
| 262 | +@ delta ANY, -- Delta compression basis, or NULL | |
| 263 | +@ notes TEXT, -- Description of content | |
| 264 | +@ data BLOB -- compressed content | |
| 265 | +@ ); | |
| 266 | +; | |
| 267 | + | |
| 268 | +/* | |
| 269 | +** Attach a bundle file to the current database connection using the | |
| 270 | +** attachment name zBName. | |
| 271 | +*/ | |
| 272 | +static void bundle_attach_file( | |
| 273 | + const char *zFile, /* Name of the file that contains the bundle */ | |
| 274 | + const char *zBName, /* Attachment name */ | |
| 275 | + int doInit /* Initialize a new bundle, if true */ | |
| 276 | +){ | |
| 277 | + int rc; | |
| 278 | + char *zErrMsg = 0; | |
| 279 | + char *zSql; | |
| 280 | + if( )<0 ){blob.rid=tobundle.rid" | |
| 281 | + _size(zFile, ExtFILE)<0 ){ | |
| 282 | + fossil_fatal("no such file: %s", zFile); | |
| 283 | + } | |
| 284 | + assert( g.db ); | |
| 285 | + zSql = sqlite3_mprintf("ATTAfatalhat string is a SHA1 c = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); | |
| 286 | + sqlite3_free(zSql); | |
| 287 | + if( rc!=SQLITE_OK || zErrMsg ){ | |
| 288 | + if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); | |
| 289 | + fossil_fatal("not a valid bundle: %s", zFile); | |
| 290 | + } | |
| 291 | + if( doInit ){ | |
| 292 | + db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); | |
| 293 | + }else{ | |
| 294 | + sqlite3_stmt *pStmt; | |
| 295 | + zSql = sqlite3_mprintf("SELECT bcname, bcvalue" | |
| 296 | + " FROM \"%w\".bconfig", zBName);panic that string is a SHA1fatalhat string is a SHA1 hash for the delta | |
| 297 | +** basis, whister is presumably in the main repository. If NULL, then | |
| 298 | +** data contains content without delta compression. | |
| 299 | +*/ | |
| 300 | +static const char zBundleInit[] = | |
| 301 | +@ CREATE TABLE IF NOT EXISTS "%w".bconfig( | |
| 302 | +@ bcname TEXT, | |
| 303 | +@ bcvalue ANY | |
| 304 | +@ ); | |
| 305 | +@ CREATE TABLE IF NOT EXISTS "%w".bblob( | |
| 306 | +@ blobid INTEGER Pfatalhat string is a SHA1 hash for the delta | |
| 307 | +** basis, whist ins |
| --- a/src/bundle.c | |
| +++ b/src/bundle.c | |
| @@ -0,0 +1,307 @@ | |
| --- a/src/bundle.c | |
| +++ b/src/bundle.c | |
| @@ -0,0 +1,307 @@ | |
| 1 | /* |
| 2 | ** Copyright (==40** Copyright (c) 2014 D/* |
| 3 | ** Copyright (c) 2014 D. Richard Hipp |
| 4 | ** |
| 5 | ** This program is free software; you can redistribute it and/or |
| 6 | ** modify it under the terms of the Simplified BSD License (also |
| 7 | ** known as the "2-Clause License" or "FreeBSD License".) |
| 8 | |
| 9 | ** This program is distributed in the hope that it will be useful, |
| 10 | ** but without any warranty; without even the implied warranty of |
| 11 | ** merchantability or fitness for a particular purpose. |
| 12 | ** |
| 13 | ** Author contact information: |
| 14 | ** [email protected] |
| 15 | ** http://www.hwaci.com/drh/ |
| 16 | ** |
| 17 | ******************************************************************************* |
| 18 | ** |
| 19 | ** This file containused to implement and manage a "bundle" file. |
| 20 | */ |
| 21 | #include "config.h" |
| 22 | #include "bundle.h" |
| 23 | #include <assert.h> |
| 24 | |
| 25 | /* |
| 26 | ** SQL code used to initialize the schema of a bundle. |
| 27 | ** |
| 28 | ** The bblob.delta field can be an integer, a text string, or NULL. |
| 29 | ** If an integer, then the corresponding blobid is the delta basis. |
| 30 | ** If a text string, then that string is a SHA1 hash for the delta |
| 31 | ** basis, whister is ainory. If NULL, then |
| 32 | ** data contains content without delta compression. |
| 33 | */ |
| 34 | static const cha r zBundleInit[] = |
| 35 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 36 | @ bcname TEXT, |
| 37 | @ bcvalue ANY |
| 38 | @ ); |
| 39 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| 40 | @ blobid INTEGER PRIMARY KEY, -- Blob ID |
| 41 | @ uuid TEXT SHA1 NOT NULL, -- hash of expanded blob |
| 42 | @ sz INT NOT NULL, -- Size of blob after expansion |
| 43 | @ delta ANY, -- Delta compression basis, or NULL |
| 44 | @ notes TEXT, -- Description of content |
| 45 | @ data BLOB -- compressed content |
| 46 | @ ); |
| 47 | ; |
| 48 | |
| 49 | /* |
| 50 | ** Attach a bundle file to the current database connection using the |
| 51 | ** attachment name zBName. |
| 52 | */ |
| 53 | static void bundle_attach_file( |
| 54 | const char *zFile, /* Name of the file that contains the bundle */ |
| 55 | const char *zBName, /* Attachment name */ |
| 56 | int doInit /* Initialize a new bundle, if true */ |
| 57 | ){ |
| 58 | int rc; |
| 59 | char *zErrMsg = 0; |
| 60 | char *zSql; |
| 61 | if( )<0 ){blob.rid=tobundle.rid" |
| 62 | _size(zFile, ExtFILE)<0 ){ |
| 63 | fossil_fatal("no such file: %s", zFile); |
| 64 | } |
| 65 | assert( g.db ); |
| 66 | zSql = sqlite3_mprintf("ATTAfatalhat string is a SHA1 c = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); |
| 67 | sqlite3_free(zSql); |
| 68 | if( rc!=SQLITE_OK || zErrMsg ){ |
| 69 | if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); |
| 70 | fossil_fatal("not a valid bundle: %s", zFile); |
| 71 | } |
| 72 | if( doInit ){ |
| 73 | db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); |
| 74 | }else{ |
| 75 | sqlite3_stmt *pStmt; |
| 76 | zSql = sqlite3_mprintf("SELECT bcname, bcvalue" |
| 77 | " FROM \"%w\".bconfig", zBName);panic that string is a SHA1fatalhat string is a SHA1 hash for the delta |
| 78 | ** basis, whister is presumably in the main repository. If NULL, then |
| 79 | ** data contains content without delta compression. |
| 80 | */ |
| 81 | static const char zBundleInit[] = |
| 82 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 83 | @ bcname TEXT, |
| 84 | @ bcvalue ANY |
| 85 | @ ); |
| 86 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| 87 | @ blobid INTEGER Pfatalhat string is a SHA1 hash for the delta |
| 88 | ** basis, whister is presumably in the main repository. If NULL, then |
| 89 | ** data contains content without delta compressio} |
| 90 | } |
| 91 | |
| 92 | /* |
| 93 | **sociates("ok", 1); |
| 94 | |
| 95 | /* NULL |
| 96 | @ notes TEXT, -- Description of content |
| 97 | @ data BLOB -- compressed content |
| 98 | @ ); |
| 99 | ; |
| 100 | |
| 101 | /* |
| 102 | ** Attac ter is presumably iHipp |
| 103 | ** |
| 104 | ** This program is free software; you can redistribute it and/or |
| 105 | ** modify it under the terms of the Simplified BSD License (also |
| 106 | ** known as the "2-Clause License" or "FreeBSD License".) |
| 107 | |
| 108 | ** This program is distributed in the hope that it will be useful, |
| 109 | ** but without any warranty; without even the implied warranty of |
| 110 | ** merchantability or fitness for a particular purpose. |
| 111 | ** |
| 112 | ** Author contact information: |
| 113 | ** [email protected] |
| 114 | ** http://www.hwaci.com/drh/ |
| 115 | ** |
| 116 | ******************************************************************************* |
| 117 | ** |
| 118 | ** This file contains code used to implement and manage a "bundle" file. |
| 119 | */ |
| 120 | #include "config.h" |
| 121 | #include "bundle.h" |
| 122 | #include <assert.h> |
| 123 | |
| 124 | /* |
| 125 | ** SQL code used to initialize the schema of a bundle. |
| 126 | ** |
| 127 | ** The bblob.delta field can be an integer, a text string, or NULL. |
| 128 | ** If an integer, then the corresponding blobid is the delta basis. |
| 129 | ** If a text string, then that string is a SHA1 hash for the delta |
| 130 | ** basis, whister is ainory. If NULL, then |
| 131 | ** data contains content without delta compression. |
| 132 | */ |
| 133 | static const char zBundleInit[] = |
| 134 | @ CREATE TABLE IF NOT EXISTS "%w/mpressed content |
| 135 | @ ); |
| 136 | ; |
| 137 | |
| 138 | /* |
| 139 | ** Attach a bundle file to the current database connection using the |
| 140 | ** attachment name zBName. |
| 141 | */ |
| 142 | static void bundle_attach_file( |
| 143 | const char *zFile, /* Name of the file that contains the bundle */ |
| 144 | const char *zBName, /* Attachment name */ |
| 145 | int doInit /* Initialize a new bundle, if true */ |
| 146 | ){ |
| 147 | int rc; |
| 148 | char *zErrMsg = 0; |
| 149 | char *zSql; |
| 150 | if( )<0 ){blob.rid=tobundle.rid" |
| 151 | _size(zFile, ExtFILE)<0 ){ |
| 152 | fossil_fatal("no such file: %s", zFile); |
| 153 | } |
| 154 | assert( g.db ); |
| 155 | zSql = sqlite3_mprintf("ATTAfatalhat string is a SHA1 c = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); |
| 156 | sqlite3_free(zSql); |
| 157 | if( rc!=SQLITE_OK || zErrMsg ){ |
| 158 | if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); |
| 159 | fossil_fatal("not a valid bundle: %s", zFile); |
| 160 | } |
| 161 | if( doInit ){ |
| 162 | db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); |
| 163 | }else{ |
| 164 | sqlite3_stmt *pStmt; |
| 165 | zSql = sqlite3_mprintf("SELECT bcname, bcvalue" |
| 166 | " FROM \"%w\".bconfig", zBName);panic that string is a SHA1fatalhat string is a SHA1 hash for the delta |
| 167 | ** basis, whister is presumably in the main repository. If NULL, then |
| 168 | ** data contains content without delta compression. |
| 169 | */ |
| 170 | statc const char zBundleInit[] = |
| 171 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 172 | @ bcname TEXT, |
| 173 | @ bcvalue ANY |
| 174 | @ ); |
| 175 | @ CREATE TABLE IF NOT EXISTS "% Pfatalhat string is a SHA1 hash for the delta |
| 176 | ** basis, whister is presumably in the main reposa contains content without delta compressio} |
| 177 | } |
| 178 | |
| 179 | /* |
| 180 | **sociates("ok", 1); |
| 181 | |
| 182 | /* NULL |
| 183 | @ notes TEXT, -- Description of ontent |
| 184 | @ data BLOB content |
| 185 | @ ); |
| 186 | ; |
| 187 | |
| 188 | /* |
| 189 | ** Attach a bundle file to the current database connection using the |
| 190 | ** attachment name zBName. |
| 191 | */ |
| 192 | static void bundle_attach_file( |
| 193 | const char *zFile, /* Name of the file that contains the bundle */ |
| 194 | const char *zBName, */ |
| 195 | ){ |
| 196 | int rc; |
| 197 | char *zErrMsg = 0; |
| 198 | char *zSql; |
| 199 | if( !doInit && file_size(zFile, ExtFILE)<0 ){ |
| 200 | fossil_fatal("no such file: %s", zFile); |
| 201 | } |
| 202 | assert( g.db ); |
| 203 | zSql = sqlite3_mprintf("ATTACH %Q AS %Q", zFile, zBName); |
| 204 | if( zSql==0 ) fossil_fatal("out of memory"); |
| 205 | rc = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); |
| 206 | sqlite3_free(zSql); |
| 207 | if( rc!=SQLITE_OK || zErrMsg ){ |
| 208 | if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); |
| 209 | fossil_fatal("not a valid bundle: %s", zFile); |
| 210 | } |
| 211 | if( doInit ){ |
| 212 | db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); |
| 213 | }else{ |
| 214 | sqlite3_stmt *pStmt; |
| 215 | zSql = sqlite3_mprintf("SELECT bcname, bcvalue" |
| 216 | " FROM \"%w\".bconfig", zBName); |
| 217 | if( zSql==0 ) fossil_fatal("out of memory"); |
| 218 | rc = sqlite3_prepare(g.db, zSql, -1, &pStmt, 0); |
| 219 | if( rc ) fossil_fatal("not a valid bundle: %s", zFile); |
| 220 | sqlite3_free(zSql); |
| 221 | sqlite3_finalize(pStmt); |
| 222 | zSql = sqlite3_mprintf("SELECT blobid, uuid, |
| 223 | **makesright (==40** Copyright (c) 2014 D/* |
| 224 | ** Copyright (c) 2014 D. Richard Hipp |
| 225 | ** |
| 226 | ** This program is free software; you can redistribute it and/or |
| 227 | ** modify it under the terms of the Simplified BSD License (also |
| 228 | ** known as the "2-Clause License" or "FreeBSD License".) |
| 229 | |
| 230 | ** This program is distributed in the hope that it will be useful, |
| 231 | ** but without any warranty; without even the implied warranty of |
| 232 | ** merchantability or fitness for a particular purpose. |
| 233 | ** |
| 234 | ** Author contact information: |
| 235 | ** [email protected] |
| 236 | ** http://www.hwaci.com/drh/ |
| 237 | ** |
| 238 | ******************************************************************************* |
| 239 | ** |
| 240 | ** This file contains code used to implement and manage a "bundle" file. |
| 241 | */ |
| 242 | #include "config.h" |
| 243 | #include "bundle.h" |
| 244 | #include <assert.h> |
| 245 | |
| 246 | /* |
| 247 | ** SQe schema of a bundle. |
| 248 | ** |
| 249 | ** The bblob.delta field can be an integer, a text string, or NULL. |
| 250 | ** If an integer, then the corresponding blobid is the delta basis. |
| 251 | ** If a text string, then that string is a SHA1 hash for the delta |
| 252 | ** basis, whister is presumably in the ain repository. If NULL, then |
| 253 | ** data contains content without delta compression. |
| 254 | */ |
| 255 | static const char zBundleInit[] = |
| 256 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig(e ANY |
| 257 | @ ); |
| 258 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| 259 | @ blobid INTEGER PRIMARY KEY, -- Blob ID |
| 260 | @ uuid TEXT SHA1 NOT NULL, -- hash of expanded blob |
| 261 | @ sz INT NOT NULL, -- Size of blob after expansion |
| 262 | @ delta ANY, -- Delta compression basis, or NULL |
| 263 | @ notes TEXT, -- Description of content |
| 264 | @ data BLOB -- compressed content |
| 265 | @ ); |
| 266 | ; |
| 267 | |
| 268 | /* |
| 269 | ** Attach a bundle file to the current database connection using the |
| 270 | ** attachment name zBName. |
| 271 | */ |
| 272 | static void bundle_attach_file( |
| 273 | const char *zFile, /* Name of the file that contains the bundle */ |
| 274 | const char *zBName, /* Attachment name */ |
| 275 | int doInit /* Initialize a new bundle, if true */ |
| 276 | ){ |
| 277 | int rc; |
| 278 | char *zErrMsg = 0; |
| 279 | char *zSql; |
| 280 | if( )<0 ){blob.rid=tobundle.rid" |
| 281 | _size(zFile, ExtFILE)<0 ){ |
| 282 | fossil_fatal("no such file: %s", zFile); |
| 283 | } |
| 284 | assert( g.db ); |
| 285 | zSql = sqlite3_mprintf("ATTAfatalhat string is a SHA1 c = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg); |
| 286 | sqlite3_free(zSql); |
| 287 | if( rc!=SQLITE_OK || zErrMsg ){ |
| 288 | if( zErrMsg==0 ) zErrMsg = (char*)sqlite3_errmsg(g.db); |
| 289 | fossil_fatal("not a valid bundle: %s", zFile); |
| 290 | } |
| 291 | if( doInit ){ |
| 292 | db_multi_exec(zBundleInit /*works-like:"%w%w"*/, zBName, zBName); |
| 293 | }else{ |
| 294 | sqlite3_stmt *pStmt; |
| 295 | zSql = sqlite3_mprintf("SELECT bcname, bcvalue" |
| 296 | " FROM \"%w\".bconfig", zBName);panic that string is a SHA1fatalhat string is a SHA1 hash for the delta |
| 297 | ** basis, whister is presumably in the main repository. If NULL, then |
| 298 | ** data contains content without delta compression. |
| 299 | */ |
| 300 | static const char zBundleInit[] = |
| 301 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 302 | @ bcname TEXT, |
| 303 | @ bcvalue ANY |
| 304 | @ ); |
| 305 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| 306 | @ blobid INTEGER Pfatalhat string is a SHA1 hash for the delta |
| 307 | ** basis, whist ins |
+4
-4
| --- src/content.c | ||
| +++ src/content.c | ||
| @@ -567,14 +567,14 @@ | ||
| 567 | 567 | db_exec(&s1); |
| 568 | 568 | rid = db_last_insert_rowid(); |
| 569 | 569 | if( !pBlob ){ |
| 570 | 570 | db_multi_exec("INSERT OR IGNORE INTO phantom VALUES(%d)", rid); |
| 571 | 571 | } |
| 572 | - if( g.markPrivate || isPrivate ){ | |
| 573 | - db_multi_exec("INSERT INTO private VALUES(%d)", rid); | |
| 574 | - markAsUnclustered = 0; | |
| 575 | - } | |
| 572 | + } | |
| 573 | + if( g.markPrivate || isPrivate ){ | |
| 574 | + db_multi_exec("INSERT INTO private VALUES(%d)", rid); | |
| 575 | + markAsUnclustered = 0; | |
| 576 | 576 | } |
| 577 | 577 | if( nBlob==0 ) blob_reset(&cmpr); |
| 578 | 578 | |
| 579 | 579 | /* If the srcId is specified, then the data we just added is |
| 580 | 580 | ** really a delta. Record this fact in the delta table. |
| 581 | 581 |
| --- src/content.c | |
| +++ src/content.c | |
| @@ -567,14 +567,14 @@ | |
| 567 | db_exec(&s1); |
| 568 | rid = db_last_insert_rowid(); |
| 569 | if( !pBlob ){ |
| 570 | db_multi_exec("INSERT OR IGNORE INTO phantom VALUES(%d)", rid); |
| 571 | } |
| 572 | if( g.markPrivate || isPrivate ){ |
| 573 | db_multi_exec("INSERT INTO private VALUES(%d)", rid); |
| 574 | markAsUnclustered = 0; |
| 575 | } |
| 576 | } |
| 577 | if( nBlob==0 ) blob_reset(&cmpr); |
| 578 | |
| 579 | /* If the srcId is specified, then the data we just added is |
| 580 | ** really a delta. Record this fact in the delta table. |
| 581 |
| --- src/content.c | |
| +++ src/content.c | |
| @@ -567,14 +567,14 @@ | |
| 567 | db_exec(&s1); |
| 568 | rid = db_last_insert_rowid(); |
| 569 | if( !pBlob ){ |
| 570 | db_multi_exec("INSERT OR IGNORE INTO phantom VALUES(%d)", rid); |
| 571 | } |
| 572 | } |
| 573 | if( g.markPrivate || isPrivate ){ |
| 574 | db_multi_exec("INSERT INTO private VALUES(%d)", rid); |
| 575 | markAsUnclustered = 0; |
| 576 | } |
| 577 | if( nBlob==0 ) blob_reset(&cmpr); |
| 578 | |
| 579 | /* If the srcId is specified, then the data we just added is |
| 580 | ** really a delta. Record this fact in the delta table. |
| 581 |
M
src/db.c
+44
-1
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -424,10 +424,13 @@ | ||
| 424 | 424 | |
| 425 | 425 | /* |
| 426 | 426 | ** Extract text, integer, or blob values from the N-th column of the |
| 427 | 427 | ** current row. |
| 428 | 428 | */ |
| 429 | +int db_column_type(Stmt *pStmt, int N){ | |
| 430 | + return sqlite3_column_type(pStmt->pStmt, N); | |
| 431 | +} | |
| 429 | 432 | int db_column_bytes(Stmt *pStmt, int N){ |
| 430 | 433 | return sqlite3_column_bytes(pStmt->pStmt, N); |
| 431 | 434 | } |
| 432 | 435 | int db_column_int(Stmt *pStmt, int N){ |
| 433 | 436 | return sqlite3_column_int(pStmt->pStmt, N); |
| @@ -486,10 +489,50 @@ | ||
| 486 | 489 | while( (rc = db_step(pStmt))==SQLITE_ROW ){} |
| 487 | 490 | rc = db_reset(pStmt); |
| 488 | 491 | db_check_result(rc); |
| 489 | 492 | return rc; |
| 490 | 493 | } |
| 494 | + | |
| 495 | +/* | |
| 496 | +** Print the output of one or more SQL queries on standard output. | |
| 497 | +** This routine is used for debugging purposes only. | |
| 498 | +*/ | |
| 499 | +int db_debug(const char *zSql, ...){ | |
| 500 | + Blob sql; | |
| 501 | + int rc = SQLITE_OK; | |
| 502 | + va_list ap; | |
| 503 | + const char *z, *zEnd; | |
| 504 | + sqlite3_stmt *pStmt; | |
| 505 | + blob_init(&sql, 0, 0); | |
| 506 | + va_start(ap, zSql); | |
| 507 | + blob_vappendf(&sql, zSql, ap); | |
| 508 | + va_end(ap); | |
| 509 | + z = blob_str(&sql); | |
| 510 | + while( rc==SQLITE_OK && z[0] ){ | |
| 511 | + pStmt = 0; | |
| 512 | + rc = sqlite3_prepare_v2(g.db, z, -1, &pStmt, &zEnd); | |
| 513 | + if( rc!=SQLITE_OK ) break; | |
| 514 | + if( pStmt ){ | |
| 515 | + int nRow = 0; | |
| 516 | + db.nPrepare++; | |
| 517 | + while( sqlite3_step(pStmt)==SQLITE_ROW ){ | |
| 518 | + int i, n; | |
| 519 | + if( nRow++ > 0 ) fossil_print("\n"); | |
| 520 | + n = sqlite3_column_count(pStmt); | |
| 521 | + for(i=0; i<n; i++){ | |
| 522 | + fossil_print("%s = %s\n", sqlite3_column_name(pStmt, i), | |
| 523 | + sqlite3_column_text(pStmt,i)); | |
| 524 | + } | |
| 525 | + } | |
| 526 | + rc = sqlite3_finalize(pStmt); | |
| 527 | + if( rc ) db_err("%s: {%.*s}", sqlite3_errmsg(g.db), (int)(zEnd-z), z); | |
| 528 | + } | |
| 529 | + z = zEnd; | |
| 530 | + } | |
| 531 | + blob_reset(&sql); | |
| 532 | + return rc; | |
| 533 | +} | |
| 491 | 534 | |
| 492 | 535 | /* |
| 493 | 536 | ** Execute multiple SQL statements. |
| 494 | 537 | */ |
| 495 | 538 | int db_multi_exec(const char *zSql, ...){ |
| @@ -722,11 +765,11 @@ | ||
| 722 | 765 | arg = (const char*)sqlite3_value_text(argv[0]); |
| 723 | 766 | if(!arg){ |
| 724 | 767 | sqlite3_result_error(context, "Expecting a STRING argument", -1); |
| 725 | 768 | }else{ |
| 726 | 769 | int rid; |
| 727 | - type = (2==argc) ? sqlite3_value_text(argv[1]) : 0; | |
| 770 | + type = (2==argc) ? (const char*)sqlite3_value_text(argv[1]) : 0; | |
| 728 | 771 | if(!type) type = "ci"; |
| 729 | 772 | rid = symbolic_name_to_rid( arg, type ); |
| 730 | 773 | if(rid<0){ |
| 731 | 774 | sqlite3_result_error(context, "Symbolic name is ambiguous.", -1); |
| 732 | 775 | }else if(0==rid){ |
| 733 | 776 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -424,10 +424,13 @@ | |
| 424 | |
| 425 | /* |
| 426 | ** Extract text, integer, or blob values from the N-th column of the |
| 427 | ** current row. |
| 428 | */ |
| 429 | int db_column_bytes(Stmt *pStmt, int N){ |
| 430 | return sqlite3_column_bytes(pStmt->pStmt, N); |
| 431 | } |
| 432 | int db_column_int(Stmt *pStmt, int N){ |
| 433 | return sqlite3_column_int(pStmt->pStmt, N); |
| @@ -486,10 +489,50 @@ | |
| 486 | while( (rc = db_step(pStmt))==SQLITE_ROW ){} |
| 487 | rc = db_reset(pStmt); |
| 488 | db_check_result(rc); |
| 489 | return rc; |
| 490 | } |
| 491 | |
| 492 | /* |
| 493 | ** Execute multiple SQL statements. |
| 494 | */ |
| 495 | int db_multi_exec(const char *zSql, ...){ |
| @@ -722,11 +765,11 @@ | |
| 722 | arg = (const char*)sqlite3_value_text(argv[0]); |
| 723 | if(!arg){ |
| 724 | sqlite3_result_error(context, "Expecting a STRING argument", -1); |
| 725 | }else{ |
| 726 | int rid; |
| 727 | type = (2==argc) ? sqlite3_value_text(argv[1]) : 0; |
| 728 | if(!type) type = "ci"; |
| 729 | rid = symbolic_name_to_rid( arg, type ); |
| 730 | if(rid<0){ |
| 731 | sqlite3_result_error(context, "Symbolic name is ambiguous.", -1); |
| 732 | }else if(0==rid){ |
| 733 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -424,10 +424,13 @@ | |
| 424 | |
| 425 | /* |
| 426 | ** Extract text, integer, or blob values from the N-th column of the |
| 427 | ** current row. |
| 428 | */ |
| 429 | int db_column_type(Stmt *pStmt, int N){ |
| 430 | return sqlite3_column_type(pStmt->pStmt, N); |
| 431 | } |
| 432 | int db_column_bytes(Stmt *pStmt, int N){ |
| 433 | return sqlite3_column_bytes(pStmt->pStmt, N); |
| 434 | } |
| 435 | int db_column_int(Stmt *pStmt, int N){ |
| 436 | return sqlite3_column_int(pStmt->pStmt, N); |
| @@ -486,10 +489,50 @@ | |
| 489 | while( (rc = db_step(pStmt))==SQLITE_ROW ){} |
| 490 | rc = db_reset(pStmt); |
| 491 | db_check_result(rc); |
| 492 | return rc; |
| 493 | } |
| 494 | |
| 495 | /* |
| 496 | ** Print the output of one or more SQL queries on standard output. |
| 497 | ** This routine is used for debugging purposes only. |
| 498 | */ |
| 499 | int db_debug(const char *zSql, ...){ |
| 500 | Blob sql; |
| 501 | int rc = SQLITE_OK; |
| 502 | va_list ap; |
| 503 | const char *z, *zEnd; |
| 504 | sqlite3_stmt *pStmt; |
| 505 | blob_init(&sql, 0, 0); |
| 506 | va_start(ap, zSql); |
| 507 | blob_vappendf(&sql, zSql, ap); |
| 508 | va_end(ap); |
| 509 | z = blob_str(&sql); |
| 510 | while( rc==SQLITE_OK && z[0] ){ |
| 511 | pStmt = 0; |
| 512 | rc = sqlite3_prepare_v2(g.db, z, -1, &pStmt, &zEnd); |
| 513 | if( rc!=SQLITE_OK ) break; |
| 514 | if( pStmt ){ |
| 515 | int nRow = 0; |
| 516 | db.nPrepare++; |
| 517 | while( sqlite3_step(pStmt)==SQLITE_ROW ){ |
| 518 | int i, n; |
| 519 | if( nRow++ > 0 ) fossil_print("\n"); |
| 520 | n = sqlite3_column_count(pStmt); |
| 521 | for(i=0; i<n; i++){ |
| 522 | fossil_print("%s = %s\n", sqlite3_column_name(pStmt, i), |
| 523 | sqlite3_column_text(pStmt,i)); |
| 524 | } |
| 525 | } |
| 526 | rc = sqlite3_finalize(pStmt); |
| 527 | if( rc ) db_err("%s: {%.*s}", sqlite3_errmsg(g.db), (int)(zEnd-z), z); |
| 528 | } |
| 529 | z = zEnd; |
| 530 | } |
| 531 | blob_reset(&sql); |
| 532 | return rc; |
| 533 | } |
| 534 | |
| 535 | /* |
| 536 | ** Execute multiple SQL statements. |
| 537 | */ |
| 538 | int db_multi_exec(const char *zSql, ...){ |
| @@ -722,11 +765,11 @@ | |
| 765 | arg = (const char*)sqlite3_value_text(argv[0]); |
| 766 | if(!arg){ |
| 767 | sqlite3_result_error(context, "Expecting a STRING argument", -1); |
| 768 | }else{ |
| 769 | int rid; |
| 770 | type = (2==argc) ? (const char*)sqlite3_value_text(argv[1]) : 0; |
| 771 | if(!type) type = "ci"; |
| 772 | rid = symbolic_name_to_rid( arg, type ); |
| 773 | if(rid<0){ |
| 774 | sqlite3_result_error(context, "Symbolic name is ambiguous.", -1); |
| 775 | }else if(0==rid){ |
| 776 |
+4
-4
| --- src/descendants.c | ||
| +++ src/descendants.c | ||
| @@ -289,14 +289,14 @@ | ||
| 289 | 289 | } |
| 290 | 290 | |
| 291 | 291 | /* |
| 292 | 292 | ** COMMAND: descendants* |
| 293 | 293 | ** |
| 294 | -** Usage: %fossil descendants ?BASELINE-ID? ?OPTIONS? | |
| 294 | +** Usage: %fossil descendants ?CHECKIN? ?OPTIONS? | |
| 295 | 295 | ** |
| 296 | -** Find all leaf descendants of the baseline specified or if the argument | |
| 297 | -** is omitted, of the baseline currently checked out. | |
| 296 | +** Find all leaf descendants of the checkin specified or if the argument | |
| 297 | +** is omitted, of the checkin currently checked out. | |
| 298 | 298 | ** |
| 299 | 299 | ** Options: |
| 300 | 300 | ** -R|--repository FILE Extract info from repository FILE |
| 301 | 301 | ** -W|--width <num> Width of lines (default is to auto-detect). |
| 302 | 302 | ** Must be >20 or 0 (= no limit, resulting in a |
| @@ -334,11 +334,11 @@ | ||
| 334 | 334 | "%s" |
| 335 | 335 | " AND event.objid IN (SELECT rid FROM leaves)" |
| 336 | 336 | " ORDER BY event.mtime DESC", |
| 337 | 337 | timeline_query_for_tty() |
| 338 | 338 | ); |
| 339 | - print_timeline(&q, -20, width, 0); | |
| 339 | + print_timeline(&q, 0, width, 0); | |
| 340 | 340 | db_finalize(&q); |
| 341 | 341 | } |
| 342 | 342 | |
| 343 | 343 | /* |
| 344 | 344 | ** COMMAND: leaves* |
| 345 | 345 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -289,14 +289,14 @@ | |
| 289 | } |
| 290 | |
| 291 | /* |
| 292 | ** COMMAND: descendants* |
| 293 | ** |
| 294 | ** Usage: %fossil descendants ?BASELINE-ID? ?OPTIONS? |
| 295 | ** |
| 296 | ** Find all leaf descendants of the baseline specified or if the argument |
| 297 | ** is omitted, of the baseline currently checked out. |
| 298 | ** |
| 299 | ** Options: |
| 300 | ** -R|--repository FILE Extract info from repository FILE |
| 301 | ** -W|--width <num> Width of lines (default is to auto-detect). |
| 302 | ** Must be >20 or 0 (= no limit, resulting in a |
| @@ -334,11 +334,11 @@ | |
| 334 | "%s" |
| 335 | " AND event.objid IN (SELECT rid FROM leaves)" |
| 336 | " ORDER BY event.mtime DESC", |
| 337 | timeline_query_for_tty() |
| 338 | ); |
| 339 | print_timeline(&q, -20, width, 0); |
| 340 | db_finalize(&q); |
| 341 | } |
| 342 | |
| 343 | /* |
| 344 | ** COMMAND: leaves* |
| 345 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -289,14 +289,14 @@ | |
| 289 | } |
| 290 | |
| 291 | /* |
| 292 | ** COMMAND: descendants* |
| 293 | ** |
| 294 | ** Usage: %fossil descendants ?CHECKIN? ?OPTIONS? |
| 295 | ** |
| 296 | ** Find all leaf descendants of the checkin specified or if the argument |
| 297 | ** is omitted, of the checkin currently checked out. |
| 298 | ** |
| 299 | ** Options: |
| 300 | ** -R|--repository FILE Extract info from repository FILE |
| 301 | ** -W|--width <num> Width of lines (default is to auto-detect). |
| 302 | ** Must be >20 or 0 (= no limit, resulting in a |
| @@ -334,11 +334,11 @@ | |
| 334 | "%s" |
| 335 | " AND event.objid IN (SELECT rid FROM leaves)" |
| 336 | " ORDER BY event.mtime DESC", |
| 337 | timeline_query_for_tty() |
| 338 | ); |
| 339 | print_timeline(&q, 0, width, 0); |
| 340 | db_finalize(&q); |
| 341 | } |
| 342 | |
| 343 | /* |
| 344 | ** COMMAND: leaves* |
| 345 |
+1
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -495,10 +495,11 @@ | ||
| 495 | 495 | @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz) |
| 496 | 496 | if( srcid ){ |
| 497 | 497 | @ srcid=%d(srcid) |
| 498 | 498 | } |
| 499 | 499 | } |
| 500 | + tag_private_status(frid); | |
| 500 | 501 | @ </td></tr> |
| 501 | 502 | } |
| 502 | 503 | db_finalize(&q); |
| 503 | 504 | if( pGraph ){ |
| 504 | 505 | graph_finish(pGraph, 0); |
| 505 | 506 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -495,10 +495,11 @@ | |
| 495 | @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz) |
| 496 | if( srcid ){ |
| 497 | @ srcid=%d(srcid) |
| 498 | } |
| 499 | } |
| 500 | @ </td></tr> |
| 501 | } |
| 502 | db_finalize(&q); |
| 503 | if( pGraph ){ |
| 504 | graph_finish(pGraph, 0); |
| 505 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -495,10 +495,11 @@ | |
| 495 | @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz) |
| 496 | if( srcid ){ |
| 497 | @ srcid=%d(srcid) |
| 498 | } |
| 499 | } |
| 500 | tag_private_status(frid); |
| 501 | @ </td></tr> |
| 502 | } |
| 503 | db_finalize(&q); |
| 504 | if( pGraph ){ |
| 505 | graph_finish(pGraph, 0); |
| 506 |
-3
| --- src/foci.c | ||
| +++ src/foci.c | ||
| @@ -104,14 +104,11 @@ | ||
| 104 | 104 | |
| 105 | 105 | /* |
| 106 | 106 | ** Open a new focivfs cursor. |
| 107 | 107 | */ |
| 108 | 108 | static int fociOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ |
| 109 | - FociTable *pTab = (FociTable *)pVTab; | |
| 110 | 109 | FociCursor *pCsr; |
| 111 | - int rc; | |
| 112 | - | |
| 113 | 110 | pCsr = (FociCursor *)sqlite3_malloc(sizeof(FociCursor)); |
| 114 | 111 | memset(pCsr, 0, sizeof(FociCursor)); |
| 115 | 112 | pCsr->base.pVtab = pVTab; |
| 116 | 113 | *ppCursor = (sqlite3_vtab_cursor *)pCsr; |
| 117 | 114 | return SQLITE_OK; |
| 118 | 115 |
| --- src/foci.c | |
| +++ src/foci.c | |
| @@ -104,14 +104,11 @@ | |
| 104 | |
| 105 | /* |
| 106 | ** Open a new focivfs cursor. |
| 107 | */ |
| 108 | static int fociOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ |
| 109 | FociTable *pTab = (FociTable *)pVTab; |
| 110 | FociCursor *pCsr; |
| 111 | int rc; |
| 112 | |
| 113 | pCsr = (FociCursor *)sqlite3_malloc(sizeof(FociCursor)); |
| 114 | memset(pCsr, 0, sizeof(FociCursor)); |
| 115 | pCsr->base.pVtab = pVTab; |
| 116 | *ppCursor = (sqlite3_vtab_cursor *)pCsr; |
| 117 | return SQLITE_OK; |
| 118 |
| --- src/foci.c | |
| +++ src/foci.c | |
| @@ -104,14 +104,11 @@ | |
| 104 | |
| 105 | /* |
| 106 | ** Open a new focivfs cursor. |
| 107 | */ |
| 108 | static int fociOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ |
| 109 | FociCursor *pCsr; |
| 110 | pCsr = (FociCursor *)sqlite3_malloc(sizeof(FociCursor)); |
| 111 | memset(pCsr, 0, sizeof(FociCursor)); |
| 112 | pCsr->base.pVtab = pVTab; |
| 113 | *ppCursor = (sqlite3_vtab_cursor *)pCsr; |
| 114 | return SQLITE_OK; |
| 115 |
+6
-1
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -931,10 +931,11 @@ | ||
| 931 | 931 | }else{ |
| 932 | 932 | @ tags: %h(zTagList), |
| 933 | 933 | } |
| 934 | 934 | @ date: |
| 935 | 935 | hyperlink_to_date(zDate, ")"); |
| 936 | + tag_private_status(rid); | |
| 936 | 937 | } |
| 937 | 938 | db_finalize(&q); |
| 938 | 939 | } |
| 939 | 940 | |
| 940 | 941 | |
| @@ -1203,19 +1204,20 @@ | ||
| 1203 | 1204 | }else{ |
| 1204 | 1205 | @ <li>File |
| 1205 | 1206 | } |
| 1206 | 1207 | objType |= OBJTYPE_CONTENT; |
| 1207 | 1208 | @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 1209 | + tag_private_status(rid); | |
| 1208 | 1210 | if( showDetail ){ |
| 1209 | 1211 | @ <ul> |
| 1210 | 1212 | } |
| 1211 | 1213 | prevName = fossil_strdup(zName); |
| 1212 | 1214 | } |
| 1213 | 1215 | if( showDetail ){ |
| 1214 | 1216 | @ <li> |
| 1215 | 1217 | hyperlink_to_date(zDate,""); |
| 1216 | - @ — part of check-in | |
| 1218 | + @ — part of checkin | |
| 1217 | 1219 | hyperlink_to_uuid(zVers); |
| 1218 | 1220 | }else{ |
| 1219 | 1221 | @ — part of checkin |
| 1220 | 1222 | hyperlink_to_uuid(zVers); |
| 1221 | 1223 | @ at |
| @@ -1314,10 +1316,11 @@ | ||
| 1314 | 1316 | hyperlink_to_user(zUser,zDate," on"); |
| 1315 | 1317 | hyperlink_to_date(zDate, "."); |
| 1316 | 1318 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1317 | 1319 | blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 1318 | 1320 | } |
| 1321 | + tag_private_status(rid); | |
| 1319 | 1322 | cnt++; |
| 1320 | 1323 | } |
| 1321 | 1324 | db_finalize(&q); |
| 1322 | 1325 | } |
| 1323 | 1326 | db_prepare(&q, |
| @@ -1357,17 +1360,19 @@ | ||
| 1357 | 1360 | hyperlink_to_date(zDate,"."); |
| 1358 | 1361 | cnt++; |
| 1359 | 1362 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1360 | 1363 | blob_append(pDownloadName, zFilename, -1); |
| 1361 | 1364 | } |
| 1365 | + tag_private_status(rid); | |
| 1362 | 1366 | } |
| 1363 | 1367 | db_finalize(&q); |
| 1364 | 1368 | if( cnt==0 ){ |
| 1365 | 1369 | @ Control artifact. |
| 1366 | 1370 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1367 | 1371 | blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 1368 | 1372 | } |
| 1373 | + tag_private_status(rid); | |
| 1369 | 1374 | } |
| 1370 | 1375 | return objType; |
| 1371 | 1376 | } |
| 1372 | 1377 | |
| 1373 | 1378 | |
| 1374 | 1379 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -931,10 +931,11 @@ | |
| 931 | }else{ |
| 932 | @ tags: %h(zTagList), |
| 933 | } |
| 934 | @ date: |
| 935 | hyperlink_to_date(zDate, ")"); |
| 936 | } |
| 937 | db_finalize(&q); |
| 938 | } |
| 939 | |
| 940 | |
| @@ -1203,19 +1204,20 @@ | |
| 1203 | }else{ |
| 1204 | @ <li>File |
| 1205 | } |
| 1206 | objType |= OBJTYPE_CONTENT; |
| 1207 | @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 1208 | if( showDetail ){ |
| 1209 | @ <ul> |
| 1210 | } |
| 1211 | prevName = fossil_strdup(zName); |
| 1212 | } |
| 1213 | if( showDetail ){ |
| 1214 | @ <li> |
| 1215 | hyperlink_to_date(zDate,""); |
| 1216 | @ — part of check-in |
| 1217 | hyperlink_to_uuid(zVers); |
| 1218 | }else{ |
| 1219 | @ — part of checkin |
| 1220 | hyperlink_to_uuid(zVers); |
| 1221 | @ at |
| @@ -1314,10 +1316,11 @@ | |
| 1314 | hyperlink_to_user(zUser,zDate," on"); |
| 1315 | hyperlink_to_date(zDate, "."); |
| 1316 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1317 | blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 1318 | } |
| 1319 | cnt++; |
| 1320 | } |
| 1321 | db_finalize(&q); |
| 1322 | } |
| 1323 | db_prepare(&q, |
| @@ -1357,17 +1360,19 @@ | |
| 1357 | hyperlink_to_date(zDate,"."); |
| 1358 | cnt++; |
| 1359 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1360 | blob_append(pDownloadName, zFilename, -1); |
| 1361 | } |
| 1362 | } |
| 1363 | db_finalize(&q); |
| 1364 | if( cnt==0 ){ |
| 1365 | @ Control artifact. |
| 1366 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1367 | blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 1368 | } |
| 1369 | } |
| 1370 | return objType; |
| 1371 | } |
| 1372 | |
| 1373 | |
| 1374 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -931,10 +931,11 @@ | |
| 931 | }else{ |
| 932 | @ tags: %h(zTagList), |
| 933 | } |
| 934 | @ date: |
| 935 | hyperlink_to_date(zDate, ")"); |
| 936 | tag_private_status(rid); |
| 937 | } |
| 938 | db_finalize(&q); |
| 939 | } |
| 940 | |
| 941 | |
| @@ -1203,19 +1204,20 @@ | |
| 1204 | }else{ |
| 1205 | @ <li>File |
| 1206 | } |
| 1207 | objType |= OBJTYPE_CONTENT; |
| 1208 | @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 1209 | tag_private_status(rid); |
| 1210 | if( showDetail ){ |
| 1211 | @ <ul> |
| 1212 | } |
| 1213 | prevName = fossil_strdup(zName); |
| 1214 | } |
| 1215 | if( showDetail ){ |
| 1216 | @ <li> |
| 1217 | hyperlink_to_date(zDate,""); |
| 1218 | @ — part of checkin |
| 1219 | hyperlink_to_uuid(zVers); |
| 1220 | }else{ |
| 1221 | @ — part of checkin |
| 1222 | hyperlink_to_uuid(zVers); |
| 1223 | @ at |
| @@ -1314,10 +1316,11 @@ | |
| 1316 | hyperlink_to_user(zUser,zDate," on"); |
| 1317 | hyperlink_to_date(zDate, "."); |
| 1318 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1319 | blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 1320 | } |
| 1321 | tag_private_status(rid); |
| 1322 | cnt++; |
| 1323 | } |
| 1324 | db_finalize(&q); |
| 1325 | } |
| 1326 | db_prepare(&q, |
| @@ -1357,17 +1360,19 @@ | |
| 1360 | hyperlink_to_date(zDate,"."); |
| 1361 | cnt++; |
| 1362 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1363 | blob_append(pDownloadName, zFilename, -1); |
| 1364 | } |
| 1365 | tag_private_status(rid); |
| 1366 | } |
| 1367 | db_finalize(&q); |
| 1368 | if( cnt==0 ){ |
| 1369 | @ Control artifact. |
| 1370 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1371 | blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 1372 | } |
| 1373 | tag_private_status(rid); |
| 1374 | } |
| 1375 | return objType; |
| 1376 | } |
| 1377 | |
| 1378 | |
| 1379 |
+36
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -21,10 +21,11 @@ | ||
| 21 | 21 | $(SRCDIR)/bisect.c \ |
| 22 | 22 | $(SRCDIR)/blob.c \ |
| 23 | 23 | $(SRCDIR)/branch.c \ |
| 24 | 24 | $(SRCDIR)/browse.c \ |
| 25 | 25 | $(SRCDIR)/builtin.c \ |
| 26 | + $(SRCDIR)/bundle.c \ | |
| 26 | 27 | $(SRCDIR)/cache.c \ |
| 27 | 28 | $(SRCDIR)/captcha.c \ |
| 28 | 29 | $(SRCDIR)/cgi.c \ |
| 29 | 30 | $(SRCDIR)/checkin.c \ |
| 30 | 31 | $(SRCDIR)/checkout.c \ |
| @@ -87,10 +88,12 @@ | ||
| 87 | 88 | $(SRCDIR)/path.c \ |
| 88 | 89 | $(SRCDIR)/pivot.c \ |
| 89 | 90 | $(SRCDIR)/popen.c \ |
| 90 | 91 | $(SRCDIR)/pqueue.c \ |
| 91 | 92 | $(SRCDIR)/printf.c \ |
| 93 | + $(SRCDIR)/publish.c \ | |
| 94 | + $(SRCDIR)/purge.c \ | |
| 92 | 95 | $(SRCDIR)/rebuild.c \ |
| 93 | 96 | $(SRCDIR)/regexp.c \ |
| 94 | 97 | $(SRCDIR)/report.c \ |
| 95 | 98 | $(SRCDIR)/rss.c \ |
| 96 | 99 | $(SRCDIR)/schema.c \ |
| @@ -139,10 +142,11 @@ | ||
| 139 | 142 | $(OBJDIR)/bisect_.c \ |
| 140 | 143 | $(OBJDIR)/blob_.c \ |
| 141 | 144 | $(OBJDIR)/branch_.c \ |
| 142 | 145 | $(OBJDIR)/browse_.c \ |
| 143 | 146 | $(OBJDIR)/builtin_.c \ |
| 147 | + $(OBJDIR)/bundle_.c \ | |
| 144 | 148 | $(OBJDIR)/cache_.c \ |
| 145 | 149 | $(OBJDIR)/captcha_.c \ |
| 146 | 150 | $(OBJDIR)/cgi_.c \ |
| 147 | 151 | $(OBJDIR)/checkin_.c \ |
| 148 | 152 | $(OBJDIR)/checkout_.c \ |
| @@ -205,10 +209,12 @@ | ||
| 205 | 209 | $(OBJDIR)/path_.c \ |
| 206 | 210 | $(OBJDIR)/pivot_.c \ |
| 207 | 211 | $(OBJDIR)/popen_.c \ |
| 208 | 212 | $(OBJDIR)/pqueue_.c \ |
| 209 | 213 | $(OBJDIR)/printf_.c \ |
| 214 | + $(OBJDIR)/publish_.c \ | |
| 215 | + $(OBJDIR)/purge_.c \ | |
| 210 | 216 | $(OBJDIR)/rebuild_.c \ |
| 211 | 217 | $(OBJDIR)/regexp_.c \ |
| 212 | 218 | $(OBJDIR)/report_.c \ |
| 213 | 219 | $(OBJDIR)/rss_.c \ |
| 214 | 220 | $(OBJDIR)/schema_.c \ |
| @@ -254,10 +260,11 @@ | ||
| 254 | 260 | $(OBJDIR)/bisect.o \ |
| 255 | 261 | $(OBJDIR)/blob.o \ |
| 256 | 262 | $(OBJDIR)/branch.o \ |
| 257 | 263 | $(OBJDIR)/browse.o \ |
| 258 | 264 | $(OBJDIR)/builtin.o \ |
| 265 | + $(OBJDIR)/bundle.o \ | |
| 259 | 266 | $(OBJDIR)/cache.o \ |
| 260 | 267 | $(OBJDIR)/captcha.o \ |
| 261 | 268 | $(OBJDIR)/cgi.o \ |
| 262 | 269 | $(OBJDIR)/checkin.o \ |
| 263 | 270 | $(OBJDIR)/checkout.o \ |
| @@ -320,10 +327,12 @@ | ||
| 320 | 327 | $(OBJDIR)/path.o \ |
| 321 | 328 | $(OBJDIR)/pivot.o \ |
| 322 | 329 | $(OBJDIR)/popen.o \ |
| 323 | 330 | $(OBJDIR)/pqueue.o \ |
| 324 | 331 | $(OBJDIR)/printf.o \ |
| 332 | + $(OBJDIR)/publish.o \ | |
| 333 | + $(OBJDIR)/purge.o \ | |
| 325 | 334 | $(OBJDIR)/rebuild.o \ |
| 326 | 335 | $(OBJDIR)/regexp.o \ |
| 327 | 336 | $(OBJDIR)/report.o \ |
| 328 | 337 | $(OBJDIR)/rss.o \ |
| 329 | 338 | $(OBJDIR)/schema.o \ |
| @@ -478,10 +487,11 @@ | ||
| 478 | 487 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 479 | 488 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 480 | 489 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 481 | 490 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 482 | 491 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 492 | + $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \ | |
| 483 | 493 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 484 | 494 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 485 | 495 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 486 | 496 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 487 | 497 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -544,10 +554,12 @@ | ||
| 544 | 554 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 545 | 555 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 546 | 556 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 547 | 557 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 548 | 558 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 559 | + $(OBJDIR)/publish_.c:$(OBJDIR)/publish.h \ | |
| 560 | + $(OBJDIR)/purge_.c:$(OBJDIR)/purge.h \ | |
| 549 | 561 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 550 | 562 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 551 | 563 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 552 | 564 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 553 | 565 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -660,10 +672,18 @@ | ||
| 660 | 672 | |
| 661 | 673 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 662 | 674 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 663 | 675 | |
| 664 | 676 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 677 | + | |
| 678 | +$(OBJDIR)/bundle_.c: $(SRCDIR)/bundle.c $(OBJDIR)/translate | |
| 679 | + $(OBJDIR)/translate $(SRCDIR)/bundle.c >$@ | |
| 680 | + | |
| 681 | +$(OBJDIR)/bundle.o: $(OBJDIR)/bundle_.c $(OBJDIR)/bundle.h $(SRCDIR)/config.h | |
| 682 | + $(XTCC) -o $(OBJDIR)/bundle.o -c $(OBJDIR)/bundle_.c | |
| 683 | + | |
| 684 | +$(OBJDIR)/bundle.h: $(OBJDIR)/headers | |
| 665 | 685 | |
| 666 | 686 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(OBJDIR)/translate |
| 667 | 687 | $(OBJDIR)/translate $(SRCDIR)/cache.c >$@ |
| 668 | 688 | |
| 669 | 689 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1188,10 +1208,26 @@ | ||
| 1188 | 1208 | |
| 1189 | 1209 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1190 | 1210 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1191 | 1211 | |
| 1192 | 1212 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1213 | + | |
| 1214 | +$(OBJDIR)/publish_.c: $(SRCDIR)/publish.c $(OBJDIR)/translate | |
| 1215 | + $(OBJDIR)/translate $(SRCDIR)/publish.c >$@ | |
| 1216 | + | |
| 1217 | +$(OBJDIR)/publish.o: $(OBJDIR)/publish_.c $(OBJDIR)/publish.h $(SRCDIR)/config.h | |
| 1218 | + $(XTCC) -o $(OBJDIR)/publish.o -c $(OBJDIR)/publish_.c | |
| 1219 | + | |
| 1220 | +$(OBJDIR)/publish.h: $(OBJDIR)/headers | |
| 1221 | + | |
| 1222 | +$(OBJDIR)/purge_.c: $(SRCDIR)/purge.c $(OBJDIR)/translate | |
| 1223 | + $(OBJDIR)/translate $(SRCDIR)/purge.c >$@ | |
| 1224 | + | |
| 1225 | +$(OBJDIR)/purge.o: $(OBJDIR)/purge_.c $(OBJDIR)/purge.h $(SRCDIR)/config.h | |
| 1226 | + $(XTCC) -o $(OBJDIR)/purge.o -c $(OBJDIR)/purge_.c | |
| 1227 | + | |
| 1228 | +$(OBJDIR)/purge.h: $(OBJDIR)/headers | |
| 1193 | 1229 | |
| 1194 | 1230 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(OBJDIR)/translate |
| 1195 | 1231 | $(OBJDIR)/translate $(SRCDIR)/rebuild.c >$@ |
| 1196 | 1232 | |
| 1197 | 1233 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1198 | 1234 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -21,10 +21,11 @@ | |
| 21 | $(SRCDIR)/bisect.c \ |
| 22 | $(SRCDIR)/blob.c \ |
| 23 | $(SRCDIR)/branch.c \ |
| 24 | $(SRCDIR)/browse.c \ |
| 25 | $(SRCDIR)/builtin.c \ |
| 26 | $(SRCDIR)/cache.c \ |
| 27 | $(SRCDIR)/captcha.c \ |
| 28 | $(SRCDIR)/cgi.c \ |
| 29 | $(SRCDIR)/checkin.c \ |
| 30 | $(SRCDIR)/checkout.c \ |
| @@ -87,10 +88,12 @@ | |
| 87 | $(SRCDIR)/path.c \ |
| 88 | $(SRCDIR)/pivot.c \ |
| 89 | $(SRCDIR)/popen.c \ |
| 90 | $(SRCDIR)/pqueue.c \ |
| 91 | $(SRCDIR)/printf.c \ |
| 92 | $(SRCDIR)/rebuild.c \ |
| 93 | $(SRCDIR)/regexp.c \ |
| 94 | $(SRCDIR)/report.c \ |
| 95 | $(SRCDIR)/rss.c \ |
| 96 | $(SRCDIR)/schema.c \ |
| @@ -139,10 +142,11 @@ | |
| 139 | $(OBJDIR)/bisect_.c \ |
| 140 | $(OBJDIR)/blob_.c \ |
| 141 | $(OBJDIR)/branch_.c \ |
| 142 | $(OBJDIR)/browse_.c \ |
| 143 | $(OBJDIR)/builtin_.c \ |
| 144 | $(OBJDIR)/cache_.c \ |
| 145 | $(OBJDIR)/captcha_.c \ |
| 146 | $(OBJDIR)/cgi_.c \ |
| 147 | $(OBJDIR)/checkin_.c \ |
| 148 | $(OBJDIR)/checkout_.c \ |
| @@ -205,10 +209,12 @@ | |
| 205 | $(OBJDIR)/path_.c \ |
| 206 | $(OBJDIR)/pivot_.c \ |
| 207 | $(OBJDIR)/popen_.c \ |
| 208 | $(OBJDIR)/pqueue_.c \ |
| 209 | $(OBJDIR)/printf_.c \ |
| 210 | $(OBJDIR)/rebuild_.c \ |
| 211 | $(OBJDIR)/regexp_.c \ |
| 212 | $(OBJDIR)/report_.c \ |
| 213 | $(OBJDIR)/rss_.c \ |
| 214 | $(OBJDIR)/schema_.c \ |
| @@ -254,10 +260,11 @@ | |
| 254 | $(OBJDIR)/bisect.o \ |
| 255 | $(OBJDIR)/blob.o \ |
| 256 | $(OBJDIR)/branch.o \ |
| 257 | $(OBJDIR)/browse.o \ |
| 258 | $(OBJDIR)/builtin.o \ |
| 259 | $(OBJDIR)/cache.o \ |
| 260 | $(OBJDIR)/captcha.o \ |
| 261 | $(OBJDIR)/cgi.o \ |
| 262 | $(OBJDIR)/checkin.o \ |
| 263 | $(OBJDIR)/checkout.o \ |
| @@ -320,10 +327,12 @@ | |
| 320 | $(OBJDIR)/path.o \ |
| 321 | $(OBJDIR)/pivot.o \ |
| 322 | $(OBJDIR)/popen.o \ |
| 323 | $(OBJDIR)/pqueue.o \ |
| 324 | $(OBJDIR)/printf.o \ |
| 325 | $(OBJDIR)/rebuild.o \ |
| 326 | $(OBJDIR)/regexp.o \ |
| 327 | $(OBJDIR)/report.o \ |
| 328 | $(OBJDIR)/rss.o \ |
| 329 | $(OBJDIR)/schema.o \ |
| @@ -478,10 +487,11 @@ | |
| 478 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 479 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 480 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 481 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 482 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 483 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 484 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 485 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 486 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 487 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -544,10 +554,12 @@ | |
| 544 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 545 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 546 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 547 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 548 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 549 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 550 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 551 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 552 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 553 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -660,10 +672,18 @@ | |
| 660 | |
| 661 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 662 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 663 | |
| 664 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 665 | |
| 666 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(OBJDIR)/translate |
| 667 | $(OBJDIR)/translate $(SRCDIR)/cache.c >$@ |
| 668 | |
| 669 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1188,10 +1208,26 @@ | |
| 1188 | |
| 1189 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1190 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1191 | |
| 1192 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1193 | |
| 1194 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(OBJDIR)/translate |
| 1195 | $(OBJDIR)/translate $(SRCDIR)/rebuild.c >$@ |
| 1196 | |
| 1197 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1198 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -21,10 +21,11 @@ | |
| 21 | $(SRCDIR)/bisect.c \ |
| 22 | $(SRCDIR)/blob.c \ |
| 23 | $(SRCDIR)/branch.c \ |
| 24 | $(SRCDIR)/browse.c \ |
| 25 | $(SRCDIR)/builtin.c \ |
| 26 | $(SRCDIR)/bundle.c \ |
| 27 | $(SRCDIR)/cache.c \ |
| 28 | $(SRCDIR)/captcha.c \ |
| 29 | $(SRCDIR)/cgi.c \ |
| 30 | $(SRCDIR)/checkin.c \ |
| 31 | $(SRCDIR)/checkout.c \ |
| @@ -87,10 +88,12 @@ | |
| 88 | $(SRCDIR)/path.c \ |
| 89 | $(SRCDIR)/pivot.c \ |
| 90 | $(SRCDIR)/popen.c \ |
| 91 | $(SRCDIR)/pqueue.c \ |
| 92 | $(SRCDIR)/printf.c \ |
| 93 | $(SRCDIR)/publish.c \ |
| 94 | $(SRCDIR)/purge.c \ |
| 95 | $(SRCDIR)/rebuild.c \ |
| 96 | $(SRCDIR)/regexp.c \ |
| 97 | $(SRCDIR)/report.c \ |
| 98 | $(SRCDIR)/rss.c \ |
| 99 | $(SRCDIR)/schema.c \ |
| @@ -139,10 +142,11 @@ | |
| 142 | $(OBJDIR)/bisect_.c \ |
| 143 | $(OBJDIR)/blob_.c \ |
| 144 | $(OBJDIR)/branch_.c \ |
| 145 | $(OBJDIR)/browse_.c \ |
| 146 | $(OBJDIR)/builtin_.c \ |
| 147 | $(OBJDIR)/bundle_.c \ |
| 148 | $(OBJDIR)/cache_.c \ |
| 149 | $(OBJDIR)/captcha_.c \ |
| 150 | $(OBJDIR)/cgi_.c \ |
| 151 | $(OBJDIR)/checkin_.c \ |
| 152 | $(OBJDIR)/checkout_.c \ |
| @@ -205,10 +209,12 @@ | |
| 209 | $(OBJDIR)/path_.c \ |
| 210 | $(OBJDIR)/pivot_.c \ |
| 211 | $(OBJDIR)/popen_.c \ |
| 212 | $(OBJDIR)/pqueue_.c \ |
| 213 | $(OBJDIR)/printf_.c \ |
| 214 | $(OBJDIR)/publish_.c \ |
| 215 | $(OBJDIR)/purge_.c \ |
| 216 | $(OBJDIR)/rebuild_.c \ |
| 217 | $(OBJDIR)/regexp_.c \ |
| 218 | $(OBJDIR)/report_.c \ |
| 219 | $(OBJDIR)/rss_.c \ |
| 220 | $(OBJDIR)/schema_.c \ |
| @@ -254,10 +260,11 @@ | |
| 260 | $(OBJDIR)/bisect.o \ |
| 261 | $(OBJDIR)/blob.o \ |
| 262 | $(OBJDIR)/branch.o \ |
| 263 | $(OBJDIR)/browse.o \ |
| 264 | $(OBJDIR)/builtin.o \ |
| 265 | $(OBJDIR)/bundle.o \ |
| 266 | $(OBJDIR)/cache.o \ |
| 267 | $(OBJDIR)/captcha.o \ |
| 268 | $(OBJDIR)/cgi.o \ |
| 269 | $(OBJDIR)/checkin.o \ |
| 270 | $(OBJDIR)/checkout.o \ |
| @@ -320,10 +327,12 @@ | |
| 327 | $(OBJDIR)/path.o \ |
| 328 | $(OBJDIR)/pivot.o \ |
| 329 | $(OBJDIR)/popen.o \ |
| 330 | $(OBJDIR)/pqueue.o \ |
| 331 | $(OBJDIR)/printf.o \ |
| 332 | $(OBJDIR)/publish.o \ |
| 333 | $(OBJDIR)/purge.o \ |
| 334 | $(OBJDIR)/rebuild.o \ |
| 335 | $(OBJDIR)/regexp.o \ |
| 336 | $(OBJDIR)/report.o \ |
| 337 | $(OBJDIR)/rss.o \ |
| 338 | $(OBJDIR)/schema.o \ |
| @@ -478,10 +487,11 @@ | |
| 487 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 488 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 489 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 490 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 491 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 492 | $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \ |
| 493 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 494 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 495 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 496 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 497 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -544,10 +554,12 @@ | |
| 554 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 555 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 556 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 557 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 558 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 559 | $(OBJDIR)/publish_.c:$(OBJDIR)/publish.h \ |
| 560 | $(OBJDIR)/purge_.c:$(OBJDIR)/purge.h \ |
| 561 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 562 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 563 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 564 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 565 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -660,10 +672,18 @@ | |
| 672 | |
| 673 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 674 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 675 | |
| 676 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 677 | |
| 678 | $(OBJDIR)/bundle_.c: $(SRCDIR)/bundle.c $(OBJDIR)/translate |
| 679 | $(OBJDIR)/translate $(SRCDIR)/bundle.c >$@ |
| 680 | |
| 681 | $(OBJDIR)/bundle.o: $(OBJDIR)/bundle_.c $(OBJDIR)/bundle.h $(SRCDIR)/config.h |
| 682 | $(XTCC) -o $(OBJDIR)/bundle.o -c $(OBJDIR)/bundle_.c |
| 683 | |
| 684 | $(OBJDIR)/bundle.h: $(OBJDIR)/headers |
| 685 | |
| 686 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(OBJDIR)/translate |
| 687 | $(OBJDIR)/translate $(SRCDIR)/cache.c >$@ |
| 688 | |
| 689 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1188,10 +1208,26 @@ | |
| 1208 | |
| 1209 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1210 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1211 | |
| 1212 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1213 | |
| 1214 | $(OBJDIR)/publish_.c: $(SRCDIR)/publish.c $(OBJDIR)/translate |
| 1215 | $(OBJDIR)/translate $(SRCDIR)/publish.c >$@ |
| 1216 | |
| 1217 | $(OBJDIR)/publish.o: $(OBJDIR)/publish_.c $(OBJDIR)/publish.h $(SRCDIR)/config.h |
| 1218 | $(XTCC) -o $(OBJDIR)/publish.o -c $(OBJDIR)/publish_.c |
| 1219 | |
| 1220 | $(OBJDIR)/publish.h: $(OBJDIR)/headers |
| 1221 | |
| 1222 | $(OBJDIR)/purge_.c: $(SRCDIR)/purge.c $(OBJDIR)/translate |
| 1223 | $(OBJDIR)/translate $(SRCDIR)/purge.c >$@ |
| 1224 | |
| 1225 | $(OBJDIR)/purge.o: $(OBJDIR)/purge_.c $(OBJDIR)/purge.h $(SRCDIR)/config.h |
| 1226 | $(XTCC) -o $(OBJDIR)/purge.o -c $(OBJDIR)/purge_.c |
| 1227 | |
| 1228 | $(OBJDIR)/purge.h: $(OBJDIR)/headers |
| 1229 | |
| 1230 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(OBJDIR)/translate |
| 1231 | $(OBJDIR)/translate $(SRCDIR)/rebuild.c >$@ |
| 1232 | |
| 1233 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1234 |
+3
| --- src/makemake.tcl | ||
| +++ src/makemake.tcl | ||
| @@ -28,10 +28,11 @@ | ||
| 28 | 28 | bisect |
| 29 | 29 | blob |
| 30 | 30 | branch |
| 31 | 31 | browse |
| 32 | 32 | builtin |
| 33 | + bundle | |
| 33 | 34 | cache |
| 34 | 35 | captcha |
| 35 | 36 | cgi |
| 36 | 37 | checkin |
| 37 | 38 | checkout |
| @@ -93,10 +94,12 @@ | ||
| 93 | 94 | path |
| 94 | 95 | pivot |
| 95 | 96 | popen |
| 96 | 97 | pqueue |
| 97 | 98 | printf |
| 99 | + publish | |
| 100 | + purge | |
| 98 | 101 | rebuild |
| 99 | 102 | regexp |
| 100 | 103 | report |
| 101 | 104 | rss |
| 102 | 105 | schema |
| 103 | 106 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -28,10 +28,11 @@ | |
| 28 | bisect |
| 29 | blob |
| 30 | branch |
| 31 | browse |
| 32 | builtin |
| 33 | cache |
| 34 | captcha |
| 35 | cgi |
| 36 | checkin |
| 37 | checkout |
| @@ -93,10 +94,12 @@ | |
| 93 | path |
| 94 | pivot |
| 95 | popen |
| 96 | pqueue |
| 97 | printf |
| 98 | rebuild |
| 99 | regexp |
| 100 | report |
| 101 | rss |
| 102 | schema |
| 103 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -28,10 +28,11 @@ | |
| 28 | bisect |
| 29 | blob |
| 30 | branch |
| 31 | browse |
| 32 | builtin |
| 33 | bundle |
| 34 | cache |
| 35 | captcha |
| 36 | cgi |
| 37 | checkin |
| 38 | checkout |
| @@ -93,10 +94,12 @@ | |
| 94 | path |
| 95 | pivot |
| 96 | popen |
| 97 | pqueue |
| 98 | printf |
| 99 | publish |
| 100 | purge |
| 101 | rebuild |
| 102 | regexp |
| 103 | report |
| 104 | rss |
| 105 | schema |
| 106 |
+9
-2
| --- src/mkversion.c | ||
| +++ src/mkversion.c | ||
| @@ -7,10 +7,11 @@ | ||
| 7 | 7 | ** |
| 8 | 8 | ** Note that the manifest.uuid and manifest files are generated by Fossil. |
| 9 | 9 | */ |
| 10 | 10 | #include <stdio.h> |
| 11 | 11 | #include <string.h> |
| 12 | +#include <stdlib.h> | |
| 12 | 13 | |
| 13 | 14 | int main(int argc, char *argv[]){ |
| 14 | 15 | FILE *m,*u,*v; |
| 15 | 16 | char *z; |
| 16 | 17 | int i, x, d; |
| @@ -17,11 +18,14 @@ | ||
| 17 | 18 | char b[1000]; |
| 18 | 19 | char vx[1000]; |
| 19 | 20 | memset(b,0,sizeof(b)); |
| 20 | 21 | memset(vx,0,sizeof(vx)); |
| 21 | 22 | u = fopen(argv[1],"r"); |
| 22 | - fgets(b, sizeof(b)-1,u); | |
| 23 | + if( fgets(b, sizeof(b)-1,u)==0 ){ | |
| 24 | + fprintf(stderr, "malformed manifest.uuid file: %s\n", argv[1]); | |
| 25 | + exit(1); | |
| 26 | + } | |
| 23 | 27 | fclose(u); |
| 24 | 28 | for(z=b; z[0] && z[0]!='\r' && z[0]!='\n'; z++){} |
| 25 | 29 | *z = 0; |
| 26 | 30 | printf("#define MANIFEST_UUID \"%s\"\n",b); |
| 27 | 31 | printf("#define MANIFEST_VERSION \"[%10.10s]\"\n",b); |
| @@ -32,11 +36,14 @@ | ||
| 32 | 36 | printf("#define MANIFEST_YEAR \"%.4s\"\n",b+2); |
| 33 | 37 | } |
| 34 | 38 | } |
| 35 | 39 | fclose(m); |
| 36 | 40 | v = fopen(argv[3],"r"); |
| 37 | - fgets(b, sizeof(b)-1,v); | |
| 41 | + if( fgets(b, sizeof(b)-1,v)==0 ){ | |
| 42 | + fprintf(stderr, "malformed VERSION file: %s\n", argv[3]); | |
| 43 | + exit(1); | |
| 44 | + } | |
| 38 | 45 | fclose(v); |
| 39 | 46 | for(z=b; z[0] && z[0]!='\r' && z[0]!='\n'; z++){} |
| 40 | 47 | *z = 0; |
| 41 | 48 | printf("#define RELEASE_VERSION \"%s\"\n", b); |
| 42 | 49 | x=0; |
| 43 | 50 |
| --- src/mkversion.c | |
| +++ src/mkversion.c | |
| @@ -7,10 +7,11 @@ | |
| 7 | ** |
| 8 | ** Note that the manifest.uuid and manifest files are generated by Fossil. |
| 9 | */ |
| 10 | #include <stdio.h> |
| 11 | #include <string.h> |
| 12 | |
| 13 | int main(int argc, char *argv[]){ |
| 14 | FILE *m,*u,*v; |
| 15 | char *z; |
| 16 | int i, x, d; |
| @@ -17,11 +18,14 @@ | |
| 17 | char b[1000]; |
| 18 | char vx[1000]; |
| 19 | memset(b,0,sizeof(b)); |
| 20 | memset(vx,0,sizeof(vx)); |
| 21 | u = fopen(argv[1],"r"); |
| 22 | fgets(b, sizeof(b)-1,u); |
| 23 | fclose(u); |
| 24 | for(z=b; z[0] && z[0]!='\r' && z[0]!='\n'; z++){} |
| 25 | *z = 0; |
| 26 | printf("#define MANIFEST_UUID \"%s\"\n",b); |
| 27 | printf("#define MANIFEST_VERSION \"[%10.10s]\"\n",b); |
| @@ -32,11 +36,14 @@ | |
| 32 | printf("#define MANIFEST_YEAR \"%.4s\"\n",b+2); |
| 33 | } |
| 34 | } |
| 35 | fclose(m); |
| 36 | v = fopen(argv[3],"r"); |
| 37 | fgets(b, sizeof(b)-1,v); |
| 38 | fclose(v); |
| 39 | for(z=b; z[0] && z[0]!='\r' && z[0]!='\n'; z++){} |
| 40 | *z = 0; |
| 41 | printf("#define RELEASE_VERSION \"%s\"\n", b); |
| 42 | x=0; |
| 43 |
| --- src/mkversion.c | |
| +++ src/mkversion.c | |
| @@ -7,10 +7,11 @@ | |
| 7 | ** |
| 8 | ** Note that the manifest.uuid and manifest files are generated by Fossil. |
| 9 | */ |
| 10 | #include <stdio.h> |
| 11 | #include <string.h> |
| 12 | #include <stdlib.h> |
| 13 | |
| 14 | int main(int argc, char *argv[]){ |
| 15 | FILE *m,*u,*v; |
| 16 | char *z; |
| 17 | int i, x, d; |
| @@ -17,11 +18,14 @@ | |
| 18 | char b[1000]; |
| 19 | char vx[1000]; |
| 20 | memset(b,0,sizeof(b)); |
| 21 | memset(vx,0,sizeof(vx)); |
| 22 | u = fopen(argv[1],"r"); |
| 23 | if( fgets(b, sizeof(b)-1,u)==0 ){ |
| 24 | fprintf(stderr, "malformed manifest.uuid file: %s\n", argv[1]); |
| 25 | exit(1); |
| 26 | } |
| 27 | fclose(u); |
| 28 | for(z=b; z[0] && z[0]!='\r' && z[0]!='\n'; z++){} |
| 29 | *z = 0; |
| 30 | printf("#define MANIFEST_UUID \"%s\"\n",b); |
| 31 | printf("#define MANIFEST_VERSION \"[%10.10s]\"\n",b); |
| @@ -32,11 +36,14 @@ | |
| 36 | printf("#define MANIFEST_YEAR \"%.4s\"\n",b+2); |
| 37 | } |
| 38 | } |
| 39 | fclose(m); |
| 40 | v = fopen(argv[3],"r"); |
| 41 | if( fgets(b, sizeof(b)-1,v)==0 ){ |
| 42 | fprintf(stderr, "malformed VERSION file: %s\n", argv[3]); |
| 43 | exit(1); |
| 44 | } |
| 45 | fclose(v); |
| 46 | for(z=b; z[0] && z[0]!='\r' && z[0]!='\n'; z++){} |
| 47 | *z = 0; |
| 48 | printf("#define RELEASE_VERSION \"%s\"\n", b); |
| 49 | x=0; |
| 50 |
+265
-35
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -42,10 +42,44 @@ | ||
| 42 | 42 | if( z[7]!='-') return 0; |
| 43 | 43 | if( !fossil_isdigit(z[8]) ) return 0; |
| 44 | 44 | if( !fossil_isdigit(z[9]) ) return 0; |
| 45 | 45 | return 1; |
| 46 | 46 | } |
| 47 | + | |
| 48 | +/* | |
| 49 | +** Return the RID that is the "root" of the branch that contains | |
| 50 | +** check-in "rid" if inBranch==0 or the first check-in in the branch | |
| 51 | +** if inBranch==1. | |
| 52 | +*/ | |
| 53 | +int start_of_branch(int rid, int inBranch){ | |
| 54 | + Stmt q; | |
| 55 | + int rc; | |
| 56 | + char *zBr; | |
| 57 | + zBr = db_text("trunk","SELECT value FROM tagxref" | |
| 58 | + " WHERE rid=%d AND tagid=%d" | |
| 59 | + " AND tagtype>0", | |
| 60 | + rid, TAG_BRANCH); | |
| 61 | + db_prepare(&q, | |
| 62 | + "SELECT pid, EXISTS(SELECT 1 FROM tagxref" | |
| 63 | + " WHERE tagid=%d AND tagtype>0" | |
| 64 | + " AND value=%Q AND rid=plink.pid)" | |
| 65 | + " FROM plink" | |
| 66 | + " WHERE cid=:cid AND isprim", | |
| 67 | + TAG_BRANCH, zBr | |
| 68 | + ); | |
| 69 | + fossil_free(zBr); | |
| 70 | + do{ | |
| 71 | + db_reset(&q); | |
| 72 | + db_bind_int(&q, ":cid", rid); | |
| 73 | + rc = db_step(&q); | |
| 74 | + if( rc!=SQLITE_ROW ) break; | |
| 75 | + if( inBranch && db_column_int(&q,1)==0 ) break; | |
| 76 | + rid = db_column_int(&q, 0); | |
| 77 | + }while( db_column_int(&q, 1)==1 && rid>0 ); | |
| 78 | + db_finalize(&q); | |
| 79 | + return rid; | |
| 80 | +} | |
| 47 | 81 | |
| 48 | 82 | /* |
| 49 | 83 | ** Convert a symbolic name into a RID. Acceptable forms: |
| 50 | 84 | ** |
| 51 | 85 | ** * SHA1 hash |
| @@ -66,20 +100,28 @@ | ||
| 66 | 100 | ** Return the RID of the matching artifact. Or return 0 if the name does not |
| 67 | 101 | ** match any known object. Or return -1 if the name is ambiguous. |
| 68 | 102 | ** |
| 69 | 103 | ** The zType parameter specifies the type of artifact: ci, t, w, e, g. |
| 70 | 104 | ** If zType is NULL or "" or "*" then any type of artifact will serve. |
| 105 | +** If zType is "br" then find the first check-in of the named branch | |
| 106 | +** rather than the last. | |
| 71 | 107 | ** zType is "ci" in most use cases since we are usually searching for |
| 72 | 108 | ** a check-in. |
| 73 | 109 | */ |
| 74 | 110 | int symbolic_name_to_rid(const char *zTag, const char *zType){ |
| 75 | 111 | int vid; |
| 76 | 112 | int rid = 0; |
| 77 | 113 | int nTag; |
| 78 | 114 | int i; |
| 115 | + int startOfBranch = 0; | |
| 79 | 116 | |
| 80 | - if( zType==0 || zType[0]==0 ) zType = "*"; | |
| 117 | + if( zType==0 || zType[0]==0 ){ | |
| 118 | + zType = "*"; | |
| 119 | + }else if( zType[0]=='b' ){ | |
| 120 | + zType = "ci"; | |
| 121 | + startOfBranch = 1; | |
| 122 | + } | |
| 81 | 123 | if( zTag==0 || zTag[0]==0 ) return 0; |
| 82 | 124 | |
| 83 | 125 | /* special keyword: "tip" */ |
| 84 | 126 | if( fossil_strcmp(zTag, "tip")==0 && (zType[0]=='*' || zType[0]=='c') ){ |
| 85 | 127 | rid = db_int(0, |
| @@ -151,41 +193,18 @@ | ||
| 151 | 193 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 152 | 194 | " AND event.objid=tagxref.rid " |
| 153 | 195 | " AND event.type GLOB '%q'", |
| 154 | 196 | &zTag[4], zType |
| 155 | 197 | ); |
| 198 | + if( startOfBranch ) rid = start_of_branch(rid,1); | |
| 156 | 199 | return rid; |
| 157 | 200 | } |
| 158 | 201 | |
| 159 | 202 | /* root:TAG -> The origin of the branch */ |
| 160 | 203 | if( memcmp(zTag, "root:", 5)==0 ){ |
| 161 | - Stmt q; | |
| 162 | - int rc; | |
| 163 | - char *zBr; | |
| 164 | 204 | rid = symbolic_name_to_rid(zTag+5, zType); |
| 165 | - zBr = db_text("trunk","SELECT value FROM tagxref" | |
| 166 | - " WHERE rid=%d AND tagid=%d" | |
| 167 | - " AND tagtype>0", | |
| 168 | - rid, TAG_BRANCH); | |
| 169 | - db_prepare(&q, | |
| 170 | - "SELECT pid, EXISTS(SELECT 1 FROM tagxref" | |
| 171 | - " WHERE tagid=%d AND tagtype>0" | |
| 172 | - " AND value=%Q AND rid=plink.pid)" | |
| 173 | - " FROM plink" | |
| 174 | - " WHERE cid=:cid AND isprim", | |
| 175 | - TAG_BRANCH, zBr | |
| 176 | - ); | |
| 177 | - fossil_free(zBr); | |
| 178 | - do{ | |
| 179 | - db_reset(&q); | |
| 180 | - db_bind_int(&q, ":cid", rid); | |
| 181 | - rc = db_step(&q); | |
| 182 | - if( rc!=SQLITE_ROW ) break; | |
| 183 | - rid = db_column_int(&q, 0); | |
| 184 | - }while( db_column_int(&q, 1)==1 && rid>0 ); | |
| 185 | - db_finalize(&q); | |
| 186 | - return rid; | |
| 205 | + return start_of_branch(rid, 0); | |
| 187 | 206 | } |
| 188 | 207 | |
| 189 | 208 | /* symbolic-name ":" date-time */ |
| 190 | 209 | nTag = strlen(zTag); |
| 191 | 210 | for(i=0; i<nTag-10 && zTag[i]!=':'; i++){} |
| @@ -245,11 +264,14 @@ | ||
| 245 | 264 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 246 | 265 | " AND event.objid=tagxref.rid " |
| 247 | 266 | " AND event.type GLOB '%q'", |
| 248 | 267 | zTag, zType |
| 249 | 268 | ); |
| 250 | - if( rid>0 ) return rid; | |
| 269 | + if( rid>0 ){ | |
| 270 | + if( startOfBranch ) rid = start_of_branch(rid,1); | |
| 271 | + return rid; | |
| 272 | + } | |
| 251 | 273 | |
| 252 | 274 | /* Undocumented: numeric tags get translated directly into the RID */ |
| 253 | 275 | if( memcmp(zTag, "rid:", 4)==0 ){ |
| 254 | 276 | zTag += 4; |
| 255 | 277 | for(i=0; fossil_isdigit(zTag[i]); i++){} |
| @@ -391,18 +413,15 @@ | ||
| 391 | 413 | int rid; |
| 392 | 414 | |
| 393 | 415 | if( zName==0 || zName[0]==0 ) return 0; |
| 394 | 416 | rid = symbolic_name_to_rid(zName, zType); |
| 395 | 417 | if( rid<0 ){ |
| 396 | - fossil_error(1, "ambiguous name: %s", zName); | |
| 397 | - return 0; | |
| 418 | + fossil_fatal("ambiguous name: %s", zName); | |
| 398 | 419 | }else if( rid==0 ){ |
| 399 | - fossil_error(1, "not found: %s", zName); | |
| 400 | - return 0; | |
| 401 | - }else{ | |
| 402 | - return rid; | |
| 420 | + fossil_fatal("not found: %s", zName); | |
| 403 | 421 | } |
| 422 | + return rid; | |
| 404 | 423 | } |
| 405 | 424 | int name_to_rid(const char *zName){ |
| 406 | 425 | return name_to_typed_rid(zName, "*"); |
| 407 | 426 | } |
| 408 | 427 | |
| @@ -505,11 +524,11 @@ | ||
| 505 | 524 | } |
| 506 | 525 | |
| 507 | 526 | /* |
| 508 | 527 | ** Generate a description of artifact "rid" |
| 509 | 528 | */ |
| 510 | -static void whatis_rid(int rid, int verboseFlag){ | |
| 529 | +void whatis_rid(int rid, int verboseFlag){ | |
| 511 | 530 | Stmt q; |
| 512 | 531 | int cnt; |
| 513 | 532 | |
| 514 | 533 | /* Basic information about the object. */ |
| 515 | 534 | db_prepare(&q, |
| @@ -657,21 +676,23 @@ | ||
| 657 | 676 | void whatis_cmd(void){ |
| 658 | 677 | int rid; |
| 659 | 678 | const char *zName; |
| 660 | 679 | int verboseFlag; |
| 661 | 680 | int i; |
| 681 | + const char *zType = 0; | |
| 662 | 682 | db_find_and_open_repository(0,0); |
| 663 | 683 | verboseFlag = find_option("verbose","v",0)!=0; |
| 684 | + zType = find_option("type",0,1); | |
| 664 | 685 | |
| 665 | 686 | /* We should be done with options.. */ |
| 666 | 687 | verify_all_options(); |
| 667 | 688 | |
| 668 | 689 | if( g.argc<3 ) usage("whatis NAME ..."); |
| 669 | 690 | for(i=2; i<g.argc; i++){ |
| 670 | 691 | zName = g.argv[i]; |
| 671 | 692 | if( i>2 ) fossil_print("%.79c\n",'-'); |
| 672 | - rid = symbolic_name_to_rid(zName, 0); | |
| 693 | + rid = symbolic_name_to_rid(zName, zType); | |
| 673 | 694 | if( rid<0 ){ |
| 674 | 695 | Stmt q; |
| 675 | 696 | int cnt = 0; |
| 676 | 697 | fossil_print("name: %s (ambiguous)\n", zName); |
| 677 | 698 | db_prepare(&q, |
| @@ -757,5 +778,214 @@ | ||
| 757 | 778 | while( db_step(&q)==SQLITE_ROW ){ |
| 758 | 779 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 759 | 780 | } |
| 760 | 781 | db_finalize(&q); |
| 761 | 782 | } |
| 783 | + | |
| 784 | +/* | |
| 785 | +** Schema for the description table | |
| 786 | +*/ | |
| 787 | +static const char zDescTab[] = | |
| 788 | +@ CREATE TEMP TABLE IF NOT EXISTS description( | |
| 789 | +@ rid INTEGER PRIMARY KEY, -- RID of the object | |
| 790 | +@ uuid TEXT, -- SHA1 hash of the object | |
| 791 | +@ ctime DATETIME, -- Time of creation | |
| 792 | +@ isPrivate BOOLEAN DEFAULT 0, -- True for unpublished artifacts | |
| 793 | +@ type TEXT, -- file, checkin, wiki, ticket, etc. | |
| 794 | +@ summary TEXT, -- Summary comment for the object | |
| 795 | +@ detail TEXT -- filename, checkin comment, etc | |
| 796 | +@ ); | |
| 797 | +; | |
| 798 | + | |
| 799 | +/* | |
| 800 | +** Create the description table if it does not already exists. | |
| 801 | +** Populate fields of this table with descriptions for all artifacts | |
| 802 | +** whose RID matches the SQL expression in zWhere. | |
| 803 | +*/ | |
| 804 | +void describe_artifacts(const char *zWhere){ | |
| 805 | + db_multi_exec("%s", zDescTab/*safe-for-%s*/); | |
| 806 | + | |
| 807 | + /* Describe checkins */ | |
| 808 | + db_multi_exec( | |
| 809 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 810 | + "SELECT blob.rid, blob.uuid, event.mtime, 'checkin',\n" | |
| 811 | + " 'checkin on ' || strftime('%%Y-%%m-%%d %%H:%%M',event.mtime)\n" | |
| 812 | + " FROM event, blob\n" | |
| 813 | + " WHERE event.objid %s AND event.type='ci'\n" | |
| 814 | + " AND event.objid=blob.rid;", | |
| 815 | + zWhere /*safe-for-%s*/ | |
| 816 | + ); | |
| 817 | + | |
| 818 | + /* Describe files */ | |
| 819 | + db_multi_exec( | |
| 820 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 821 | + "SELECT blob.rid, blob.uuid, event.mtime, 'file', 'file '||filename.name\n" | |
| 822 | + " FROM mlink, blob, event, filename\n" | |
| 823 | + " WHERE mlink.fid %s\n" | |
| 824 | + " AND mlink.mid=event.objid\n" | |
| 825 | + " AND filename.fnid=mlink.fnid\n" | |
| 826 | + " AND mlink.fid=blob.rid;", | |
| 827 | + zWhere /*safe-for-%s*/ | |
| 828 | + ); | |
| 829 | + | |
| 830 | + /* Describe tags */ | |
| 831 | + db_multi_exec( | |
| 832 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 833 | + "SELECT blob.rid, blob.uuid, tagxref.mtime, 'tag',\n" | |
| 834 | + " 'tag '||substr((SELECT uuid FROM blob WHERE rid=tagxref.rid),1,16)\n" | |
| 835 | + " FROM tagxref, blob\n" | |
| 836 | + " WHERE tagxref.srcid %s AND tagxref.srcid!=tagxref.rid\n" | |
| 837 | + " AND tagxref.srcid=blob.rid;", | |
| 838 | + zWhere /*safe-for-%s*/ | |
| 839 | + ); | |
| 840 | + | |
| 841 | + /* Cluster artifacts */ | |
| 842 | + db_multi_exec( | |
| 843 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 844 | + "SELECT blob.rid, blob.uuid, tagxref.mtime, 'cluster', 'cluster'\n" | |
| 845 | + " FROM tagxref, blob\n" | |
| 846 | + " WHERE tagxref.rid %s\n" | |
| 847 | + " AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='cluster')\n" | |
| 848 | + " AND blob.rid=tagxref.rid;", | |
| 849 | + zWhere /*safe-for-%s*/ | |
| 850 | + ); | |
| 851 | + | |
| 852 | + /* Ticket change artifacts */ | |
| 853 | + db_multi_exec( | |
| 854 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 855 | + "SELECT blob.rid, blob.uuid, tagxref.mtime, 'ticket',\n" | |
| 856 | + " 'ticket '||substr(tag.tagname,5,21)\n" | |
| 857 | + " FROM tagxref, tag, blob\n" | |
| 858 | + " WHERE tagxref.rid %s\n" | |
| 859 | + " AND tag.tagid=tagxref.tagid\n" | |
| 860 | + " AND tag.tagname GLOB 'tkt-*'" | |
| 861 | + " AND blob.rid=tagxref.rid;", | |
| 862 | + zWhere /*safe-for-%s*/ | |
| 863 | + ); | |
| 864 | + | |
| 865 | + /* Wiki edit artifacts */ | |
| 866 | + db_multi_exec( | |
| 867 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 868 | + "SELECT blob.rid, blob.uuid, tagxref.mtime, 'wiki',\n" | |
| 869 | + " printf('wiki \"%%s\"',substr(tag.tagname,6))\n" | |
| 870 | + " FROM tagxref, tag, blob\n" | |
| 871 | + " WHERE tagxref.rid %s\n" | |
| 872 | + " AND tag.tagid=tagxref.tagid\n" | |
| 873 | + " AND tag.tagname GLOB 'wiki-*'" | |
| 874 | + " AND blob.rid=tagxref.rid;", | |
| 875 | + zWhere /*safe-for-%s*/ | |
| 876 | + ); | |
| 877 | + | |
| 878 | + /* Event edit artifacts */ | |
| 879 | + db_multi_exec( | |
| 880 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 881 | + "SELECT blob.rid, blob.uuid, tagxref.mtime, 'event',\n" | |
| 882 | + " 'event '||substr(tag.tagname,7)\n" | |
| 883 | + " FROM tagxref, tag, blob\n" | |
| 884 | + " WHERE tagxref.rid %s\n" | |
| 885 | + " AND tag.tagid=tagxref.tagid\n" | |
| 886 | + " AND tag.tagname GLOB 'event-*'" | |
| 887 | + " AND blob.rid=tagxref.rid;", | |
| 888 | + zWhere /*safe-for-%s*/ | |
| 889 | + ); | |
| 890 | + | |
| 891 | + /* Attachments */ | |
| 892 | + db_multi_exec( | |
| 893 | + "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,detail)\n" | |
| 894 | + "SELECT blob.rid, blob.uuid, attachment.mtime, 'attachment',\n" | |
| 895 | + " 'attachment '||attachment.filename\n" | |
| 896 | + " FROM attachment, blob\n" | |
| 897 | + " WHERE attachment.src %s\n" | |
| 898 | + " AND blob.rid=attachment.src;", | |
| 899 | + zWhere /*safe-for-%s*/ | |
| 900 | + ); | |
| 901 | + | |
| 902 | + /* Everything else */ | |
| 903 | + db_multi_exec( | |
| 904 | + "INSERT OR IGNORE INTO description(rid,uuid,type,summary)\n" | |
| 905 | + "SELECT blob.rid, blob.uuid," | |
| 906 | + " CASE WHEN blob.size<0 THEN 'phantom' ELSE '' END,\n" | |
| 907 | + " 'unknown'\n" | |
| 908 | + " FROM blob WHERE blob.rid %s;", | |
| 909 | + zWhere /*safe-for-%s*/ | |
| 910 | + ); | |
| 911 | + | |
| 912 | + /* Mark private elements */ | |
| 913 | + db_multi_exec( | |
| 914 | + "UPDATE description SET isPrivate=1 WHERE rid IN private" | |
| 915 | + ); | |
| 916 | +} | |
| 917 | + | |
| 918 | +/* | |
| 919 | +** Print the content of the description table on stdout | |
| 920 | +*/ | |
| 921 | +int describe_artifacts_to_stdout(const char *zWhere, const char *zLabel){ | |
| 922 | + Stmt q; | |
| 923 | + int cnt = 0; | |
| 924 | + describe_artifacts(zWhere); | |
| 925 | + db_prepare(&q, | |
| 926 | + "SELECT uuid, summary, isPrivate\n" | |
| 927 | + " FROM description\n" | |
| 928 | + " ORDER BY ctime, type;" | |
| 929 | + ); | |
| 930 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 931 | + if( zLabel ){ | |
| 932 | + fossil_print("%s\n", zLabel); | |
| 933 | + zLabel = 0; | |
| 934 | + } | |
| 935 | + fossil_print(" %.16s %s", db_column_text(&q,0), db_column_text(&q,1)); | |
| 936 | + if( db_column_int(&q,2) ) fossil_print(" (unpublished)"); | |
| 937 | + fossil_print("\n"); | |
| 938 | + cnt++; | |
| 939 | + } | |
| 940 | + db_finalize(&q); | |
| 941 | + db_multi_exec("DELETE FROM description;"); | |
| 942 | + return cnt; | |
| 943 | +} | |
| 944 | + | |
| 945 | +/* | |
| 946 | +** COMMAND: test-describe-artifacts | |
| 947 | +** | |
| 948 | +** Usage: %fossil test-describe-artifacts | |
| 949 | +** | |
| 950 | +** Display a one-line description of every artifact. | |
| 951 | +*/ | |
| 952 | +void test_describe_artifacts_cmd(void){ | |
| 953 | + db_find_and_open_repository(0,0); | |
| 954 | + describe_artifacts_to_stdout("IN (SELECT rid FROM blob)", 0); | |
| 955 | +} | |
| 956 | + | |
| 957 | +/* | |
| 958 | +** COMMAND: test-unsent | |
| 959 | +** | |
| 960 | +** Usage: %fossil test-unsent | |
| 961 | +** | |
| 962 | +** Show all artifacts in the unsent table | |
| 963 | +*/ | |
| 964 | +void test_unsent_cmd(void){ | |
| 965 | + db_find_and_open_repository(0,0); | |
| 966 | + describe_artifacts_to_stdout("IN unsent", 0); | |
| 967 | +} | |
| 968 | + | |
| 969 | +/* | |
| 970 | +** COMMAND: test-unclustered | |
| 971 | +** | |
| 972 | +** Usage: %fossil test-unclustered | |
| 973 | +** | |
| 974 | +** Show all artifacts in the unclustered table | |
| 975 | +*/ | |
| 976 | +void test_unclusterd_cmd(void){ | |
| 977 | + db_find_and_open_repository(0,0); | |
| 978 | + describe_artifacts_to_stdout("IN unclustered", 0); | |
| 979 | +} | |
| 980 | + | |
| 981 | +/* | |
| 982 | +** COMMAND: test-phantoms | |
| 983 | +** | |
| 984 | +** Usage: %fossil test-phantoms | |
| 985 | +** | |
| 986 | +** Show all phantom artifacts | |
| 987 | +*/ | |
| 988 | +void test_phatoms_cmd(void){ | |
| 989 | + db_find_and_open_repository(0,0); | |
| 990 | + describe_artifacts_to_stdout("IN (SELECT rid FROM blob WHERE size<0)", 0); | |
| 991 | +} | |
| 762 | 992 | |
| 763 | 993 | ADDED src/publish.c |
| 764 | 994 | ADDED src/purge.c |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -42,10 +42,44 @@ | |
| 42 | if( z[7]!='-') return 0; |
| 43 | if( !fossil_isdigit(z[8]) ) return 0; |
| 44 | if( !fossil_isdigit(z[9]) ) return 0; |
| 45 | return 1; |
| 46 | } |
| 47 | |
| 48 | /* |
| 49 | ** Convert a symbolic name into a RID. Acceptable forms: |
| 50 | ** |
| 51 | ** * SHA1 hash |
| @@ -66,20 +100,28 @@ | |
| 66 | ** Return the RID of the matching artifact. Or return 0 if the name does not |
| 67 | ** match any known object. Or return -1 if the name is ambiguous. |
| 68 | ** |
| 69 | ** The zType parameter specifies the type of artifact: ci, t, w, e, g. |
| 70 | ** If zType is NULL or "" or "*" then any type of artifact will serve. |
| 71 | ** zType is "ci" in most use cases since we are usually searching for |
| 72 | ** a check-in. |
| 73 | */ |
| 74 | int symbolic_name_to_rid(const char *zTag, const char *zType){ |
| 75 | int vid; |
| 76 | int rid = 0; |
| 77 | int nTag; |
| 78 | int i; |
| 79 | |
| 80 | if( zType==0 || zType[0]==0 ) zType = "*"; |
| 81 | if( zTag==0 || zTag[0]==0 ) return 0; |
| 82 | |
| 83 | /* special keyword: "tip" */ |
| 84 | if( fossil_strcmp(zTag, "tip")==0 && (zType[0]=='*' || zType[0]=='c') ){ |
| 85 | rid = db_int(0, |
| @@ -151,41 +193,18 @@ | |
| 151 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 152 | " AND event.objid=tagxref.rid " |
| 153 | " AND event.type GLOB '%q'", |
| 154 | &zTag[4], zType |
| 155 | ); |
| 156 | return rid; |
| 157 | } |
| 158 | |
| 159 | /* root:TAG -> The origin of the branch */ |
| 160 | if( memcmp(zTag, "root:", 5)==0 ){ |
| 161 | Stmt q; |
| 162 | int rc; |
| 163 | char *zBr; |
| 164 | rid = symbolic_name_to_rid(zTag+5, zType); |
| 165 | zBr = db_text("trunk","SELECT value FROM tagxref" |
| 166 | " WHERE rid=%d AND tagid=%d" |
| 167 | " AND tagtype>0", |
| 168 | rid, TAG_BRANCH); |
| 169 | db_prepare(&q, |
| 170 | "SELECT pid, EXISTS(SELECT 1 FROM tagxref" |
| 171 | " WHERE tagid=%d AND tagtype>0" |
| 172 | " AND value=%Q AND rid=plink.pid)" |
| 173 | " FROM plink" |
| 174 | " WHERE cid=:cid AND isprim", |
| 175 | TAG_BRANCH, zBr |
| 176 | ); |
| 177 | fossil_free(zBr); |
| 178 | do{ |
| 179 | db_reset(&q); |
| 180 | db_bind_int(&q, ":cid", rid); |
| 181 | rc = db_step(&q); |
| 182 | if( rc!=SQLITE_ROW ) break; |
| 183 | rid = db_column_int(&q, 0); |
| 184 | }while( db_column_int(&q, 1)==1 && rid>0 ); |
| 185 | db_finalize(&q); |
| 186 | return rid; |
| 187 | } |
| 188 | |
| 189 | /* symbolic-name ":" date-time */ |
| 190 | nTag = strlen(zTag); |
| 191 | for(i=0; i<nTag-10 && zTag[i]!=':'; i++){} |
| @@ -245,11 +264,14 @@ | |
| 245 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 246 | " AND event.objid=tagxref.rid " |
| 247 | " AND event.type GLOB '%q'", |
| 248 | zTag, zType |
| 249 | ); |
| 250 | if( rid>0 ) return rid; |
| 251 | |
| 252 | /* Undocumented: numeric tags get translated directly into the RID */ |
| 253 | if( memcmp(zTag, "rid:", 4)==0 ){ |
| 254 | zTag += 4; |
| 255 | for(i=0; fossil_isdigit(zTag[i]); i++){} |
| @@ -391,18 +413,15 @@ | |
| 391 | int rid; |
| 392 | |
| 393 | if( zName==0 || zName[0]==0 ) return 0; |
| 394 | rid = symbolic_name_to_rid(zName, zType); |
| 395 | if( rid<0 ){ |
| 396 | fossil_error(1, "ambiguous name: %s", zName); |
| 397 | return 0; |
| 398 | }else if( rid==0 ){ |
| 399 | fossil_error(1, "not found: %s", zName); |
| 400 | return 0; |
| 401 | }else{ |
| 402 | return rid; |
| 403 | } |
| 404 | } |
| 405 | int name_to_rid(const char *zName){ |
| 406 | return name_to_typed_rid(zName, "*"); |
| 407 | } |
| 408 | |
| @@ -505,11 +524,11 @@ | |
| 505 | } |
| 506 | |
| 507 | /* |
| 508 | ** Generate a description of artifact "rid" |
| 509 | */ |
| 510 | static void whatis_rid(int rid, int verboseFlag){ |
| 511 | Stmt q; |
| 512 | int cnt; |
| 513 | |
| 514 | /* Basic information about the object. */ |
| 515 | db_prepare(&q, |
| @@ -657,21 +676,23 @@ | |
| 657 | void whatis_cmd(void){ |
| 658 | int rid; |
| 659 | const char *zName; |
| 660 | int verboseFlag; |
| 661 | int i; |
| 662 | db_find_and_open_repository(0,0); |
| 663 | verboseFlag = find_option("verbose","v",0)!=0; |
| 664 | |
| 665 | /* We should be done with options.. */ |
| 666 | verify_all_options(); |
| 667 | |
| 668 | if( g.argc<3 ) usage("whatis NAME ..."); |
| 669 | for(i=2; i<g.argc; i++){ |
| 670 | zName = g.argv[i]; |
| 671 | if( i>2 ) fossil_print("%.79c\n",'-'); |
| 672 | rid = symbolic_name_to_rid(zName, 0); |
| 673 | if( rid<0 ){ |
| 674 | Stmt q; |
| 675 | int cnt = 0; |
| 676 | fossil_print("name: %s (ambiguous)\n", zName); |
| 677 | db_prepare(&q, |
| @@ -757,5 +778,214 @@ | |
| 757 | while( db_step(&q)==SQLITE_ROW ){ |
| 758 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 759 | } |
| 760 | db_finalize(&q); |
| 761 | } |
| 762 | |
| 763 | DDED src/publish.c |
| 764 | DDED src/purge.c |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -42,10 +42,44 @@ | |
| 42 | if( z[7]!='-') return 0; |
| 43 | if( !fossil_isdigit(z[8]) ) return 0; |
| 44 | if( !fossil_isdigit(z[9]) ) return 0; |
| 45 | return 1; |
| 46 | } |
| 47 | |
| 48 | /* |
| 49 | ** Return the RID that is the "root" of the branch that contains |
| 50 | ** check-in "rid" if inBranch==0 or the first check-in in the branch |
| 51 | ** if inBranch==1. |
| 52 | */ |
| 53 | int start_of_branch(int rid, int inBranch){ |
| 54 | Stmt q; |
| 55 | int rc; |
| 56 | char *zBr; |
| 57 | zBr = db_text("trunk","SELECT value FROM tagxref" |
| 58 | " WHERE rid=%d AND tagid=%d" |
| 59 | " AND tagtype>0", |
| 60 | rid, TAG_BRANCH); |
| 61 | db_prepare(&q, |
| 62 | "SELECT pid, EXISTS(SELECT 1 FROM tagxref" |
| 63 | " WHERE tagid=%d AND tagtype>0" |
| 64 | " AND value=%Q AND rid=plink.pid)" |
| 65 | " FROM plink" |
| 66 | " WHERE cid=:cid AND isprim", |
| 67 | TAG_BRANCH, zBr |
| 68 | ); |
| 69 | fossil_free(zBr); |
| 70 | do{ |
| 71 | db_reset(&q); |
| 72 | db_bind_int(&q, ":cid", rid); |
| 73 | rc = db_step(&q); |
| 74 | if( rc!=SQLITE_ROW ) break; |
| 75 | if( inBranch && db_column_int(&q,1)==0 ) break; |
| 76 | rid = db_column_int(&q, 0); |
| 77 | }while( db_column_int(&q, 1)==1 && rid>0 ); |
| 78 | db_finalize(&q); |
| 79 | return rid; |
| 80 | } |
| 81 | |
| 82 | /* |
| 83 | ** Convert a symbolic name into a RID. Acceptable forms: |
| 84 | ** |
| 85 | ** * SHA1 hash |
| @@ -66,20 +100,28 @@ | |
| 100 | ** Return the RID of the matching artifact. Or return 0 if the name does not |
| 101 | ** match any known object. Or return -1 if the name is ambiguous. |
| 102 | ** |
| 103 | ** The zType parameter specifies the type of artifact: ci, t, w, e, g. |
| 104 | ** If zType is NULL or "" or "*" then any type of artifact will serve. |
| 105 | ** If zType is "br" then find the first check-in of the named branch |
| 106 | ** rather than the last. |
| 107 | ** zType is "ci" in most use cases since we are usually searching for |
| 108 | ** a check-in. |
| 109 | */ |
| 110 | int symbolic_name_to_rid(const char *zTag, const char *zType){ |
| 111 | int vid; |
| 112 | int rid = 0; |
| 113 | int nTag; |
| 114 | int i; |
| 115 | int startOfBranch = 0; |
| 116 | |
| 117 | if( zType==0 || zType[0]==0 ){ |
| 118 | zType = "*"; |
| 119 | }else if( zType[0]=='b' ){ |
| 120 | zType = "ci"; |
| 121 | startOfBranch = 1; |
| 122 | } |
| 123 | if( zTag==0 || zTag[0]==0 ) return 0; |
| 124 | |
| 125 | /* special keyword: "tip" */ |
| 126 | if( fossil_strcmp(zTag, "tip")==0 && (zType[0]=='*' || zType[0]=='c') ){ |
| 127 | rid = db_int(0, |
| @@ -151,41 +193,18 @@ | |
| 193 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 194 | " AND event.objid=tagxref.rid " |
| 195 | " AND event.type GLOB '%q'", |
| 196 | &zTag[4], zType |
| 197 | ); |
| 198 | if( startOfBranch ) rid = start_of_branch(rid,1); |
| 199 | return rid; |
| 200 | } |
| 201 | |
| 202 | /* root:TAG -> The origin of the branch */ |
| 203 | if( memcmp(zTag, "root:", 5)==0 ){ |
| 204 | rid = symbolic_name_to_rid(zTag+5, zType); |
| 205 | return start_of_branch(rid, 0); |
| 206 | } |
| 207 | |
| 208 | /* symbolic-name ":" date-time */ |
| 209 | nTag = strlen(zTag); |
| 210 | for(i=0; i<nTag-10 && zTag[i]!=':'; i++){} |
| @@ -245,11 +264,14 @@ | |
| 264 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 265 | " AND event.objid=tagxref.rid " |
| 266 | " AND event.type GLOB '%q'", |
| 267 | zTag, zType |
| 268 | ); |
| 269 | if( rid>0 ){ |
| 270 | if( startOfBranch ) rid = start_of_branch(rid,1); |
| 271 | return rid; |
| 272 | } |
| 273 | |
| 274 | /* Undocumented: numeric tags get translated directly into the RID */ |
| 275 | if( memcmp(zTag, "rid:", 4)==0 ){ |
| 276 | zTag += 4; |
| 277 | for(i=0; fossil_isdigit(zTag[i]); i++){} |
| @@ -391,18 +413,15 @@ | |
| 413 | int rid; |
| 414 | |
| 415 | if( zName==0 || zName[0]==0 ) return 0; |
| 416 | rid = symbolic_name_to_rid(zName, zType); |
| 417 | if( rid<0 ){ |
| 418 | fossil_fatal("ambiguous name: %s", zName); |
| 419 | }else if( rid==0 ){ |
| 420 | fossil_fatal("not found: %s", zName); |
| 421 | } |
| 422 | return rid; |
| 423 | } |
| 424 | int name_to_rid(const char *zName){ |
| 425 | return name_to_typed_rid(zName, "*"); |
| 426 | } |
| 427 | |
| @@ -505,11 +524,11 @@ | |
| 524 | } |
| 525 | |
| 526 | /* |
| 527 | ** Generate a description of artifact "rid" |
| 528 | */ |
| 529 | void whatis_rid(int rid, int verboseFlag){ |
| 530 | Stmt q; |
| 531 | int cnt; |
| 532 | |
| 533 | /* Basic information about the object. */ |
| 534 | db_prepare(&q, |
| @@ -657,21 +676,23 @@ | |
| 676 | void whatis_cmd(void){ |
| 677 | int rid; |
| 678 | const char *zName; |
| 679 | int verboseFlag; |
| 680 | int i; |
| 681 | const char *zType = 0; |
| 682 | db_find_and_open_repository(0,0); |
| 683 | verboseFlag = find_option("verbose","v",0)!=0; |
| 684 | zType = find_option("type",0,1); |
| 685 | |
| 686 | /* We should be done with options.. */ |
| 687 | verify_all_options(); |
| 688 | |
| 689 | if( g.argc<3 ) usage("whatis NAME ..."); |
| 690 | for(i=2; i<g.argc; i++){ |
| 691 | zName = g.argv[i]; |
| 692 | if( i>2 ) fossil_print("%.79c\n",'-'); |
| 693 | rid = symbolic_name_to_rid(zName, zType); |
| 694 | if( rid<0 ){ |
| 695 | Stmt q; |
| 696 | int cnt = 0; |
| 697 | fossil_print("name: %s (ambiguous)\n", zName); |
| 698 | db_prepare(&q, |
| @@ -757,5 +778,214 @@ | |
| 778 | while( db_step(&q)==SQLITE_ROW ){ |
| 779 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 780 | } |
| 781 | db_finalize(&q); |
| 782 | } |
| 783 | |
| 784 | /* |
| 785 | ** Schema for the description table |
| 786 | */ |
| 787 | static const char zDescTab[] = |
| 788 | @ CREATE TEMP TABLE IF NOT EXISTS description( |
| 789 | @ rid INTEGER PRIMARY KEY, -- RID of the object |
| 790 | @ uuid TEXT, -- SHA1 hash of the object |
| 791 | @ ctime DATETIME, -- Time of creation |
| 792 | @ isPrivate BOOLEAN DEFAULT 0, -- True for unpublished artifacts |
| 793 | @ type TEXT, -- file, checkin, wiki, ticket, etc. |
| 794 | @ summary TEXT, -- Summary comment for the object |
| 795 | @ detail TEXT -- filename, checkin comment, etc |
| 796 | @ ); |
| 797 | ; |
| 798 | |
| 799 | /* |
| 800 | ** Create the description table if it does not already exists. |
| 801 | ** Populate fields of this table with descriptions for all artifacts |
| 802 | ** whose RID matches the SQL expression in zWhere. |
| 803 | */ |
| 804 | void describe_artifacts(const char *zWhere){ |
| 805 | db_multi_exec("%s", zDescTab/*safe-for-%s*/); |
| 806 | |
| 807 | /* Describe checkins */ |
| 808 | db_multi_exec( |
| 809 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 810 | "SELECT blob.rid, blob.uuid, event.mtime, 'checkin',\n" |
| 811 | " 'checkin on ' || strftime('%%Y-%%m-%%d %%H:%%M',event.mtime)\n" |
| 812 | " FROM event, blob\n" |
| 813 | " WHERE event.objid %s AND event.type='ci'\n" |
| 814 | " AND event.objid=blob.rid;", |
| 815 | zWhere /*safe-for-%s*/ |
| 816 | ); |
| 817 | |
| 818 | /* Describe files */ |
| 819 | db_multi_exec( |
| 820 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 821 | "SELECT blob.rid, blob.uuid, event.mtime, 'file', 'file '||filename.name\n" |
| 822 | " FROM mlink, blob, event, filename\n" |
| 823 | " WHERE mlink.fid %s\n" |
| 824 | " AND mlink.mid=event.objid\n" |
| 825 | " AND filename.fnid=mlink.fnid\n" |
| 826 | " AND mlink.fid=blob.rid;", |
| 827 | zWhere /*safe-for-%s*/ |
| 828 | ); |
| 829 | |
| 830 | /* Describe tags */ |
| 831 | db_multi_exec( |
| 832 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 833 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'tag',\n" |
| 834 | " 'tag '||substr((SELECT uuid FROM blob WHERE rid=tagxref.rid),1,16)\n" |
| 835 | " FROM tagxref, blob\n" |
| 836 | " WHERE tagxref.srcid %s AND tagxref.srcid!=tagxref.rid\n" |
| 837 | " AND tagxref.srcid=blob.rid;", |
| 838 | zWhere /*safe-for-%s*/ |
| 839 | ); |
| 840 | |
| 841 | /* Cluster artifacts */ |
| 842 | db_multi_exec( |
| 843 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 844 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'cluster', 'cluster'\n" |
| 845 | " FROM tagxref, blob\n" |
| 846 | " WHERE tagxref.rid %s\n" |
| 847 | " AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='cluster')\n" |
| 848 | " AND blob.rid=tagxref.rid;", |
| 849 | zWhere /*safe-for-%s*/ |
| 850 | ); |
| 851 | |
| 852 | /* Ticket change artifacts */ |
| 853 | db_multi_exec( |
| 854 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 855 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'ticket',\n" |
| 856 | " 'ticket '||substr(tag.tagname,5,21)\n" |
| 857 | " FROM tagxref, tag, blob\n" |
| 858 | " WHERE tagxref.rid %s\n" |
| 859 | " AND tag.tagid=tagxref.tagid\n" |
| 860 | " AND tag.tagname GLOB 'tkt-*'" |
| 861 | " AND blob.rid=tagxref.rid;", |
| 862 | zWhere /*safe-for-%s*/ |
| 863 | ); |
| 864 | |
| 865 | /* Wiki edit artifacts */ |
| 866 | db_multi_exec( |
| 867 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 868 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'wiki',\n" |
| 869 | " printf('wiki \"%%s\"',substr(tag.tagname,6))\n" |
| 870 | " FROM tagxref, tag, blob\n" |
| 871 | " WHERE tagxref.rid %s\n" |
| 872 | " AND tag.tagid=tagxref.tagid\n" |
| 873 | " AND tag.tagname GLOB 'wiki-*'" |
| 874 | " AND blob.rid=tagxref.rid;", |
| 875 | zWhere /*safe-for-%s*/ |
| 876 | ); |
| 877 | |
| 878 | /* Event edit artifacts */ |
| 879 | db_multi_exec( |
| 880 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 881 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'event',\n" |
| 882 | " 'event '||substr(tag.tagname,7)\n" |
| 883 | " FROM tagxref, tag, blob\n" |
| 884 | " WHERE tagxref.rid %s\n" |
| 885 | " AND tag.tagid=tagxref.tagid\n" |
| 886 | " AND tag.tagname GLOB 'event-*'" |
| 887 | " AND blob.rid=tagxref.rid;", |
| 888 | zWhere /*safe-for-%s*/ |
| 889 | ); |
| 890 | |
| 891 | /* Attachments */ |
| 892 | db_multi_exec( |
| 893 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,detail)\n" |
| 894 | "SELECT blob.rid, blob.uuid, attachment.mtime, 'attachment',\n" |
| 895 | " 'attachment '||attachment.filename\n" |
| 896 | " FROM attachment, blob\n" |
| 897 | " WHERE attachment.src %s\n" |
| 898 | " AND blob.rid=attachment.src;", |
| 899 | zWhere /*safe-for-%s*/ |
| 900 | ); |
| 901 | |
| 902 | /* Everything else */ |
| 903 | db_multi_exec( |
| 904 | "INSERT OR IGNORE INTO description(rid,uuid,type,summary)\n" |
| 905 | "SELECT blob.rid, blob.uuid," |
| 906 | " CASE WHEN blob.size<0 THEN 'phantom' ELSE '' END,\n" |
| 907 | " 'unknown'\n" |
| 908 | " FROM blob WHERE blob.rid %s;", |
| 909 | zWhere /*safe-for-%s*/ |
| 910 | ); |
| 911 | |
| 912 | /* Mark private elements */ |
| 913 | db_multi_exec( |
| 914 | "UPDATE description SET isPrivate=1 WHERE rid IN private" |
| 915 | ); |
| 916 | } |
| 917 | |
| 918 | /* |
| 919 | ** Print the content of the description table on stdout |
| 920 | */ |
| 921 | int describe_artifacts_to_stdout(const char *zWhere, const char *zLabel){ |
| 922 | Stmt q; |
| 923 | int cnt = 0; |
| 924 | describe_artifacts(zWhere); |
| 925 | db_prepare(&q, |
| 926 | "SELECT uuid, summary, isPrivate\n" |
| 927 | " FROM description\n" |
| 928 | " ORDER BY ctime, type;" |
| 929 | ); |
| 930 | while( db_step(&q)==SQLITE_ROW ){ |
| 931 | if( zLabel ){ |
| 932 | fossil_print("%s\n", zLabel); |
| 933 | zLabel = 0; |
| 934 | } |
| 935 | fossil_print(" %.16s %s", db_column_text(&q,0), db_column_text(&q,1)); |
| 936 | if( db_column_int(&q,2) ) fossil_print(" (unpublished)"); |
| 937 | fossil_print("\n"); |
| 938 | cnt++; |
| 939 | } |
| 940 | db_finalize(&q); |
| 941 | db_multi_exec("DELETE FROM description;"); |
| 942 | return cnt; |
| 943 | } |
| 944 | |
| 945 | /* |
| 946 | ** COMMAND: test-describe-artifacts |
| 947 | ** |
| 948 | ** Usage: %fossil test-describe-artifacts |
| 949 | ** |
| 950 | ** Display a one-line description of every artifact. |
| 951 | */ |
| 952 | void test_describe_artifacts_cmd(void){ |
| 953 | db_find_and_open_repository(0,0); |
| 954 | describe_artifacts_to_stdout("IN (SELECT rid FROM blob)", 0); |
| 955 | } |
| 956 | |
| 957 | /* |
| 958 | ** COMMAND: test-unsent |
| 959 | ** |
| 960 | ** Usage: %fossil test-unsent |
| 961 | ** |
| 962 | ** Show all artifacts in the unsent table |
| 963 | */ |
| 964 | void test_unsent_cmd(void){ |
| 965 | db_find_and_open_repository(0,0); |
| 966 | describe_artifacts_to_stdout("IN unsent", 0); |
| 967 | } |
| 968 | |
| 969 | /* |
| 970 | ** COMMAND: test-unclustered |
| 971 | ** |
| 972 | ** Usage: %fossil test-unclustered |
| 973 | ** |
| 974 | ** Show all artifacts in the unclustered table |
| 975 | */ |
| 976 | void test_unclusterd_cmd(void){ |
| 977 | db_find_and_open_repository(0,0); |
| 978 | describe_artifacts_to_stdout("IN unclustered", 0); |
| 979 | } |
| 980 | |
| 981 | /* |
| 982 | ** COMMAND: test-phantoms |
| 983 | ** |
| 984 | ** Usage: %fossil test-phantoms |
| 985 | ** |
| 986 | ** Show all phantom artifacts |
| 987 | */ |
| 988 | void test_phatoms_cmd(void){ |
| 989 | db_find_and_open_repository(0,0); |
| 990 | describe_artifacts_to_stdout("IN (SELECT rid FROM blob WHERE size<0)", 0); |
| 991 | } |
| 992 | |
| 993 | DDED src/publish.c |
| 994 | DDED src/purge.c |
+2
| --- a/src/publish.c | ||
| +++ b/src/publish.c | ||
| @@ -0,0 +1,2 @@ | ||
| 1 | +/* | |
| 2 | +** Copyright (c) 2014 D. Richardat |
| --- a/src/publish.c | |
| +++ b/src/publish.c | |
| @@ -0,0 +1,2 @@ | |
| --- a/src/publish.c | |
| +++ b/src/publish.c | |
| @@ -0,0 +1,2 @@ | |
| 1 | /* |
| 2 | ** Copyright (c) 2014 D. Richardat |
+1
| --- a/src/purge.c | ||
| +++ b/src/purge.c | ||
| @@ -0,0 +1 @@ | ||
| 1 | +db_n%s.sqlite_master WHERE name='plink'" AND sql GLOB '* baseiddb_int(-1,"PRAGMA t |
| --- a/src/purge.c | |
| +++ b/src/purge.c | |
| @@ -0,0 +1 @@ | |
| --- a/src/purge.c | |
| +++ b/src/purge.c | |
| @@ -0,0 +1 @@ | |
| 1 | db_n%s.sqlite_master WHERE name='plink'" AND sql GLOB '* baseiddb_int(-1,"PRAGMA t |
+10
-5
| --- src/rebuild.c | ||
| +++ src/rebuild.c | ||
| @@ -348,11 +348,12 @@ | ||
| 348 | 348 | zTable = db_text(0, |
| 349 | 349 | "SELECT name FROM sqlite_master /*scan*/" |
| 350 | 350 | " WHERE type='table'" |
| 351 | 351 | " AND name NOT IN ('admin_log', 'blob','delta','rcvfrom','user'," |
| 352 | 352 | "'config','shun','private','reportfmt'," |
| 353 | - "'concealed','accesslog','modreq')" | |
| 353 | + "'concealed','accesslog','modreq'," | |
| 354 | + "'purgeevent','purgeitem')" | |
| 354 | 355 | " AND name NOT GLOB 'sqlite_*'" |
| 355 | 356 | " AND name NOT GLOB 'fx_*'" |
| 356 | 357 | ); |
| 357 | 358 | if( zTable==0 ) break; |
| 358 | 359 | db_multi_exec("DROP TABLE %Q", zTable); |
| @@ -829,14 +830,18 @@ | ||
| 829 | 830 | "DELETE FROM config WHERE name GLOB 'skin:*';" |
| 830 | 831 | "DELETE FROM config WHERE name GLOB 'subrepo:*';" |
| 831 | 832 | ); |
| 832 | 833 | if( bVerily ){ |
| 833 | 834 | db_multi_exec( |
| 834 | - "DELETE FROM concealed;" | |
| 835 | - "UPDATE rcvfrom SET ipaddr='unknown';" | |
| 836 | - "DROP TABLE IF EXISTS accesslog;" | |
| 837 | - "UPDATE user SET photo=NULL, info='';" | |
| 835 | + "DELETE FROM concealed;\n" | |
| 836 | + "UPDATE rcvfrom SET ipaddr='unknown';\n" | |
| 837 | + "DROP TABLE IF EXISTS accesslog;\n" | |
| 838 | + "UPDATE user SET photo=NULL, info='';\n" | |
| 839 | + "DROP TABLE IF EXISTS purgeevent;\n" | |
| 840 | + "DROP TABLE IF EXISTS purgeitem;\n" | |
| 841 | + "DROP TABLE IF EXISTS admin_log;\n" | |
| 842 | + "DROP TABLE IF EXISTS vcache;\n" | |
| 838 | 843 | ); |
| 839 | 844 | } |
| 840 | 845 | } |
| 841 | 846 | if( !bNeedRebuild ){ |
| 842 | 847 | db_end_transaction(0); |
| 843 | 848 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -348,11 +348,12 @@ | |
| 348 | zTable = db_text(0, |
| 349 | "SELECT name FROM sqlite_master /*scan*/" |
| 350 | " WHERE type='table'" |
| 351 | " AND name NOT IN ('admin_log', 'blob','delta','rcvfrom','user'," |
| 352 | "'config','shun','private','reportfmt'," |
| 353 | "'concealed','accesslog','modreq')" |
| 354 | " AND name NOT GLOB 'sqlite_*'" |
| 355 | " AND name NOT GLOB 'fx_*'" |
| 356 | ); |
| 357 | if( zTable==0 ) break; |
| 358 | db_multi_exec("DROP TABLE %Q", zTable); |
| @@ -829,14 +830,18 @@ | |
| 829 | "DELETE FROM config WHERE name GLOB 'skin:*';" |
| 830 | "DELETE FROM config WHERE name GLOB 'subrepo:*';" |
| 831 | ); |
| 832 | if( bVerily ){ |
| 833 | db_multi_exec( |
| 834 | "DELETE FROM concealed;" |
| 835 | "UPDATE rcvfrom SET ipaddr='unknown';" |
| 836 | "DROP TABLE IF EXISTS accesslog;" |
| 837 | "UPDATE user SET photo=NULL, info='';" |
| 838 | ); |
| 839 | } |
| 840 | } |
| 841 | if( !bNeedRebuild ){ |
| 842 | db_end_transaction(0); |
| 843 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -348,11 +348,12 @@ | |
| 348 | zTable = db_text(0, |
| 349 | "SELECT name FROM sqlite_master /*scan*/" |
| 350 | " WHERE type='table'" |
| 351 | " AND name NOT IN ('admin_log', 'blob','delta','rcvfrom','user'," |
| 352 | "'config','shun','private','reportfmt'," |
| 353 | "'concealed','accesslog','modreq'," |
| 354 | "'purgeevent','purgeitem')" |
| 355 | " AND name NOT GLOB 'sqlite_*'" |
| 356 | " AND name NOT GLOB 'fx_*'" |
| 357 | ); |
| 358 | if( zTable==0 ) break; |
| 359 | db_multi_exec("DROP TABLE %Q", zTable); |
| @@ -829,14 +830,18 @@ | |
| 830 | "DELETE FROM config WHERE name GLOB 'skin:*';" |
| 831 | "DELETE FROM config WHERE name GLOB 'subrepo:*';" |
| 832 | ); |
| 833 | if( bVerily ){ |
| 834 | db_multi_exec( |
| 835 | "DELETE FROM concealed;\n" |
| 836 | "UPDATE rcvfrom SET ipaddr='unknown';\n" |
| 837 | "DROP TABLE IF EXISTS accesslog;\n" |
| 838 | "UPDATE user SET photo=NULL, info='';\n" |
| 839 | "DROP TABLE IF EXISTS purgeevent;\n" |
| 840 | "DROP TABLE IF EXISTS purgeitem;\n" |
| 841 | "DROP TABLE IF EXISTS admin_log;\n" |
| 842 | "DROP TABLE IF EXISTS vcache;\n" |
| 843 | ); |
| 844 | } |
| 845 | } |
| 846 | if( !bNeedRebuild ){ |
| 847 | db_end_transaction(0); |
| 848 |
+2
-2
| --- src/schema.c | ||
| +++ src/schema.c | ||
| @@ -81,12 +81,12 @@ | ||
| 81 | 81 | @ uuid TEXT UNIQUE NOT NULL, -- SHA1 hash of the content |
| 82 | 82 | @ content BLOB, -- Compressed content of this record |
| 83 | 83 | @ CHECK( length(uuid)==40 AND rid>0 ) |
| 84 | 84 | @ ); |
| 85 | 85 | @ CREATE TABLE delta( |
| 86 | -@ rid INTEGER PRIMARY KEY, -- Record ID | |
| 87 | -@ srcid INTEGER NOT NULL REFERENCES blob -- Record holding source document | |
| 86 | +@ rid INTEGER PRIMARY KEY, -- BLOB that is delta-compressed | |
| 87 | +@ srcid INTEGER NOT NULL REFERENCES blob -- Baseline for delta-compression | |
| 88 | 88 | @ ); |
| 89 | 89 | @ CREATE INDEX delta_i1 ON delta(srcid); |
| 90 | 90 | @ |
| 91 | 91 | @ ------------------------------------------------------------------------- |
| 92 | 92 | @ -- The BLOB and DELTA tables above hold the "global state" of a Fossil |
| 93 | 93 |
| --- src/schema.c | |
| +++ src/schema.c | |
| @@ -81,12 +81,12 @@ | |
| 81 | @ uuid TEXT UNIQUE NOT NULL, -- SHA1 hash of the content |
| 82 | @ content BLOB, -- Compressed content of this record |
| 83 | @ CHECK( length(uuid)==40 AND rid>0 ) |
| 84 | @ ); |
| 85 | @ CREATE TABLE delta( |
| 86 | @ rid INTEGER PRIMARY KEY, -- Record ID |
| 87 | @ srcid INTEGER NOT NULL REFERENCES blob -- Record holding source document |
| 88 | @ ); |
| 89 | @ CREATE INDEX delta_i1 ON delta(srcid); |
| 90 | @ |
| 91 | @ ------------------------------------------------------------------------- |
| 92 | @ -- The BLOB and DELTA tables above hold the "global state" of a Fossil |
| 93 |
| --- src/schema.c | |
| +++ src/schema.c | |
| @@ -81,12 +81,12 @@ | |
| 81 | @ uuid TEXT UNIQUE NOT NULL, -- SHA1 hash of the content |
| 82 | @ content BLOB, -- Compressed content of this record |
| 83 | @ CHECK( length(uuid)==40 AND rid>0 ) |
| 84 | @ ); |
| 85 | @ CREATE TABLE delta( |
| 86 | @ rid INTEGER PRIMARY KEY, -- BLOB that is delta-compressed |
| 87 | @ srcid INTEGER NOT NULL REFERENCES blob -- Baseline for delta-compression |
| 88 | @ ); |
| 89 | @ CREATE INDEX delta_i1 ON delta(srcid); |
| 90 | @ |
| 91 | @ ------------------------------------------------------------------------- |
| 92 | @ -- The BLOB and DELTA tables above hold the "global state" of a Fossil |
| 93 |
+3
-3
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -105,15 +105,15 @@ | ||
| 105 | 105 | "Edit HTML text for an ad unit inserted after the menu bar"); |
| 106 | 106 | setup_menu_entry("Logo", "setup_logo", |
| 107 | 107 | "Change the logo and background images for the server"); |
| 108 | 108 | setup_menu_entry("Shunned", "shun", |
| 109 | 109 | "Show artifacts that are shunned by this repository"); |
| 110 | - setup_menu_entry("Log", "rcvfromlist", | |
| 110 | + setup_menu_entry("Artifact Receipts Log", "rcvfromlist", | |
| 111 | 111 | "A record of received artifacts and their sources"); |
| 112 | - setup_menu_entry("User-Log", "access_log", | |
| 112 | + setup_menu_entry("User Log", "access_log", | |
| 113 | 113 | "A record of login attempts"); |
| 114 | - setup_menu_entry("Admin-Log", "admin_log", | |
| 114 | + setup_menu_entry("Administrative Log", "admin_log", | |
| 115 | 115 | "View the admin_log entries"); |
| 116 | 116 | setup_menu_entry("Stats", "stat", |
| 117 | 117 | "Display repository statistics"); |
| 118 | 118 | setup_menu_entry("SQL", "admin_sql", |
| 119 | 119 | "Enter raw SQL commands"); |
| 120 | 120 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -105,15 +105,15 @@ | |
| 105 | "Edit HTML text for an ad unit inserted after the menu bar"); |
| 106 | setup_menu_entry("Logo", "setup_logo", |
| 107 | "Change the logo and background images for the server"); |
| 108 | setup_menu_entry("Shunned", "shun", |
| 109 | "Show artifacts that are shunned by this repository"); |
| 110 | setup_menu_entry("Log", "rcvfromlist", |
| 111 | "A record of received artifacts and their sources"); |
| 112 | setup_menu_entry("User-Log", "access_log", |
| 113 | "A record of login attempts"); |
| 114 | setup_menu_entry("Admin-Log", "admin_log", |
| 115 | "View the admin_log entries"); |
| 116 | setup_menu_entry("Stats", "stat", |
| 117 | "Display repository statistics"); |
| 118 | setup_menu_entry("SQL", "admin_sql", |
| 119 | "Enter raw SQL commands"); |
| 120 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -105,15 +105,15 @@ | |
| 105 | "Edit HTML text for an ad unit inserted after the menu bar"); |
| 106 | setup_menu_entry("Logo", "setup_logo", |
| 107 | "Change the logo and background images for the server"); |
| 108 | setup_menu_entry("Shunned", "shun", |
| 109 | "Show artifacts that are shunned by this repository"); |
| 110 | setup_menu_entry("Artifact Receipts Log", "rcvfromlist", |
| 111 | "A record of received artifacts and their sources"); |
| 112 | setup_menu_entry("User Log", "access_log", |
| 113 | "A record of login attempts"); |
| 114 | setup_menu_entry("Administrative Log", "admin_log", |
| 115 | "View the admin_log entries"); |
| 116 | setup_menu_entry("Stats", "stat", |
| 117 | "Display repository statistics"); |
| 118 | setup_menu_entry("SQL", "admin_sql", |
| 119 | "Enter raw SQL commands"); |
| 120 |
+41
-13
| --- src/shun.c | ||
| +++ src/shun.c | ||
| @@ -295,37 +295,50 @@ | ||
| 295 | 295 | ** |
| 296 | 296 | ** Show a listing of RCVFROM table entries. |
| 297 | 297 | */ |
| 298 | 298 | void rcvfromlist_page(void){ |
| 299 | 299 | int ofst = atoi(PD("ofst","0")); |
| 300 | + int showAll = P("all")!=0; | |
| 300 | 301 | int cnt; |
| 301 | 302 | Stmt q; |
| 302 | 303 | |
| 303 | 304 | login_check_credentials(); |
| 304 | 305 | if( !g.perm.Admin ){ |
| 305 | 306 | login_needed(); |
| 306 | 307 | } |
| 307 | - style_header("Content Sources"); | |
| 308 | + style_header("Artifact Receipts"); | |
| 309 | + if( showAll ){ | |
| 310 | + ofst = 0; | |
| 311 | + }else{ | |
| 312 | + style_submenu_element("All", "All", "rcvfromlist?all=1"); | |
| 313 | + } | |
| 308 | 314 | if( ofst>0 ){ |
| 309 | 315 | style_submenu_element("Newer", "Newer", "rcvfromlist?ofst=%d", |
| 310 | 316 | ofst>30 ? ofst-30 : 0); |
| 311 | 317 | } |
| 318 | + db_multi_exec( | |
| 319 | + "CREATE TEMP TABLE rcvidUsed(x INTEGER PRIMARY KEY);" | |
| 320 | + "INSERT OR IGNORE INTO rcvidUsed(x) SELECT rcvid FROM blob;" | |
| 321 | + ); | |
| 312 | 322 | db_prepare(&q, |
| 313 | - "SELECT rcvid, login, datetime(rcvfrom.mtime), rcvfrom.ipaddr" | |
| 323 | + "SELECT rcvid, login, datetime(rcvfrom.mtime), rcvfrom.ipaddr," | |
| 324 | + " EXISTS(SELECT 1 FROM rcvidUsed WHERE x=rcvfrom.rcvid)" | |
| 314 | 325 | " FROM rcvfrom LEFT JOIN user USING(uid)" |
| 315 | - " ORDER BY rcvid DESC LIMIT 31 OFFSET %d", | |
| 316 | - ofst | |
| 326 | + " ORDER BY rcvid DESC LIMIT %d OFFSET %d", | |
| 327 | + showAll ? -1 : 31, ofst | |
| 317 | 328 | ); |
| 318 | 329 | @ <p>Whenever new artifacts are added to the repository, either by |
| 319 | 330 | @ push or using the web interface, an entry is made in the RCVFROM table |
| 320 | 331 | @ to record the source of that artifact. This log facilitates |
| 321 | 332 | @ finding and fixing attempts to inject illicit content into the |
| 322 | 333 | @ repository.</p> |
| 323 | 334 | @ |
| 324 | 335 | @ <p>Click on the "rcvid" to show a list of specific artifacts received |
| 325 | 336 | @ by a transaction. After identifying illicit artifacts, remove them |
| 326 | - @ using the "Shun" feature.</p> | |
| 337 | + @ using the "Shun" button. If an "rcvid" is not hyperlinked, that means | |
| 338 | + @ all artifacts associated with that rcvid have already been shunned | |
| 339 | + @ or purged.</p> | |
| 327 | 340 | @ |
| 328 | 341 | @ <table cellpadding="0" cellspacing="0" border="0"> |
| 329 | 342 | @ <tr><th style="padding-right: 15px;text-align: right;">rcvid</th> |
| 330 | 343 | @ <th style="padding-right: 15px;text-align: left;">Date</th> |
| 331 | 344 | @ <th style="padding-right: 15px;text-align: left;">User</th> |
| @@ -334,17 +347,22 @@ | ||
| 334 | 347 | while( db_step(&q)==SQLITE_ROW ){ |
| 335 | 348 | int rcvid = db_column_int(&q, 0); |
| 336 | 349 | const char *zUser = db_column_text(&q, 1); |
| 337 | 350 | const char *zDate = db_column_text(&q, 2); |
| 338 | 351 | const char *zIpAddr = db_column_text(&q, 3); |
| 339 | - if( cnt==30 ){ | |
| 352 | + if( cnt==30 && !showAll ){ | |
| 340 | 353 | style_submenu_element("Older", "Older", |
| 341 | 354 | "rcvfromlist?ofst=%d", ofst+30); |
| 342 | 355 | }else{ |
| 343 | 356 | cnt++; |
| 344 | 357 | @ <tr> |
| 345 | - @ <td style="padding-right: 15px;text-align: right;"><a href="rcvfrom?rcvid=%d(rcvid)">%d(rcvid)</a></td> | |
| 358 | + if( db_column_int(&q,4) ){ | |
| 359 | + @ <td style="padding-right: 15px;text-align: right;"> | |
| 360 | + @ <a href="rcvfrom?rcvid=%d(rcvid)">%d(rcvid)</a></td> | |
| 361 | + }else{ | |
| 362 | + @ <td style="padding-right: 15px;text-align: right;">%d(rcvid)</td> | |
| 363 | + } | |
| 346 | 364 | @ <td style="padding-right: 15px;text-align: left;">%s(zDate)</td> |
| 347 | 365 | @ <td style="padding-right: 15px;text-align: left;">%h(zUser)</td> |
| 348 | 366 | @ <td style="text-align: left;">%s(zIpAddr)</td> |
| 349 | 367 | @ </tr> |
| 350 | 368 | } |
| @@ -365,22 +383,24 @@ | ||
| 365 | 383 | |
| 366 | 384 | login_check_credentials(); |
| 367 | 385 | if( !g.perm.Admin ){ |
| 368 | 386 | login_needed(); |
| 369 | 387 | } |
| 370 | - style_header("Content Source %d", rcvid); | |
| 388 | + style_header("Artifact Receipt %d", rcvid); | |
| 371 | 389 | if( db_exists( |
| 372 | 390 | "SELECT 1 FROM blob WHERE rcvid=%d AND" |
| 373 | 391 | " NOT EXISTS (SELECT 1 FROM shun WHERE shun.uuid=blob.uuid)", rcvid) |
| 374 | 392 | ){ |
| 375 | - style_submenu_element("Shun All", "Shun All", "shun?shun&rcvid=%d#addshun", rcvid); | |
| 393 | + style_submenu_element("Shun All", "Shun All", | |
| 394 | + "shun?shun&rcvid=%d#addshun", rcvid); | |
| 376 | 395 | } |
| 377 | 396 | if( db_exists( |
| 378 | 397 | "SELECT 1 FROM blob WHERE rcvid=%d AND" |
| 379 | 398 | " EXISTS (SELECT 1 FROM shun WHERE shun.uuid=blob.uuid)", rcvid) |
| 380 | 399 | ){ |
| 381 | - style_submenu_element("Unshun All", "Unshun All", "shun?accept&rcvid=%d#delshun", rcvid); | |
| 400 | + style_submenu_element("Unshun All", "Unshun All", | |
| 401 | + "shun?accept&rcvid=%d#delshun", rcvid); | |
| 382 | 402 | } |
| 383 | 403 | db_prepare(&q, |
| 384 | 404 | "SELECT login, datetime(rcvfrom.mtime), rcvfrom.ipaddr" |
| 385 | 405 | " FROM rcvfrom LEFT JOIN user USING(uid)" |
| 386 | 406 | " WHERE rcvid=%d", |
| @@ -399,22 +419,30 @@ | ||
| 399 | 419 | @ <td valign="top">%s(zDate)</td></tr> |
| 400 | 420 | @ <tr><th valign="top" align="right">IP Address:</th> |
| 401 | 421 | @ <td valign="top">%s(zIpAddr)</td></tr> |
| 402 | 422 | } |
| 403 | 423 | db_finalize(&q); |
| 424 | + db_multi_exec( | |
| 425 | + "CREATE TEMP TABLE toshow(rid INTEGER PRIMARY KEY);" | |
| 426 | + "INSERT INTO toshow SELECT rid FROM blob WHERE rcvid=%d", rcvid | |
| 427 | + ); | |
| 428 | + describe_artifacts("IN toshow"); | |
| 404 | 429 | db_prepare(&q, |
| 405 | - "SELECT rid, uuid, size FROM blob WHERE rcvid=%d", rcvid | |
| 430 | + "SELECT blob.rid, blob.uuid, blob.size, description.summary\n" | |
| 431 | + " FROM blob LEFT JOIN description ON (blob.rid=description.rid)" | |
| 432 | + " WHERE blob.rcvid=%d", rcvid | |
| 406 | 433 | ); |
| 407 | 434 | @ <tr><th valign="top" align="right">Artifacts:</th> |
| 408 | 435 | @ <td valign="top"> |
| 409 | 436 | while( db_step(&q)==SQLITE_ROW ){ |
| 410 | - int rid = db_column_int(&q, 0); | |
| 411 | 437 | const char *zUuid = db_column_text(&q, 1); |
| 412 | 438 | int size = db_column_int(&q, 2); |
| 439 | + const char *zDesc = db_column_text(&q, 3); | |
| 440 | + if( zDesc==0 ) zDesc = ""; | |
| 413 | 441 | @ <a href="%s(g.zTop)/info/%s(zUuid)">%s(zUuid)</a> |
| 414 | - @ (rid: %d(rid), size: %d(size))<br /> | |
| 442 | + @ %h(zDesc) (size: %d(size))<br /> | |
| 415 | 443 | } |
| 416 | 444 | @ </td></tr> |
| 417 | 445 | @ </table> |
| 418 | 446 | db_finalize(&q); |
| 419 | 447 | style_footer(); |
| 420 | 448 | } |
| 421 | 449 |
| --- src/shun.c | |
| +++ src/shun.c | |
| @@ -295,37 +295,50 @@ | |
| 295 | ** |
| 296 | ** Show a listing of RCVFROM table entries. |
| 297 | */ |
| 298 | void rcvfromlist_page(void){ |
| 299 | int ofst = atoi(PD("ofst","0")); |
| 300 | int cnt; |
| 301 | Stmt q; |
| 302 | |
| 303 | login_check_credentials(); |
| 304 | if( !g.perm.Admin ){ |
| 305 | login_needed(); |
| 306 | } |
| 307 | style_header("Content Sources"); |
| 308 | if( ofst>0 ){ |
| 309 | style_submenu_element("Newer", "Newer", "rcvfromlist?ofst=%d", |
| 310 | ofst>30 ? ofst-30 : 0); |
| 311 | } |
| 312 | db_prepare(&q, |
| 313 | "SELECT rcvid, login, datetime(rcvfrom.mtime), rcvfrom.ipaddr" |
| 314 | " FROM rcvfrom LEFT JOIN user USING(uid)" |
| 315 | " ORDER BY rcvid DESC LIMIT 31 OFFSET %d", |
| 316 | ofst |
| 317 | ); |
| 318 | @ <p>Whenever new artifacts are added to the repository, either by |
| 319 | @ push or using the web interface, an entry is made in the RCVFROM table |
| 320 | @ to record the source of that artifact. This log facilitates |
| 321 | @ finding and fixing attempts to inject illicit content into the |
| 322 | @ repository.</p> |
| 323 | @ |
| 324 | @ <p>Click on the "rcvid" to show a list of specific artifacts received |
| 325 | @ by a transaction. After identifying illicit artifacts, remove them |
| 326 | @ using the "Shun" feature.</p> |
| 327 | @ |
| 328 | @ <table cellpadding="0" cellspacing="0" border="0"> |
| 329 | @ <tr><th style="padding-right: 15px;text-align: right;">rcvid</th> |
| 330 | @ <th style="padding-right: 15px;text-align: left;">Date</th> |
| 331 | @ <th style="padding-right: 15px;text-align: left;">User</th> |
| @@ -334,17 +347,22 @@ | |
| 334 | while( db_step(&q)==SQLITE_ROW ){ |
| 335 | int rcvid = db_column_int(&q, 0); |
| 336 | const char *zUser = db_column_text(&q, 1); |
| 337 | const char *zDate = db_column_text(&q, 2); |
| 338 | const char *zIpAddr = db_column_text(&q, 3); |
| 339 | if( cnt==30 ){ |
| 340 | style_submenu_element("Older", "Older", |
| 341 | "rcvfromlist?ofst=%d", ofst+30); |
| 342 | }else{ |
| 343 | cnt++; |
| 344 | @ <tr> |
| 345 | @ <td style="padding-right: 15px;text-align: right;"><a href="rcvfrom?rcvid=%d(rcvid)">%d(rcvid)</a></td> |
| 346 | @ <td style="padding-right: 15px;text-align: left;">%s(zDate)</td> |
| 347 | @ <td style="padding-right: 15px;text-align: left;">%h(zUser)</td> |
| 348 | @ <td style="text-align: left;">%s(zIpAddr)</td> |
| 349 | @ </tr> |
| 350 | } |
| @@ -365,22 +383,24 @@ | |
| 365 | |
| 366 | login_check_credentials(); |
| 367 | if( !g.perm.Admin ){ |
| 368 | login_needed(); |
| 369 | } |
| 370 | style_header("Content Source %d", rcvid); |
| 371 | if( db_exists( |
| 372 | "SELECT 1 FROM blob WHERE rcvid=%d AND" |
| 373 | " NOT EXISTS (SELECT 1 FROM shun WHERE shun.uuid=blob.uuid)", rcvid) |
| 374 | ){ |
| 375 | style_submenu_element("Shun All", "Shun All", "shun?shun&rcvid=%d#addshun", rcvid); |
| 376 | } |
| 377 | if( db_exists( |
| 378 | "SELECT 1 FROM blob WHERE rcvid=%d AND" |
| 379 | " EXISTS (SELECT 1 FROM shun WHERE shun.uuid=blob.uuid)", rcvid) |
| 380 | ){ |
| 381 | style_submenu_element("Unshun All", "Unshun All", "shun?accept&rcvid=%d#delshun", rcvid); |
| 382 | } |
| 383 | db_prepare(&q, |
| 384 | "SELECT login, datetime(rcvfrom.mtime), rcvfrom.ipaddr" |
| 385 | " FROM rcvfrom LEFT JOIN user USING(uid)" |
| 386 | " WHERE rcvid=%d", |
| @@ -399,22 +419,30 @@ | |
| 399 | @ <td valign="top">%s(zDate)</td></tr> |
| 400 | @ <tr><th valign="top" align="right">IP Address:</th> |
| 401 | @ <td valign="top">%s(zIpAddr)</td></tr> |
| 402 | } |
| 403 | db_finalize(&q); |
| 404 | db_prepare(&q, |
| 405 | "SELECT rid, uuid, size FROM blob WHERE rcvid=%d", rcvid |
| 406 | ); |
| 407 | @ <tr><th valign="top" align="right">Artifacts:</th> |
| 408 | @ <td valign="top"> |
| 409 | while( db_step(&q)==SQLITE_ROW ){ |
| 410 | int rid = db_column_int(&q, 0); |
| 411 | const char *zUuid = db_column_text(&q, 1); |
| 412 | int size = db_column_int(&q, 2); |
| 413 | @ <a href="%s(g.zTop)/info/%s(zUuid)">%s(zUuid)</a> |
| 414 | @ (rid: %d(rid), size: %d(size))<br /> |
| 415 | } |
| 416 | @ </td></tr> |
| 417 | @ </table> |
| 418 | db_finalize(&q); |
| 419 | style_footer(); |
| 420 | } |
| 421 |
| --- src/shun.c | |
| +++ src/shun.c | |
| @@ -295,37 +295,50 @@ | |
| 295 | ** |
| 296 | ** Show a listing of RCVFROM table entries. |
| 297 | */ |
| 298 | void rcvfromlist_page(void){ |
| 299 | int ofst = atoi(PD("ofst","0")); |
| 300 | int showAll = P("all")!=0; |
| 301 | int cnt; |
| 302 | Stmt q; |
| 303 | |
| 304 | login_check_credentials(); |
| 305 | if( !g.perm.Admin ){ |
| 306 | login_needed(); |
| 307 | } |
| 308 | style_header("Artifact Receipts"); |
| 309 | if( showAll ){ |
| 310 | ofst = 0; |
| 311 | }else{ |
| 312 | style_submenu_element("All", "All", "rcvfromlist?all=1"); |
| 313 | } |
| 314 | if( ofst>0 ){ |
| 315 | style_submenu_element("Newer", "Newer", "rcvfromlist?ofst=%d", |
| 316 | ofst>30 ? ofst-30 : 0); |
| 317 | } |
| 318 | db_multi_exec( |
| 319 | "CREATE TEMP TABLE rcvidUsed(x INTEGER PRIMARY KEY);" |
| 320 | "INSERT OR IGNORE INTO rcvidUsed(x) SELECT rcvid FROM blob;" |
| 321 | ); |
| 322 | db_prepare(&q, |
| 323 | "SELECT rcvid, login, datetime(rcvfrom.mtime), rcvfrom.ipaddr," |
| 324 | " EXISTS(SELECT 1 FROM rcvidUsed WHERE x=rcvfrom.rcvid)" |
| 325 | " FROM rcvfrom LEFT JOIN user USING(uid)" |
| 326 | " ORDER BY rcvid DESC LIMIT %d OFFSET %d", |
| 327 | showAll ? -1 : 31, ofst |
| 328 | ); |
| 329 | @ <p>Whenever new artifacts are added to the repository, either by |
| 330 | @ push or using the web interface, an entry is made in the RCVFROM table |
| 331 | @ to record the source of that artifact. This log facilitates |
| 332 | @ finding and fixing attempts to inject illicit content into the |
| 333 | @ repository.</p> |
| 334 | @ |
| 335 | @ <p>Click on the "rcvid" to show a list of specific artifacts received |
| 336 | @ by a transaction. After identifying illicit artifacts, remove them |
| 337 | @ using the "Shun" button. If an "rcvid" is not hyperlinked, that means |
| 338 | @ all artifacts associated with that rcvid have already been shunned |
| 339 | @ or purged.</p> |
| 340 | @ |
| 341 | @ <table cellpadding="0" cellspacing="0" border="0"> |
| 342 | @ <tr><th style="padding-right: 15px;text-align: right;">rcvid</th> |
| 343 | @ <th style="padding-right: 15px;text-align: left;">Date</th> |
| 344 | @ <th style="padding-right: 15px;text-align: left;">User</th> |
| @@ -334,17 +347,22 @@ | |
| 347 | while( db_step(&q)==SQLITE_ROW ){ |
| 348 | int rcvid = db_column_int(&q, 0); |
| 349 | const char *zUser = db_column_text(&q, 1); |
| 350 | const char *zDate = db_column_text(&q, 2); |
| 351 | const char *zIpAddr = db_column_text(&q, 3); |
| 352 | if( cnt==30 && !showAll ){ |
| 353 | style_submenu_element("Older", "Older", |
| 354 | "rcvfromlist?ofst=%d", ofst+30); |
| 355 | }else{ |
| 356 | cnt++; |
| 357 | @ <tr> |
| 358 | if( db_column_int(&q,4) ){ |
| 359 | @ <td style="padding-right: 15px;text-align: right;"> |
| 360 | @ <a href="rcvfrom?rcvid=%d(rcvid)">%d(rcvid)</a></td> |
| 361 | }else{ |
| 362 | @ <td style="padding-right: 15px;text-align: right;">%d(rcvid)</td> |
| 363 | } |
| 364 | @ <td style="padding-right: 15px;text-align: left;">%s(zDate)</td> |
| 365 | @ <td style="padding-right: 15px;text-align: left;">%h(zUser)</td> |
| 366 | @ <td style="text-align: left;">%s(zIpAddr)</td> |
| 367 | @ </tr> |
| 368 | } |
| @@ -365,22 +383,24 @@ | |
| 383 | |
| 384 | login_check_credentials(); |
| 385 | if( !g.perm.Admin ){ |
| 386 | login_needed(); |
| 387 | } |
| 388 | style_header("Artifact Receipt %d", rcvid); |
| 389 | if( db_exists( |
| 390 | "SELECT 1 FROM blob WHERE rcvid=%d AND" |
| 391 | " NOT EXISTS (SELECT 1 FROM shun WHERE shun.uuid=blob.uuid)", rcvid) |
| 392 | ){ |
| 393 | style_submenu_element("Shun All", "Shun All", |
| 394 | "shun?shun&rcvid=%d#addshun", rcvid); |
| 395 | } |
| 396 | if( db_exists( |
| 397 | "SELECT 1 FROM blob WHERE rcvid=%d AND" |
| 398 | " EXISTS (SELECT 1 FROM shun WHERE shun.uuid=blob.uuid)", rcvid) |
| 399 | ){ |
| 400 | style_submenu_element("Unshun All", "Unshun All", |
| 401 | "shun?accept&rcvid=%d#delshun", rcvid); |
| 402 | } |
| 403 | db_prepare(&q, |
| 404 | "SELECT login, datetime(rcvfrom.mtime), rcvfrom.ipaddr" |
| 405 | " FROM rcvfrom LEFT JOIN user USING(uid)" |
| 406 | " WHERE rcvid=%d", |
| @@ -399,22 +419,30 @@ | |
| 419 | @ <td valign="top">%s(zDate)</td></tr> |
| 420 | @ <tr><th valign="top" align="right">IP Address:</th> |
| 421 | @ <td valign="top">%s(zIpAddr)</td></tr> |
| 422 | } |
| 423 | db_finalize(&q); |
| 424 | db_multi_exec( |
| 425 | "CREATE TEMP TABLE toshow(rid INTEGER PRIMARY KEY);" |
| 426 | "INSERT INTO toshow SELECT rid FROM blob WHERE rcvid=%d", rcvid |
| 427 | ); |
| 428 | describe_artifacts("IN toshow"); |
| 429 | db_prepare(&q, |
| 430 | "SELECT blob.rid, blob.uuid, blob.size, description.summary\n" |
| 431 | " FROM blob LEFT JOIN description ON (blob.rid=description.rid)" |
| 432 | " WHERE blob.rcvid=%d", rcvid |
| 433 | ); |
| 434 | @ <tr><th valign="top" align="right">Artifacts:</th> |
| 435 | @ <td valign="top"> |
| 436 | while( db_step(&q)==SQLITE_ROW ){ |
| 437 | const char *zUuid = db_column_text(&q, 1); |
| 438 | int size = db_column_int(&q, 2); |
| 439 | const char *zDesc = db_column_text(&q, 3); |
| 440 | if( zDesc==0 ) zDesc = ""; |
| 441 | @ <a href="%s(g.zTop)/info/%s(zUuid)">%s(zUuid)</a> |
| 442 | @ %h(zDesc) (size: %d(size))<br /> |
| 443 | } |
| 444 | @ </td></tr> |
| 445 | @ </table> |
| 446 | db_finalize(&q); |
| 447 | style_footer(); |
| 448 | } |
| 449 |
+21
-20
| --- src/sqlcmd.c | ||
| +++ src/sqlcmd.c | ||
| @@ -106,10 +106,24 @@ | ||
| 106 | 106 | sqlite3_result_blob(context, pOut, nOut, sqlite3_free); |
| 107 | 107 | }else{ |
| 108 | 108 | sqlite3_result_error(context, "input is not zlib compressed", -1); |
| 109 | 109 | } |
| 110 | 110 | } |
| 111 | + | |
| 112 | +/* | |
| 113 | +** Add the content(), compress(), and decompress() SQL functions to | |
| 114 | +** database connection db. | |
| 115 | +*/ | |
| 116 | +int add_content_sql_commands(sqlite3 *db){ | |
| 117 | + sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0, | |
| 118 | + sqlcmd_content, 0, 0); | |
| 119 | + sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0, | |
| 120 | + sqlcmd_compress, 0, 0); | |
| 121 | + sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0, | |
| 122 | + sqlcmd_decompress, 0, 0); | |
| 123 | + return SQLITE_OK; | |
| 124 | +} | |
| 111 | 125 | |
| 112 | 126 | /* |
| 113 | 127 | ** This is the "automatic extension" initializer that runs right after |
| 114 | 128 | ** the connection to the repository database is opened. Set up the |
| 115 | 129 | ** database connection to be more useful to the human operator. |
| @@ -117,40 +131,27 @@ | ||
| 117 | 131 | static int sqlcmd_autoinit( |
| 118 | 132 | sqlite3 *db, |
| 119 | 133 | const char **pzErrMsg, |
| 120 | 134 | const void *notUsed |
| 121 | 135 | ){ |
| 122 | - char *zSql; | |
| 123 | - int rc = SQLITE_OK; | |
| 124 | - sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0, | |
| 125 | - sqlcmd_content, 0, 0); | |
| 126 | - sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0, | |
| 127 | - sqlcmd_compress, 0, 0); | |
| 128 | - sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0, | |
| 129 | - sqlcmd_decompress, 0, 0); | |
| 136 | + add_content_sql_commands(db); | |
| 130 | 137 | re_add_sql_func(db); |
| 131 | - foci_register(db); | |
| 132 | 138 | g.zMainDbType = "repository"; |
| 139 | + foci_register(db); | |
| 133 | 140 | g.repositoryOpen = 1; |
| 134 | 141 | g.db = db; |
| 135 | - db_open_config(1); | |
| 136 | - if( g.zLocalDbName ){ | |
| 137 | - zSql = sqlite3_mprintf("ATTACH %Q AS localdb;", g.zLocalDbName); | |
| 138 | - rc = sqlite3_exec(db, zSql, 0, 0, 0); | |
| 139 | - sqlite3_free(zSql); | |
| 140 | - } | |
| 141 | - return rc; | |
| 142 | + return SQLITE_OK; | |
| 142 | 143 | } |
| 143 | 144 | |
| 144 | 145 | /* |
| 145 | 146 | ** COMMAND: sqlite3 |
| 146 | 147 | ** |
| 147 | -** Usage: %fossil sqlite3 ?SQL-COMMANDS? ?OPTIONS? | |
| 148 | +** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS? | |
| 148 | 149 | ** |
| 149 | -** Run the standalone sqlite3 command-line shell on the repository database | |
| 150 | -** for the current checkout, or whatever repository is specified by the | |
| 151 | -** -R command-line option. | |
| 150 | +** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS. | |
| 151 | +** If DATABASE is omitted, then the repository that serves the working | |
| 152 | +** directory is opened. | |
| 152 | 153 | ** |
| 153 | 154 | ** WARNING: Careless use of this command can corrupt a Fossil repository |
| 154 | 155 | ** in ways that are unrecoverable. Be sure you know what you are doing before |
| 155 | 156 | ** running any SQL commands that modifies the repository database. |
| 156 | 157 | */ |
| 157 | 158 |
| --- src/sqlcmd.c | |
| +++ src/sqlcmd.c | |
| @@ -106,10 +106,24 @@ | |
| 106 | sqlite3_result_blob(context, pOut, nOut, sqlite3_free); |
| 107 | }else{ |
| 108 | sqlite3_result_error(context, "input is not zlib compressed", -1); |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | /* |
| 113 | ** This is the "automatic extension" initializer that runs right after |
| 114 | ** the connection to the repository database is opened. Set up the |
| 115 | ** database connection to be more useful to the human operator. |
| @@ -117,40 +131,27 @@ | |
| 117 | static int sqlcmd_autoinit( |
| 118 | sqlite3 *db, |
| 119 | const char **pzErrMsg, |
| 120 | const void *notUsed |
| 121 | ){ |
| 122 | char *zSql; |
| 123 | int rc = SQLITE_OK; |
| 124 | sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0, |
| 125 | sqlcmd_content, 0, 0); |
| 126 | sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0, |
| 127 | sqlcmd_compress, 0, 0); |
| 128 | sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0, |
| 129 | sqlcmd_decompress, 0, 0); |
| 130 | re_add_sql_func(db); |
| 131 | foci_register(db); |
| 132 | g.zMainDbType = "repository"; |
| 133 | g.repositoryOpen = 1; |
| 134 | g.db = db; |
| 135 | db_open_config(1); |
| 136 | if( g.zLocalDbName ){ |
| 137 | zSql = sqlite3_mprintf("ATTACH %Q AS localdb;", g.zLocalDbName); |
| 138 | rc = sqlite3_exec(db, zSql, 0, 0, 0); |
| 139 | sqlite3_free(zSql); |
| 140 | } |
| 141 | return rc; |
| 142 | } |
| 143 | |
| 144 | /* |
| 145 | ** COMMAND: sqlite3 |
| 146 | ** |
| 147 | ** Usage: %fossil sqlite3 ?SQL-COMMANDS? ?OPTIONS? |
| 148 | ** |
| 149 | ** Run the standalone sqlite3 command-line shell on the repository database |
| 150 | ** for the current checkout, or whatever repository is specified by the |
| 151 | ** -R command-line option. |
| 152 | ** |
| 153 | ** WARNING: Careless use of this command can corrupt a Fossil repository |
| 154 | ** in ways that are unrecoverable. Be sure you know what you are doing before |
| 155 | ** running any SQL commands that modifies the repository database. |
| 156 | */ |
| 157 |
| --- src/sqlcmd.c | |
| +++ src/sqlcmd.c | |
| @@ -106,10 +106,24 @@ | |
| 106 | sqlite3_result_blob(context, pOut, nOut, sqlite3_free); |
| 107 | }else{ |
| 108 | sqlite3_result_error(context, "input is not zlib compressed", -1); |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | /* |
| 113 | ** Add the content(), compress(), and decompress() SQL functions to |
| 114 | ** database connection db. |
| 115 | */ |
| 116 | int add_content_sql_commands(sqlite3 *db){ |
| 117 | sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0, |
| 118 | sqlcmd_content, 0, 0); |
| 119 | sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0, |
| 120 | sqlcmd_compress, 0, 0); |
| 121 | sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0, |
| 122 | sqlcmd_decompress, 0, 0); |
| 123 | return SQLITE_OK; |
| 124 | } |
| 125 | |
| 126 | /* |
| 127 | ** This is the "automatic extension" initializer that runs right after |
| 128 | ** the connection to the repository database is opened. Set up the |
| 129 | ** database connection to be more useful to the human operator. |
| @@ -117,40 +131,27 @@ | |
| 131 | static int sqlcmd_autoinit( |
| 132 | sqlite3 *db, |
| 133 | const char **pzErrMsg, |
| 134 | const void *notUsed |
| 135 | ){ |
| 136 | add_content_sql_commands(db); |
| 137 | re_add_sql_func(db); |
| 138 | g.zMainDbType = "repository"; |
| 139 | foci_register(db); |
| 140 | g.repositoryOpen = 1; |
| 141 | g.db = db; |
| 142 | return SQLITE_OK; |
| 143 | } |
| 144 | |
| 145 | /* |
| 146 | ** COMMAND: sqlite3 |
| 147 | ** |
| 148 | ** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS? |
| 149 | ** |
| 150 | ** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS. |
| 151 | ** If DATABASE is omitted, then the repository that serves the working |
| 152 | ** directory is opened. |
| 153 | ** |
| 154 | ** WARNING: Careless use of this command can corrupt a Fossil repository |
| 155 | ** in ways that are unrecoverable. Be sure you know what you are doing before |
| 156 | ** running any SQL commands that modifies the repository database. |
| 157 | */ |
| 158 |
+27
-8
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -20,10 +20,20 @@ | ||
| 20 | 20 | */ |
| 21 | 21 | #include "config.h" |
| 22 | 22 | #include <string.h> |
| 23 | 23 | #include <time.h> |
| 24 | 24 | #include "timeline.h" |
| 25 | + | |
| 26 | +/* | |
| 27 | +** Add an appropriate tag to the output if "rid" is unpublished (private) | |
| 28 | +*/ | |
| 29 | +#define UNPUB_TAG "<em>(unpublished)</em>" | |
| 30 | +void tag_private_status(int rid){ | |
| 31 | + if( content_is_private(rid) ){ | |
| 32 | + cgi_printf("%s", UNPUB_TAG); | |
| 33 | + } | |
| 34 | +} | |
| 25 | 35 | |
| 26 | 36 | /* |
| 27 | 37 | ** Generate a hyperlink to a version. |
| 28 | 38 | */ |
| 29 | 39 | void hyperlink_to_uuid(const char *zUuid){ |
| @@ -456,11 +466,11 @@ | ||
| 456 | 466 | blob_reset(&links); |
| 457 | 467 | }else{ |
| 458 | 468 | @ tags: %h(zTagList)) |
| 459 | 469 | } |
| 460 | 470 | } |
| 461 | - | |
| 471 | + tag_private_status(rid); | |
| 462 | 472 | |
| 463 | 473 | /* Generate extra hyperlinks at the end of the comment */ |
| 464 | 474 | if( xExtra ){ |
| 465 | 475 | xExtra(rid); |
| 466 | 476 | } |
| @@ -471,11 +481,11 @@ | ||
| 471 | 481 | ){ |
| 472 | 482 | int inUl = 0; |
| 473 | 483 | if( !fchngQueryInit ){ |
| 474 | 484 | db_prepare(&fchngQuery, |
| 475 | 485 | "SELECT (pid==0) AS isnew," |
| 476 | - " (fid==0) AS isdel," | |
| 486 | + " fid," | |
| 477 | 487 | " (SELECT name FROM filename WHERE fnid=mlink.fnid) AS name," |
| 478 | 488 | " (SELECT uuid FROM blob WHERE rid=fid)," |
| 479 | 489 | " (SELECT uuid FROM blob WHERE rid=pid)," |
| 480 | 490 | " (SELECT name FROM filename WHERE fnid=mlink.pfnid) AS oldnm" |
| 481 | 491 | " FROM mlink" |
| @@ -488,14 +498,16 @@ | ||
| 488 | 498 | } |
| 489 | 499 | db_bind_int(&fchngQuery, ":mid", rid); |
| 490 | 500 | while( db_step(&fchngQuery)==SQLITE_ROW ){ |
| 491 | 501 | const char *zFilename = db_column_text(&fchngQuery, 2); |
| 492 | 502 | int isNew = db_column_int(&fchngQuery, 0); |
| 493 | - int isDel = db_column_int(&fchngQuery, 1); | |
| 503 | + int fid = db_column_int(&fchngQuery, 1); | |
| 504 | + int isDel = fid==0; | |
| 494 | 505 | const char *zOldName = db_column_text(&fchngQuery, 5); |
| 495 | 506 | const char *zOld = db_column_text(&fchngQuery, 4); |
| 496 | 507 | const char *zNew = db_column_text(&fchngQuery, 3); |
| 508 | + const char *zUnpubTag = ""; | |
| 497 | 509 | if( !inUl ){ |
| 498 | 510 | @ <ul class="filelist"> |
| 499 | 511 | inUl = 1; |
| 500 | 512 | } |
| 501 | 513 | if( (tmFlags & TIMELINE_FRENAMES)!=0 ){ |
| @@ -502,23 +514,26 @@ | ||
| 502 | 514 | if( !isNew && !isDel && zOldName!=0 ){ |
| 503 | 515 | @ <li> %h(zOldName) → %h(zFilename) |
| 504 | 516 | } |
| 505 | 517 | continue; |
| 506 | 518 | } |
| 519 | + if( content_is_private(fid) ){ | |
| 520 | + zUnpubTag = UNPUB_TAG; | |
| 521 | + } | |
| 507 | 522 | if( isNew ){ |
| 508 | - @ <li> %h(zFilename) (new file) | |
| 523 | + @ <li> %h(zFilename) %s(zUnpubTag) (new file) | |
| 509 | 524 | @ %z(href("%R/artifact/%s",zNew))[view]</a></li> |
| 510 | 525 | }else if( isDel ){ |
| 511 | 526 | @ <li> %h(zFilename) (deleted)</li> |
| 512 | 527 | }else if( fossil_strcmp(zOld,zNew)==0 && zOldName!=0 ){ |
| 513 | - @ <li> %h(zOldName) → %h(zFilename) | |
| 528 | + @ <li> %h(zOldName) → %h(zFilename) %s(zUnpubTag) | |
| 514 | 529 | @ %z(href("%R/artifact/%s",zNew))[view]</a></li> |
| 515 | 530 | }else{ |
| 516 | 531 | if( zOldName!=0 ){ |
| 517 | - @ <li> %h(zOldName) → %h(zFilename) | |
| 532 | + @ <li> %h(zOldName) → %h(zFilename) %s(zUnpubTag) | |
| 518 | 533 | }else{ |
| 519 | - @ <li> %h(zFilename) | |
| 534 | + @ <li> %h(zFilename) %s(zUnpubTag) | |
| 520 | 535 | } |
| 521 | 536 | @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zOld,zNew))[diff]</a></li> |
| 522 | 537 | } |
| 523 | 538 | } |
| 524 | 539 | db_reset(&fchngQuery); |
| @@ -1617,11 +1632,15 @@ | ||
| 1617 | 1632 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], zBrType); |
| 1618 | 1633 | n = strlen(zPrefix); |
| 1619 | 1634 | } |
| 1620 | 1635 | if( fossil_strcmp(zCurrentUuid,zId)==0 ){ |
| 1621 | 1636 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*CURRENT* "); |
| 1622 | - n += strlen(zPrefix); | |
| 1637 | + n += strlen(zPrefix+n); | |
| 1638 | + } | |
| 1639 | + if( content_is_private(rid) ){ | |
| 1640 | + sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*UNPUBLISHED* "); | |
| 1641 | + n += strlen(zPrefix+n); | |
| 1623 | 1642 | } |
| 1624 | 1643 | zFree = mprintf("[%S] %s%s", zId, zPrefix, zCom); |
| 1625 | 1644 | /* record another X lines */ |
| 1626 | 1645 | nLine += comment_print(zFree, zCom, 9, width, g.comFmtFlags); |
| 1627 | 1646 | fossil_free(zFree); |
| 1628 | 1647 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -20,10 +20,20 @@ | |
| 20 | */ |
| 21 | #include "config.h" |
| 22 | #include <string.h> |
| 23 | #include <time.h> |
| 24 | #include "timeline.h" |
| 25 | |
| 26 | /* |
| 27 | ** Generate a hyperlink to a version. |
| 28 | */ |
| 29 | void hyperlink_to_uuid(const char *zUuid){ |
| @@ -456,11 +466,11 @@ | |
| 456 | blob_reset(&links); |
| 457 | }else{ |
| 458 | @ tags: %h(zTagList)) |
| 459 | } |
| 460 | } |
| 461 | |
| 462 | |
| 463 | /* Generate extra hyperlinks at the end of the comment */ |
| 464 | if( xExtra ){ |
| 465 | xExtra(rid); |
| 466 | } |
| @@ -471,11 +481,11 @@ | |
| 471 | ){ |
| 472 | int inUl = 0; |
| 473 | if( !fchngQueryInit ){ |
| 474 | db_prepare(&fchngQuery, |
| 475 | "SELECT (pid==0) AS isnew," |
| 476 | " (fid==0) AS isdel," |
| 477 | " (SELECT name FROM filename WHERE fnid=mlink.fnid) AS name," |
| 478 | " (SELECT uuid FROM blob WHERE rid=fid)," |
| 479 | " (SELECT uuid FROM blob WHERE rid=pid)," |
| 480 | " (SELECT name FROM filename WHERE fnid=mlink.pfnid) AS oldnm" |
| 481 | " FROM mlink" |
| @@ -488,14 +498,16 @@ | |
| 488 | } |
| 489 | db_bind_int(&fchngQuery, ":mid", rid); |
| 490 | while( db_step(&fchngQuery)==SQLITE_ROW ){ |
| 491 | const char *zFilename = db_column_text(&fchngQuery, 2); |
| 492 | int isNew = db_column_int(&fchngQuery, 0); |
| 493 | int isDel = db_column_int(&fchngQuery, 1); |
| 494 | const char *zOldName = db_column_text(&fchngQuery, 5); |
| 495 | const char *zOld = db_column_text(&fchngQuery, 4); |
| 496 | const char *zNew = db_column_text(&fchngQuery, 3); |
| 497 | if( !inUl ){ |
| 498 | @ <ul class="filelist"> |
| 499 | inUl = 1; |
| 500 | } |
| 501 | if( (tmFlags & TIMELINE_FRENAMES)!=0 ){ |
| @@ -502,23 +514,26 @@ | |
| 502 | if( !isNew && !isDel && zOldName!=0 ){ |
| 503 | @ <li> %h(zOldName) → %h(zFilename) |
| 504 | } |
| 505 | continue; |
| 506 | } |
| 507 | if( isNew ){ |
| 508 | @ <li> %h(zFilename) (new file) |
| 509 | @ %z(href("%R/artifact/%s",zNew))[view]</a></li> |
| 510 | }else if( isDel ){ |
| 511 | @ <li> %h(zFilename) (deleted)</li> |
| 512 | }else if( fossil_strcmp(zOld,zNew)==0 && zOldName!=0 ){ |
| 513 | @ <li> %h(zOldName) → %h(zFilename) |
| 514 | @ %z(href("%R/artifact/%s",zNew))[view]</a></li> |
| 515 | }else{ |
| 516 | if( zOldName!=0 ){ |
| 517 | @ <li> %h(zOldName) → %h(zFilename) |
| 518 | }else{ |
| 519 | @ <li> %h(zFilename) |
| 520 | } |
| 521 | @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zOld,zNew))[diff]</a></li> |
| 522 | } |
| 523 | } |
| 524 | db_reset(&fchngQuery); |
| @@ -1617,11 +1632,15 @@ | |
| 1617 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], zBrType); |
| 1618 | n = strlen(zPrefix); |
| 1619 | } |
| 1620 | if( fossil_strcmp(zCurrentUuid,zId)==0 ){ |
| 1621 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*CURRENT* "); |
| 1622 | n += strlen(zPrefix); |
| 1623 | } |
| 1624 | zFree = mprintf("[%S] %s%s", zId, zPrefix, zCom); |
| 1625 | /* record another X lines */ |
| 1626 | nLine += comment_print(zFree, zCom, 9, width, g.comFmtFlags); |
| 1627 | fossil_free(zFree); |
| 1628 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -20,10 +20,20 @@ | |
| 20 | */ |
| 21 | #include "config.h" |
| 22 | #include <string.h> |
| 23 | #include <time.h> |
| 24 | #include "timeline.h" |
| 25 | |
| 26 | /* |
| 27 | ** Add an appropriate tag to the output if "rid" is unpublished (private) |
| 28 | */ |
| 29 | #define UNPUB_TAG "<em>(unpublished)</em>" |
| 30 | void tag_private_status(int rid){ |
| 31 | if( content_is_private(rid) ){ |
| 32 | cgi_printf("%s", UNPUB_TAG); |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | /* |
| 37 | ** Generate a hyperlink to a version. |
| 38 | */ |
| 39 | void hyperlink_to_uuid(const char *zUuid){ |
| @@ -456,11 +466,11 @@ | |
| 466 | blob_reset(&links); |
| 467 | }else{ |
| 468 | @ tags: %h(zTagList)) |
| 469 | } |
| 470 | } |
| 471 | tag_private_status(rid); |
| 472 | |
| 473 | /* Generate extra hyperlinks at the end of the comment */ |
| 474 | if( xExtra ){ |
| 475 | xExtra(rid); |
| 476 | } |
| @@ -471,11 +481,11 @@ | |
| 481 | ){ |
| 482 | int inUl = 0; |
| 483 | if( !fchngQueryInit ){ |
| 484 | db_prepare(&fchngQuery, |
| 485 | "SELECT (pid==0) AS isnew," |
| 486 | " fid," |
| 487 | " (SELECT name FROM filename WHERE fnid=mlink.fnid) AS name," |
| 488 | " (SELECT uuid FROM blob WHERE rid=fid)," |
| 489 | " (SELECT uuid FROM blob WHERE rid=pid)," |
| 490 | " (SELECT name FROM filename WHERE fnid=mlink.pfnid) AS oldnm" |
| 491 | " FROM mlink" |
| @@ -488,14 +498,16 @@ | |
| 498 | } |
| 499 | db_bind_int(&fchngQuery, ":mid", rid); |
| 500 | while( db_step(&fchngQuery)==SQLITE_ROW ){ |
| 501 | const char *zFilename = db_column_text(&fchngQuery, 2); |
| 502 | int isNew = db_column_int(&fchngQuery, 0); |
| 503 | int fid = db_column_int(&fchngQuery, 1); |
| 504 | int isDel = fid==0; |
| 505 | const char *zOldName = db_column_text(&fchngQuery, 5); |
| 506 | const char *zOld = db_column_text(&fchngQuery, 4); |
| 507 | const char *zNew = db_column_text(&fchngQuery, 3); |
| 508 | const char *zUnpubTag = ""; |
| 509 | if( !inUl ){ |
| 510 | @ <ul class="filelist"> |
| 511 | inUl = 1; |
| 512 | } |
| 513 | if( (tmFlags & TIMELINE_FRENAMES)!=0 ){ |
| @@ -502,23 +514,26 @@ | |
| 514 | if( !isNew && !isDel && zOldName!=0 ){ |
| 515 | @ <li> %h(zOldName) → %h(zFilename) |
| 516 | } |
| 517 | continue; |
| 518 | } |
| 519 | if( content_is_private(fid) ){ |
| 520 | zUnpubTag = UNPUB_TAG; |
| 521 | } |
| 522 | if( isNew ){ |
| 523 | @ <li> %h(zFilename) %s(zUnpubTag) (new file) |
| 524 | @ %z(href("%R/artifact/%s",zNew))[view]</a></li> |
| 525 | }else if( isDel ){ |
| 526 | @ <li> %h(zFilename) (deleted)</li> |
| 527 | }else if( fossil_strcmp(zOld,zNew)==0 && zOldName!=0 ){ |
| 528 | @ <li> %h(zOldName) → %h(zFilename) %s(zUnpubTag) |
| 529 | @ %z(href("%R/artifact/%s",zNew))[view]</a></li> |
| 530 | }else{ |
| 531 | if( zOldName!=0 ){ |
| 532 | @ <li> %h(zOldName) → %h(zFilename) %s(zUnpubTag) |
| 533 | }else{ |
| 534 | @ <li> %h(zFilename) %s(zUnpubTag) |
| 535 | } |
| 536 | @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zOld,zNew))[diff]</a></li> |
| 537 | } |
| 538 | } |
| 539 | db_reset(&fchngQuery); |
| @@ -1617,11 +1632,15 @@ | |
| 1632 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], zBrType); |
| 1633 | n = strlen(zPrefix); |
| 1634 | } |
| 1635 | if( fossil_strcmp(zCurrentUuid,zId)==0 ){ |
| 1636 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*CURRENT* "); |
| 1637 | n += strlen(zPrefix+n); |
| 1638 | } |
| 1639 | if( content_is_private(rid) ){ |
| 1640 | sqlite3_snprintf(sizeof(zPrefix)-n, &zPrefix[n], "*UNPUBLISHED* "); |
| 1641 | n += strlen(zPrefix+n); |
| 1642 | } |
| 1643 | zFree = mprintf("[%S] %s%s", zId, zPrefix, zCom); |
| 1644 | /* record another X lines */ |
| 1645 | nLine += comment_print(zFree, zCom, 9, width, g.comFmtFlags); |
| 1646 | fossil_free(zFree); |
| 1647 |
+22
-4
| --- win/Makefile.dmc | ||
| +++ win/Makefile.dmc | ||
| @@ -28,13 +28,13 @@ | ||
| 28 | 28 | |
| 29 | 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS |
| 30 | 30 | |
| 31 | 31 | SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | 32 | |
| 33 | -SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c | |
| 33 | +SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c | |
| 34 | 34 | |
| 35 | -OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O | |
| 35 | +OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O | |
| 36 | 36 | |
| 37 | 37 | |
| 38 | 38 | RC=$(DMDIR)\bin\rcc |
| 39 | 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | 40 | |
| @@ -49,11 +49,11 @@ | ||
| 49 | 49 | |
| 50 | 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | 52 | |
| 53 | 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | - +echo add allrepo attach bag bisect blob branch browse builtin cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo foci fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ | |
| 54 | + +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo foci fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf publish purge rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ | |
| 55 | 55 | +echo fossil >> $@ |
| 56 | 56 | +echo fossil >> $@ |
| 57 | 57 | +echo $(LIBS) >> $@ |
| 58 | 58 | +echo. >> $@ |
| 59 | 59 | +echo fossil >> $@ |
| @@ -176,10 +176,16 @@ | ||
| 176 | 176 | $(OBJDIR)\builtin$O : builtin_.c builtin.h |
| 177 | 177 | $(TCC) -o$@ -c builtin_.c |
| 178 | 178 | |
| 179 | 179 | builtin_.c : $(SRCDIR)\builtin.c |
| 180 | 180 | +translate$E $** > $@ |
| 181 | + | |
| 182 | +$(OBJDIR)\bundle$O : bundle_.c bundle.h | |
| 183 | + $(TCC) -o$@ -c bundle_.c | |
| 184 | + | |
| 185 | +bundle_.c : $(SRCDIR)\bundle.c | |
| 186 | + +translate$E $** > $@ | |
| 181 | 187 | |
| 182 | 188 | $(OBJDIR)\cache$O : cache_.c cache.h |
| 183 | 189 | $(TCC) -o$@ -c cache_.c |
| 184 | 190 | |
| 185 | 191 | cache_.c : $(SRCDIR)\cache.c |
| @@ -572,10 +578,22 @@ | ||
| 572 | 578 | $(OBJDIR)\printf$O : printf_.c printf.h |
| 573 | 579 | $(TCC) -o$@ -c printf_.c |
| 574 | 580 | |
| 575 | 581 | printf_.c : $(SRCDIR)\printf.c |
| 576 | 582 | +translate$E $** > $@ |
| 583 | + | |
| 584 | +$(OBJDIR)\publish$O : publish_.c publish.h | |
| 585 | + $(TCC) -o$@ -c publish_.c | |
| 586 | + | |
| 587 | +publish_.c : $(SRCDIR)\publish.c | |
| 588 | + +translate$E $** > $@ | |
| 589 | + | |
| 590 | +$(OBJDIR)\purge$O : purge_.c purge.h | |
| 591 | + $(TCC) -o$@ -c purge_.c | |
| 592 | + | |
| 593 | +purge_.c : $(SRCDIR)\purge.c | |
| 594 | + +translate$E $** > $@ | |
| 577 | 595 | |
| 578 | 596 | $(OBJDIR)\rebuild$O : rebuild_.c rebuild.h |
| 579 | 597 | $(TCC) -o$@ -c rebuild_.c |
| 580 | 598 | |
| 581 | 599 | rebuild_.c : $(SRCDIR)\rebuild.c |
| @@ -802,7 +820,7 @@ | ||
| 802 | 820 | |
| 803 | 821 | zip_.c : $(SRCDIR)\zip.c |
| 804 | 822 | +translate$E $** > $@ |
| 805 | 823 | |
| 806 | 824 | headers: makeheaders$E page_index.h builtin_data.h VERSION.h |
| 807 | - +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h | |
| 825 | + +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h | |
| 808 | 826 | @copy /Y nul: headers |
| 809 | 827 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -28,13 +28,13 @@ | |
| 28 | |
| 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS |
| 30 | |
| 31 | SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | |
| 33 | SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 34 | |
| 35 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 | |
| 37 | |
| 38 | RC=$(DMDIR)\bin\rcc |
| 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | |
| @@ -49,11 +49,11 @@ | |
| 49 | |
| 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | |
| 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | +echo add allrepo attach bag bisect blob branch browse builtin cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo foci fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 55 | +echo fossil >> $@ |
| 56 | +echo fossil >> $@ |
| 57 | +echo $(LIBS) >> $@ |
| 58 | +echo. >> $@ |
| 59 | +echo fossil >> $@ |
| @@ -176,10 +176,16 @@ | |
| 176 | $(OBJDIR)\builtin$O : builtin_.c builtin.h |
| 177 | $(TCC) -o$@ -c builtin_.c |
| 178 | |
| 179 | builtin_.c : $(SRCDIR)\builtin.c |
| 180 | +translate$E $** > $@ |
| 181 | |
| 182 | $(OBJDIR)\cache$O : cache_.c cache.h |
| 183 | $(TCC) -o$@ -c cache_.c |
| 184 | |
| 185 | cache_.c : $(SRCDIR)\cache.c |
| @@ -572,10 +578,22 @@ | |
| 572 | $(OBJDIR)\printf$O : printf_.c printf.h |
| 573 | $(TCC) -o$@ -c printf_.c |
| 574 | |
| 575 | printf_.c : $(SRCDIR)\printf.c |
| 576 | +translate$E $** > $@ |
| 577 | |
| 578 | $(OBJDIR)\rebuild$O : rebuild_.c rebuild.h |
| 579 | $(TCC) -o$@ -c rebuild_.c |
| 580 | |
| 581 | rebuild_.c : $(SRCDIR)\rebuild.c |
| @@ -802,7 +820,7 @@ | |
| 802 | |
| 803 | zip_.c : $(SRCDIR)\zip.c |
| 804 | +translate$E $** > $@ |
| 805 | |
| 806 | headers: makeheaders$E page_index.h builtin_data.h VERSION.h |
| 807 | +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h |
| 808 | @copy /Y nul: headers |
| 809 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -28,13 +28,13 @@ | |
| 28 | |
| 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS |
| 30 | |
| 31 | SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | |
| 33 | SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 34 | |
| 35 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 | |
| 37 | |
| 38 | RC=$(DMDIR)\bin\rcc |
| 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | |
| @@ -49,11 +49,11 @@ | |
| 49 | |
| 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | |
| 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo foci fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf publish purge rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 55 | +echo fossil >> $@ |
| 56 | +echo fossil >> $@ |
| 57 | +echo $(LIBS) >> $@ |
| 58 | +echo. >> $@ |
| 59 | +echo fossil >> $@ |
| @@ -176,10 +176,16 @@ | |
| 176 | $(OBJDIR)\builtin$O : builtin_.c builtin.h |
| 177 | $(TCC) -o$@ -c builtin_.c |
| 178 | |
| 179 | builtin_.c : $(SRCDIR)\builtin.c |
| 180 | +translate$E $** > $@ |
| 181 | |
| 182 | $(OBJDIR)\bundle$O : bundle_.c bundle.h |
| 183 | $(TCC) -o$@ -c bundle_.c |
| 184 | |
| 185 | bundle_.c : $(SRCDIR)\bundle.c |
| 186 | +translate$E $** > $@ |
| 187 | |
| 188 | $(OBJDIR)\cache$O : cache_.c cache.h |
| 189 | $(TCC) -o$@ -c cache_.c |
| 190 | |
| 191 | cache_.c : $(SRCDIR)\cache.c |
| @@ -572,10 +578,22 @@ | |
| 578 | $(OBJDIR)\printf$O : printf_.c printf.h |
| 579 | $(TCC) -o$@ -c printf_.c |
| 580 | |
| 581 | printf_.c : $(SRCDIR)\printf.c |
| 582 | +translate$E $** > $@ |
| 583 | |
| 584 | $(OBJDIR)\publish$O : publish_.c publish.h |
| 585 | $(TCC) -o$@ -c publish_.c |
| 586 | |
| 587 | publish_.c : $(SRCDIR)\publish.c |
| 588 | +translate$E $** > $@ |
| 589 | |
| 590 | $(OBJDIR)\purge$O : purge_.c purge.h |
| 591 | $(TCC) -o$@ -c purge_.c |
| 592 | |
| 593 | purge_.c : $(SRCDIR)\purge.c |
| 594 | +translate$E $** > $@ |
| 595 | |
| 596 | $(OBJDIR)\rebuild$O : rebuild_.c rebuild.h |
| 597 | $(TCC) -o$@ -c rebuild_.c |
| 598 | |
| 599 | rebuild_.c : $(SRCDIR)\rebuild.c |
| @@ -802,7 +820,7 @@ | |
| 820 | |
| 821 | zip_.c : $(SRCDIR)\zip.c |
| 822 | +translate$E $** > $@ |
| 823 | |
| 824 | headers: makeheaders$E page_index.h builtin_data.h VERSION.h |
| 825 | +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h |
| 826 | @copy /Y nul: headers |
| 827 |
+36
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -357,10 +357,11 @@ | ||
| 357 | 357 | $(SRCDIR)/bisect.c \ |
| 358 | 358 | $(SRCDIR)/blob.c \ |
| 359 | 359 | $(SRCDIR)/branch.c \ |
| 360 | 360 | $(SRCDIR)/browse.c \ |
| 361 | 361 | $(SRCDIR)/builtin.c \ |
| 362 | + $(SRCDIR)/bundle.c \ | |
| 362 | 363 | $(SRCDIR)/cache.c \ |
| 363 | 364 | $(SRCDIR)/captcha.c \ |
| 364 | 365 | $(SRCDIR)/cgi.c \ |
| 365 | 366 | $(SRCDIR)/checkin.c \ |
| 366 | 367 | $(SRCDIR)/checkout.c \ |
| @@ -423,10 +424,12 @@ | ||
| 423 | 424 | $(SRCDIR)/path.c \ |
| 424 | 425 | $(SRCDIR)/pivot.c \ |
| 425 | 426 | $(SRCDIR)/popen.c \ |
| 426 | 427 | $(SRCDIR)/pqueue.c \ |
| 427 | 428 | $(SRCDIR)/printf.c \ |
| 429 | + $(SRCDIR)/publish.c \ | |
| 430 | + $(SRCDIR)/purge.c \ | |
| 428 | 431 | $(SRCDIR)/rebuild.c \ |
| 429 | 432 | $(SRCDIR)/regexp.c \ |
| 430 | 433 | $(SRCDIR)/report.c \ |
| 431 | 434 | $(SRCDIR)/rss.c \ |
| 432 | 435 | $(SRCDIR)/schema.c \ |
| @@ -475,10 +478,11 @@ | ||
| 475 | 478 | $(OBJDIR)/bisect_.c \ |
| 476 | 479 | $(OBJDIR)/blob_.c \ |
| 477 | 480 | $(OBJDIR)/branch_.c \ |
| 478 | 481 | $(OBJDIR)/browse_.c \ |
| 479 | 482 | $(OBJDIR)/builtin_.c \ |
| 483 | + $(OBJDIR)/bundle_.c \ | |
| 480 | 484 | $(OBJDIR)/cache_.c \ |
| 481 | 485 | $(OBJDIR)/captcha_.c \ |
| 482 | 486 | $(OBJDIR)/cgi_.c \ |
| 483 | 487 | $(OBJDIR)/checkin_.c \ |
| 484 | 488 | $(OBJDIR)/checkout_.c \ |
| @@ -541,10 +545,12 @@ | ||
| 541 | 545 | $(OBJDIR)/path_.c \ |
| 542 | 546 | $(OBJDIR)/pivot_.c \ |
| 543 | 547 | $(OBJDIR)/popen_.c \ |
| 544 | 548 | $(OBJDIR)/pqueue_.c \ |
| 545 | 549 | $(OBJDIR)/printf_.c \ |
| 550 | + $(OBJDIR)/publish_.c \ | |
| 551 | + $(OBJDIR)/purge_.c \ | |
| 546 | 552 | $(OBJDIR)/rebuild_.c \ |
| 547 | 553 | $(OBJDIR)/regexp_.c \ |
| 548 | 554 | $(OBJDIR)/report_.c \ |
| 549 | 555 | $(OBJDIR)/rss_.c \ |
| 550 | 556 | $(OBJDIR)/schema_.c \ |
| @@ -590,10 +596,11 @@ | ||
| 590 | 596 | $(OBJDIR)/bisect.o \ |
| 591 | 597 | $(OBJDIR)/blob.o \ |
| 592 | 598 | $(OBJDIR)/branch.o \ |
| 593 | 599 | $(OBJDIR)/browse.o \ |
| 594 | 600 | $(OBJDIR)/builtin.o \ |
| 601 | + $(OBJDIR)/bundle.o \ | |
| 595 | 602 | $(OBJDIR)/cache.o \ |
| 596 | 603 | $(OBJDIR)/captcha.o \ |
| 597 | 604 | $(OBJDIR)/cgi.o \ |
| 598 | 605 | $(OBJDIR)/checkin.o \ |
| 599 | 606 | $(OBJDIR)/checkout.o \ |
| @@ -656,10 +663,12 @@ | ||
| 656 | 663 | $(OBJDIR)/path.o \ |
| 657 | 664 | $(OBJDIR)/pivot.o \ |
| 658 | 665 | $(OBJDIR)/popen.o \ |
| 659 | 666 | $(OBJDIR)/pqueue.o \ |
| 660 | 667 | $(OBJDIR)/printf.o \ |
| 668 | + $(OBJDIR)/publish.o \ | |
| 669 | + $(OBJDIR)/purge.o \ | |
| 661 | 670 | $(OBJDIR)/rebuild.o \ |
| 662 | 671 | $(OBJDIR)/regexp.o \ |
| 663 | 672 | $(OBJDIR)/report.o \ |
| 664 | 673 | $(OBJDIR)/rss.o \ |
| 665 | 674 | $(OBJDIR)/schema.o \ |
| @@ -898,10 +907,11 @@ | ||
| 898 | 907 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 899 | 908 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 900 | 909 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 901 | 910 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 902 | 911 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 912 | + $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \ | |
| 903 | 913 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 904 | 914 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 905 | 915 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 906 | 916 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 907 | 917 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -964,10 +974,12 @@ | ||
| 964 | 974 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 965 | 975 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 966 | 976 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 967 | 977 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 968 | 978 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 979 | + $(OBJDIR)/publish_.c:$(OBJDIR)/publish.h \ | |
| 980 | + $(OBJDIR)/purge_.c:$(OBJDIR)/purge.h \ | |
| 969 | 981 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 970 | 982 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 971 | 983 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 972 | 984 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 973 | 985 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -1082,10 +1094,18 @@ | ||
| 1082 | 1094 | |
| 1083 | 1095 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 1084 | 1096 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 1085 | 1097 | |
| 1086 | 1098 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 1099 | + | |
| 1100 | +$(OBJDIR)/bundle_.c: $(SRCDIR)/bundle.c $(TRANSLATE) | |
| 1101 | + $(TRANSLATE) $(SRCDIR)/bundle.c >$@ | |
| 1102 | + | |
| 1103 | +$(OBJDIR)/bundle.o: $(OBJDIR)/bundle_.c $(OBJDIR)/bundle.h $(SRCDIR)/config.h | |
| 1104 | + $(XTCC) -o $(OBJDIR)/bundle.o -c $(OBJDIR)/bundle_.c | |
| 1105 | + | |
| 1106 | +$(OBJDIR)/bundle.h: $(OBJDIR)/headers | |
| 1087 | 1107 | |
| 1088 | 1108 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(TRANSLATE) |
| 1089 | 1109 | $(TRANSLATE) $(SRCDIR)/cache.c >$@ |
| 1090 | 1110 | |
| 1091 | 1111 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1610,10 +1630,26 @@ | ||
| 1610 | 1630 | |
| 1611 | 1631 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1612 | 1632 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1613 | 1633 | |
| 1614 | 1634 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1635 | + | |
| 1636 | +$(OBJDIR)/publish_.c: $(SRCDIR)/publish.c $(TRANSLATE) | |
| 1637 | + $(TRANSLATE) $(SRCDIR)/publish.c >$@ | |
| 1638 | + | |
| 1639 | +$(OBJDIR)/publish.o: $(OBJDIR)/publish_.c $(OBJDIR)/publish.h $(SRCDIR)/config.h | |
| 1640 | + $(XTCC) -o $(OBJDIR)/publish.o -c $(OBJDIR)/publish_.c | |
| 1641 | + | |
| 1642 | +$(OBJDIR)/publish.h: $(OBJDIR)/headers | |
| 1643 | + | |
| 1644 | +$(OBJDIR)/purge_.c: $(SRCDIR)/purge.c $(TRANSLATE) | |
| 1645 | + $(TRANSLATE) $(SRCDIR)/purge.c >$@ | |
| 1646 | + | |
| 1647 | +$(OBJDIR)/purge.o: $(OBJDIR)/purge_.c $(OBJDIR)/purge.h $(SRCDIR)/config.h | |
| 1648 | + $(XTCC) -o $(OBJDIR)/purge.o -c $(OBJDIR)/purge_.c | |
| 1649 | + | |
| 1650 | +$(OBJDIR)/purge.h: $(OBJDIR)/headers | |
| 1615 | 1651 | |
| 1616 | 1652 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(TRANSLATE) |
| 1617 | 1653 | $(TRANSLATE) $(SRCDIR)/rebuild.c >$@ |
| 1618 | 1654 | |
| 1619 | 1655 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1620 | 1656 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -357,10 +357,11 @@ | |
| 357 | $(SRCDIR)/bisect.c \ |
| 358 | $(SRCDIR)/blob.c \ |
| 359 | $(SRCDIR)/branch.c \ |
| 360 | $(SRCDIR)/browse.c \ |
| 361 | $(SRCDIR)/builtin.c \ |
| 362 | $(SRCDIR)/cache.c \ |
| 363 | $(SRCDIR)/captcha.c \ |
| 364 | $(SRCDIR)/cgi.c \ |
| 365 | $(SRCDIR)/checkin.c \ |
| 366 | $(SRCDIR)/checkout.c \ |
| @@ -423,10 +424,12 @@ | |
| 423 | $(SRCDIR)/path.c \ |
| 424 | $(SRCDIR)/pivot.c \ |
| 425 | $(SRCDIR)/popen.c \ |
| 426 | $(SRCDIR)/pqueue.c \ |
| 427 | $(SRCDIR)/printf.c \ |
| 428 | $(SRCDIR)/rebuild.c \ |
| 429 | $(SRCDIR)/regexp.c \ |
| 430 | $(SRCDIR)/report.c \ |
| 431 | $(SRCDIR)/rss.c \ |
| 432 | $(SRCDIR)/schema.c \ |
| @@ -475,10 +478,11 @@ | |
| 475 | $(OBJDIR)/bisect_.c \ |
| 476 | $(OBJDIR)/blob_.c \ |
| 477 | $(OBJDIR)/branch_.c \ |
| 478 | $(OBJDIR)/browse_.c \ |
| 479 | $(OBJDIR)/builtin_.c \ |
| 480 | $(OBJDIR)/cache_.c \ |
| 481 | $(OBJDIR)/captcha_.c \ |
| 482 | $(OBJDIR)/cgi_.c \ |
| 483 | $(OBJDIR)/checkin_.c \ |
| 484 | $(OBJDIR)/checkout_.c \ |
| @@ -541,10 +545,12 @@ | |
| 541 | $(OBJDIR)/path_.c \ |
| 542 | $(OBJDIR)/pivot_.c \ |
| 543 | $(OBJDIR)/popen_.c \ |
| 544 | $(OBJDIR)/pqueue_.c \ |
| 545 | $(OBJDIR)/printf_.c \ |
| 546 | $(OBJDIR)/rebuild_.c \ |
| 547 | $(OBJDIR)/regexp_.c \ |
| 548 | $(OBJDIR)/report_.c \ |
| 549 | $(OBJDIR)/rss_.c \ |
| 550 | $(OBJDIR)/schema_.c \ |
| @@ -590,10 +596,11 @@ | |
| 590 | $(OBJDIR)/bisect.o \ |
| 591 | $(OBJDIR)/blob.o \ |
| 592 | $(OBJDIR)/branch.o \ |
| 593 | $(OBJDIR)/browse.o \ |
| 594 | $(OBJDIR)/builtin.o \ |
| 595 | $(OBJDIR)/cache.o \ |
| 596 | $(OBJDIR)/captcha.o \ |
| 597 | $(OBJDIR)/cgi.o \ |
| 598 | $(OBJDIR)/checkin.o \ |
| 599 | $(OBJDIR)/checkout.o \ |
| @@ -656,10 +663,12 @@ | |
| 656 | $(OBJDIR)/path.o \ |
| 657 | $(OBJDIR)/pivot.o \ |
| 658 | $(OBJDIR)/popen.o \ |
| 659 | $(OBJDIR)/pqueue.o \ |
| 660 | $(OBJDIR)/printf.o \ |
| 661 | $(OBJDIR)/rebuild.o \ |
| 662 | $(OBJDIR)/regexp.o \ |
| 663 | $(OBJDIR)/report.o \ |
| 664 | $(OBJDIR)/rss.o \ |
| 665 | $(OBJDIR)/schema.o \ |
| @@ -898,10 +907,11 @@ | |
| 898 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 899 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 900 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 901 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 902 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 903 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 904 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 905 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 906 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 907 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -964,10 +974,12 @@ | |
| 964 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 965 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 966 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 967 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 968 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 969 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 970 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 971 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 972 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 973 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -1082,10 +1094,18 @@ | |
| 1082 | |
| 1083 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 1084 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 1085 | |
| 1086 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 1087 | |
| 1088 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(TRANSLATE) |
| 1089 | $(TRANSLATE) $(SRCDIR)/cache.c >$@ |
| 1090 | |
| 1091 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1610,10 +1630,26 @@ | |
| 1610 | |
| 1611 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1612 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1613 | |
| 1614 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1615 | |
| 1616 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(TRANSLATE) |
| 1617 | $(TRANSLATE) $(SRCDIR)/rebuild.c >$@ |
| 1618 | |
| 1619 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1620 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -357,10 +357,11 @@ | |
| 357 | $(SRCDIR)/bisect.c \ |
| 358 | $(SRCDIR)/blob.c \ |
| 359 | $(SRCDIR)/branch.c \ |
| 360 | $(SRCDIR)/browse.c \ |
| 361 | $(SRCDIR)/builtin.c \ |
| 362 | $(SRCDIR)/bundle.c \ |
| 363 | $(SRCDIR)/cache.c \ |
| 364 | $(SRCDIR)/captcha.c \ |
| 365 | $(SRCDIR)/cgi.c \ |
| 366 | $(SRCDIR)/checkin.c \ |
| 367 | $(SRCDIR)/checkout.c \ |
| @@ -423,10 +424,12 @@ | |
| 424 | $(SRCDIR)/path.c \ |
| 425 | $(SRCDIR)/pivot.c \ |
| 426 | $(SRCDIR)/popen.c \ |
| 427 | $(SRCDIR)/pqueue.c \ |
| 428 | $(SRCDIR)/printf.c \ |
| 429 | $(SRCDIR)/publish.c \ |
| 430 | $(SRCDIR)/purge.c \ |
| 431 | $(SRCDIR)/rebuild.c \ |
| 432 | $(SRCDIR)/regexp.c \ |
| 433 | $(SRCDIR)/report.c \ |
| 434 | $(SRCDIR)/rss.c \ |
| 435 | $(SRCDIR)/schema.c \ |
| @@ -475,10 +478,11 @@ | |
| 478 | $(OBJDIR)/bisect_.c \ |
| 479 | $(OBJDIR)/blob_.c \ |
| 480 | $(OBJDIR)/branch_.c \ |
| 481 | $(OBJDIR)/browse_.c \ |
| 482 | $(OBJDIR)/builtin_.c \ |
| 483 | $(OBJDIR)/bundle_.c \ |
| 484 | $(OBJDIR)/cache_.c \ |
| 485 | $(OBJDIR)/captcha_.c \ |
| 486 | $(OBJDIR)/cgi_.c \ |
| 487 | $(OBJDIR)/checkin_.c \ |
| 488 | $(OBJDIR)/checkout_.c \ |
| @@ -541,10 +545,12 @@ | |
| 545 | $(OBJDIR)/path_.c \ |
| 546 | $(OBJDIR)/pivot_.c \ |
| 547 | $(OBJDIR)/popen_.c \ |
| 548 | $(OBJDIR)/pqueue_.c \ |
| 549 | $(OBJDIR)/printf_.c \ |
| 550 | $(OBJDIR)/publish_.c \ |
| 551 | $(OBJDIR)/purge_.c \ |
| 552 | $(OBJDIR)/rebuild_.c \ |
| 553 | $(OBJDIR)/regexp_.c \ |
| 554 | $(OBJDIR)/report_.c \ |
| 555 | $(OBJDIR)/rss_.c \ |
| 556 | $(OBJDIR)/schema_.c \ |
| @@ -590,10 +596,11 @@ | |
| 596 | $(OBJDIR)/bisect.o \ |
| 597 | $(OBJDIR)/blob.o \ |
| 598 | $(OBJDIR)/branch.o \ |
| 599 | $(OBJDIR)/browse.o \ |
| 600 | $(OBJDIR)/builtin.o \ |
| 601 | $(OBJDIR)/bundle.o \ |
| 602 | $(OBJDIR)/cache.o \ |
| 603 | $(OBJDIR)/captcha.o \ |
| 604 | $(OBJDIR)/cgi.o \ |
| 605 | $(OBJDIR)/checkin.o \ |
| 606 | $(OBJDIR)/checkout.o \ |
| @@ -656,10 +663,12 @@ | |
| 663 | $(OBJDIR)/path.o \ |
| 664 | $(OBJDIR)/pivot.o \ |
| 665 | $(OBJDIR)/popen.o \ |
| 666 | $(OBJDIR)/pqueue.o \ |
| 667 | $(OBJDIR)/printf.o \ |
| 668 | $(OBJDIR)/publish.o \ |
| 669 | $(OBJDIR)/purge.o \ |
| 670 | $(OBJDIR)/rebuild.o \ |
| 671 | $(OBJDIR)/regexp.o \ |
| 672 | $(OBJDIR)/report.o \ |
| 673 | $(OBJDIR)/rss.o \ |
| 674 | $(OBJDIR)/schema.o \ |
| @@ -898,10 +907,11 @@ | |
| 907 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 908 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 909 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 910 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 911 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 912 | $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \ |
| 913 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 914 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 915 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 916 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 917 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -964,10 +974,12 @@ | |
| 974 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 975 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 976 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 977 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 978 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 979 | $(OBJDIR)/publish_.c:$(OBJDIR)/publish.h \ |
| 980 | $(OBJDIR)/purge_.c:$(OBJDIR)/purge.h \ |
| 981 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 982 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 983 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 984 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 985 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -1082,10 +1094,18 @@ | |
| 1094 | |
| 1095 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 1096 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 1097 | |
| 1098 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 1099 | |
| 1100 | $(OBJDIR)/bundle_.c: $(SRCDIR)/bundle.c $(TRANSLATE) |
| 1101 | $(TRANSLATE) $(SRCDIR)/bundle.c >$@ |
| 1102 | |
| 1103 | $(OBJDIR)/bundle.o: $(OBJDIR)/bundle_.c $(OBJDIR)/bundle.h $(SRCDIR)/config.h |
| 1104 | $(XTCC) -o $(OBJDIR)/bundle.o -c $(OBJDIR)/bundle_.c |
| 1105 | |
| 1106 | $(OBJDIR)/bundle.h: $(OBJDIR)/headers |
| 1107 | |
| 1108 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(TRANSLATE) |
| 1109 | $(TRANSLATE) $(SRCDIR)/cache.c >$@ |
| 1110 | |
| 1111 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1610,10 +1630,26 @@ | |
| 1630 | |
| 1631 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1632 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1633 | |
| 1634 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1635 | |
| 1636 | $(OBJDIR)/publish_.c: $(SRCDIR)/publish.c $(TRANSLATE) |
| 1637 | $(TRANSLATE) $(SRCDIR)/publish.c >$@ |
| 1638 | |
| 1639 | $(OBJDIR)/publish.o: $(OBJDIR)/publish_.c $(OBJDIR)/publish.h $(SRCDIR)/config.h |
| 1640 | $(XTCC) -o $(OBJDIR)/publish.o -c $(OBJDIR)/publish_.c |
| 1641 | |
| 1642 | $(OBJDIR)/publish.h: $(OBJDIR)/headers |
| 1643 | |
| 1644 | $(OBJDIR)/purge_.c: $(SRCDIR)/purge.c $(TRANSLATE) |
| 1645 | $(TRANSLATE) $(SRCDIR)/purge.c >$@ |
| 1646 | |
| 1647 | $(OBJDIR)/purge.o: $(OBJDIR)/purge_.c $(OBJDIR)/purge.h $(SRCDIR)/config.h |
| 1648 | $(XTCC) -o $(OBJDIR)/purge.o -c $(OBJDIR)/purge_.c |
| 1649 | |
| 1650 | $(OBJDIR)/purge.h: $(OBJDIR)/headers |
| 1651 | |
| 1652 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(TRANSLATE) |
| 1653 | $(TRANSLATE) $(SRCDIR)/rebuild.c >$@ |
| 1654 | |
| 1655 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1656 |
+36
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -357,10 +357,11 @@ | ||
| 357 | 357 | $(SRCDIR)/bisect.c \ |
| 358 | 358 | $(SRCDIR)/blob.c \ |
| 359 | 359 | $(SRCDIR)/branch.c \ |
| 360 | 360 | $(SRCDIR)/browse.c \ |
| 361 | 361 | $(SRCDIR)/builtin.c \ |
| 362 | + $(SRCDIR)/bundle.c \ | |
| 362 | 363 | $(SRCDIR)/cache.c \ |
| 363 | 364 | $(SRCDIR)/captcha.c \ |
| 364 | 365 | $(SRCDIR)/cgi.c \ |
| 365 | 366 | $(SRCDIR)/checkin.c \ |
| 366 | 367 | $(SRCDIR)/checkout.c \ |
| @@ -423,10 +424,12 @@ | ||
| 423 | 424 | $(SRCDIR)/path.c \ |
| 424 | 425 | $(SRCDIR)/pivot.c \ |
| 425 | 426 | $(SRCDIR)/popen.c \ |
| 426 | 427 | $(SRCDIR)/pqueue.c \ |
| 427 | 428 | $(SRCDIR)/printf.c \ |
| 429 | + $(SRCDIR)/publish.c \ | |
| 430 | + $(SRCDIR)/purge.c \ | |
| 428 | 431 | $(SRCDIR)/rebuild.c \ |
| 429 | 432 | $(SRCDIR)/regexp.c \ |
| 430 | 433 | $(SRCDIR)/report.c \ |
| 431 | 434 | $(SRCDIR)/rss.c \ |
| 432 | 435 | $(SRCDIR)/schema.c \ |
| @@ -475,10 +478,11 @@ | ||
| 475 | 478 | $(OBJDIR)/bisect_.c \ |
| 476 | 479 | $(OBJDIR)/blob_.c \ |
| 477 | 480 | $(OBJDIR)/branch_.c \ |
| 478 | 481 | $(OBJDIR)/browse_.c \ |
| 479 | 482 | $(OBJDIR)/builtin_.c \ |
| 483 | + $(OBJDIR)/bundle_.c \ | |
| 480 | 484 | $(OBJDIR)/cache_.c \ |
| 481 | 485 | $(OBJDIR)/captcha_.c \ |
| 482 | 486 | $(OBJDIR)/cgi_.c \ |
| 483 | 487 | $(OBJDIR)/checkin_.c \ |
| 484 | 488 | $(OBJDIR)/checkout_.c \ |
| @@ -541,10 +545,12 @@ | ||
| 541 | 545 | $(OBJDIR)/path_.c \ |
| 542 | 546 | $(OBJDIR)/pivot_.c \ |
| 543 | 547 | $(OBJDIR)/popen_.c \ |
| 544 | 548 | $(OBJDIR)/pqueue_.c \ |
| 545 | 549 | $(OBJDIR)/printf_.c \ |
| 550 | + $(OBJDIR)/publish_.c \ | |
| 551 | + $(OBJDIR)/purge_.c \ | |
| 546 | 552 | $(OBJDIR)/rebuild_.c \ |
| 547 | 553 | $(OBJDIR)/regexp_.c \ |
| 548 | 554 | $(OBJDIR)/report_.c \ |
| 549 | 555 | $(OBJDIR)/rss_.c \ |
| 550 | 556 | $(OBJDIR)/schema_.c \ |
| @@ -590,10 +596,11 @@ | ||
| 590 | 596 | $(OBJDIR)/bisect.o \ |
| 591 | 597 | $(OBJDIR)/blob.o \ |
| 592 | 598 | $(OBJDIR)/branch.o \ |
| 593 | 599 | $(OBJDIR)/browse.o \ |
| 594 | 600 | $(OBJDIR)/builtin.o \ |
| 601 | + $(OBJDIR)/bundle.o \ | |
| 595 | 602 | $(OBJDIR)/cache.o \ |
| 596 | 603 | $(OBJDIR)/captcha.o \ |
| 597 | 604 | $(OBJDIR)/cgi.o \ |
| 598 | 605 | $(OBJDIR)/checkin.o \ |
| 599 | 606 | $(OBJDIR)/checkout.o \ |
| @@ -656,10 +663,12 @@ | ||
| 656 | 663 | $(OBJDIR)/path.o \ |
| 657 | 664 | $(OBJDIR)/pivot.o \ |
| 658 | 665 | $(OBJDIR)/popen.o \ |
| 659 | 666 | $(OBJDIR)/pqueue.o \ |
| 660 | 667 | $(OBJDIR)/printf.o \ |
| 668 | + $(OBJDIR)/publish.o \ | |
| 669 | + $(OBJDIR)/purge.o \ | |
| 661 | 670 | $(OBJDIR)/rebuild.o \ |
| 662 | 671 | $(OBJDIR)/regexp.o \ |
| 663 | 672 | $(OBJDIR)/report.o \ |
| 664 | 673 | $(OBJDIR)/rss.o \ |
| 665 | 674 | $(OBJDIR)/schema.o \ |
| @@ -898,10 +907,11 @@ | ||
| 898 | 907 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 899 | 908 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 900 | 909 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 901 | 910 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 902 | 911 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 912 | + $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \ | |
| 903 | 913 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 904 | 914 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 905 | 915 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 906 | 916 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 907 | 917 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -964,10 +974,12 @@ | ||
| 964 | 974 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 965 | 975 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 966 | 976 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 967 | 977 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 968 | 978 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 979 | + $(OBJDIR)/publish_.c:$(OBJDIR)/publish.h \ | |
| 980 | + $(OBJDIR)/purge_.c:$(OBJDIR)/purge.h \ | |
| 969 | 981 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 970 | 982 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 971 | 983 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 972 | 984 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 973 | 985 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -1082,10 +1094,18 @@ | ||
| 1082 | 1094 | |
| 1083 | 1095 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 1084 | 1096 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 1085 | 1097 | |
| 1086 | 1098 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 1099 | + | |
| 1100 | +$(OBJDIR)/bundle_.c: $(SRCDIR)/bundle.c $(TRANSLATE) | |
| 1101 | + $(TRANSLATE) $(SRCDIR)/bundle.c >$@ | |
| 1102 | + | |
| 1103 | +$(OBJDIR)/bundle.o: $(OBJDIR)/bundle_.c $(OBJDIR)/bundle.h $(SRCDIR)/config.h | |
| 1104 | + $(XTCC) -o $(OBJDIR)/bundle.o -c $(OBJDIR)/bundle_.c | |
| 1105 | + | |
| 1106 | +$(OBJDIR)/bundle.h: $(OBJDIR)/headers | |
| 1087 | 1107 | |
| 1088 | 1108 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(TRANSLATE) |
| 1089 | 1109 | $(TRANSLATE) $(SRCDIR)/cache.c >$@ |
| 1090 | 1110 | |
| 1091 | 1111 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1610,10 +1630,26 @@ | ||
| 1610 | 1630 | |
| 1611 | 1631 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1612 | 1632 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1613 | 1633 | |
| 1614 | 1634 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1635 | + | |
| 1636 | +$(OBJDIR)/publish_.c: $(SRCDIR)/publish.c $(TRANSLATE) | |
| 1637 | + $(TRANSLATE) $(SRCDIR)/publish.c >$@ | |
| 1638 | + | |
| 1639 | +$(OBJDIR)/publish.o: $(OBJDIR)/publish_.c $(OBJDIR)/publish.h $(SRCDIR)/config.h | |
| 1640 | + $(XTCC) -o $(OBJDIR)/publish.o -c $(OBJDIR)/publish_.c | |
| 1641 | + | |
| 1642 | +$(OBJDIR)/publish.h: $(OBJDIR)/headers | |
| 1643 | + | |
| 1644 | +$(OBJDIR)/purge_.c: $(SRCDIR)/purge.c $(TRANSLATE) | |
| 1645 | + $(TRANSLATE) $(SRCDIR)/purge.c >$@ | |
| 1646 | + | |
| 1647 | +$(OBJDIR)/purge.o: $(OBJDIR)/purge_.c $(OBJDIR)/purge.h $(SRCDIR)/config.h | |
| 1648 | + $(XTCC) -o $(OBJDIR)/purge.o -c $(OBJDIR)/purge_.c | |
| 1649 | + | |
| 1650 | +$(OBJDIR)/purge.h: $(OBJDIR)/headers | |
| 1615 | 1651 | |
| 1616 | 1652 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(TRANSLATE) |
| 1617 | 1653 | $(TRANSLATE) $(SRCDIR)/rebuild.c >$@ |
| 1618 | 1654 | |
| 1619 | 1655 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1620 | 1656 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -357,10 +357,11 @@ | |
| 357 | $(SRCDIR)/bisect.c \ |
| 358 | $(SRCDIR)/blob.c \ |
| 359 | $(SRCDIR)/branch.c \ |
| 360 | $(SRCDIR)/browse.c \ |
| 361 | $(SRCDIR)/builtin.c \ |
| 362 | $(SRCDIR)/cache.c \ |
| 363 | $(SRCDIR)/captcha.c \ |
| 364 | $(SRCDIR)/cgi.c \ |
| 365 | $(SRCDIR)/checkin.c \ |
| 366 | $(SRCDIR)/checkout.c \ |
| @@ -423,10 +424,12 @@ | |
| 423 | $(SRCDIR)/path.c \ |
| 424 | $(SRCDIR)/pivot.c \ |
| 425 | $(SRCDIR)/popen.c \ |
| 426 | $(SRCDIR)/pqueue.c \ |
| 427 | $(SRCDIR)/printf.c \ |
| 428 | $(SRCDIR)/rebuild.c \ |
| 429 | $(SRCDIR)/regexp.c \ |
| 430 | $(SRCDIR)/report.c \ |
| 431 | $(SRCDIR)/rss.c \ |
| 432 | $(SRCDIR)/schema.c \ |
| @@ -475,10 +478,11 @@ | |
| 475 | $(OBJDIR)/bisect_.c \ |
| 476 | $(OBJDIR)/blob_.c \ |
| 477 | $(OBJDIR)/branch_.c \ |
| 478 | $(OBJDIR)/browse_.c \ |
| 479 | $(OBJDIR)/builtin_.c \ |
| 480 | $(OBJDIR)/cache_.c \ |
| 481 | $(OBJDIR)/captcha_.c \ |
| 482 | $(OBJDIR)/cgi_.c \ |
| 483 | $(OBJDIR)/checkin_.c \ |
| 484 | $(OBJDIR)/checkout_.c \ |
| @@ -541,10 +545,12 @@ | |
| 541 | $(OBJDIR)/path_.c \ |
| 542 | $(OBJDIR)/pivot_.c \ |
| 543 | $(OBJDIR)/popen_.c \ |
| 544 | $(OBJDIR)/pqueue_.c \ |
| 545 | $(OBJDIR)/printf_.c \ |
| 546 | $(OBJDIR)/rebuild_.c \ |
| 547 | $(OBJDIR)/regexp_.c \ |
| 548 | $(OBJDIR)/report_.c \ |
| 549 | $(OBJDIR)/rss_.c \ |
| 550 | $(OBJDIR)/schema_.c \ |
| @@ -590,10 +596,11 @@ | |
| 590 | $(OBJDIR)/bisect.o \ |
| 591 | $(OBJDIR)/blob.o \ |
| 592 | $(OBJDIR)/branch.o \ |
| 593 | $(OBJDIR)/browse.o \ |
| 594 | $(OBJDIR)/builtin.o \ |
| 595 | $(OBJDIR)/cache.o \ |
| 596 | $(OBJDIR)/captcha.o \ |
| 597 | $(OBJDIR)/cgi.o \ |
| 598 | $(OBJDIR)/checkin.o \ |
| 599 | $(OBJDIR)/checkout.o \ |
| @@ -656,10 +663,12 @@ | |
| 656 | $(OBJDIR)/path.o \ |
| 657 | $(OBJDIR)/pivot.o \ |
| 658 | $(OBJDIR)/popen.o \ |
| 659 | $(OBJDIR)/pqueue.o \ |
| 660 | $(OBJDIR)/printf.o \ |
| 661 | $(OBJDIR)/rebuild.o \ |
| 662 | $(OBJDIR)/regexp.o \ |
| 663 | $(OBJDIR)/report.o \ |
| 664 | $(OBJDIR)/rss.o \ |
| 665 | $(OBJDIR)/schema.o \ |
| @@ -898,10 +907,11 @@ | |
| 898 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 899 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 900 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 901 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 902 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 903 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 904 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 905 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 906 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 907 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -964,10 +974,12 @@ | |
| 964 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 965 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 966 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 967 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 968 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 969 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 970 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 971 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 972 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 973 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -1082,10 +1094,18 @@ | |
| 1082 | |
| 1083 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 1084 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 1085 | |
| 1086 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 1087 | |
| 1088 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(TRANSLATE) |
| 1089 | $(TRANSLATE) $(SRCDIR)/cache.c >$@ |
| 1090 | |
| 1091 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1610,10 +1630,26 @@ | |
| 1610 | |
| 1611 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1612 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1613 | |
| 1614 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1615 | |
| 1616 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(TRANSLATE) |
| 1617 | $(TRANSLATE) $(SRCDIR)/rebuild.c >$@ |
| 1618 | |
| 1619 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1620 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -357,10 +357,11 @@ | |
| 357 | $(SRCDIR)/bisect.c \ |
| 358 | $(SRCDIR)/blob.c \ |
| 359 | $(SRCDIR)/branch.c \ |
| 360 | $(SRCDIR)/browse.c \ |
| 361 | $(SRCDIR)/builtin.c \ |
| 362 | $(SRCDIR)/bundle.c \ |
| 363 | $(SRCDIR)/cache.c \ |
| 364 | $(SRCDIR)/captcha.c \ |
| 365 | $(SRCDIR)/cgi.c \ |
| 366 | $(SRCDIR)/checkin.c \ |
| 367 | $(SRCDIR)/checkout.c \ |
| @@ -423,10 +424,12 @@ | |
| 424 | $(SRCDIR)/path.c \ |
| 425 | $(SRCDIR)/pivot.c \ |
| 426 | $(SRCDIR)/popen.c \ |
| 427 | $(SRCDIR)/pqueue.c \ |
| 428 | $(SRCDIR)/printf.c \ |
| 429 | $(SRCDIR)/publish.c \ |
| 430 | $(SRCDIR)/purge.c \ |
| 431 | $(SRCDIR)/rebuild.c \ |
| 432 | $(SRCDIR)/regexp.c \ |
| 433 | $(SRCDIR)/report.c \ |
| 434 | $(SRCDIR)/rss.c \ |
| 435 | $(SRCDIR)/schema.c \ |
| @@ -475,10 +478,11 @@ | |
| 478 | $(OBJDIR)/bisect_.c \ |
| 479 | $(OBJDIR)/blob_.c \ |
| 480 | $(OBJDIR)/branch_.c \ |
| 481 | $(OBJDIR)/browse_.c \ |
| 482 | $(OBJDIR)/builtin_.c \ |
| 483 | $(OBJDIR)/bundle_.c \ |
| 484 | $(OBJDIR)/cache_.c \ |
| 485 | $(OBJDIR)/captcha_.c \ |
| 486 | $(OBJDIR)/cgi_.c \ |
| 487 | $(OBJDIR)/checkin_.c \ |
| 488 | $(OBJDIR)/checkout_.c \ |
| @@ -541,10 +545,12 @@ | |
| 545 | $(OBJDIR)/path_.c \ |
| 546 | $(OBJDIR)/pivot_.c \ |
| 547 | $(OBJDIR)/popen_.c \ |
| 548 | $(OBJDIR)/pqueue_.c \ |
| 549 | $(OBJDIR)/printf_.c \ |
| 550 | $(OBJDIR)/publish_.c \ |
| 551 | $(OBJDIR)/purge_.c \ |
| 552 | $(OBJDIR)/rebuild_.c \ |
| 553 | $(OBJDIR)/regexp_.c \ |
| 554 | $(OBJDIR)/report_.c \ |
| 555 | $(OBJDIR)/rss_.c \ |
| 556 | $(OBJDIR)/schema_.c \ |
| @@ -590,10 +596,11 @@ | |
| 596 | $(OBJDIR)/bisect.o \ |
| 597 | $(OBJDIR)/blob.o \ |
| 598 | $(OBJDIR)/branch.o \ |
| 599 | $(OBJDIR)/browse.o \ |
| 600 | $(OBJDIR)/builtin.o \ |
| 601 | $(OBJDIR)/bundle.o \ |
| 602 | $(OBJDIR)/cache.o \ |
| 603 | $(OBJDIR)/captcha.o \ |
| 604 | $(OBJDIR)/cgi.o \ |
| 605 | $(OBJDIR)/checkin.o \ |
| 606 | $(OBJDIR)/checkout.o \ |
| @@ -656,10 +663,12 @@ | |
| 663 | $(OBJDIR)/path.o \ |
| 664 | $(OBJDIR)/pivot.o \ |
| 665 | $(OBJDIR)/popen.o \ |
| 666 | $(OBJDIR)/pqueue.o \ |
| 667 | $(OBJDIR)/printf.o \ |
| 668 | $(OBJDIR)/publish.o \ |
| 669 | $(OBJDIR)/purge.o \ |
| 670 | $(OBJDIR)/rebuild.o \ |
| 671 | $(OBJDIR)/regexp.o \ |
| 672 | $(OBJDIR)/report.o \ |
| 673 | $(OBJDIR)/rss.o \ |
| 674 | $(OBJDIR)/schema.o \ |
| @@ -898,10 +907,11 @@ | |
| 907 | $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h \ |
| 908 | $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h \ |
| 909 | $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h \ |
| 910 | $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h \ |
| 911 | $(OBJDIR)/builtin_.c:$(OBJDIR)/builtin.h \ |
| 912 | $(OBJDIR)/bundle_.c:$(OBJDIR)/bundle.h \ |
| 913 | $(OBJDIR)/cache_.c:$(OBJDIR)/cache.h \ |
| 914 | $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h \ |
| 915 | $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h \ |
| 916 | $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h \ |
| 917 | $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h \ |
| @@ -964,10 +974,12 @@ | |
| 974 | $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ |
| 975 | $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ |
| 976 | $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ |
| 977 | $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h \ |
| 978 | $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h \ |
| 979 | $(OBJDIR)/publish_.c:$(OBJDIR)/publish.h \ |
| 980 | $(OBJDIR)/purge_.c:$(OBJDIR)/purge.h \ |
| 981 | $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h \ |
| 982 | $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h \ |
| 983 | $(OBJDIR)/report_.c:$(OBJDIR)/report.h \ |
| 984 | $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \ |
| 985 | $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \ |
| @@ -1082,10 +1094,18 @@ | |
| 1094 | |
| 1095 | $(OBJDIR)/builtin.o: $(OBJDIR)/builtin_.c $(OBJDIR)/builtin.h $(OBJDIR)/builtin_data.h $(SRCDIR)/config.h |
| 1096 | $(XTCC) -o $(OBJDIR)/builtin.o -c $(OBJDIR)/builtin_.c |
| 1097 | |
| 1098 | $(OBJDIR)/builtin.h: $(OBJDIR)/headers |
| 1099 | |
| 1100 | $(OBJDIR)/bundle_.c: $(SRCDIR)/bundle.c $(TRANSLATE) |
| 1101 | $(TRANSLATE) $(SRCDIR)/bundle.c >$@ |
| 1102 | |
| 1103 | $(OBJDIR)/bundle.o: $(OBJDIR)/bundle_.c $(OBJDIR)/bundle.h $(SRCDIR)/config.h |
| 1104 | $(XTCC) -o $(OBJDIR)/bundle.o -c $(OBJDIR)/bundle_.c |
| 1105 | |
| 1106 | $(OBJDIR)/bundle.h: $(OBJDIR)/headers |
| 1107 | |
| 1108 | $(OBJDIR)/cache_.c: $(SRCDIR)/cache.c $(TRANSLATE) |
| 1109 | $(TRANSLATE) $(SRCDIR)/cache.c >$@ |
| 1110 | |
| 1111 | $(OBJDIR)/cache.o: $(OBJDIR)/cache_.c $(OBJDIR)/cache.h $(SRCDIR)/config.h |
| @@ -1610,10 +1630,26 @@ | |
| 1630 | |
| 1631 | $(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h |
| 1632 | $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c |
| 1633 | |
| 1634 | $(OBJDIR)/printf.h: $(OBJDIR)/headers |
| 1635 | |
| 1636 | $(OBJDIR)/publish_.c: $(SRCDIR)/publish.c $(TRANSLATE) |
| 1637 | $(TRANSLATE) $(SRCDIR)/publish.c >$@ |
| 1638 | |
| 1639 | $(OBJDIR)/publish.o: $(OBJDIR)/publish_.c $(OBJDIR)/publish.h $(SRCDIR)/config.h |
| 1640 | $(XTCC) -o $(OBJDIR)/publish.o -c $(OBJDIR)/publish_.c |
| 1641 | |
| 1642 | $(OBJDIR)/publish.h: $(OBJDIR)/headers |
| 1643 | |
| 1644 | $(OBJDIR)/purge_.c: $(SRCDIR)/purge.c $(TRANSLATE) |
| 1645 | $(TRANSLATE) $(SRCDIR)/purge.c >$@ |
| 1646 | |
| 1647 | $(OBJDIR)/purge.o: $(OBJDIR)/purge_.c $(OBJDIR)/purge.h $(SRCDIR)/config.h |
| 1648 | $(XTCC) -o $(OBJDIR)/purge.o -c $(OBJDIR)/purge_.c |
| 1649 | |
| 1650 | $(OBJDIR)/purge.h: $(OBJDIR)/headers |
| 1651 | |
| 1652 | $(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(TRANSLATE) |
| 1653 | $(TRANSLATE) $(SRCDIR)/rebuild.c >$@ |
| 1654 | |
| 1655 | $(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h |
| 1656 |
+30
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -204,10 +204,11 @@ | ||
| 204 | 204 | bisect_.c \ |
| 205 | 205 | blob_.c \ |
| 206 | 206 | branch_.c \ |
| 207 | 207 | browse_.c \ |
| 208 | 208 | builtin_.c \ |
| 209 | + bundle_.c \ | |
| 209 | 210 | cache_.c \ |
| 210 | 211 | captcha_.c \ |
| 211 | 212 | cgi_.c \ |
| 212 | 213 | checkin_.c \ |
| 213 | 214 | checkout_.c \ |
| @@ -270,10 +271,12 @@ | ||
| 270 | 271 | path_.c \ |
| 271 | 272 | pivot_.c \ |
| 272 | 273 | popen_.c \ |
| 273 | 274 | pqueue_.c \ |
| 274 | 275 | printf_.c \ |
| 276 | + publish_.c \ | |
| 277 | + purge_.c \ | |
| 275 | 278 | rebuild_.c \ |
| 276 | 279 | regexp_.c \ |
| 277 | 280 | report_.c \ |
| 278 | 281 | rss_.c \ |
| 279 | 282 | schema_.c \ |
| @@ -320,10 +323,11 @@ | ||
| 320 | 323 | $(OX)\bisect$O \ |
| 321 | 324 | $(OX)\blob$O \ |
| 322 | 325 | $(OX)\branch$O \ |
| 323 | 326 | $(OX)\browse$O \ |
| 324 | 327 | $(OX)\builtin$O \ |
| 328 | + $(OX)\bundle$O \ | |
| 325 | 329 | $(OX)\cache$O \ |
| 326 | 330 | $(OX)\captcha$O \ |
| 327 | 331 | $(OX)\cgi$O \ |
| 328 | 332 | $(OX)\checkin$O \ |
| 329 | 333 | $(OX)\checkout$O \ |
| @@ -387,10 +391,12 @@ | ||
| 387 | 391 | $(OX)\path$O \ |
| 388 | 392 | $(OX)\pivot$O \ |
| 389 | 393 | $(OX)\popen$O \ |
| 390 | 394 | $(OX)\pqueue$O \ |
| 391 | 395 | $(OX)\printf$O \ |
| 396 | + $(OX)\publish$O \ | |
| 397 | + $(OX)\purge$O \ | |
| 392 | 398 | $(OX)\rebuild$O \ |
| 393 | 399 | $(OX)\regexp$O \ |
| 394 | 400 | $(OX)\report$O \ |
| 395 | 401 | $(OX)\rss$O \ |
| 396 | 402 | $(OX)\schema$O \ |
| @@ -490,10 +496,11 @@ | ||
| 490 | 496 | echo $(OX)\bisect.obj >> $@ |
| 491 | 497 | echo $(OX)\blob.obj >> $@ |
| 492 | 498 | echo $(OX)\branch.obj >> $@ |
| 493 | 499 | echo $(OX)\browse.obj >> $@ |
| 494 | 500 | echo $(OX)\builtin.obj >> $@ |
| 501 | + echo $(OX)\bundle.obj >> $@ | |
| 495 | 502 | echo $(OX)\cache.obj >> $@ |
| 496 | 503 | echo $(OX)\captcha.obj >> $@ |
| 497 | 504 | echo $(OX)\cgi.obj >> $@ |
| 498 | 505 | echo $(OX)\checkin.obj >> $@ |
| 499 | 506 | echo $(OX)\checkout.obj >> $@ |
| @@ -557,10 +564,12 @@ | ||
| 557 | 564 | echo $(OX)\path.obj >> $@ |
| 558 | 565 | echo $(OX)\pivot.obj >> $@ |
| 559 | 566 | echo $(OX)\popen.obj >> $@ |
| 560 | 567 | echo $(OX)\pqueue.obj >> $@ |
| 561 | 568 | echo $(OX)\printf.obj >> $@ |
| 569 | + echo $(OX)\publish.obj >> $@ | |
| 570 | + echo $(OX)\purge.obj >> $@ | |
| 562 | 571 | echo $(OX)\rebuild.obj >> $@ |
| 563 | 572 | echo $(OX)\regexp.obj >> $@ |
| 564 | 573 | echo $(OX)\report.obj >> $@ |
| 565 | 574 | echo $(OX)\rss.obj >> $@ |
| 566 | 575 | echo $(OX)\schema.obj >> $@ |
| @@ -752,10 +761,16 @@ | ||
| 752 | 761 | $(OX)\builtin$O : builtin_.c builtin.h |
| 753 | 762 | $(TCC) /Fo$@ -c builtin_.c |
| 754 | 763 | |
| 755 | 764 | builtin_.c : $(SRCDIR)\builtin.c |
| 756 | 765 | translate$E $** > $@ |
| 766 | + | |
| 767 | +$(OX)\bundle$O : bundle_.c bundle.h | |
| 768 | + $(TCC) /Fo$@ -c bundle_.c | |
| 769 | + | |
| 770 | +bundle_.c : $(SRCDIR)\bundle.c | |
| 771 | + translate$E $** > $@ | |
| 757 | 772 | |
| 758 | 773 | $(OX)\cache$O : cache_.c cache.h |
| 759 | 774 | $(TCC) /Fo$@ -c cache_.c |
| 760 | 775 | |
| 761 | 776 | cache_.c : $(SRCDIR)\cache.c |
| @@ -1148,10 +1163,22 @@ | ||
| 1148 | 1163 | $(OX)\printf$O : printf_.c printf.h |
| 1149 | 1164 | $(TCC) /Fo$@ -c printf_.c |
| 1150 | 1165 | |
| 1151 | 1166 | printf_.c : $(SRCDIR)\printf.c |
| 1152 | 1167 | translate$E $** > $@ |
| 1168 | + | |
| 1169 | +$(OX)\publish$O : publish_.c publish.h | |
| 1170 | + $(TCC) /Fo$@ -c publish_.c | |
| 1171 | + | |
| 1172 | +publish_.c : $(SRCDIR)\publish.c | |
| 1173 | + translate$E $** > $@ | |
| 1174 | + | |
| 1175 | +$(OX)\purge$O : purge_.c purge.h | |
| 1176 | + $(TCC) /Fo$@ -c purge_.c | |
| 1177 | + | |
| 1178 | +purge_.c : $(SRCDIR)\purge.c | |
| 1179 | + translate$E $** > $@ | |
| 1153 | 1180 | |
| 1154 | 1181 | $(OX)\rebuild$O : rebuild_.c rebuild.h |
| 1155 | 1182 | $(TCC) /Fo$@ -c rebuild_.c |
| 1156 | 1183 | |
| 1157 | 1184 | rebuild_.c : $(SRCDIR)\rebuild.c |
| @@ -1390,10 +1417,11 @@ | ||
| 1390 | 1417 | bisect_.c:bisect.h \ |
| 1391 | 1418 | blob_.c:blob.h \ |
| 1392 | 1419 | branch_.c:branch.h \ |
| 1393 | 1420 | browse_.c:browse.h \ |
| 1394 | 1421 | builtin_.c:builtin.h \ |
| 1422 | + bundle_.c:bundle.h \ | |
| 1395 | 1423 | cache_.c:cache.h \ |
| 1396 | 1424 | captcha_.c:captcha.h \ |
| 1397 | 1425 | cgi_.c:cgi.h \ |
| 1398 | 1426 | checkin_.c:checkin.h \ |
| 1399 | 1427 | checkout_.c:checkout.h \ |
| @@ -1456,10 +1484,12 @@ | ||
| 1456 | 1484 | path_.c:path.h \ |
| 1457 | 1485 | pivot_.c:pivot.h \ |
| 1458 | 1486 | popen_.c:popen.h \ |
| 1459 | 1487 | pqueue_.c:pqueue.h \ |
| 1460 | 1488 | printf_.c:printf.h \ |
| 1489 | + publish_.c:publish.h \ | |
| 1490 | + purge_.c:purge.h \ | |
| 1461 | 1491 | rebuild_.c:rebuild.h \ |
| 1462 | 1492 | regexp_.c:regexp.h \ |
| 1463 | 1493 | report_.c:report.h \ |
| 1464 | 1494 | rss_.c:rss.h \ |
| 1465 | 1495 | schema_.c:schema.h \ |
| 1466 | 1496 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -204,10 +204,11 @@ | |
| 204 | bisect_.c \ |
| 205 | blob_.c \ |
| 206 | branch_.c \ |
| 207 | browse_.c \ |
| 208 | builtin_.c \ |
| 209 | cache_.c \ |
| 210 | captcha_.c \ |
| 211 | cgi_.c \ |
| 212 | checkin_.c \ |
| 213 | checkout_.c \ |
| @@ -270,10 +271,12 @@ | |
| 270 | path_.c \ |
| 271 | pivot_.c \ |
| 272 | popen_.c \ |
| 273 | pqueue_.c \ |
| 274 | printf_.c \ |
| 275 | rebuild_.c \ |
| 276 | regexp_.c \ |
| 277 | report_.c \ |
| 278 | rss_.c \ |
| 279 | schema_.c \ |
| @@ -320,10 +323,11 @@ | |
| 320 | $(OX)\bisect$O \ |
| 321 | $(OX)\blob$O \ |
| 322 | $(OX)\branch$O \ |
| 323 | $(OX)\browse$O \ |
| 324 | $(OX)\builtin$O \ |
| 325 | $(OX)\cache$O \ |
| 326 | $(OX)\captcha$O \ |
| 327 | $(OX)\cgi$O \ |
| 328 | $(OX)\checkin$O \ |
| 329 | $(OX)\checkout$O \ |
| @@ -387,10 +391,12 @@ | |
| 387 | $(OX)\path$O \ |
| 388 | $(OX)\pivot$O \ |
| 389 | $(OX)\popen$O \ |
| 390 | $(OX)\pqueue$O \ |
| 391 | $(OX)\printf$O \ |
| 392 | $(OX)\rebuild$O \ |
| 393 | $(OX)\regexp$O \ |
| 394 | $(OX)\report$O \ |
| 395 | $(OX)\rss$O \ |
| 396 | $(OX)\schema$O \ |
| @@ -490,10 +496,11 @@ | |
| 490 | echo $(OX)\bisect.obj >> $@ |
| 491 | echo $(OX)\blob.obj >> $@ |
| 492 | echo $(OX)\branch.obj >> $@ |
| 493 | echo $(OX)\browse.obj >> $@ |
| 494 | echo $(OX)\builtin.obj >> $@ |
| 495 | echo $(OX)\cache.obj >> $@ |
| 496 | echo $(OX)\captcha.obj >> $@ |
| 497 | echo $(OX)\cgi.obj >> $@ |
| 498 | echo $(OX)\checkin.obj >> $@ |
| 499 | echo $(OX)\checkout.obj >> $@ |
| @@ -557,10 +564,12 @@ | |
| 557 | echo $(OX)\path.obj >> $@ |
| 558 | echo $(OX)\pivot.obj >> $@ |
| 559 | echo $(OX)\popen.obj >> $@ |
| 560 | echo $(OX)\pqueue.obj >> $@ |
| 561 | echo $(OX)\printf.obj >> $@ |
| 562 | echo $(OX)\rebuild.obj >> $@ |
| 563 | echo $(OX)\regexp.obj >> $@ |
| 564 | echo $(OX)\report.obj >> $@ |
| 565 | echo $(OX)\rss.obj >> $@ |
| 566 | echo $(OX)\schema.obj >> $@ |
| @@ -752,10 +761,16 @@ | |
| 752 | $(OX)\builtin$O : builtin_.c builtin.h |
| 753 | $(TCC) /Fo$@ -c builtin_.c |
| 754 | |
| 755 | builtin_.c : $(SRCDIR)\builtin.c |
| 756 | translate$E $** > $@ |
| 757 | |
| 758 | $(OX)\cache$O : cache_.c cache.h |
| 759 | $(TCC) /Fo$@ -c cache_.c |
| 760 | |
| 761 | cache_.c : $(SRCDIR)\cache.c |
| @@ -1148,10 +1163,22 @@ | |
| 1148 | $(OX)\printf$O : printf_.c printf.h |
| 1149 | $(TCC) /Fo$@ -c printf_.c |
| 1150 | |
| 1151 | printf_.c : $(SRCDIR)\printf.c |
| 1152 | translate$E $** > $@ |
| 1153 | |
| 1154 | $(OX)\rebuild$O : rebuild_.c rebuild.h |
| 1155 | $(TCC) /Fo$@ -c rebuild_.c |
| 1156 | |
| 1157 | rebuild_.c : $(SRCDIR)\rebuild.c |
| @@ -1390,10 +1417,11 @@ | |
| 1390 | bisect_.c:bisect.h \ |
| 1391 | blob_.c:blob.h \ |
| 1392 | branch_.c:branch.h \ |
| 1393 | browse_.c:browse.h \ |
| 1394 | builtin_.c:builtin.h \ |
| 1395 | cache_.c:cache.h \ |
| 1396 | captcha_.c:captcha.h \ |
| 1397 | cgi_.c:cgi.h \ |
| 1398 | checkin_.c:checkin.h \ |
| 1399 | checkout_.c:checkout.h \ |
| @@ -1456,10 +1484,12 @@ | |
| 1456 | path_.c:path.h \ |
| 1457 | pivot_.c:pivot.h \ |
| 1458 | popen_.c:popen.h \ |
| 1459 | pqueue_.c:pqueue.h \ |
| 1460 | printf_.c:printf.h \ |
| 1461 | rebuild_.c:rebuild.h \ |
| 1462 | regexp_.c:regexp.h \ |
| 1463 | report_.c:report.h \ |
| 1464 | rss_.c:rss.h \ |
| 1465 | schema_.c:schema.h \ |
| 1466 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -204,10 +204,11 @@ | |
| 204 | bisect_.c \ |
| 205 | blob_.c \ |
| 206 | branch_.c \ |
| 207 | browse_.c \ |
| 208 | builtin_.c \ |
| 209 | bundle_.c \ |
| 210 | cache_.c \ |
| 211 | captcha_.c \ |
| 212 | cgi_.c \ |
| 213 | checkin_.c \ |
| 214 | checkout_.c \ |
| @@ -270,10 +271,12 @@ | |
| 271 | path_.c \ |
| 272 | pivot_.c \ |
| 273 | popen_.c \ |
| 274 | pqueue_.c \ |
| 275 | printf_.c \ |
| 276 | publish_.c \ |
| 277 | purge_.c \ |
| 278 | rebuild_.c \ |
| 279 | regexp_.c \ |
| 280 | report_.c \ |
| 281 | rss_.c \ |
| 282 | schema_.c \ |
| @@ -320,10 +323,11 @@ | |
| 323 | $(OX)\bisect$O \ |
| 324 | $(OX)\blob$O \ |
| 325 | $(OX)\branch$O \ |
| 326 | $(OX)\browse$O \ |
| 327 | $(OX)\builtin$O \ |
| 328 | $(OX)\bundle$O \ |
| 329 | $(OX)\cache$O \ |
| 330 | $(OX)\captcha$O \ |
| 331 | $(OX)\cgi$O \ |
| 332 | $(OX)\checkin$O \ |
| 333 | $(OX)\checkout$O \ |
| @@ -387,10 +391,12 @@ | |
| 391 | $(OX)\path$O \ |
| 392 | $(OX)\pivot$O \ |
| 393 | $(OX)\popen$O \ |
| 394 | $(OX)\pqueue$O \ |
| 395 | $(OX)\printf$O \ |
| 396 | $(OX)\publish$O \ |
| 397 | $(OX)\purge$O \ |
| 398 | $(OX)\rebuild$O \ |
| 399 | $(OX)\regexp$O \ |
| 400 | $(OX)\report$O \ |
| 401 | $(OX)\rss$O \ |
| 402 | $(OX)\schema$O \ |
| @@ -490,10 +496,11 @@ | |
| 496 | echo $(OX)\bisect.obj >> $@ |
| 497 | echo $(OX)\blob.obj >> $@ |
| 498 | echo $(OX)\branch.obj >> $@ |
| 499 | echo $(OX)\browse.obj >> $@ |
| 500 | echo $(OX)\builtin.obj >> $@ |
| 501 | echo $(OX)\bundle.obj >> $@ |
| 502 | echo $(OX)\cache.obj >> $@ |
| 503 | echo $(OX)\captcha.obj >> $@ |
| 504 | echo $(OX)\cgi.obj >> $@ |
| 505 | echo $(OX)\checkin.obj >> $@ |
| 506 | echo $(OX)\checkout.obj >> $@ |
| @@ -557,10 +564,12 @@ | |
| 564 | echo $(OX)\path.obj >> $@ |
| 565 | echo $(OX)\pivot.obj >> $@ |
| 566 | echo $(OX)\popen.obj >> $@ |
| 567 | echo $(OX)\pqueue.obj >> $@ |
| 568 | echo $(OX)\printf.obj >> $@ |
| 569 | echo $(OX)\publish.obj >> $@ |
| 570 | echo $(OX)\purge.obj >> $@ |
| 571 | echo $(OX)\rebuild.obj >> $@ |
| 572 | echo $(OX)\regexp.obj >> $@ |
| 573 | echo $(OX)\report.obj >> $@ |
| 574 | echo $(OX)\rss.obj >> $@ |
| 575 | echo $(OX)\schema.obj >> $@ |
| @@ -752,10 +761,16 @@ | |
| 761 | $(OX)\builtin$O : builtin_.c builtin.h |
| 762 | $(TCC) /Fo$@ -c builtin_.c |
| 763 | |
| 764 | builtin_.c : $(SRCDIR)\builtin.c |
| 765 | translate$E $** > $@ |
| 766 | |
| 767 | $(OX)\bundle$O : bundle_.c bundle.h |
| 768 | $(TCC) /Fo$@ -c bundle_.c |
| 769 | |
| 770 | bundle_.c : $(SRCDIR)\bundle.c |
| 771 | translate$E $** > $@ |
| 772 | |
| 773 | $(OX)\cache$O : cache_.c cache.h |
| 774 | $(TCC) /Fo$@ -c cache_.c |
| 775 | |
| 776 | cache_.c : $(SRCDIR)\cache.c |
| @@ -1148,10 +1163,22 @@ | |
| 1163 | $(OX)\printf$O : printf_.c printf.h |
| 1164 | $(TCC) /Fo$@ -c printf_.c |
| 1165 | |
| 1166 | printf_.c : $(SRCDIR)\printf.c |
| 1167 | translate$E $** > $@ |
| 1168 | |
| 1169 | $(OX)\publish$O : publish_.c publish.h |
| 1170 | $(TCC) /Fo$@ -c publish_.c |
| 1171 | |
| 1172 | publish_.c : $(SRCDIR)\publish.c |
| 1173 | translate$E $** > $@ |
| 1174 | |
| 1175 | $(OX)\purge$O : purge_.c purge.h |
| 1176 | $(TCC) /Fo$@ -c purge_.c |
| 1177 | |
| 1178 | purge_.c : $(SRCDIR)\purge.c |
| 1179 | translate$E $** > $@ |
| 1180 | |
| 1181 | $(OX)\rebuild$O : rebuild_.c rebuild.h |
| 1182 | $(TCC) /Fo$@ -c rebuild_.c |
| 1183 | |
| 1184 | rebuild_.c : $(SRCDIR)\rebuild.c |
| @@ -1390,10 +1417,11 @@ | |
| 1417 | bisect_.c:bisect.h \ |
| 1418 | blob_.c:blob.h \ |
| 1419 | branch_.c:branch.h \ |
| 1420 | browse_.c:browse.h \ |
| 1421 | builtin_.c:builtin.h \ |
| 1422 | bundle_.c:bundle.h \ |
| 1423 | cache_.c:cache.h \ |
| 1424 | captcha_.c:captcha.h \ |
| 1425 | cgi_.c:cgi.h \ |
| 1426 | checkin_.c:checkin.h \ |
| 1427 | checkout_.c:checkout.h \ |
| @@ -1456,10 +1484,12 @@ | |
| 1484 | path_.c:path.h \ |
| 1485 | pivot_.c:pivot.h \ |
| 1486 | popen_.c:popen.h \ |
| 1487 | pqueue_.c:pqueue.h \ |
| 1488 | printf_.c:printf.h \ |
| 1489 | publish_.c:publish.h \ |
| 1490 | purge_.c:purge.h \ |
| 1491 | rebuild_.c:rebuild.h \ |
| 1492 | regexp_.c:regexp.h \ |
| 1493 | report_.c:report.h \ |
| 1494 | rss_.c:rss.h \ |
| 1495 | schema_.c:schema.h \ |
| 1496 |
+21
| --- www/checkin_names.wiki | ||
| +++ www/checkin_names.wiki | ||
| @@ -115,10 +115,31 @@ | ||
| 115 | 115 | |
| 116 | 116 | The "tag:deed2" name will refer to the most recent check-in |
| 117 | 117 | tagged with "deed2" not to the |
| 118 | 118 | check-in whose canonical name begins with "deed2". |
| 119 | 119 | |
| 120 | +<h2>Whole Branches</h2> | |
| 121 | + | |
| 122 | +Usually whan a branch name is specified, it means the latest checkin on | |
| 123 | +that branch. But for some commands (ex: [/help/purge|purge]) a branch name | |
| 124 | +on the argument means the earliest connected checkin on the branch. This | |
| 125 | +seems confusing when being explained here, but it works out to be intuitive | |
| 126 | +in practice. | |
| 127 | + | |
| 128 | +For example, the command "fossil purge XYZ" means to purge the checkin XYZ | |
| 129 | +and all of its descendents. But when XYZ is in the form of a branch name, one | |
| 130 | +generally wants to purge the entire branch, not just the last checkin on the | |
| 131 | +branch. And so for this reason, commands like purge will interpret a branch | |
| 132 | +name to be the first checkin of the branch rather than the last. If there | |
| 133 | +are two or more branches with the same name, then these commands will select | |
| 134 | +the first check-in of the branch that has the most recent checkin. What | |
| 135 | +happens is that Fossil searches for the most recent checkin with the given | |
| 136 | +tag, just as it always does. But if that tag is a branch name, it then walks | |
| 137 | +back down the branch looking for the first check-in of that branch. | |
| 138 | + | |
| 139 | +Again, this behavior only occurs on a few commands where it make sense. | |
| 140 | + | |
| 120 | 141 | <h2>Timestamps</h2> |
| 121 | 142 | |
| 122 | 143 | A timestamp in one of the formats shown below means the most recent |
| 123 | 144 | check-in that occurs no later than the timestamp given: |
| 124 | 145 | |
| 125 | 146 |
| --- www/checkin_names.wiki | |
| +++ www/checkin_names.wiki | |
| @@ -115,10 +115,31 @@ | |
| 115 | |
| 116 | The "tag:deed2" name will refer to the most recent check-in |
| 117 | tagged with "deed2" not to the |
| 118 | check-in whose canonical name begins with "deed2". |
| 119 | |
| 120 | <h2>Timestamps</h2> |
| 121 | |
| 122 | A timestamp in one of the formats shown below means the most recent |
| 123 | check-in that occurs no later than the timestamp given: |
| 124 | |
| 125 |
| --- www/checkin_names.wiki | |
| +++ www/checkin_names.wiki | |
| @@ -115,10 +115,31 @@ | |
| 115 | |
| 116 | The "tag:deed2" name will refer to the most recent check-in |
| 117 | tagged with "deed2" not to the |
| 118 | check-in whose canonical name begins with "deed2". |
| 119 | |
| 120 | <h2>Whole Branches</h2> |
| 121 | |
| 122 | Usually whan a branch name is specified, it means the latest checkin on |
| 123 | that branch. But for some commands (ex: [/help/purge|purge]) a branch name |
| 124 | on the argument means the earliest connected checkin on the branch. This |
| 125 | seems confusing when being explained here, but it works out to be intuitive |
| 126 | in practice. |
| 127 | |
| 128 | For example, the command "fossil purge XYZ" means to purge the checkin XYZ |
| 129 | and all of its descendents. But when XYZ is in the form of a branch name, one |
| 130 | generally wants to purge the entire branch, not just the last checkin on the |
| 131 | branch. And so for this reason, commands like purge will interpret a branch |
| 132 | name to be the first checkin of the branch rather than the last. If there |
| 133 | are two or more branches with the same name, then these commands will select |
| 134 | the first check-in of the branch that has the most recent checkin. What |
| 135 | happens is that Fossil searches for the most recent checkin with the given |
| 136 | tag, just as it always does. But if that tag is a branch name, it then walks |
| 137 | back down the branch looking for the first check-in of that branch. |
| 138 | |
| 139 | Again, this behavior only occurs on a few commands where it make sense. |
| 140 | |
| 141 | <h2>Timestamps</h2> |
| 142 | |
| 143 | A timestamp in one of the formats shown below means the most recent |
| 144 | check-in that occurs no later than the timestamp given: |
| 145 | |
| 146 |