@@ -221,14 +221,15 @@
221 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
222 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When adding files or directories recursively, filenames that begin
223 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with "." are excluded by default. To include such files, add
224 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the "--dotfiles" option to the command-line.
225 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The --ignore option is a comma-separate list of glob patterns for files
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be excluded. Example: '*.o,*.obj,*.exe' If the --ignore option
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** does not appear on the command line then the "ignore-glob" setting is
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** used.
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The --ignore and --clean options are comma-separate lists of glob patterns
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for files to be excluded. Example: '*.o,*.obj,*.exe' If the --ignore
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** option does not appear on the command line then the "ignore-glob" setting
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is used. If the --clean option does not appear on the command line then
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the "clean-glob" setting is used.
230 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
231 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The --case-sensitive option determines whether or not filenames should
232 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be treated case sensitive or not. If the option is not given, the default
233 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** depends on the global setting, or the operating system default, if not set.
234 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -236,34 +237,42 @@
236 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
237 238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --case-sensitive <BOOL> override case-sensitive setting
238 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --dotfiles include files beginning with a dot (".")
239 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --ignore <CSG> ignore files matching patterns from the
240 241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comma separated list of glob patterns.
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --clean <CSG> also ignore files matching patterns from
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the comma separated list of glob patterns.
241 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
242 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: addremove, rm
243 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
244 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void add_cmd(void){
245 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* Loop counter */
246 249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int vid; /* Currently checked out version */
247 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRoot; /* Full path characters in g.zLocalRoot */
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zCleanFlag; /* The --clean option or clean-glob setting */
248 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zIgnoreFlag; /* The --ignore option or ignore-glob setting */
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Glob *pIgnore; /* Ignore everything matching this glob pattern */
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Glob *pIgnore, *pClean; /* Ignore everything matching the glob patterns */
250 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned scanFlags = 0; /* Flags passed to vfile_scan() */
251 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCleanFlag = find_option("clean",0,1);
252 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIgnoreFlag = find_option("ignore",0,1);
253 258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("dotfiles",0,0)!=0 ) scanFlags |= SCAN_ALL;
254 259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
capture_case_sensitive_option();
255 260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zCleanFlag==0 ){
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCleanFlag = db_get("clean-glob", 0);
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
256 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zIgnoreFlag==0 ){
257 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIgnoreFlag = db_get("ignore-glob", 0);
258 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vid = db_lget_int("checkout",0);
260 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( vid==0 ){
261 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_panic("no checkout to add to");
262 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
263 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
264 272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("CREATE TEMP TABLE sfile(x TEXT PRIMARY KEY)");
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pClean = glob_create(zCleanFlag);
265 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIgnore = glob_create(zIgnoreFlag);
266 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRoot = strlen(g.zLocalRoot);
267 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
268 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Load the names of all files that are to be added into sfile temp table */
269 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=2; i<g.argc; i++){
@@ -273,11 +282,11 @@
273 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
274 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_canonical_name(g.argv[i], &fullName, 0);
275 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = blob_str(&fullName);
276 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDir = file_wd_isdir(zName);
277 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isDir==1 ){
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- vfile_scan(&fullName, nRoot-1, scanFlags, pIgnore);
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vfile_scan2(&fullName, nRoot-1, scanFlags, pClean, pIgnore);
279 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( isDir==0 ){
280 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_warning("not found: %s", zName);
281 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( file_access(zName, R_OK) ){
282 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("cannot open %s", zName);
283 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -288,10 +297,11 @@
288 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
289 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
290 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fullName);
291 300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
292 301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
glob_free(pIgnore);
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ glob_free(pClean);
293 303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
294 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
add_files_in_sfile(vid);
295 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
296 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
297 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -443,13 +453,14 @@
443 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as a separate step.
444 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
445 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Files and directories whose names begin with "." are ignored unless
446 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the --dotfiles option is used.
447 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The --ignore option overrides the "ignore-glob" setting, as does the
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** --case-sensitive option with the "case-sensitive" setting. See the
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** documentation on the "settings" command for further information.
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The --ignore option overrides the "ignore-glob" setting, as do the
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --case-sensitive option with the "case-sensitive" setting and the
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --clean option with the "clean-glob" setting. See the documentation
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on the "settings" command for further information.
451 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
452 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The --test option shows what would happen without actually doing anything.
453 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
454 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This command can be used to track third party software.
455 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -456,31 +467,37 @@
456 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Options:
457 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --case-sensitive <BOOL> override case-sensitive setting
458 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --dotfiles include files beginning with a dot (".")
459 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --ignore <CSG> ignore files matching patterns from the
460 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comma separated list of glob patterns.
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --clean <CSG> also ignore files matching patterns from
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the comma separated list of glob patterns.
461 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -n|--dry-run If given, display instead of run actions
462 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
463 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: add, rm
464 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
465 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void addremove_cmd(void){
466 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob path;
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zCleanFlag = find_option("clean",0,1);
467 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zIgnoreFlag = find_option("ignore",0,1);
468 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0;
469 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int dryRunFlag = find_option("dry-run","n",0)!=0;
470 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n;
471 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
472 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int vid;
473 487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nAdd = 0;
474 488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDelete = 0;
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Glob *pIgnore;
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Glob *pIgnore, *pClean;
476 490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
477 491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !dryRunFlag ){
478 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dryRunFlag = find_option("test",0,0)!=0; /* deprecated */
479 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
480 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
capture_case_sensitive_option();
481 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zCleanFlag==0 ){
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCleanFlag = db_get("clean-glob", 0);
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
482 499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zIgnoreFlag==0 ){
483 500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIgnoreFlag = db_get("ignore-glob", 0);
484 501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
485 502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vid = db_lget_int("checkout",0);
486 503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( vid==0 ){
@@ -496,13 +513,15 @@
496 513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
497 514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("CREATE TEMP TABLE sfile(x TEXT PRIMARY KEY)");
498 515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = strlen(g.zLocalRoot);
499 516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&path, g.zLocalRoot, n-1);
500 517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* now we read the complete file structure into a temp table */
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pClean = glob_create(zCleanFlag);
501 519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIgnore = glob_create(zIgnoreFlag);
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- vfile_scan(&path, blob_size(&path), scanFlags, pIgnore);
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vfile_scan2(&path, blob_size(&path), scanFlags, pClean, pIgnore);
503 521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
glob_free(pIgnore);
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ glob_free(pClean);
504 523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nAdd = add_files_in_sfile(vid);
505 524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
506 525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* step 2: search for missing files */
507 526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
508 527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT pathname, %Q || pathname, deleted FROM vfile"
509 528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!