mercurial/subrepo.py
changeset 18964 ca480d710fe6
parent 18943 27e8dfc2c338
child 18967 88d1b59f6906
equal deleted inserted replaced
18963:c31b8dc9de67 18964:ca480d710fe6
     3 # Copyright 2009-2010 Matt Mackall <mpm@selenic.com>
     3 # Copyright 2009-2010 Matt Mackall <mpm@selenic.com>
     4 #
     4 #
     5 # This software may be used and distributed according to the terms of the
     5 # This software may be used and distributed according to the terms of the
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     7 
     7 
     8 import errno, os, re, xml.dom.minidom, shutil, posixpath
     8 import errno, os, re, xml.dom.minidom, shutil, posixpath, sys
     9 import stat, subprocess, tarfile
     9 import stat, subprocess, tarfile
    10 from i18n import _
    10 from i18n import _
    11 import config, scmutil, util, node, error, cmdutil, bookmarks, match as matchmod
    11 import config, scmutil, util, node, error, cmdutil, bookmarks, match as matchmod
    12 hg = None
    12 hg = None
    13 propertycache = util.propertycache
    13 propertycache = util.propertycache
    39 class SubrepoAbort(error.Abort):
    39 class SubrepoAbort(error.Abort):
    40     """Exception class used to avoid handling a subrepo error more than once"""
    40     """Exception class used to avoid handling a subrepo error more than once"""
    41     def __init__(self, *args, **kw):
    41     def __init__(self, *args, **kw):
    42         error.Abort.__init__(self, *args, **kw)
    42         error.Abort.__init__(self, *args, **kw)
    43         self.subrepo = kw.get('subrepo')
    43         self.subrepo = kw.get('subrepo')
       
    44         self.cause = kw.get('cause')
    44 
    45 
    45 def annotatesubrepoerror(func):
    46 def annotatesubrepoerror(func):
    46     def decoratedmethod(self, *args, **kargs):
    47     def decoratedmethod(self, *args, **kargs):
    47         try:
    48         try:
    48             res = func(self, *args, **kargs)
    49             res = func(self, *args, **kargs)
    51             raise ex
    52             raise ex
    52         except error.Abort, ex:
    53         except error.Abort, ex:
    53             subrepo = subrelpath(self)
    54             subrepo = subrelpath(self)
    54             errormsg = str(ex) + ' ' + _('(in subrepo %s)') % subrepo
    55             errormsg = str(ex) + ' ' + _('(in subrepo %s)') % subrepo
    55             # avoid handling this exception by raising a SubrepoAbort exception
    56             # avoid handling this exception by raising a SubrepoAbort exception
    56             raise SubrepoAbort(errormsg, hint=ex.hint, subrepo=subrepo)
    57             raise SubrepoAbort(errormsg, hint=ex.hint, subrepo=subrepo,
       
    58                                cause=sys.exc_info())
    57         return res
    59         return res
    58     return decoratedmethod
    60     return decoratedmethod
    59 
    61 
    60 def state(ctx, ui):
    62 def state(ctx, ui):
    61     """return a state dict, mapping subrepo paths configured in .hgsub
    63     """return a state dict, mapping subrepo paths configured in .hgsub