Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Create a single subroutine that determines whether a file is a "reserved" file used by Fossil itself, or is potentially a valid repository file. This processing used to be duplicated at each place where it was needed. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
56d69dbd858083354713052ea7be24cb |
| User & Date: | drh 2010-12-10 22:02:07.000 |
Context
|
2010-12-11
| ||
| 00:28 | Update the git fast-export importer so that it is able to handle filenames with spaces - or at least to the extent that the fast-export format is able to deal with such filename. Ticket [4ee4aa5a30733a] ... (check-in: 35aa6f8188 user: drh tags: trunk) | |
|
2010-12-10
| ||
| 22:02 | Create a single subroutine that determines whether a file is a "reserved" file used by Fossil itself, or is potentially a valid repository file. This processing used to be duplicated at each place where it was needed. ... (check-in: 56d69dbd85 user: drh tags: trunk) | |
| 19:28 | Do not show the "manifest" and "manifest.uuid" files as "extra" files if they are generated by Fossil. ... (check-in: 26590b8841 user: drh tags: trunk) | |
Changes
Changes to src/add.c.
| ︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <dirent.h>
/*
** Set to true if files whose names begin with "." should be
** included when processing a recursive "add" command.
*/
static int includeDotFiles = 0;
/*
** Add a single file
*/
static void add_one_file(const char *zName, int vid, Blob *pOmit){
Blob pathname;
const char *zPath;
file_tree_name(zName, &pathname, 1);
zPath = blob_str(&pathname);
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | < < < < < < < > | < | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
#include <dirent.h>
/*
** Set to true if files whose names begin with "." should be
** included when processing a recursive "add" command.
*/
static int includeDotFiles = 0;
/*
** This routine returns the names of files in a working checkout that
** are created by Fossil itself, and hence should not be added, deleted,
** or merge, and should be omitted from "clean" and "extra" lists.
**
** Return the N-th name. The first name has N==0. When all names have
** been used, return 0.
*/
const char *fossil_reserved_name(int N){
/* Possible names of the local per-checkout database file and
** its associated journals
*/
static const char *azName[] = {
"_FOSSIL_",
"_FOSSIL_-journal",
"_FOSSIL_-wal",
"_FOSSIL_-shm",
".fos",
".fos-journal",
".fos-wal",
".fos-shm",
};
/* Names of auxiliary files generated by SQLite when the "manifest"
** properity is enabled
*/
static const char *azManifest[] = {
"manifest",
"manifest.uuid",
};
if( N>=0 && N<count(azName) ) return azName[N];
if( N>=count(azName) && N<count(azName)+count(azManifest)
&& db_get_boolean("manifest",0) ){
return azManifest[N-count(azName)];
}
return 0;
}
/*
** Return a list of all reserved filenames as an SQL list.
*/
const char *fossil_all_reserved_names(void){
static char *zAll = 0;
if( zAll==0 ){
Blob x;
int i;
const char *z;
blob_zero(&x);
for(i=0; (z = fossil_reserved_name(i))!=0; i++){
if( i>0 ) blob_append(&x, ",", 1);
blob_appendf(&x, "'%s'", z);
}
zAll = blob_str(&x);
}
return zAll;
}
/*
** Add a single file
*/
static void add_one_file(const char *zName, int vid, Blob *pOmit){
Blob pathname;
const char *zPath;
int i;
const char *zReserved;
file_tree_name(zName, &pathname, 1);
zPath = blob_str(&pathname);
for(i=0; (zReserved = fossil_reserved_name(i))!=0; i++){
if( strcmp(zPath, zReserved)==0 ) break;
}
if( zReserved || (pOmit && blob_compare(&pathname, pOmit)==0) ){
fossil_warning("cannot add %s", zPath);
}else{
if( !file_is_simple_pathname(zPath) ){
fossil_fatal("filename contains illegal characters: %s", zPath);
}
#if defined(_WIN32)
if( db_exists("SELECT 1 FROM vfile"
|
| ︙ | ︙ | |||
332 333 334 335 336 337 338 |
if( file_tree_name(g.zRepositoryName, &repo, 0) ){
db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
}
/* step 1: search for extra files */
db_prepare(&q,
"SELECT x, %Q || x FROM sfile"
| | < < < > | 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 |
if( file_tree_name(g.zRepositoryName, &repo, 0) ){
db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
}
/* step 1: search for extra files */
db_prepare(&q,
"SELECT x, %Q || x FROM sfile"
" WHERE x NOT IN (%s)"
" AND NOT %s"
" ORDER BY 1",
g.zLocalRoot,
fossil_all_reserved_names(),
glob_expr("x", zIgnoreFlag)
);
while( db_step(&q)==SQLITE_ROW ){
add_one_file(db_column_text(&q, 1), vid, 0);
nAdd++;
}
db_finalize(&q);
|
| ︙ | ︙ |
Changes to src/checkin.c.
| ︙ | ︙ | |||
281 282 283 284 285 286 287 |
blob_init(&path, g.zLocalRoot, n-1);
if( zIgnoreFlag==0 ){
zIgnoreFlag = db_get("ignore-glob", 0);
}
vfile_scan(0, &path, blob_size(&path), allFlag);
db_prepare(&q,
"SELECT x FROM sfile"
| | < < < < < > | 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
blob_init(&path, g.zLocalRoot, n-1);
if( zIgnoreFlag==0 ){
zIgnoreFlag = db_get("ignore-glob", 0);
}
vfile_scan(0, &path, blob_size(&path), allFlag);
db_prepare(&q,
"SELECT x FROM sfile"
" WHERE x NOT IN (%s)"
" AND NOT %s"
" ORDER BY 1",
fossil_all_reserved_names(),
glob_expr("x", zIgnoreFlag)
);
if( file_tree_name(g.zRepositoryName, &repo, 0) ){
db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
}
while( db_step(&q)==SQLITE_ROW ){
printf("%s\n", db_column_text(&q, 0));
|
| ︙ | ︙ | |||
331 332 333 334 335 336 337 |
db_must_be_within_tree();
db_multi_exec("CREATE TEMP TABLE sfile(x TEXT PRIMARY KEY)");
n = strlen(g.zLocalRoot);
blob_init(&path, g.zLocalRoot, n-1);
vfile_scan(0, &path, blob_size(&path), dotfilesFlag);
db_prepare(&q,
"SELECT %Q || x FROM sfile"
| | < < < | > > | 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
db_must_be_within_tree();
db_multi_exec("CREATE TEMP TABLE sfile(x TEXT PRIMARY KEY)");
n = strlen(g.zLocalRoot);
blob_init(&path, g.zLocalRoot, n-1);
vfile_scan(0, &path, blob_size(&path), dotfilesFlag);
db_prepare(&q,
"SELECT %Q || x FROM sfile"
" WHERE x NOT IN (%s)"
" ORDER BY 1",
g.zLocalRoot, fossil_all_reserved_names()
);
if( file_tree_name(g.zRepositoryName, &repo, 0) ){
db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
}
while( db_step(&q)==SQLITE_ROW ){
if( allFlag ){
unlink(db_column_text(&q, 0));
}else{
|
| ︙ | ︙ |
Changes to src/checkout.c.
| ︙ | ︙ | |||
259 260 261 262 263 264 265 | } db_end_transaction(0); } /* ** Unlink the local database file */ | | | < < < < < < < < < | > | > | | > > | | 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 |
}
db_end_transaction(0);
}
/*
** Unlink the local database file
*/
static void unlink_local_database(int manifestOnly){
const char *zReserved;
int i;
for(i=0; (zReserved = fossil_reserved_name(i))!=0; i++){
if( manifestOnly==0 || zReserved[0]=='m' ){
char *z;
z = mprintf("%s%s", g.zLocalRoot, zReserved);
unlink(z);
free(z);
}
}
}
/*
** COMMAND: close
**
** Usage: %fossil close ?-f|--force?
**
** The opposite of "open". Close the current database connection.
** Require a -f or --force flag if there are unsaved changed in the
** current check-out.
*/
void close_cmd(void){
int forceFlag = find_option("force","f",0)!=0;
db_must_be_within_tree();
if( !forceFlag && unsaved_changes()==1 ){
fossil_fatal("there are unsaved changes in the current checkout");
}
unlink_local_database(1);
db_close();
unlink_local_database(0);
}
|