Show More
@@ -1755,6 +1755,49 def sort(repo, subset, x): | |||||
1755 | l.sort() |
|
1755 | l.sort() | |
1756 | return baseset([e[-1] for e in l]) |
|
1756 | return baseset([e[-1] for e in l]) | |
1757 |
|
1757 | |||
|
1758 | def subrepo(repo, subset, x): | |||
|
1759 | """``subrepo([pattern])`` | |||
|
1760 | Changesets that add, modify or remove the given subrepo. If no subrepo | |||
|
1761 | pattern is named, any subrepo changes are returned. | |||
|
1762 | """ | |||
|
1763 | # i18n: "subrepo" is a keyword | |||
|
1764 | args = getargs(x, 0, 1, _('subrepo takes at most one argument')) | |||
|
1765 | if len(args) != 0: | |||
|
1766 | pat = getstring(args[0], _("subrepo requires a pattern")) | |||
|
1767 | ||||
|
1768 | m = matchmod.exact(repo.root, repo.root, ['.hgsubstate']) | |||
|
1769 | ||||
|
1770 | def submatches(names): | |||
|
1771 | k, p, m = _stringmatcher(pat) | |||
|
1772 | for name in names: | |||
|
1773 | if m(name): | |||
|
1774 | yield name | |||
|
1775 | ||||
|
1776 | def matches(x): | |||
|
1777 | c = repo[x] | |||
|
1778 | s = repo.status(c.p1().node(), c.node(), match=m) | |||
|
1779 | ||||
|
1780 | if len(args) == 0: | |||
|
1781 | return s.added or s.modified or s.removed | |||
|
1782 | ||||
|
1783 | if s.added: | |||
|
1784 | return util.any(submatches(c.substate.keys())) | |||
|
1785 | ||||
|
1786 | if s.modified: | |||
|
1787 | subs = set(c.p1().substate.keys()) | |||
|
1788 | subs.update(c.substate.keys()) | |||
|
1789 | ||||
|
1790 | for path in submatches(subs): | |||
|
1791 | if c.p1().substate.get(path) != c.substate.get(path): | |||
|
1792 | return True | |||
|
1793 | ||||
|
1794 | if s.removed: | |||
|
1795 | return util.any(submatches(c.p1().substate.keys())) | |||
|
1796 | ||||
|
1797 | return False | |||
|
1798 | ||||
|
1799 | return subset.filter(matches) | |||
|
1800 | ||||
1758 | def _stringmatcher(pattern): |
|
1801 | def _stringmatcher(pattern): | |
1759 | """ |
|
1802 | """ | |
1760 | accepts a string, possibly starting with 're:' or 'literal:' prefix. |
|
1803 | accepts a string, possibly starting with 're:' or 'literal:' prefix. | |
@@ -1952,6 +1995,7 symbols = { | |||||
1952 | "roots": roots, |
|
1995 | "roots": roots, | |
1953 | "sort": sort, |
|
1996 | "sort": sort, | |
1954 | "secret": secret, |
|
1997 | "secret": secret, | |
|
1998 | "subrepo": subrepo, | |||
1955 | "matching": matching, |
|
1999 | "matching": matching, | |
1956 | "tag": tag, |
|
2000 | "tag": tag, | |
1957 | "tagged": tagged, |
|
2001 | "tagged": tagged, |
@@ -458,4 +458,85 Test a directory commit with a changed l | |||||
458 | R a.dat |
|
458 | R a.dat | |
459 | R foo/bar/abc |
|
459 | R foo/bar/abc | |
460 |
|
460 | |||
|
461 | ||||
|
462 | $ echo foo > main | |||
|
463 | $ hg ci -m "mod parent only" | |||
|
464 | $ hg init sub3 | |||
|
465 | $ echo "sub3 = sub3" >> .hgsub | |||
|
466 | $ echo xyz > sub3/a.txt | |||
|
467 | $ hg add sub3/a.txt | |||
|
468 | $ hg ci -Sm "add sub3" | |||
|
469 | committing subrepository sub3 | |||
|
470 | $ cat .hgsub | grep -v sub3 > .hgsub1 | |||
|
471 | $ mv .hgsub1 .hgsub | |||
|
472 | $ hg ci -m "remove sub3" | |||
|
473 | ||||
|
474 | $ hg log -r "subrepo()" --style compact | |||
|
475 | 0 7f491f53a367 1970-01-01 00:00 +0000 test | |||
|
476 | main import | |||
|
477 | ||||
|
478 | 1 ffe6649062fe 1970-01-01 00:00 +0000 test | |||
|
479 | deep nested modif should trigger a commit | |||
|
480 | ||||
|
481 | 2 9bb10eebee29 1970-01-01 00:00 +0000 test | |||
|
482 | add test.txt | |||
|
483 | ||||
|
484 | 3 7c64f035294f 1970-01-01 00:00 +0000 test | |||
|
485 | add large files | |||
|
486 | ||||
|
487 | 4 f734a59e2e35 1970-01-01 00:00 +0000 test | |||
|
488 | forget testing | |||
|
489 | ||||
|
490 | 11 9685a22af5db 1970-01-01 00:00 +0000 test | |||
|
491 | add sub3 | |||
|
492 | ||||
|
493 | 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test | |||
|
494 | remove sub3 | |||
|
495 | ||||
|
496 | $ hg log -r "subrepo('sub3')" --style compact | |||
|
497 | 11 9685a22af5db 1970-01-01 00:00 +0000 test | |||
|
498 | add sub3 | |||
|
499 | ||||
|
500 | 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test | |||
|
501 | remove sub3 | |||
|
502 | ||||
|
503 | $ hg log -r "subrepo('bogus')" --style compact | |||
|
504 | ||||
|
505 | ||||
|
506 | Test .hgsubstate in the R state | |||
|
507 | ||||
|
508 | $ hg rm .hgsub .hgsubstate | |||
|
509 | $ hg ci -m 'trash subrepo tracking' | |||
|
510 | ||||
|
511 | $ hg log -r "subrepo('re:sub\d+')" --style compact | |||
|
512 | 0 7f491f53a367 1970-01-01 00:00 +0000 test | |||
|
513 | main import | |||
|
514 | ||||
|
515 | 1 ffe6649062fe 1970-01-01 00:00 +0000 test | |||
|
516 | deep nested modif should trigger a commit | |||
|
517 | ||||
|
518 | 2 9bb10eebee29 1970-01-01 00:00 +0000 test | |||
|
519 | add test.txt | |||
|
520 | ||||
|
521 | 3 7c64f035294f 1970-01-01 00:00 +0000 test | |||
|
522 | add large files | |||
|
523 | ||||
|
524 | 4 f734a59e2e35 1970-01-01 00:00 +0000 test | |||
|
525 | forget testing | |||
|
526 | ||||
|
527 | 11 9685a22af5db 1970-01-01 00:00 +0000 test | |||
|
528 | add sub3 | |||
|
529 | ||||
|
530 | 12 2e0485b475b9 1970-01-01 00:00 +0000 test | |||
|
531 | remove sub3 | |||
|
532 | ||||
|
533 | 13[tip] a68b2c361653 1970-01-01 00:00 +0000 test | |||
|
534 | trash subrepo tracking | |||
|
535 | ||||
|
536 | ||||
|
537 | Restore the trashed subrepo tracking | |||
|
538 | ||||
|
539 | $ hg rollback -q | |||
|
540 | $ hg update -Cq . | |||
|
541 | ||||
461 | $ cd .. |
|
542 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now