##// END OF EJS Templates
narrow: add option for automatically removing unused includes...
Martin von Zweigbergk -
r43215:40f78072 default
parent child Browse files
Show More
@@ -328,6 +328,8 def _widen(ui, repo, remote, commoninc,
328 328 @command('tracked',
329 329 [('', 'addinclude', [], _('new paths to include')),
330 330 ('', 'removeinclude', [], _('old paths to no longer include')),
331 ('', 'auto-remove-includes', False,
332 _('automatically choose unused includes to remove')),
331 333 ('', 'addexclude', [], _('new paths to exclude')),
332 334 ('', 'import-rules', '', _('import narrowspecs from a file')),
333 335 ('', 'removeexclude', [], _('old paths to no longer exclude')),
@@ -363,6 +365,11 def trackedcmd(ui, repo, remotepath=None
363 365 If --clear is specified without any further options, the narrowspec will be
364 366 empty and will not match any files.
365 367
368 If --auto-remove-includes is specified, then those includes that don't match
369 any files modified by currently visible local commits (those not shared by
370 the remote) will be added to the set of explicitly specified includes to
371 remove.
372
366 373 --import-rules accepts a path to a file containing rules, allowing you to
367 374 add --addinclude, --addexclude rules in bulk. Like the other include and
368 375 exclude switches, the changes are applied immediately.
@@ -398,10 +405,12 def trackedcmd(ui, repo, remotepath=None
398 405 removedincludes = narrowspec.parsepatterns(opts['removeinclude'])
399 406 addedexcludes = narrowspec.parsepatterns(opts['addexclude'])
400 407 removedexcludes = narrowspec.parsepatterns(opts['removeexclude'])
408 autoremoveincludes = opts['auto_remove_includes']
401 409
402 410 update_working_copy = opts['update_working_copy']
403 411 only_show = not (addedincludes or removedincludes or addedexcludes or
404 removedexcludes or newrules or update_working_copy)
412 removedexcludes or newrules or autoremoveincludes or
413 update_working_copy)
405 414
406 415 oldincludes, oldexcludes = repo.narrowpats
407 416
@@ -436,7 +445,7 def trackedcmd(ui, repo, remotepath=None
436 445 narrowspec.copytoworkingcopy(repo)
437 446 return 0
438 447
439 if not widening and not narrowing:
448 if not (widening or narrowing or autoremoveincludes):
440 449 ui.status(_("nothing to widen or narrow\n"))
441 450 return 0
442 451
@@ -459,6 +468,28 def trackedcmd(ui, repo, remotepath=None
459 468
460 469 commoninc = discovery.findcommonincoming(repo, remote)
461 470
471 if autoremoveincludes:
472 outgoing = discovery.findcommonoutgoing(repo, remote,
473 commoninc=commoninc)
474 ui.status(_('looking for unused includes to remove\n'))
475 localfiles = set()
476 for n in itertools.chain(outgoing.missing, outgoing.excluded):
477 localfiles.update(repo[n].files())
478 suggestedremovals = []
479 for include in sorted(oldincludes):
480 match = narrowspec.match(repo.root, [include], oldexcludes)
481 if not any(match(f) for f in localfiles):
482 suggestedremovals.append(include)
483 if suggestedremovals:
484 for s in suggestedremovals:
485 ui.status('%s\n' % s)
486 if (ui.promptchoice(_('remove these unused includes (yn)?'
487 '$$ &Yes $$ &No')) == 0):
488 removedincludes.update(suggestedremovals)
489 narrowing = True
490 else:
491 ui.status(_('found no unused includes\n'))
492
462 493 if narrowing:
463 494 newincludes = oldincludes - removedincludes
464 495 newexcludes = oldexcludes | addedexcludes
@@ -101,6 +101,8 Testing the --import-rules flag of `hg t
101 101
102 102 --addinclude VALUE [+] new paths to include
103 103 --removeinclude VALUE [+] old paths to no longer include
104 --auto-remove-includes automatically choose unused includes to
105 remove
104 106 --addexclude VALUE [+] new paths to exclude
105 107 --import-rules VALUE import narrowspecs from a file
106 108 --removeexclude VALUE [+] old paths to no longer exclude
@@ -447,3 +447,48 Now test it *with* verbose.
447 447 abort: local changes found
448 448 (use --force-delete-local-changes to ignore)
449 449 [255]
450 $ cd ..
451
452 Test --auto-remove-includes
453 $ hg clone --narrow ssh://user@dummy/master narrow-auto-remove -q \
454 > --include d0 --include d1 --include d2
455 $ cd narrow-auto-remove
456 $ echo a >> d0/f
457 $ hg ci -m 'local change to d0'
458 $ hg co '.^'
459 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
460 $ echo a >> d1/f
461 $ hg ci -m 'local change to d1'
462 created new head
463 $ hg debugobsolete $(hg log -T '{node}' -r 'desc("local change to d0")')
464 1 new obsolescence markers
465 obsoleted 1 changesets
466 $ echo n | hg tracked --auto-remove-includes --config ui.interactive=yes
467 comparing with ssh://user@dummy/master
468 searching for changes
469 looking for unused includes to remove
470 path:d0
471 path:d2
472 remove these unused includes (yn)? n
473 $ hg tracked --auto-remove-includes
474 comparing with ssh://user@dummy/master
475 searching for changes
476 looking for unused includes to remove
477 path:d0
478 path:d2
479 remove these unused includes (yn)? y
480 looking for local changes to affected paths
481 saved backup bundle to $TESTTMP/narrow-auto-remove/.hg/strip-backup/*-narrow.hg (glob)
482 deleting data/d0/f.i
483 deleting data/d2/f.i
484 deleting meta/d0/00manifest.i (tree !)
485 deleting meta/d2/00manifest.i (tree !)
486 $ hg tracked
487 I path:d1
488 $ hg files
489 d1/f
490 $ hg tracked --auto-remove-includes
491 comparing with ssh://user@dummy/master
492 searching for changes
493 looking for unused includes to remove
494 found no unused includes
General Comments 0
You need to be logged in to leave comments. Login now