# HG changeset patch # User Martin Geisler # Date 2010-09-13 11:09:31 # Node ID c02e1ed3d4077ccaffd43f45dcef5e21a099b9be # Parent e392d00ab5b0e93556bd055543b752374d3e585c incoming: recurse into subrepositories with --subrepos/-S flag As with push and outgoing, the optional source path is ignored for the subrepositories. Fixing this is Issue1852. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2357,7 +2357,16 @@ def incoming(ui, repo, source="default", Returns 0 if there are incoming changes, 1 otherwise. """ - return hg.incoming(ui, repo, source, opts) + if opts.get('bundle') and opts.get('subrepos'): + raise util.Abort(_('cannot combine --bundle and --subrepos')) + + ret = hg.incoming(ui, repo, source, opts) + if opts.get('subrepos'): + ctx = repo[None] + for subpath in sorted(ctx.substate): + sub = ctx.sub(subpath) + ret = min(ret, sub.incoming(ui, source, opts)) + return ret def init(ui, dest=".", **opts): """create a new repository in the given directory @@ -4191,7 +4200,7 @@ table = { _('a remote changeset intended to be added'), _('REV')), ('b', 'branch', [], _('a specific branch you would like to pull'), _('BRANCH')), - ] + logopts + remoteopts, + ] + logopts + remoteopts + subrepoopts, _('[-p] [-n] [-M] [-f] [-r REV]...' ' [--bundle FILENAME] [SOURCE]')), "^init": diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -267,6 +267,9 @@ class abstractsubrepo(object): def outgoing(self, ui, dest, opts): return 1 + def incoming(self, ui, source, opts): + return 1 + class hgsubrepo(abstractsubrepo): def __init__(self, ctx, path, state): self._path = path @@ -400,6 +403,9 @@ class hgsubrepo(abstractsubrepo): def outgoing(self, ui, dest, opts): return hg.outgoing(ui, self._repo, _abssource(self._repo, True), opts) + def incoming(self, ui, source, opts): + return hg.incoming(ui, self._repo, _abssource(self._repo, False), opts) + class svnsubrepo(abstractsubrepo): def __init__(self, ctx, path, state): self._path = path diff --git a/tests/test-debugcomplete.t b/tests/test-debugcomplete.t --- a/tests/test-debugcomplete.t +++ b/tests/test-debugcomplete.t @@ -227,7 +227,7 @@ Show all commands + options help: identify: rev, num, id, branch, tags import: strip, base, force, no-commit, exact, import-branch, message, logfile, date, user, similarity - incoming: force, newest-first, bundle, rev, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd + incoming: force, newest-first, bundle, rev, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, subrepos locate: rev, print0, fullpath, include, exclude manifest: rev outgoing: force, rev, newest-first, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, subrepos diff --git a/tests/test-subrepo-recursion.t b/tests/test-subrepo-recursion.t --- a/tests/test-subrepo-recursion.t +++ b/tests/test-subrepo-recursion.t @@ -287,3 +287,33 @@ Make nested change: date: Thu Jan 01 00:00:00 1970 +0000 summary: 3-4-2 + +Switch to original repo and setup default path: + + $ cd ../repo + $ echo '[paths]' >> .hg/hgrc + $ echo 'default = ../repo2' >> .hg/hgrc + +Test incoming: + + $ hg incoming -S + comparing with .*/test-subrepo-recursion.t/repo2 + searching for changes + changeset: 3:2655b8ecc4ee + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 3-4-2 + + comparing with .*/test-subrepo-recursion.t/repo2/foo + searching for changes + changeset: 4:e96193d6cb36 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 3-4-2 + + $ hg incoming -S --bundle incoming.hg + abort: cannot combine --bundle and --subrepos + + $ exit 0