Show More
@@ -1812,11 +1812,12 b' def forget(ui, repo, match, prefix, expl' | |||
|
1812 | 1812 | forgot.extend(forget) |
|
1813 | 1813 | return bad, forgot |
|
1814 | 1814 | |
|
1815 | def cat(ui, repo, ctx, matcher, **opts): | |
|
1815 | def cat(ui, repo, ctx, matcher, prefix, **opts): | |
|
1816 | 1816 | err = 1 |
|
1817 | 1817 | |
|
1818 | 1818 | def write(path): |
|
1819 |
fp = makefileobj(repo, opts.get('output'), ctx.node(), |
|
|
1819 | fp = makefileobj(repo, opts.get('output'), ctx.node(), | |
|
1820 | pathname=os.path.join(prefix, path)) | |
|
1820 | 1821 | data = ctx[path].data() |
|
1821 | 1822 | if opts.get('decode'): |
|
1822 | 1823 | data = repo.wwritedata(path, data) |
@@ -1833,9 +1834,35 b' def cat(ui, repo, ctx, matcher, **opts):' | |||
|
1833 | 1834 | write(file) |
|
1834 | 1835 | return 0 |
|
1835 | 1836 | |
|
1837 | # Don't warn about "missing" files that are really in subrepos | |
|
1838 | bad = matcher.bad | |
|
1839 | ||
|
1840 | def badfn(path, msg): | |
|
1841 | for subpath in ctx.substate: | |
|
1842 | if path.startswith(subpath): | |
|
1843 | return | |
|
1844 | bad(path, msg) | |
|
1845 | ||
|
1846 | matcher.bad = badfn | |
|
1847 | ||
|
1836 | 1848 | for abs in ctx.walk(matcher): |
|
1837 | 1849 | write(abs) |
|
1838 | 1850 | err = 0 |
|
1851 | ||
|
1852 | matcher.bad = bad | |
|
1853 | ||
|
1854 | for subpath in sorted(ctx.substate): | |
|
1855 | sub = ctx.sub(subpath) | |
|
1856 | try: | |
|
1857 | submatch = matchmod.narrowmatcher(subpath, matcher) | |
|
1858 | ||
|
1859 | if not sub.cat(ui, submatch, os.path.join(prefix, sub._path), | |
|
1860 | **opts): | |
|
1861 | err = 0 | |
|
1862 | except error.RepoLookupError: | |
|
1863 | ui.status(_("skipping missing subrepository: %s\n") | |
|
1864 | % os.path.join(prefix, subpath)) | |
|
1865 | ||
|
1839 | 1866 | return err |
|
1840 | 1867 | |
|
1841 | 1868 | def duplicatecopies(repo, rev, fromrev): |
@@ -1174,7 +1174,7 b' def cat(ui, repo, file1, *pats, **opts):' | |||
|
1174 | 1174 | ctx = scmutil.revsingle(repo, opts.get('rev')) |
|
1175 | 1175 | m = scmutil.match(ctx, (file1,) + pats, opts) |
|
1176 | 1176 | |
|
1177 | return cmdutil.cat(ui, repo, ctx, m, **opts) | |
|
1177 | return cmdutil.cat(ui, repo, ctx, m, '', **opts) | |
|
1178 | 1178 | |
|
1179 | 1179 | @command('^clone', |
|
1180 | 1180 | [('U', 'noupdate', None, |
@@ -84,6 +84,9 b' Interaction with Mercurial Commands' | |||
|
84 | 84 | :archive: archive does not recurse in subrepositories unless |
|
85 | 85 | -S/--subrepos is specified. |
|
86 | 86 | |
|
87 | :cat: cat currently only handles exact file matches in subrepos. | |
|
88 | Git and Subversion subrepositories are currently ignored. | |
|
89 | ||
|
87 | 90 | :commit: commit creates a consistent snapshot of the state of the |
|
88 | 91 | entire project and its subrepositories. If any subrepositories |
|
89 | 92 | have been modified, Mercurial will abort. Mercurial can be made |
@@ -439,6 +439,9 b' class abstractsubrepo(object):' | |||
|
439 | 439 | def add(self, ui, match, dryrun, listsubrepos, prefix, explicitonly): |
|
440 | 440 | return [] |
|
441 | 441 | |
|
442 | def cat(self, ui, match, prefix, **opts): | |
|
443 | return 1 | |
|
444 | ||
|
442 | 445 | def status(self, rev2, **opts): |
|
443 | 446 | return [], [], [], [], [], [], [] |
|
444 | 447 | |
@@ -609,6 +612,12 b' class hgsubrepo(abstractsubrepo):' | |||
|
609 | 612 | os.path.join(prefix, self._path), explicitonly) |
|
610 | 613 | |
|
611 | 614 | @annotatesubrepoerror |
|
615 | def cat(self, ui, match, prefix, **opts): | |
|
616 | rev = self._state[1] | |
|
617 | ctx = self._repo[rev] | |
|
618 | return cmdutil.cat(ui, self._repo, ctx, match, prefix, **opts) | |
|
619 | ||
|
620 | @annotatesubrepoerror | |
|
612 | 621 | def status(self, rev2, **opts): |
|
613 | 622 | try: |
|
614 | 623 | rev1 = self._state[1] |
@@ -792,6 +792,19 b' Prepare a repo with subrepo' | |||
|
792 | 792 | $ echo test >> sub/repo/foo |
|
793 | 793 | $ hg ci -mtest |
|
794 | 794 | committing subrepository sub/repo (glob) |
|
795 | $ hg cat sub/repo/foo | |
|
796 | test | |
|
797 | test | |
|
798 | $ mkdir -p tmp/sub/repo | |
|
799 | $ hg cat -r 0 --output tmp/%p_p sub/repo/foo | |
|
800 | $ cat tmp/sub/repo/foo_p | |
|
801 | test | |
|
802 | $ mv sub/repo sub_ | |
|
803 | $ hg cat sub/repo/baz | |
|
804 | skipping missing subrepository: sub/repo | |
|
805 | [1] | |
|
806 | $ rm -rf sub/repo | |
|
807 | $ mv sub_ sub/repo | |
|
795 | 808 | $ cd .. |
|
796 | 809 | |
|
797 | 810 | Create repo without default path, pull top repo, and see what happens on update |
General Comments 0
You need to be logged in to leave comments.
Login now