@@ -26,30 +26,85 @@
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Set to true if files whose names begin with "." should be
28 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** included when processing a recursive "add" command.
29 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int includeDotFiles = 0;
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine returns the names of files in a working checkout that
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are created by Fossil itself, and hence should not be added, deleted,
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or merge, and should be omitted from "clean" and "extra" lists.
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the N-th name. The first name has N==0. When all names have
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** been used, return 0.
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *fossil_reserved_name(int N){
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Possible names of the local per-checkout database file and
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** its associated journals
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *azName[] = {
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "_FOSSIL_",
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "_FOSSIL_-journal",
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "_FOSSIL_-wal",
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "_FOSSIL_-shm",
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ".fos",
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ".fos-journal",
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ".fos-wal",
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ".fos-shm",
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Names of auxiliary files generated by SQLite when the "manifest"
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** properity is enabled
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *azManifest[] = {
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "manifest",
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "manifest.uuid",
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( N>=0 && N<count(azName) ) return azName[N];
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( N>=count(azName) && N<count(azName)+count(azManifest)
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && db_get_boolean("manifest",0) ){
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return azManifest[N-count(azName)];
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return a list of all reserved filenames as an SQL list.
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *fossil_all_reserved_names(void){
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *zAll = 0;
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zAll==0 ){
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob x;
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z;
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_zero(&x);
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; (z = fossil_reserved_name(i))!=0; i++){
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>0 ) blob_append(&x, ",", 1);
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(&x, "'%s'", z);
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAll = blob_str(&x);
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zAll;
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a single file
34 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35 94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void add_one_file(const char *zName, int vid, Blob *pOmit){
36 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob pathname;
37 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPath;
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zReserved;
38 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
39 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_tree_name(zName, &pathname, 1);
40 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPath = blob_str(&pathname);
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( strcmp(zPath, "_FOSSIL_")==0
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, "_FOSSIL_-journal")==0
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, "_FOSSIL_-wal")==0
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, "_FOSSIL_-shm")==0
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, ".fos")==0
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, ".fos-journal")==0
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, ".fos-wal")==0
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || strcmp(zPath, ".fos-shm")==0
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || (pOmit && blob_compare(&pathname, pOmit)==0)
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; (zReserved = fossil_reserved_name(i))!=0; i++){
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(zPath, zReserved)==0 ) break;
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zReserved || (pOmit && blob_compare(&pathname, pOmit)==0) ){
51 106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_warning("cannot add %s", zPath);
52 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
53 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !file_is_simple_pathname(zPath) ){
54 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("filename contains illegal characters: %s", zPath);
55 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -334,17 +389,15 @@
334 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
335 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
336 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* step 1: search for extra files */
337 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
338 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT x, %Q || x FROM sfile"
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE x NOT IN ('manifest','manifest.uuid','_FOSSIL_',"
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "'_FOSSIL_-journal','.fos','.fos-journal',"
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "'_FOSSIL_-wal','_FOSSIL_-shm','.fos-wal',"
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "'.fos-shm')"
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE x NOT IN (%s)"
343 395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND NOT %s"
344 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY 1",
345 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.zLocalRoot,
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_all_reserved_names(),
346 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
glob_expr("x", zIgnoreFlag)
347 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
348 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
349 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
add_one_file(db_column_text(&q, 1), vid, 0);
350 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nAdd++;
351 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!