subrepo: print paths relative to upper repo root for push/pull/commit
This makes more sense when using multiple levels of
nesting.
This happens to help a lot in a case where 3 projects
of mine all use the same makefile helper project as a
sub. A fourth project use these first three projects
and current output made it very hard to figure
which makefile helper was committed. it looked more
like the project was committed/pushed/pulled three times
in a row than dealing on three different repos.
--- a/mercurial/localrepo.py Sat May 01 23:05:22 2010 +0200
+++ b/mercurial/localrepo.py Sat May 01 23:05:22 2010 +0200
@@ -867,8 +867,10 @@
if subs or removedsubs:
state = wctx.substate.copy()
for s in subs:
- self.ui.status(_('committing subrepository %s\n') % s)
- sr = wctx.sub(s).commit(cctx._text, user, date)
+ sub = wctx.sub(s)
+ self.ui.status(_('committing subrepository %s\n') %
+ subrepo.relpath(sub))
+ sr = sub.commit(cctx._text, user, date)
state[s] = (state[s][0], sr)
subrepo.writestate(self, state)
--- a/mercurial/subrepo.py Sat May 01 23:05:22 2010 +0200
+++ b/mercurial/subrepo.py Sat May 01 23:05:22 2010 +0200
@@ -126,6 +126,14 @@
# record merged .hgsubstate
writestate(repo, sm)
+def relpath(sub):
+ if not hasattr(sub, '_repo'):
+ return sub._path
+ parent = sub._repo
+ while hasattr(parent, '_subparent'):
+ parent = parent._subparent
+ return sub._repo.root[len(parent.root)+1:]
+
def _abssource(repo, push=False):
if hasattr(repo, '_subparent'):
source = repo._subsource
@@ -214,7 +222,7 @@
return w.dirty() # working directory changed
def commit(self, text, user, date):
- self._repo.ui.debug("committing subrepo %s\n" % self._path)
+ self._repo.ui.debug("committing subrepo %s\n" % relpath(self))
n = self._repo.commit(text, user, date)
if not n:
return self._repo['.'].hex() # different version checked out
@@ -223,7 +231,7 @@
def remove(self):
# we can't fully delete the repository as it may contain
# local-only history
- self._repo.ui.note(_('removing subrepo %s\n') % self._path)
+ self._repo.ui.note(_('removing subrepo %s\n') % relpath(self))
hg.clean(self._repo, node.nullid, False)
def _get(self, state):
@@ -234,7 +242,7 @@
self._repo._subsource = source
srcurl = _abssource(self._repo)
self._repo.ui.status(_('pulling subrepo %s from %s\n')
- % (self._path, srcurl))
+ % (relpath(self), srcurl))
other = hg.repository(self._repo.ui, srcurl)
self._repo.pull(other)
@@ -250,12 +258,12 @@
dst = self._repo[state[1]]
anc = dst.ancestor(cur)
if anc == cur:
- self._repo.ui.debug("updating subrepo %s\n" % self._path)
+ self._repo.ui.debug("updating subrepo %s\n" % relpath(self))
hg.update(self._repo, state[1])
elif anc == dst:
- self._repo.ui.debug("skipping subrepo %s\n" % self._path)
+ self._repo.ui.debug("skipping subrepo %s\n" % relpath(self))
else:
- self._repo.ui.debug("merging subrepo %s\n" % self._path)
+ self._repo.ui.debug("merging subrepo %s\n" % relpath(self))
hg.merge(self._repo, state[1], remind=False)
def push(self, force):
@@ -268,7 +276,7 @@
dsturl = _abssource(self._repo, True)
self._repo.ui.status(_('pushing subrepo %s to %s\n') %
- (self._path, dsturl))
+ (relpath(self), dsturl))
other = hg.repository(self._repo.ui, dsturl)
return self._repo.push(other, force)
--- a/tests/test-subrepo-deep-nested-change.out Sat May 01 23:05:22 2010 +0200
+++ b/tests/test-subrepo-deep-nested-change.out Sat May 01 23:05:22 2010 +0200
@@ -50,7 +50,7 @@
revision c57a0840e3badd667ef3c3ef65471609acb2ba3c
% Modifying deeply nested sub2
committing subrepository sub1
-committing subrepository sub2
+committing subrepository sub1/sub2
% Checking modified node ids
cloned ffe6649062fe tip
cloned/sub1 2ecb03bf44a9 tip
--- a/tests/test-subrepo.out Sat May 01 23:05:22 2010 +0200
+++ b/tests/test-subrepo.out Sat May 01 23:05:22 2010 +0200
@@ -129,7 +129,7 @@
adding manifests
adding file changes
added 4 changesets with 5 changes to 3 files
-pulling subrepo ss from .../sub/t/s/ss
+pulling subrepo s/ss from .../sub/t/s/ss
requesting all changes
adding changesets
adding manifests