# HG changeset patch # User Pierre-Yves David # Date 2015-10-08 19:55:45 # Node ID 56b2bcea252913e4a2d2772d2f35cd7e07b37f12 # Parent d51c658d3f0488419ca0364c96caf34b2fd78f83 error: get Abort from 'error' instead of 'util' The home of 'Abort' is 'error' not 'util' however, a lot of code seems to be confused about that and gives all the credit to 'util' instead of the hardworking 'error'. In a spirit of equity, we break the cycle of injustice and give back to 'error' the respect it deserves. And screw that 'util' poser. For great justice. diff --git a/contrib/simplemerge b/contrib/simplemerge --- a/contrib/simplemerge +++ b/contrib/simplemerge @@ -5,7 +5,7 @@ demandimport.enable() import sys from mercurial.i18n import _ -from mercurial import simplemerge, fancyopts, util, ui +from mercurial import error, simplemerge, fancyopts, util, ui options = [('L', 'label', [], _('labels to use on conflict markers')), ('a', 'text', None, _('treat all files as text')), @@ -59,7 +59,7 @@ except ParseError, e: sys.stdout.write("%s: %s\n" % (sys.argv[0], e)) showhelp() sys.exit(1) -except util.Abort, e: +except error.Abort, e: sys.stderr.write("abort: %s\n" % e) sys.exit(255) except KeyboardInterrupt: diff --git a/contrib/synthrepo.py b/contrib/synthrepo.py --- a/contrib/synthrepo.py +++ b/contrib/synthrepo.py @@ -37,7 +37,7 @@ A few obvious properties that are not cu ''' import bisect, collections, itertools, json, os, random, time, sys -from mercurial import cmdutil, context, patch, scmutil, util, hg +from mercurial import cmdutil, context, patch, scmutil, util, hg, error from mercurial.i18n import _ from mercurial.node import nullrev, nullid, short @@ -254,7 +254,7 @@ def synthesize(ui, repo, descpath, **opt try: fp = hg.openpath(ui, descpath) except Exception as err: - raise util.Abort('%s: %s' % (descpath, err[0].strerror)) + raise error.Abort('%s: %s' % (descpath, err[0].strerror)) desc = json.load(fp) fp.close() @@ -286,7 +286,7 @@ def synthesize(ui, repo, descpath, **opt try: fp = open(dictfile, 'rU') except IOError as err: - raise util.Abort('%s: %s' % (dictfile, err.strerror)) + raise error.Abort('%s: %s' % (dictfile, err.strerror)) words = fp.read().splitlines() fp.close() diff --git a/hgext/acl.py b/hgext/acl.py --- a/hgext/acl.py +++ b/hgext/acl.py @@ -192,7 +192,7 @@ 3) Deny access to a file to anyone but u ''' from mercurial.i18n import _ -from mercurial import util, match +from mercurial import util, match, error import getpass, urllib # Note for extension authors: ONLY specify testedwith = 'internal' for @@ -213,7 +213,7 @@ def _getusers(ui, group): try: return util.groupmembers(group) except KeyError: - raise util.Abort(_("group '%s' is undefined") % group) + raise error.Abort(_("group '%s' is undefined") % group) def _usermatch(ui, user, usersorgroups): @@ -268,7 +268,7 @@ def buildmatch(ui, repo, user, key): def hook(ui, repo, hooktype, node=None, source=None, **kwargs): if hooktype not in ['pretxnchangegroup', 'pretxncommit']: - raise util.Abort(_('config error - hook type "%s" cannot stop ' + raise error.Abort(_('config error - hook type "%s" cannot stop ' 'incoming changesets nor commits') % hooktype) if (hooktype == 'pretxnchangegroup' and source not in ui.config('acl', 'sources', 'serve').split()): @@ -301,11 +301,11 @@ def hook(ui, repo, hooktype, node=None, ctx = repo[rev] branch = ctx.branch() if denybranches and denybranches(branch): - raise util.Abort(_('acl: user "%s" denied on branch "%s"' + raise error.Abort(_('acl: user "%s" denied on branch "%s"' ' (changeset "%s")') % (user, branch, ctx)) if allowbranches and not allowbranches(branch): - raise util.Abort(_('acl: user "%s" not allowed on branch "%s"' + raise error.Abort(_('acl: user "%s" not allowed on branch "%s"' ' (changeset "%s")') % (user, branch, ctx)) ui.debug('acl: branch access granted: "%s" on branch "%s"\n' @@ -313,9 +313,9 @@ def hook(ui, repo, hooktype, node=None, for f in ctx.files(): if deny and deny(f): - raise util.Abort(_('acl: user "%s" denied on "%s"' + raise error.Abort(_('acl: user "%s" denied on "%s"' ' (changeset "%s")') % (user, f, ctx)) if allow and not allow(f): - raise util.Abort(_('acl: user "%s" not allowed on "%s"' + raise error.Abort(_('acl: user "%s" not allowed on "%s"' ' (changeset "%s")') % (user, f, ctx)) ui.debug('acl: path access granted: "%s"\n' % ctx) diff --git a/hgext/bugzilla.py b/hgext/bugzilla.py --- a/hgext/bugzilla.py +++ b/hgext/bugzilla.py @@ -279,7 +279,7 @@ All the above add a comment to the Bugzi from mercurial.i18n import _ from mercurial.node import short -from mercurial import cmdutil, mail, util +from mercurial import cmdutil, mail, util, error import re, time, urlparse, xmlrpclib # Note for extension authors: ONLY specify testedwith = 'internal' for @@ -358,7 +358,7 @@ class bzmysql(bzaccess): import MySQLdb as mysql bzmysql._MySQLdb = mysql except ImportError as err: - raise util.Abort(_('python mysql support not available: %s') % err) + raise error.Abort(_('python mysql support not available: %s') % err) bzaccess.__init__(self, ui) @@ -392,7 +392,7 @@ class bzmysql(bzaccess): self.run('select fieldid from fielddefs where name = "longdesc"') ids = self.cursor.fetchall() if len(ids) != 1: - raise util.Abort(_('unknown database schema')) + raise error.Abort(_('unknown database schema')) return ids[0][0] def filter_real_bug_ids(self, bugs): @@ -437,7 +437,7 @@ class bzmysql(bzaccess): ret = fp.close() if ret: self.ui.warn(out) - raise util.Abort(_('bugzilla notify command %s') % + raise error.Abort(_('bugzilla notify command %s') % util.explainexit(ret)[0]) self.ui.status(_('done\n')) @@ -470,12 +470,12 @@ class bzmysql(bzaccess): try: defaultuser = self.ui.config('bugzilla', 'bzuser') if not defaultuser: - raise util.Abort(_('cannot find bugzilla user id for %s') % + raise error.Abort(_('cannot find bugzilla user id for %s') % user) userid = self.get_user_id(defaultuser) user = defaultuser except KeyError: - raise util.Abort(_('cannot find bugzilla user id for %s or %s') + raise error.Abort(_('cannot find bugzilla user id for %s or %s') % (user, defaultuser)) return (user, userid) @@ -517,7 +517,7 @@ class bzmysql_3_0(bzmysql_2_18): self.run('select id from fielddefs where name = "longdesc"') ids = self.cursor.fetchall() if len(ids) != 1: - raise util.Abort(_('unknown database schema')) + raise error.Abort(_('unknown database schema')) return ids[0][0] # Bugzilla via XMLRPC interface. @@ -705,7 +705,7 @@ class bzxmlrpcemail(bzxmlrpc): self.bzemail = self.ui.config('bugzilla', 'bzemail') if not self.bzemail: - raise util.Abort(_("configuration 'bzemail' missing")) + raise error.Abort(_("configuration 'bzemail' missing")) mail.validateconfig(self.ui) def makecommandline(self, fieldname, value): @@ -735,8 +735,8 @@ class bzxmlrpcemail(bzxmlrpc): matches = self.bzproxy.User.get({'match': [user], 'token': self.bztoken}) if not matches['users']: - raise util.Abort(_("default bugzilla user %s email not found") % - user) + raise error.Abort(_("default bugzilla user %s email not found") + % user) user = matches['users'][0]['email'] commands.append(self.makecommandline("id", bugid)) @@ -789,7 +789,7 @@ class bugzilla(object): try: bzclass = bugzilla._versions[bzversion] except KeyError: - raise util.Abort(_('bugzilla version %s not supported') % + raise error.Abort(_('bugzilla version %s not supported') % bzversion) self.bzdriver = bzclass(self.ui) @@ -900,7 +900,7 @@ def hook(ui, repo, hooktype, node=None, bugzilla bug id. only add a comment once per bug, so same change seen multiple times does not fill bug with duplicate data.''' if node is None: - raise util.Abort(_('hook type %s does not pass a changeset id') % + raise error.Abort(_('hook type %s does not pass a changeset id') % hooktype) try: bz = bugzilla(ui, repo) @@ -911,4 +911,4 @@ def hook(ui, repo, hooktype, node=None, bz.update(bug, bugs[bug], ctx) bz.notify(bugs, util.email(ctx.user())) except Exception as e: - raise util.Abort(_('Bugzilla error: %s') % e) + raise error.Abort(_('Bugzilla error: %s') % e) diff --git a/hgext/censor.py b/hgext/censor.py --- a/hgext/censor.py +++ b/hgext/censor.py @@ -43,47 +43,47 @@ testedwith = 'internal' _('-r REV [-t TEXT] [FILE]')) def censor(ui, repo, path, rev='', tombstone='', **opts): if not path: - raise util.Abort(_('must specify file path to censor')) + raise error.Abort(_('must specify file path to censor')) if not rev: - raise util.Abort(_('must specify revision to censor')) + raise error.Abort(_('must specify revision to censor')) wctx = repo[None] m = scmutil.match(wctx, (path,)) if m.anypats() or len(m.files()) != 1: - raise util.Abort(_('can only specify an explicit filename')) + raise error.Abort(_('can only specify an explicit filename')) path = m.files()[0] flog = repo.file(path) if not len(flog): - raise util.Abort(_('cannot censor file with no history')) + raise error.Abort(_('cannot censor file with no history')) rev = scmutil.revsingle(repo, rev, rev).rev() try: ctx = repo[rev] except KeyError: - raise util.Abort(_('invalid revision identifier %s') % rev) + raise error.Abort(_('invalid revision identifier %s') % rev) try: fctx = ctx.filectx(path) except error.LookupError: - raise util.Abort(_('file does not exist at revision %s') % rev) + raise error.Abort(_('file does not exist at revision %s') % rev) fnode = fctx.filenode() headctxs = [repo[c] for c in repo.heads()] heads = [c for c in headctxs if path in c and c.filenode(path) == fnode] if heads: headlist = ', '.join([short(c.node()) for c in heads]) - raise util.Abort(_('cannot censor file in heads (%s)') % headlist, + raise error.Abort(_('cannot censor file in heads (%s)') % headlist, hint=_('clean/delete and commit first')) wp = wctx.parents() if ctx.node() in [p.node() for p in wp]: - raise util.Abort(_('cannot censor working directory'), + raise error.Abort(_('cannot censor working directory'), hint=_('clean/delete/update first')) flogv = flog.version & 0xFFFF if flogv != revlog.REVLOGNG: - raise util.Abort( + raise error.Abort( _('censor does not support revlog version %d') % (flogv,)) tombstone = filelog.packmeta({"censored": tombstone}, "") @@ -91,7 +91,7 @@ def censor(ui, repo, path, rev='', tombs crev = fctx.filerev() if len(tombstone) > flog.rawsize(crev): - raise util.Abort(_( + raise error.Abort(_( 'censor tombstone must be no longer than censored data')) # Using two files instead of one makes it easy to rewrite entry-by-entry diff --git a/hgext/churn.py b/hgext/churn.py --- a/hgext/churn.py +++ b/hgext/churn.py @@ -9,7 +9,7 @@ '''command to display statistics about repository history''' from mercurial.i18n import _ -from mercurial import patch, cmdutil, scmutil, util, commands +from mercurial import patch, cmdutil, scmutil, util, commands, error from mercurial import encoding import os import time, datetime @@ -27,7 +27,7 @@ def maketemplater(ui, repo, tmpl): t = cmdutil.changeset_templater(ui, repo, False, None, tmpl, None, False) except SyntaxError as inst: - raise util.Abort(inst.args[0]) + raise error.Abort(inst.args[0]) return t def changedlines(ui, repo, ctx1, ctx2, fns): diff --git a/hgext/convert/bzr.py b/hgext/convert/bzr.py --- a/hgext/convert/bzr.py +++ b/hgext/convert/bzr.py @@ -9,7 +9,7 @@ # it cannot access 'bar' repositories, but they were never used very much import os -from mercurial import demandimport +from mercurial import demandimport, error # these do not work with demandimport, blacklist demandimport.ignore.extend([ 'bzrlib.transactions', @@ -18,7 +18,7 @@ demandimport.ignore.extend([ ]) from mercurial.i18n import _ -from mercurial import util +from mercurial import error from common import NoRepo, commit, converter_source try: @@ -108,7 +108,8 @@ class bzr_source(converter_source): pass revid = info.rev_id if revid is None: - raise util.Abort(_('%s is not a valid revision') % self.revs[0]) + raise error.Abort(_('%s is not a valid revision') + % self.revs[0]) heads = [revid] # Empty repositories return 'null:', which cannot be retrieved heads = [h for h in heads if h != 'null:'] @@ -127,7 +128,7 @@ class bzr_source(converter_source): if kind == 'symlink': target = revtree.get_symlink_target(fileid) if target is None: - raise util.Abort(_('%s.%s symlink has no target') + raise error.Abort(_('%s.%s symlink has no target') % (name, rev)) return target, mode else: @@ -136,7 +137,7 @@ class bzr_source(converter_source): def getchanges(self, version, full): if full: - raise util.Abort(_("convert from cvs do not support --full")) + raise error.Abort(_("convert from cvs do not support --full")) self._modecache = {} self._revtree = self.sourcerepo.revision_tree(version) # get the parentids from the cache diff --git a/hgext/convert/common.py b/hgext/convert/common.py --- a/hgext/convert/common.py +++ b/hgext/convert/common.py @@ -7,7 +7,7 @@ import base64, errno, subprocess, os, datetime, re import cPickle as pickle -from mercurial import phases, util +from mercurial import phases, util, error from mercurial.i18n import _ propertycache = util.propertycache @@ -32,7 +32,7 @@ def checktool(exe, name=None, abort=True name = name or exe if not util.findexe(exe): if abort: - exc = util.Abort + exc = error.Abort else: exc = MissingTool raise exc(_('cannot find required "%s" tool') % name) @@ -73,7 +73,7 @@ class converter_source(object): such format for their revision numbering """ if not re.match(r'[0-9a-fA-F]{40,40}$', revstr): - raise util.Abort(_('%s entry %s is not a valid revision' + raise error.Abort(_('%s entry %s is not a valid revision' ' identifier') % (mapname, revstr)) def before(self): @@ -369,7 +369,7 @@ class commandline(object): self.ui.warn(_('%s error:\n') % self.command) self.ui.warn(output) msg = util.explainexit(status)[0] - raise util.Abort('%s %s' % (self.command, msg)) + raise error.Abort('%s %s' % (self.command, msg)) def run0(self, cmd, *args, **kwargs): output, status = self.run(cmd, *args, **kwargs) @@ -446,7 +446,7 @@ class mapfile(dict): try: key, value = line.rsplit(' ', 1) except ValueError: - raise util.Abort( + raise error.Abort( _('syntax error in %s(%d): key/value pair expected') % (self.path, i + 1)) if key not in self: @@ -459,7 +459,7 @@ class mapfile(dict): try: self.fp = open(self.path, 'a') except IOError as err: - raise util.Abort(_('could not open map file %r: %s') % + raise error.Abort(_('could not open map file %r: %s') % (self.path, err.strerror)) self.fp.write('%s %s\n' % (key, value)) self.fp.flush() diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py +++ b/hgext/convert/convcmd.py @@ -18,7 +18,7 @@ from p4 import p4_source import filemap import os, shutil, shlex -from mercurial import hg, util, encoding +from mercurial import hg, util, encoding, error from mercurial.i18n import _ orig_encoding = 'ascii' @@ -82,7 +82,7 @@ sink_converters = [ def convertsource(ui, path, type, revs): exceptions = [] if type and type not in [s[0] for s in source_converters]: - raise util.Abort(_('%s: invalid source repository type') % type) + raise error.Abort(_('%s: invalid source repository type') % type) for name, source, sortmode in source_converters: try: if not type or name == type: @@ -92,11 +92,11 @@ def convertsource(ui, path, type, revs): if not ui.quiet: for inst in exceptions: ui.write("%s\n" % inst) - raise util.Abort(_('%s: missing or unsupported repository') % path) + raise error.Abort(_('%s: missing or unsupported repository') % path) def convertsink(ui, path, type): if type and type not in [s[0] for s in sink_converters]: - raise util.Abort(_('%s: invalid destination repository type') % type) + raise error.Abort(_('%s: invalid destination repository type') % type) for name, sink in sink_converters: try: if not type or name == type: @@ -104,8 +104,8 @@ def convertsink(ui, path, type): except NoRepo as inst: ui.note(_("convert: %s\n") % inst) except MissingTool as inst: - raise util.Abort('%s\n' % inst) - raise util.Abort(_('%s: unknown repository type') % path) + raise error.Abort('%s\n' % inst) + raise error.Abort(_('%s: unknown repository type') % path) class progresssource(object): def __init__(self, ui, source, filecount): @@ -185,7 +185,7 @@ class converter(object): line = list(lex) # check number of parents if not (2 <= len(line) <= 3): - raise util.Abort(_('syntax error in %s(%d): child parent1' + raise error.Abort(_('syntax error in %s(%d): child parent1' '[,parent2] expected') % (path, i + 1)) for part in line: self.source.checkrevformat(part) @@ -196,7 +196,7 @@ class converter(object): m[child] = p1 + p2 # if file does not exist or error reading, exit except IOError: - raise util.Abort(_('splicemap file not found or error reading %s:') + raise error.Abort(_('splicemap file not found or error reading %s:') % path) return m @@ -247,7 +247,7 @@ class converter(object): continue # Parent is not in dest and not being converted, not good if p not in parents: - raise util.Abort(_('unknown splice map parent: %s') % p) + raise error.Abort(_('unknown splice map parent: %s') % p) pc.append(p) parents[c] = pc @@ -343,7 +343,7 @@ class converter(object): elif sortmode == 'closesort': picknext = makeclosesorter() else: - raise util.Abort(_('unknown sort mode: %s') % sortmode) + raise error.Abort(_('unknown sort mode: %s') % sortmode) children, actives = mapchildren(parents) @@ -361,7 +361,7 @@ class converter(object): try: pendings[c].remove(n) except ValueError: - raise util.Abort(_('cycle detected between %s and %s') + raise error.Abort(_('cycle detected between %s and %s') % (recode(c), recode(n))) if not pendings[c]: # Parents are converted, node is eligible @@ -369,7 +369,7 @@ class converter(object): pendings[c] = None if len(s) != len(parents): - raise util.Abort(_("not all revisions were sorted")) + raise error.Abort(_("not all revisions were sorted")) return s @@ -556,16 +556,17 @@ def convert(ui, src, dest=None, revmapfi sortmodes = ('branchsort', 'datesort', 'sourcesort', 'closesort') sortmode = [m for m in sortmodes if opts.get(m)] if len(sortmode) > 1: - raise util.Abort(_('more than one sort mode specified')) + raise error.Abort(_('more than one sort mode specified')) if sortmode: sortmode = sortmode[0] else: sortmode = defaultsort if sortmode == 'sourcesort' and not srcc.hasnativeorder(): - raise util.Abort(_('--sourcesort is not supported by this data source')) + raise error.Abort(_('--sourcesort is not supported by this data source') + ) if sortmode == 'closesort' and not srcc.hasnativeclose(): - raise util.Abort(_('--closesort is not supported by this data source')) + raise error.Abort(_('--closesort is not supported by this data source')) fmap = opts.get('filemap') if fmap: diff --git a/hgext/convert/cvs.py b/hgext/convert/cvs.py --- a/hgext/convert/cvs.py +++ b/hgext/convert/cvs.py @@ -7,7 +7,7 @@ import os, re, socket, errno from cStringIO import StringIO -from mercurial import encoding, util +from mercurial import encoding, util, error from mercurial.i18n import _ from common import NoRepo, commit, converter_source, checktool @@ -43,14 +43,14 @@ class convert_cvs(converter_source): maxrev = 0 if self.revs: if len(self.revs) > 1: - raise util.Abort(_('cvs source does not support specifying ' + raise error.Abort(_('cvs source does not support specifying ' 'multiple revs')) # TODO: handle tags try: # patchset number? maxrev = int(self.revs[0]) except ValueError: - raise util.Abort(_('revision %s is not a patchset number') + raise error.Abort(_('revision %s is not a patchset number') % self.revs[0]) d = os.getcwd() @@ -150,7 +150,7 @@ class convert_cvs(converter_source): sck.send("\n".join(["BEGIN AUTH REQUEST", root, user, passw, "END AUTH REQUEST", ""])) if sck.recv(128) != "I LOVE YOU\n": - raise util.Abort(_("CVS pserver authentication failed")) + raise error.Abort(_("CVS pserver authentication failed")) self.writep = self.readp = sck.makefile('r+') @@ -193,7 +193,7 @@ class convert_cvs(converter_source): self.writep.flush() r = self.readp.readline() if not r.startswith("Valid-requests"): - raise util.Abort(_('unexpected response from CVS server ' + raise error.Abort(_('unexpected response from CVS server ' '(expected "Valid-requests", but got %r)') % r) if "UseUnchanged" in r: @@ -215,7 +215,7 @@ class convert_cvs(converter_source): while count > 0: data = fp.read(min(count, chunksize)) if not data: - raise util.Abort(_("%d bytes missing from remote file") + raise error.Abort(_("%d bytes missing from remote file") % count) count -= len(data) output.write(data) @@ -252,18 +252,18 @@ class convert_cvs(converter_source): else: if line == "ok\n": if mode is None: - raise util.Abort(_('malformed response from CVS')) + raise error.Abort(_('malformed response from CVS')) return (data, "x" in mode and "x" or "") elif line.startswith("E "): self.ui.warn(_("cvs server: %s\n") % line[2:]) elif line.startswith("Remove"): self.readp.readline() else: - raise util.Abort(_("unknown CVS response: %s") % line) + raise error.Abort(_("unknown CVS response: %s") % line) def getchanges(self, rev, full): if full: - raise util.Abort(_("convert from cvs do not support --full")) + raise error.Abort(_("convert from cvs do not support --full")) self._parse() return sorted(self.files[rev].iteritems()), {}, set() diff --git a/hgext/convert/darcs.py b/hgext/convert/darcs.py --- a/hgext/convert/darcs.py +++ b/hgext/convert/darcs.py @@ -7,7 +7,7 @@ from common import NoRepo, checktool, commandline, commit, converter_source from mercurial.i18n import _ -from mercurial import util +from mercurial import util, error import os, shutil, tempfile, re, errno # The naming drift of ElementTree is fun! @@ -39,11 +39,11 @@ class darcs_source(converter_source, com checktool('darcs') version = self.run0('--version').splitlines()[0].strip() if version < '2.1': - raise util.Abort(_('darcs version 2.1 or newer needed (found %r)') % - version) + raise error.Abort(_('darcs version 2.1 or newer needed (found %r)') + % version) if "ElementTree" not in globals(): - raise util.Abort(_("Python ElementTree module is not available")) + raise error.Abort(_("Python ElementTree module is not available")) self.path = os.path.realpath(path) @@ -158,7 +158,7 @@ class darcs_source(converter_source, com def getchanges(self, rev, full): if full: - raise util.Abort(_("convert from darcs do not support --full")) + raise error.Abort(_("convert from darcs do not support --full")) copies = {} changes = [] man = None @@ -192,7 +192,7 @@ class darcs_source(converter_source, com def getfile(self, name, rev): if rev != self.lastrev: - raise util.Abort(_('internal calling inconsistency')) + raise error.Abort(_('internal calling inconsistency')) path = os.path.join(self.tmppath, name) try: data = util.readfile(path) diff --git a/hgext/convert/filemap.py b/hgext/convert/filemap.py --- a/hgext/convert/filemap.py +++ b/hgext/convert/filemap.py @@ -7,7 +7,7 @@ import posixpath import shlex from mercurial.i18n import _ -from mercurial import util, error +from mercurial import error from common import SKIPREV, converter_source def rpairs(path): @@ -45,7 +45,7 @@ class filemapper(object): self.targetprefixes = None if path: if self.parse(path): - raise util.Abort(_('errors in filemap')) + raise error.Abort(_('errors in filemap')) def parse(self, path): errs = 0 @@ -291,7 +291,7 @@ class filemap_source(converter_source): try: files = self.base.getchangedfiles(rev, i) except NotImplementedError: - raise util.Abort(_("source repository doesn't support --filemap")) + raise error.Abort(_("source repository doesn't support --filemap")) for f in files: if self.filemapper(f): return True diff --git a/hgext/convert/git.py b/hgext/convert/git.py --- a/hgext/convert/git.py +++ b/hgext/convert/git.py @@ -97,7 +97,7 @@ class convert_git(converter_source): # The default value (50) is based on the default for 'git diff'. similarity = ui.configint('convert', 'git.similarity', default=50) if similarity < 0 or similarity > 100: - raise util.Abort(_('similarity must be between 0 and 100')) + raise error.Abort(_('similarity must be between 0 and 100')) if similarity > 0: self.simopt = '-C%d%%' % similarity findcopiesharder = ui.configbool('convert', 'git.findcopiesharder', @@ -123,14 +123,14 @@ class convert_git(converter_source): heads, ret = self.gitread('git rev-parse --branches --remotes') heads = heads.splitlines() if ret: - raise util.Abort(_('cannot retrieve git heads')) + raise error.Abort(_('cannot retrieve git heads')) else: heads = [] for rev in self.revs: rawhead, ret = self.gitread("git rev-parse --verify %s" % rev) heads.append(rawhead[:-1]) if ret: - raise util.Abort(_('cannot retrieve git head "%s"') % rev) + raise error.Abort(_('cannot retrieve git head "%s"') % rev) return heads def catfile(self, rev, type): @@ -140,11 +140,11 @@ class convert_git(converter_source): self.catfilepipe[0].flush() info = self.catfilepipe[1].readline().split() if info[1] != type: - raise util.Abort(_('cannot read %r object at %s') % (type, rev)) + raise error.Abort(_('cannot read %r object at %s') % (type, rev)) size = int(info[2]) data = self.catfilepipe[1].read(size) if len(data) < size: - raise util.Abort(_('cannot read %r object at %s: unexpected size') + raise error.Abort(_('cannot read %r object at %s: unexpected size') % (type, rev)) # read the trailing newline self.catfilepipe[1].read(1) @@ -210,7 +210,7 @@ class convert_git(converter_source): def getchanges(self, version, full): if full: - raise util.Abort(_("convert from git do not support --full")) + raise error.Abort(_("convert from git do not support --full")) self.modecache = {} fh = self.gitopen("git diff-tree -z --root -m -r %s %s" % ( self.simopt, version)) @@ -283,7 +283,7 @@ class convert_git(converter_source): copies[fdest] = f entry = None if fh.close(): - raise util.Abort(_('cannot read changes in %s') % version) + raise error.Abort(_('cannot read changes in %s') % version) if subexists[0]: if subdeleted[0]: @@ -342,13 +342,13 @@ class convert_git(converter_source): for line in fh: line = line.strip() if line.startswith("error:") or line.startswith("fatal:"): - raise util.Abort(_('cannot read tags from %s') % self.path) + raise error.Abort(_('cannot read tags from %s') % self.path) node, tag = line.split(None, 1) if not tag.startswith(prefix): continue alltags[tag[len(prefix):]] = node if fh.close(): - raise util.Abort(_('cannot read tags from %s') % self.path) + raise error.Abort(_('cannot read tags from %s') % self.path) # Filter out tag objects for annotated tag refs for tag in alltags: @@ -376,7 +376,7 @@ class convert_git(converter_source): '"%s^%s" --' % (version, version, i + 1)) changes = [f.rstrip('\n') for f in fh] if fh.close(): - raise util.Abort(_('cannot read changes in %s') % version) + raise error.Abort(_('cannot read changes in %s') % version) return changes diff --git a/hgext/convert/gnuarch.py b/hgext/convert/gnuarch.py --- a/hgext/convert/gnuarch.py +++ b/hgext/convert/gnuarch.py @@ -8,7 +8,7 @@ from common import NoRepo, commandline, commit, converter_source from mercurial.i18n import _ -from mercurial import encoding, util +from mercurial import encoding, util, error import os, shutil, tempfile, stat from email.Parser import Parser @@ -42,7 +42,7 @@ class gnuarch_source(converter_source, c if util.findexe('tla'): self.execmd = 'tla' else: - raise util.Abort(_('cannot find a GNU Arch tool')) + raise error.Abort(_('cannot find a GNU Arch tool')) commandline.__init__(self, ui, self.execmd) @@ -135,7 +135,7 @@ class gnuarch_source(converter_source, c def getfile(self, name, rev): if rev != self.lastrev: - raise util.Abort(_('internal calling inconsistency')) + raise error.Abort(_('internal calling inconsistency')) if not os.path.lexists(os.path.join(self.tmppath, name)): return None, None @@ -144,7 +144,7 @@ class gnuarch_source(converter_source, c def getchanges(self, rev, full): if full: - raise util.Abort(_("convert from arch do not support --full")) + raise error.Abort(_("convert from arch do not support --full")) self._update(rev) changes = [] copies = {} @@ -287,7 +287,7 @@ class gnuarch_source(converter_source, c self.changes[rev].continuationof = self.recode( catlog['Continuation-of']) except Exception: - raise util.Abort(_('could not parse cat-log of %s') % rev) + raise error.Abort(_('could not parse cat-log of %s') % rev) def _parsechangeset(self, data, rev): for l in data: diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -205,7 +205,7 @@ class mercurial_sink(converter_sink): # If the file requires actual merging, abort. We don't have enough # context to resolve merges correctly. if action in ['m', 'dm', 'cd', 'dc']: - raise util.Abort(_("unable to convert merge commit " + raise error.Abort(_("unable to convert merge commit " "since target parents do not merge cleanly (file " "%s, parents %s and %s)") % (file, p1ctx, p2ctx)) @@ -423,7 +423,7 @@ class mercurial_sink(converter_sink): def hascommitforsplicemap(self, rev): if rev not in self.repo and self.clonebranches: - raise util.Abort(_('revision %s not found in destination ' + raise error.Abort(_('revision %s not found in destination ' 'repository (lookups with clonebranches=true ' 'are not implemented)') % rev) return rev in self.repo @@ -455,7 +455,7 @@ class mercurial_source(converter_source) try: startnode = self.repo.lookup(startnode) except error.RepoError: - raise util.Abort(_('%s is not a valid start revision') + raise error.Abort(_('%s is not a valid start revision') % startnode) startrev = self.repo.changelog.rev(startnode) children = {startnode: 1} @@ -470,7 +470,7 @@ class mercurial_source(converter_source) self._heads = self.repo.heads() else: if revs or startnode is not None: - raise util.Abort(_('hg.revs cannot be combined with ' + raise error.Abort(_('hg.revs cannot be combined with ' 'hg.startrev or --rev')) nodes = set() parents = set() diff --git a/hgext/convert/monotone.py b/hgext/convert/monotone.py --- a/hgext/convert/monotone.py +++ b/hgext/convert/monotone.py @@ -7,7 +7,7 @@ # GNU General Public License version 2 or any later version. import os, re -from mercurial import util +from mercurial import util, error from common import NoRepo, commit, converter_source, checktool from common import commandline from mercurial.i18n import _ @@ -16,7 +16,7 @@ class monotone_source(converter_source, def __init__(self, ui, path=None, revs=None): converter_source.__init__(self, ui, path, revs) if revs and len(revs) > 1: - raise util.Abort(_('monotone source does not support specifying ' + raise error.Abort(_('monotone source does not support specifying ' 'multiple revs')) commandline.__init__(self, ui, 'mtn') @@ -110,34 +110,34 @@ class monotone_source(converter_source, while read != ':': read = self.mtnreadfp.read(1) if not read: - raise util.Abort(_('bad mtn packet - no end of commandnbr')) + raise error.Abort(_('bad mtn packet - no end of commandnbr')) commandnbr += read commandnbr = commandnbr[:-1] stream = self.mtnreadfp.read(1) if stream not in 'mewptl': - raise util.Abort(_('bad mtn packet - bad stream type %s') % stream) + raise error.Abort(_('bad mtn packet - bad stream type %s') % stream) read = self.mtnreadfp.read(1) if read != ':': - raise util.Abort(_('bad mtn packet - no divider before size')) + raise error.Abort(_('bad mtn packet - no divider before size')) read = None lengthstr = '' while read != ':': read = self.mtnreadfp.read(1) if not read: - raise util.Abort(_('bad mtn packet - no end of packet size')) + raise error.Abort(_('bad mtn packet - no end of packet size')) lengthstr += read try: length = long(lengthstr[:-1]) except TypeError: - raise util.Abort(_('bad mtn packet - bad packet size %s') + raise error.Abort(_('bad mtn packet - bad packet size %s') % lengthstr) read = self.mtnreadfp.read(length) if len(read) != length: - raise util.Abort(_("bad mtn packet - unable to read full packet " + raise error.Abort(_("bad mtn packet - unable to read full packet " "read %s of %s") % (len(read), length)) return (commandnbr, stream, length, read) @@ -152,7 +152,7 @@ class monotone_source(converter_source, if stream == 'l': # End of command if output != '0': - raise util.Abort(_("mtn command '%s' returned %s") % + raise error.Abort(_("mtn command '%s' returned %s") % (command, output)) break elif stream in 'ew': @@ -229,7 +229,7 @@ class monotone_source(converter_source, def getchanges(self, rev, full): if full: - raise util.Abort(_("convert from monotone do not support --full")) + raise error.Abort(_("convert from monotone do not support --full")) revision = self.mtnrun("get_revision", rev).split("\n\n") files = {} ignoremove = {} @@ -330,7 +330,7 @@ class monotone_source(converter_source, versionstr = self.mtnrunsingle("interface_version") version = float(versionstr) except Exception: - raise util.Abort(_("unable to determine mtn automate interface " + raise error.Abort(_("unable to determine mtn automate interface " "version")) if version >= 12.0: @@ -344,12 +344,12 @@ class monotone_source(converter_source, # read the headers read = self.mtnreadfp.readline() if read != 'format-version: 2\n': - raise util.Abort(_('mtn automate stdio header unexpected: %s') + raise error.Abort(_('mtn automate stdio header unexpected: %s') % read) while read != '\n': read = self.mtnreadfp.readline() if not read: - raise util.Abort(_("failed to reach end of mtn automate " + raise error.Abort(_("failed to reach end of mtn automate " "stdio headers")) else: self.ui.debug("mtn automate version %s - not using automate stdio " diff --git a/hgext/convert/p4.py b/hgext/convert/p4.py --- a/hgext/convert/p4.py +++ b/hgext/convert/p4.py @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -from mercurial import util +from mercurial import util, error from mercurial.i18n import _ from common import commit, converter_source, checktool, NoRepo @@ -70,7 +70,7 @@ class p4_source(converter_source): self.re_keywords_old = re.compile("\$(Id|Header):[^$\n]*\$") if revs and len(revs) > 1: - raise util.Abort(_("p4 source does not support specifying " + raise error.Abort(_("p4 source does not support specifying " "multiple revisions")) self._parse(ui, path) @@ -277,7 +277,7 @@ class p4_source(converter_source): def getchanges(self, rev, full): if full: - raise util.Abort(_("convert from p4 do not support --full")) + raise error.Abort(_("convert from p4 do not support --full")) return self.files[rev], self.copies[rev], set() def getcommit(self, rev): diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py --- a/hgext/convert/subversion.py +++ b/hgext/convert/subversion.py @@ -6,7 +6,7 @@ import os, re, sys, tempfile, urllib, ur import xml.dom.minidom import cPickle as pickle -from mercurial import strutil, scmutil, util, encoding +from mercurial import strutil, scmutil, util, encoding, error from mercurial.i18n import _ propertycache = util.propertycache @@ -141,7 +141,7 @@ def debugsvnlog(ui, **opts): avoid memory collection issues. """ if svn is None: - raise util.Abort(_('debugsvnlog could not load Subversion python ' + raise error.Abort(_('debugsvnlog could not load Subversion python ' 'bindings')) util.setbinary(sys.stdin) @@ -159,14 +159,14 @@ class logstream(object): try: entry = pickle.load(self._stdout) except EOFError: - raise util.Abort(_('Mercurial failed to run itself, check' + raise error.Abort(_('Mercurial failed to run itself, check' ' hg executable is in PATH')) try: orig_paths, revnum, author, date, message = entry except (TypeError, ValueError): if entry is None: break - raise util.Abort(_("log stream exception '%s'") % entry) + raise error.Abort(_("log stream exception '%s'") % entry) yield entry def close(self): @@ -327,12 +327,12 @@ class svn_source(converter_source): if revs: if len(revs) > 1: - raise util.Abort(_('subversion source does not support ' + raise error.Abort(_('subversion source does not support ' 'specifying multiple revisions')) try: latest = int(revs[0]) except ValueError: - raise util.Abort(_('svn: revision %s is not an integer') % + raise error.Abort(_('svn: revision %s is not an integer') % revs[0]) self.trunkname = self.ui.config('convert', 'svn.trunk', @@ -343,7 +343,7 @@ class svn_source(converter_source): if self.startrev < 0: self.startrev = 0 except ValueError: - raise util.Abort(_('svn: start revision %s is not an integer') + raise error.Abort(_('svn: start revision %s is not an integer') % self.startrev) try: @@ -351,7 +351,7 @@ class svn_source(converter_source): except SvnPathNotFound: self.head = None if not self.head: - raise util.Abort(_('no revision found in module %s') + raise error.Abort(_('no revision found in module %s') % self.module) self.last_changed = self.revnum(self.head) @@ -396,8 +396,8 @@ class svn_source(converter_source): # we are converting from inside this directory return None if cfgpath: - raise util.Abort(_('expected %s to be at %r, but not found') - % (name, path)) + raise error.Abort(_('expected %s to be at %r, but not found' + ) % (name, path)) return None self.ui.note(_('found %s at %r\n') % (name, path)) return path @@ -415,7 +415,7 @@ class svn_source(converter_source): self.module += '/' + trunk self.head = self.latest(self.module, self.last_changed) if not self.head: - raise util.Abort(_('no revision found in module %s') + raise error.Abort(_('no revision found in module %s') % self.module) # First head in the list is the module's head @@ -442,11 +442,11 @@ class svn_source(converter_source): if self.startrev and self.heads: if len(self.heads) > 1: - raise util.Abort(_('svn: start revision is not supported ' + raise error.Abort(_('svn: start revision is not supported ' 'with more than one branch')) revnum = self.revnum(self.heads[0]) if revnum < self.startrev: - raise util.Abort( + raise error.Abort( _('svn: no revision found after start revision %d') % self.startrev) @@ -502,7 +502,7 @@ class svn_source(converter_source): stop = revnum + 1 self._fetch_revisions(revnum, stop) if rev not in self.commits: - raise util.Abort(_('svn: revision %s not found') % revnum) + raise error.Abort(_('svn: revision %s not found') % revnum) revcommit = self.commits[rev] # caller caches the result, so free it here to release memory del self.commits[rev] @@ -513,7 +513,7 @@ class svn_source(converter_source): if not re.match(r'svn:[0-9a-f]{8,8}-[0-9a-f]{4,4}-' '[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]' '{12,12}(.*)\@[0-9]+$',revstr): - raise util.Abort(_('%s entry %s is not a valid revision' + raise error.Abort(_('%s entry %s is not a valid revision' ' identifier') % (mapname, revstr)) def numcommits(self): @@ -951,7 +951,7 @@ class svn_source(converter_source): except SubversionException as xxx_todo_changeme: (inst, num) = xxx_todo_changeme.args if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION: - raise util.Abort(_('svn: branch has no revision %s') + raise error.Abort(_('svn: branch has no revision %s') % to_revnum) raise @@ -1052,7 +1052,7 @@ class svn_source(converter_source): try: stdin.close() except IOError: - raise util.Abort(_('Mercurial failed to run itself, check' + raise error.Abort(_('Mercurial failed to run itself, check' ' hg executable is in PATH')) return logstream(stdout) @@ -1302,7 +1302,7 @@ class svn_sink(converter_sink, commandli return parents[0] self.ui.warn(_('unexpected svn output:\n')) self.ui.warn(output) - raise util.Abort(_('unable to cope with svn output')) + raise error.Abort(_('unable to cope with svn output')) if commit.rev: self.run('propset', 'hg:convert-rev', commit.rev, revprop=True, revision=rev) @@ -1329,6 +1329,6 @@ class svn_sink(converter_sink, commandli # repository and childmap would not list all revisions. Too bad. if rev in self.childmap: return True - raise util.Abort(_('splice map revision %s not found in subversion ' + raise error.Abort(_('splice map revision %s not found in subversion ' 'child map (revision lookups are not implemented)') % rev) diff --git a/hgext/eol.py b/hgext/eol.py --- a/hgext/eol.py +++ b/hgext/eol.py @@ -247,7 +247,7 @@ def _checkhook(ui, repo, node, headsonly for node, target, f in failed: msgs.append(_(" %s in %s should not have %s line endings") % (f, node, eols[target])) - raise util.Abort(_("end-of-line check failed:\n") + "\n".join(msgs)) + raise error.Abort(_("end-of-line check failed:\n") + "\n".join(msgs)) def checkallhook(ui, repo, node, hooktype, **kwargs): """verify that files have expected EOLs""" @@ -347,7 +347,7 @@ def reposetup(ui, repo): # have all non-binary files taken care of. continue if inconsistenteol(data): - raise util.Abort(_("inconsistent newline style " + raise error.Abort(_("inconsistent newline style " "in %s\n") % f) return super(eolrepo, self).commitctx(ctx, haserror) repo.__class__ = eolrepo diff --git a/hgext/extdiff.py b/hgext/extdiff.py --- a/hgext/extdiff.py +++ b/hgext/extdiff.py @@ -63,7 +63,7 @@ pretty fast (at least faster than having from mercurial.i18n import _ from mercurial.node import short, nullid from mercurial import cmdutil, scmutil, util, commands, encoding, filemerge -from mercurial import archival +from mercurial import archival, error import os, shlex, shutil, tempfile, re cmdtable = {} @@ -127,7 +127,7 @@ def dodiff(ui, repo, cmdline, pats, opts if revs and change: msg = _('cannot specify --rev and --change at the same time') - raise util.Abort(msg) + raise error.Abort(msg) elif change: node2 = scmutil.revsingle(repo, change, None).node() node1a, node1b = repo.changelog.parents(node2) @@ -149,9 +149,9 @@ def dodiff(ui, repo, cmdline, pats, opts if opts.get('patch'): if subrepos: - raise util.Abort(_('--patch cannot be used with --subrepos')) + raise error.Abort(_('--patch cannot be used with --subrepos')) if node2 is None: - raise util.Abort(_('--patch requires two revisions')) + raise error.Abort(_('--patch requires two revisions')) else: mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher, listsubrepos=subrepos)[:3]) diff --git a/hgext/factotum.py b/hgext/factotum.py --- a/hgext/factotum.py +++ b/hgext/factotum.py @@ -47,7 +47,7 @@ service entry controls the service name from mercurial.i18n import _ from mercurial.url import passwordmgr -from mercurial import httpconnection, util +from mercurial import httpconnection, error import os, urllib2 ERRMAX = 128 @@ -56,7 +56,7 @@ ERRMAX = 128 def auth_getkey(self, params): if not self.ui.interactive(): - raise util.Abort(_('factotum not interactive')) + raise error.Abort(_('factotum not interactive')) if 'user=' not in params: params = '%s user?' % params params = '%s !password?' % params @@ -77,10 +77,10 @@ def auth_getuserpasswd(self, getkey, par if passwd.endswith("'"): passwd = passwd[1:-1].replace("''", "'") else: - raise util.Abort(_('malformed password string')) + raise error.Abort(_('malformed password string')) return (user, passwd) except (OSError, IOError): - raise util.Abort(_('factotum not responding')) + raise error.Abort(_('factotum not responding')) finally: os.close(fd) getkey(self, params) diff --git a/hgext/fetch.py b/hgext/fetch.py --- a/hgext/fetch.py +++ b/hgext/fetch.py @@ -60,7 +60,7 @@ def fetch(ui, repo, source='default', ** except error.RepoLookupError: branchnode = None if parent != branchnode: - raise util.Abort(_('working directory not at branch tip'), + raise error.Abort(_('working directory not at branch tip'), hint=_('use "hg update" to check out branch tip')) wlock = lock = None @@ -73,7 +73,7 @@ def fetch(ui, repo, source='default', ** bheads = repo.branchheads(branch) bheads = [head for head in bheads if len(repo[head].children()) == 0] if len(bheads) > 1: - raise util.Abort(_('multiple heads in this branch ' + raise error.Abort(_('multiple heads in this branch ' '(use "hg heads ." and "hg merge" to merge)')) other = hg.peer(repo, opts, ui.expandpath(source)) @@ -86,7 +86,7 @@ def fetch(ui, repo, source='default', ** except error.CapabilityError: err = _("other repository doesn't support revision lookup, " "so a rev cannot be specified.") - raise util.Abort(err) + raise error.Abort(err) # Are there any changes at all? modheads = exchange.pull(repo, other, heads=revs).cgresult diff --git a/hgext/gpg.py b/hgext/gpg.py --- a/hgext/gpg.py +++ b/hgext/gpg.py @@ -6,7 +6,7 @@ '''commands to sign and verify changesets''' import os, tempfile, binascii -from mercurial import util, commands, match, cmdutil +from mercurial import util, commands, match, cmdutil, error from mercurial import node as hgnode from mercurial.i18n import _ @@ -237,7 +237,7 @@ def sign(ui, repo, *revs, **opts): nodes = [node for node in repo.dirstate.parents() if node != hgnode.nullid] if len(nodes) > 1: - raise util.Abort(_('uncommitted merge - please provide a ' + raise error.Abort(_('uncommitted merge - please provide a ' 'specific revision')) if not nodes: nodes = [repo.changelog.tip()] @@ -250,7 +250,7 @@ def sign(ui, repo, *revs, **opts): data = node2txt(repo, n, sigver) sig = mygpg.sign(data) if not sig: - raise util.Abort(_("error while signing")) + raise error.Abort(_("error while signing")) sig = binascii.b2a_base64(sig) sig = sig.replace("\n", "") sigmessage += "%s %s %s\n" % (hexnode, sigver, sig) @@ -263,7 +263,7 @@ def sign(ui, repo, *revs, **opts): if not opts["force"]: msigs = match.exact(repo.root, '', ['.hgsigs']) if any(repo.status(match=msigs, unknown=True, ignored=True)): - raise util.Abort(_("working copy of .hgsigs is changed "), + raise error.Abort(_("working copy of .hgsigs is changed "), hint=_("please commit .hgsigs manually")) sigsfile = repo.wfile(".hgsigs", "ab") @@ -287,7 +287,7 @@ def sign(ui, repo, *revs, **opts): repo.commit(message, opts['user'], opts['date'], match=msigs, editor=editor) except ValueError as inst: - raise util.Abort(str(inst)) + raise error.Abort(str(inst)) def shortkey(ui, key): if len(key) != 16: @@ -301,4 +301,4 @@ def node2txt(repo, node, ver): if ver == "0": return "%s\n" % hgnode.hex(node) else: - raise util.Abort(_("unknown signature version")) + raise error.Abort(_("unknown signature version")) diff --git a/hgext/hgcia.py b/hgext/hgcia.py --- a/hgext/hgcia.py +++ b/hgext/hgcia.py @@ -43,7 +43,7 @@ configure it, set the following options from mercurial.i18n import _ from mercurial.node import bin, short -from mercurial import cmdutil, patch, util, mail +from mercurial import cmdutil, patch, util, mail, error import email.Parser import socket, xmlrpclib @@ -233,7 +233,7 @@ class hgcia(object): srv = xmlrpclib.Server(self.ciaurl) res = srv.hub.deliver(msg) if res is not True and res != 'queued.': - raise util.Abort(_('%s returned an error: %s') % + raise error.Abort(_('%s returned an error: %s') % (self.ciaurl, res)) def sendemail(self, address, data): @@ -259,7 +259,7 @@ def hook(ui, repo, hooktype, node=None, ui.write(msg) elif cia.ciaurl.startswith('mailto:'): if not cia.emailfrom: - raise util.Abort(_('email.from must be defined when ' + raise error.Abort(_('email.from must be defined when ' 'sending by email')) cia.sendemail(cia.ciaurl[7:], msg) else: diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -225,7 +225,7 @@ class histeditstate(object): except IOError as err: if err.errno != errno.ENOENT: raise - raise util.Abort(_('no histedit in progress')) + raise error.Abort(_('no histedit in progress')) try: data = pickle.load(fp) @@ -331,7 +331,7 @@ class histeditaction(object): try: node = repo[rulehash].node() except error.RepoError: - raise util.Abort(_('unknown changeset %s listed') % rulehash[:12]) + raise error.Abort(_('unknown changeset %s listed') % rulehash[:12]) return cls(state, node) def run(self): @@ -439,7 +439,7 @@ def collapse(repo, first, last, commitop return None for c in ctxs: if not c.mutable(): - raise util.Abort( + raise error.Abort( _("cannot fold into public change %s") % node.short(c.node())) base = first.parents()[0] @@ -664,12 +664,12 @@ def findoutgoing(ui, repo, remote=None, outgoing = discovery.findcommonoutgoing(repo, other, revs, force=force) if not outgoing.missing: - raise util.Abort(_('no outgoing ancestors')) + raise error.Abort(_('no outgoing ancestors')) roots = list(repo.revs("roots(%ln)", outgoing.missing)) if 1 < len(roots): msg = _('there are ambiguous outgoing revisions') hint = _('see "hg help histedit" for more detail') - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) return repo.lookup(roots[0]) actiontable = {'p': pick, @@ -736,7 +736,7 @@ def _histedit(ui, repo, state, *freeargs # blanket if mq patches are applied somewhere mq = getattr(repo, 'mq', None) if mq and mq.applied: - raise util.Abort(_('source has mq patches applied')) + raise error.Abort(_('source has mq patches applied')) # basic argument incompatibility processing outg = opts.get('outgoing') @@ -748,29 +748,29 @@ def _histedit(ui, repo, state, *freeargs revs = opts.get('rev', []) goal = 'new' # This invocation goal, in new, continue, abort if force and not outg: - raise util.Abort(_('--force only allowed with --outgoing')) + raise error.Abort(_('--force only allowed with --outgoing')) if cont: if any((outg, abort, revs, freeargs, rules, editplan)): - raise util.Abort(_('no arguments allowed with --continue')) + raise error.Abort(_('no arguments allowed with --continue')) goal = 'continue' elif abort: if any((outg, revs, freeargs, rules, editplan)): - raise util.Abort(_('no arguments allowed with --abort')) + raise error.Abort(_('no arguments allowed with --abort')) goal = 'abort' elif editplan: if any((outg, revs, freeargs)): - raise util.Abort(_('only --commands argument allowed with ' + raise error.Abort(_('only --commands argument allowed with ' '--edit-plan')) goal = 'edit-plan' else: if os.path.exists(os.path.join(repo.path, 'histedit-state')): - raise util.Abort(_('history edit already in progress, try ' + raise error.Abort(_('history edit already in progress, try ' '--continue or --abort')) if outg: if revs: - raise util.Abort(_('no revisions allowed with --outgoing')) + raise error.Abort(_('no revisions allowed with --outgoing')) if len(freeargs) > 1: - raise util.Abort( + raise error.Abort( _('only one repo argument allowed with --outgoing')) else: revs.extend(freeargs) @@ -780,7 +780,7 @@ def _histedit(ui, repo, state, *freeargs if histeditdefault: revs.append(histeditdefault) if len(revs) != 1: - raise util.Abort( + raise error.Abort( _('histedit requires exactly one ancestor revision')) @@ -856,13 +856,13 @@ def _histedit(ui, repo, state, *freeargs else: rr = list(repo.set('roots(%ld)', scmutil.revrange(repo, revs))) if len(rr) != 1: - raise util.Abort(_('The specified revisions must have ' + raise error.Abort(_('The specified revisions must have ' 'exactly one common root')) root = rr[0].node() revs = between(repo, root, topmost, state.keep) if not revs: - raise util.Abort(_('%s is not an ancestor of working directory') % + raise error.Abort(_('%s is not an ancestor of working directory') % node.short(root)) ctxs = [repo[r] for r in revs] @@ -960,7 +960,7 @@ def bootstrapcontinue(ui, state, opts): actobj.continuedirty() s = repo.status() if s.modified or s.added or s.removed or s.deleted: - raise util.Abort(_("working copy still dirty")) + raise error.Abort(_("working copy still dirty")) parentctx, replacements = actobj.continueclean() @@ -977,12 +977,12 @@ def between(repo, old, new, keep): if ctxs and not keep: if (not obsolete.isenabled(repo, obsolete.allowunstableopt) and repo.revs('(%ld::) - (%ld)', ctxs, ctxs)): - raise util.Abort(_('cannot edit history that would orphan nodes')) + raise error.Abort(_('cannot edit history that would orphan nodes')) if repo.revs('(%ld) and merge()', ctxs): - raise util.Abort(_('cannot edit history that contains merges')) + raise error.Abort(_('cannot edit history that contains merges')) root = ctxs[0] # list is already sorted by repo.set if not root.mutable(): - raise util.Abort(_('cannot edit public changeset: %s') % root, + raise error.Abort(_('cannot edit public changeset: %s') % root, hint=_('see "hg help phases" for details')) return [c.node() for c in ctxs] @@ -1033,26 +1033,26 @@ def verifyrules(rules, repo, ctxs): seen = set() for r in rules: if ' ' not in r: - raise util.Abort(_('malformed line "%s"') % r) + raise error.Abort(_('malformed line "%s"') % r) action, rest = r.split(' ', 1) ha = rest.strip().split(' ', 1)[0] try: ha = repo[ha].hex() except error.RepoError: - raise util.Abort(_('unknown changeset %s listed') % ha[:12]) + raise error.Abort(_('unknown changeset %s listed') % ha[:12]) if ha not in expected: - raise util.Abort( + raise error.Abort( _('may not use changesets other than the ones listed')) if ha in seen: - raise util.Abort(_('duplicated command for changeset %s') % + raise error.Abort(_('duplicated command for changeset %s') % ha[:12]) seen.add(ha) if action not in actiontable or action.startswith('_'): - raise util.Abort(_('unknown action "%s"') % action) + raise error.Abort(_('unknown action "%s"') % action) parsed.append([action, ha]) missing = sorted(expected - seen) # sort to stabilize output if missing: - raise util.Abort(_('missing rules for changeset %s') % + raise error.Abort(_('missing rules for changeset %s') % missing[0][:12], hint=_('do you want to use the drop action?')) return parsed @@ -1208,7 +1208,7 @@ def stripwrapper(orig, ui, repo, nodelis strip_nodes = set([repo[n].node() for n in nodelist]) common_nodes = histedit_nodes & strip_nodes if common_nodes: - raise util.Abort(_("histedit in progress, can't strip %s") + raise error.Abort(_("histedit in progress, can't strip %s") % ', '.join(node.short(x) for x in common_nodes)) return orig(ui, repo, nodelist, *args, **kwargs) diff --git a/hgext/keyword.py b/hgext/keyword.py --- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -83,7 +83,7 @@ like CVS' $Log$, are not supported. A ke ''' from mercurial import commands, context, cmdutil, dispatch, filelog, extensions -from mercurial import localrepo, match, patch, templatefilters, util +from mercurial import localrepo, match, patch, templatefilters, util, error from mercurial import scmutil, pathutil from mercurial.hgweb import webcommands from mercurial.i18n import _ @@ -348,20 +348,20 @@ def _status(ui, repo, wctx, kwt, *pats, return repo.status(match=scmutil.match(wctx, pats, opts), clean=True, unknown=opts.get('unknown') or opts.get('all')) if ui.configitems('keyword'): - raise util.Abort(_('[keyword] patterns cannot match')) - raise util.Abort(_('no [keyword] patterns configured')) + raise error.Abort(_('[keyword] patterns cannot match')) + raise error.Abort(_('no [keyword] patterns configured')) def _kwfwrite(ui, repo, expand, *pats, **opts): '''Selects files and passes them to kwtemplater.overwrite.''' wctx = repo[None] if len(wctx.parents()) > 1: - raise util.Abort(_('outstanding uncommitted merge')) + raise error.Abort(_('outstanding uncommitted merge')) kwt = kwtools['templater'] wlock = repo.wlock() try: status = _status(ui, repo, wctx, kwt, *pats, **opts) if status.modified or status.added or status.removed or status.deleted: - raise util.Abort(_('outstanding uncommitted changes')) + raise error.Abort(_('outstanding uncommitted changes')) kwt.overwrite(wctx, status.clean, True, expand) finally: wlock.release() diff --git a/hgext/largefiles/basestore.py b/hgext/largefiles/basestore.py --- a/hgext/largefiles/basestore.py +++ b/hgext/largefiles/basestore.py @@ -10,7 +10,7 @@ import re -from mercurial import util, node, hg +from mercurial import util, node, hg, error from mercurial.i18n import _ import lfutil @@ -209,7 +209,7 @@ def _openstore(repo, remote=None, put=Fa try: storeproviders = _storeprovider[scheme] except KeyError: - raise util.Abort(_('unsupported URL scheme %r') % scheme) + raise error.Abort(_('unsupported URL scheme %r') % scheme) for classobj in storeproviders: try: @@ -217,5 +217,5 @@ def _openstore(repo, remote=None, put=Fa except lfutil.storeprotonotcapable: pass - raise util.Abort(_('%s does not appear to be a largefile store') % + raise error.Abort(_('%s does not appear to be a largefile store') % util.hidepassword(path)) diff --git a/hgext/largefiles/lfcommands.py b/hgext/largefiles/lfcommands.py --- a/hgext/largefiles/lfcommands.py +++ b/hgext/largefiles/lfcommands.py @@ -62,9 +62,9 @@ def lfconvert(ui, src, dest, *pats, **op size = lfutil.getminsize(ui, True, opts.get('size'), default=None) if not hg.islocal(src): - raise util.Abort(_('%s is not a local Mercurial repo') % src) + raise error.Abort(_('%s is not a local Mercurial repo') % src) if not hg.islocal(dest): - raise util.Abort(_('%s is not a local Mercurial repo') % dest) + raise error.Abort(_('%s is not a local Mercurial repo') % dest) rsrc = hg.repository(ui, src) ui.status(_('initializing destination %s\n') % dest) @@ -139,7 +139,7 @@ def lfconvert(ui, src, dest, *pats, **op path = lfutil.findfile(rsrc, hash) if path is None: - raise util.Abort(_("missing largefile for \'%s\' in %s") + raise error.Abort(_("missing largefile for '%s' in %s") % (realname, realrev)) fp = open(path, 'rb') @@ -157,7 +157,7 @@ def lfconvert(ui, src, dest, *pats, **op found, missing = downloadlfiles(ui, rsrc) if missing != 0: - raise util.Abort(_("all largefiles must be present locally")) + raise error.Abort(_("all largefiles must be present locally")) orig = convcmd.converter convcmd.converter = converter @@ -196,7 +196,7 @@ def _lfconvert_addchangeset(rsrc, rdst, islfile |= renamedlfile if 'l' in fctx.flags(): if renamedlfile: - raise util.Abort( + raise error.Abort( _('renamed/copied largefile %s becomes symlink') % f) islfile = False @@ -213,7 +213,7 @@ def _lfconvert_addchangeset(rsrc, rdst, if 'l' in fctx.flags(): renamed = fctx.renamed() if renamed and renamed[0] in lfiles: - raise util.Abort(_('largefile %s becomes symlink') % f) + raise error.Abort(_('largefile %s becomes symlink') % f) # largefile was modified, update standins m = util.sha1('') @@ -355,7 +355,7 @@ def uploadlfiles(ui, rsrc, rdst, files): total=len(files)) source = lfutil.findfile(rsrc, hash) if not source: - raise util.Abort(_('largefile %s missing from store' + raise error.Abort(_('largefile %s missing from store' ' (needs to be uploaded)') % hash) # XXX check for errors here store.put(source, hash) @@ -539,7 +539,7 @@ def lfpull(ui, repo, source="default", * revs = opts.get('rev', []) if not revs: - raise util.Abort(_('no revisions specified')) + raise error.Abort(_('no revisions specified')) revs = scmutil.revrange(repo, revs) numcached = 0 diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py +++ b/hgext/largefiles/lfutil.py @@ -16,7 +16,7 @@ import copy from mercurial import dirstate, httpconnection, match as match_, util, scmutil from mercurial.i18n import _ -from mercurial import node +from mercurial import node, error shortname = '.hglf' shortnameslash = shortname + '/' @@ -33,10 +33,10 @@ def getminsize(ui, assumelfiles, opt, de try: lfsize = float(lfsize) except ValueError: - raise util.Abort(_('largefiles: size must be number (not %s)\n') + raise error.Abort(_('largefiles: size must be number (not %s)\n') % lfsize) if lfsize is None: - raise util.Abort(_('minimum size for largefiles must be specified')) + raise error.Abort(_('minimum size for largefiles must be specified')) return lfsize def link(src, dest): @@ -74,7 +74,7 @@ def usercachepath(ui, hash): if home: path = os.path.join(home, '.cache', longname, hash) else: - raise util.Abort(_('unknown operating system: %s\n') % os.name) + raise error.Abort(_('unknown operating system: %s\n') % os.name) return path def inusercache(ui, hash): diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -12,7 +12,7 @@ import os import copy from mercurial import hg, util, cmdutil, scmutil, match as match_, \ - archival, pathutil, revset + archival, pathutil, revset, error from mercurial.i18n import _ import lfutil @@ -245,7 +245,7 @@ def decodepath(orig, path): def overrideadd(orig, ui, repo, *pats, **opts): if opts.get('normal') and opts.get('large'): - raise util.Abort(_('--normal cannot be used with --large')) + raise error.Abort(_('--normal cannot be used with --large')) return orig(ui, repo, *pats, **opts) def cmdutiladd(orig, ui, repo, matcher, prefix, explicitonly, **opts): @@ -584,7 +584,7 @@ def overridecopy(orig, ui, repo, pats, o installnormalfilesmatchfn(repo[None].manifest()) try: result = orig(ui, repo, pats, opts, rename) - except util.Abort as e: + except error.Abort as e: if str(e) != _('no files to copy'): raise e else: @@ -688,7 +688,7 @@ def overridecopy(orig, ui, repo, pats, o lfdirstate.add(destlfile) lfdirstate.write() - except util.Abort as e: + except error.Abort as e: if str(e) != _('no files to copy'): raise e else: @@ -698,7 +698,7 @@ def overridecopy(orig, ui, repo, pats, o wlock.release() if nolfiles and nonormalfiles: - raise util.Abort(_('no files to copy')) + raise error.Abort(_('no files to copy')) return result @@ -827,7 +827,7 @@ def pulledrevsetsymbol(repo, subset, x): try: firstpulled = repo.firstpulled except AttributeError: - raise util.Abort(_("pulled() only available in --lfrev")) + raise error.Abort(_("pulled() only available in --lfrev")) return revset.baseset([r for r in subset if r >= firstpulled]) def overrideclone(orig, ui, source, dest=None, **opts): @@ -835,7 +835,7 @@ def overrideclone(orig, ui, source, dest if d is None: d = hg.defaultdest(source) if opts.get('all_largefiles') and not hg.islocal(d): - raise util.Abort(_( + raise error.Abort(_( '--all-largefiles is incompatible with non-local destination %s') % d) @@ -916,13 +916,13 @@ def overridearchive(orig, repo, dest, no lfcommands.cachelfiles(repo.ui, repo, node) if kind not in archival.archivers: - raise util.Abort(_("unknown archive type '%s'") % kind) + raise error.Abort(_("unknown archive type '%s'") % kind) ctx = repo[node] if kind == 'files': if prefix: - raise util.Abort( + raise error.Abort( _('cannot give prefix when archiving to files')) else: prefix = archival.tidyprefix(dest, kind, prefix) @@ -949,7 +949,7 @@ def overridearchive(orig, repo, dest, no path = lfutil.findfile(repo, getdata().strip()) if path is None: - raise util.Abort( + raise error.Abort( _('largefile %s not found in repo store or system cache') % lfutil.splitstandin(f)) else: @@ -1006,7 +1006,7 @@ def hgsubrepoarchive(orig, repo, archive path = lfutil.findfile(repo._repo, getdata().strip()) if path is None: - raise util.Abort( + raise error.Abort( _('largefile %s not found in repo store or system cache') % lfutil.splitstandin(f)) else: @@ -1043,7 +1043,7 @@ def overridebailifchanged(orig, repo, *a s = repo.status() repo.lfstatus = False if s.modified or s.added or s.removed or s.deleted: - raise util.Abort(_('uncommitted changes')) + raise error.Abort(_('uncommitted changes')) def cmdutilforget(orig, ui, repo, match, prefix, explicitonly): normalmatcher = composenormalfilematcher(match, repo[None].manifest()) @@ -1344,7 +1344,7 @@ def overridecat(orig, ui, repo, file1, * store = basestore._openstore(repo) success, missing = store.get([(lf, hash)]) if len(success) != 1: - raise util.Abort( + raise error.Abort( _('largefile %s is not in cache and could not be ' 'downloaded') % lf) path = lfutil.usercachepath(repo.ui, hash) diff --git a/hgext/largefiles/proto.py b/hgext/largefiles/proto.py --- a/hgext/largefiles/proto.py +++ b/hgext/largefiles/proto.py @@ -51,7 +51,8 @@ def getlfile(repo, proto, sha): cache.''' filename = lfutil.findfile(repo, sha) if not filename: - raise util.Abort(_('requested largefile %s not present in cache') % sha) + raise error.Abort(_('requested largefile %s not present in cache') + % sha) f = open(filename, 'rb') length = os.fstat(f.fileno())[6] diff --git a/hgext/largefiles/remotestore.py b/hgext/largefiles/remotestore.py --- a/hgext/largefiles/remotestore.py +++ b/hgext/largefiles/remotestore.py @@ -8,7 +8,7 @@ import urllib2 -from mercurial import util, wireproto +from mercurial import util, wireproto, error from mercurial.i18n import _ import lfutil @@ -21,7 +21,7 @@ class remotestore(basestore.basestore): def put(self, source, hash): if self.sendfile(source, hash): - raise util.Abort( + raise error.Abort( _('remotestore: could not put %s to remote store %s') % (source, util.hidepassword(self.url))) self.ui.debug( @@ -39,7 +39,7 @@ class remotestore(basestore.basestore): fd = lfutil.httpsendfile(self.ui, filename) return self._put(hash, fd) except IOError as e: - raise util.Abort( + raise error.Abort( _('remotestore: could not open file %s: %s') % (filename, str(e))) finally: @@ -50,14 +50,14 @@ class remotestore(basestore.basestore): try: chunks = self._get(hash) except urllib2.HTTPError as e: - # 401s get converted to util.Aborts; everything else is fine being + # 401s get converted to error.Aborts; everything else is fine being # turned into a StoreError raise basestore.StoreError(filename, hash, self.url, str(e)) except urllib2.URLError as e: # This usually indicates a connection problem, so don't # keep trying with the other files... they will probably # all fail too. - raise util.Abort('%s: %s' % + raise error.Abort('%s: %s' % (util.hidepassword(self.url), e.reason)) except IOError as e: raise basestore.StoreError(filename, hash, self.url, str(e)) diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py --- a/hgext/largefiles/reposetup.py +++ b/hgext/largefiles/reposetup.py @@ -10,7 +10,7 @@ import copy import os -from mercurial import error, match as match_, util +from mercurial import error, match as match_, error from mercurial.i18n import _ from mercurial import scmutil, localrepo @@ -280,7 +280,7 @@ def reposetup(ui, repo): msg = _("required features are not" " supported in the destination:" " %s") % (', '.join(sorted(missing))) - raise util.Abort(msg) + raise error.Abort(msg) return super(lfilesrepo, self).push(remote, force=force, revs=revs, newbranch=newbranch) @@ -304,7 +304,7 @@ def reposetup(ui, repo): for f in files: if lfutil.isstandin(f + '/'): - raise util.Abort( + raise error.Abort( _('file "%s" is a largefile standin') % f, hint=('commit the largefile itself instead')) # Scan directories diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -492,7 +492,7 @@ class queue(object): elif self.gitmode in ('yes', 'no'): diffopts.git = self.gitmode == 'yes' else: - raise util.Abort(_('mq.git option can be auto/keep/yes/no' + raise error.Abort(_('mq.git option can be auto/keep/yes/no' ' got %s') % self.gitmode) if patchfn: diffopts = self.patchopts(diffopts, patchfn) @@ -544,7 +544,7 @@ class queue(object): patch = patch.strip() if patch: if patch in self.series: - raise util.Abort(_('%s appears more than once in %s') % + raise error.Abort(_('%s appears more than once in %s') % (patch, self.join(self.seriespath))) self.series.append(patch) self.seriesguards.append(self.guard_re.findall(comment)) @@ -565,7 +565,7 @@ class queue(object): for guard in guards: bad = self.checkguard(guard) if bad: - raise util.Abort(bad) + raise error.Abort(bad) guards = sorted(set(guards)) self.ui.debug('active guards: %s\n' % ' '.join(guards)) self.activeguards = guards @@ -592,12 +592,12 @@ class queue(object): def setguards(self, idx, guards): for g in guards: if len(g) < 2: - raise util.Abort(_('guard %r too short') % g) + raise error.Abort(_('guard %r too short') % g) if g[0] not in '-+': - raise util.Abort(_('guard %r starts with invalid char') % g) + raise error.Abort(_('guard %r starts with invalid char') % g) bad = self.checkguard(g[1:]) if bad: - raise util.Abort(bad) + raise error.Abort(bad) drop = self.guard_re.sub('', self.fullseries[idx]) self.fullseries[idx] = drop + ''.join([' #' + g for g in guards]) self.parseseries() @@ -708,7 +708,7 @@ class queue(object): return (err, n) if n is None: - raise util.Abort(_("apply failed for patch %s") % patch) + raise error.Abort(_("apply failed for patch %s") % patch) self.ui.warn(_("patch didn't work out, merging %s\n") % patch) @@ -719,14 +719,14 @@ class queue(object): ctx = repo[rev] ret = hg.merge(repo, rev) if ret: - raise util.Abort(_("update returned %d") % ret) + raise error.Abort(_("update returned %d") % ret) n = newcommit(repo, None, ctx.description(), ctx.user(), force=True) if n is None: - raise util.Abort(_("repo commit failed")) + raise error.Abort(_("repo commit failed")) try: ph = patchheader(mergeq.join(patch), self.plainmode) except Exception: - raise util.Abort(_("unable to read %s") % patch) + raise error.Abort(_("unable to read %s") % patch) diffopts = self.patchopts(diffopts, patch) patchf = self.opener(patch, "w") @@ -931,9 +931,9 @@ class queue(object): n = newcommit(repo, None, message, ph.user, ph.date, match=match, force=True) if repo['tip'] == oldtip: - raise util.Abort(_("qpush exactly duplicates child changeset")) + raise error.Abort(_("qpush exactly duplicates child changeset")) if n is None: - raise util.Abort(_("repository commit failed")) + raise error.Abort(_("repository commit failed")) if update_status: self.applied.append(statusentry(n, patchname)) @@ -985,7 +985,7 @@ class queue(object): self.ui.warn(msg % (short(rev[p]), p)) else: msg = _('unknown patches: %s\n') - raise util.Abort(''.join(msg % p for p in unknown)) + raise error.Abort(''.join(msg % p for p in unknown)) self.parseseries() self.seriesdirty = True @@ -997,13 +997,13 @@ class queue(object): for i, rev in enumerate(revs): if rev < firstrev: - raise util.Abort(_('revision %d is not managed') % rev) + raise error.Abort(_('revision %d is not managed') % rev) ctx = repo[rev] base = self.applied[i].node if ctx.node() != base: msg = _('cannot delete revision %d above applied patches') - raise util.Abort(msg % rev) + raise error.Abort(msg % rev) patch = self.applied[i].name for fmt in ('[mq]: %s', 'imported patch %s'): @@ -1035,7 +1035,7 @@ class queue(object): def delete(self, repo, patches, opts): if not patches and not opts.get('rev'): - raise util.Abort(_('qdelete requires at least one revision or ' + raise error.Abort(_('qdelete requires at least one revision or ' 'patch name')) realpatches = [] @@ -1043,16 +1043,16 @@ class queue(object): patch = self.lookup(patch, strict=True) info = self.isapplied(patch) if info: - raise util.Abort(_("cannot delete applied patch %s") % patch) + raise error.Abort(_("cannot delete applied patch %s") % patch) if patch not in self.series: - raise util.Abort(_("patch %s not in series file") % patch) + raise error.Abort(_("patch %s not in series file") % patch) if patch not in realpatches: realpatches.append(patch) numrevs = 0 if opts.get('rev'): if not self.applied: - raise util.Abort(_('no patches applied')) + raise error.Abort(_('no patches applied')) revs = scmutil.revrange(repo, opts.get('rev')) revs.sort() revpatches = self._revpatches(repo, revs) @@ -1067,7 +1067,7 @@ class queue(object): top = self.applied[-1].node patch = self.applied[-1].name if repo.dirstate.p1() != top: - raise util.Abort(_("working directory revision is not qtip")) + raise error.Abort(_("working directory revision is not qtip")) return top, patch return None, None @@ -1095,29 +1095,29 @@ class queue(object): _reserved = ('series', 'status', 'guards', '.', '..') def checkreservedname(self, name): if name in self._reserved: - raise util.Abort(_('"%s" cannot be used as the name of a patch') + raise error.Abort(_('"%s" cannot be used as the name of a patch') % name) for prefix in ('.hg', '.mq'): if name.startswith(prefix): - raise util.Abort(_('patch name cannot begin with "%s"') + raise error.Abort(_('patch name cannot begin with "%s"') % prefix) for c in ('#', ':', '\r', '\n'): if c in name: - raise util.Abort(_('%r cannot be used in the name of a patch') + raise error.Abort(_('%r cannot be used in the name of a patch') % c) def checkpatchname(self, name, force=False): self.checkreservedname(name) if not force and os.path.exists(self.join(name)): if os.path.isdir(self.join(name)): - raise util.Abort(_('"%s" already exists as a directory') + raise error.Abort(_('"%s" already exists as a directory') % name) else: - raise util.Abort(_('patch "%s" already exists') % name) + raise error.Abort(_('patch "%s" already exists') % name) def checkkeepchanges(self, keepchanges, force): if force and keepchanges: - raise util.Abort(_('cannot use both --force and --keep-changes')) + raise error.Abort(_('cannot use both --force and --keep-changes')) def new(self, repo, patchfn, *pats, **opts): """options: @@ -1140,7 +1140,7 @@ class queue(object): # detect missing files in pats def badfn(f, msg): if f != '.hgsubstate': # .hgsubstate is auto-created - raise util.Abort('%s: %s' % (f, msg)) + raise error.Abort('%s: %s' % (f, msg)) match = scmutil.match(repo[None], pats, opts, badfn=badfn) changes = repo.status(match=match) else: @@ -1150,7 +1150,7 @@ class queue(object): commitfiles.extend(files) match = scmutil.matchfiles(repo, commitfiles) if len(repo[None].parents()) > 1: - raise util.Abort(_('cannot manage merge changesets')) + raise error.Abort(_('cannot manage merge changesets')) self.checktoppatch(repo) insert = self.fullseriesend() wlock = repo.wlock() @@ -1159,7 +1159,7 @@ class queue(object): # if patch file write fails, abort early p = self.opener(patchfn, "w") except IOError as e: - raise util.Abort(_('cannot write patch "%s": %s') + raise error.Abort(_('cannot write patch "%s": %s') % (patchfn, e.strerror)) try: defaultmsg = "[mq]: %s" % patchfn @@ -1182,7 +1182,7 @@ class queue(object): n = newcommit(repo, None, commitmsg, user, date, match=match, force=True, editor=editor) if n is None: - raise util.Abort(_("repo commit failed")) + raise error.Abort(_("repo commit failed")) try: self.fullseries[insert:insert] = [patchfn] self.applied.append(statusentry(n, patchfn)) @@ -1299,7 +1299,7 @@ class queue(object): else: if i + off < len(self.series): return self.series[i + off] - raise util.Abort(_("patch %s not in series") % patch) + raise error.Abort(_("patch %s not in series") % patch) def push(self, repo, patch=None, force=False, list=False, mergeq=None, all=False, move=False, exact=False, nobackup=False, @@ -1335,7 +1335,7 @@ class queue(object): pushable, reason = self.pushable(patch) if pushable: if self.series.index(patch) < self.seriesend(): - raise util.Abort( + raise error.Abort( _("cannot push to a previous patch: %s") % patch) else: if reason: @@ -1364,25 +1364,25 @@ class queue(object): if exact: if keepchanges: - raise util.Abort( + raise error.Abort( _("cannot use --exact and --keep-changes together")) if move: - raise util.Abort(_('cannot use --exact and --move ' + raise error.Abort(_('cannot use --exact and --move ' 'together')) if self.applied: - raise util.Abort(_('cannot push --exact with applied ' + raise error.Abort(_('cannot push --exact with applied ' 'patches')) root = self.series[start] target = patchheader(self.join(root), self.plainmode).parent if not target: - raise util.Abort( + raise error.Abort( _("%s does not have a parent recorded") % root) if not repo[target] == repo['.']: hg.update(repo, target) if move: if not patch: - raise util.Abort(_("please specify the patch to move")) + raise error.Abort(_("please specify the patch to move")) for fullstart, rpn in enumerate(self.fullseries): # strip markers for patch guards if self.guard_re.split(rpn, 1)[0] == self.series[start]: @@ -1464,7 +1464,7 @@ class queue(object): patch = self.lookup(patch) info = self.isapplied(patch) if not info: - raise util.Abort(_("patch %s is not applied") % patch) + raise error.Abort(_("patch %s is not applied") % patch) if not self.applied: # Allow qpop -a to work repeatedly, @@ -1517,13 +1517,13 @@ class queue(object): heads = repo.changelog.heads(rev) except error.LookupError: node = short(rev) - raise util.Abort(_('trying to pop unknown node %s') % node) + raise error.Abort(_('trying to pop unknown node %s') % node) if heads != [self.applied[-1].node]: - raise util.Abort(_("popping would remove a revision not " + raise error.Abort(_("popping would remove a revision not " "managed by this patch queue")) if not repo[self.applied[-1].node].mutable(): - raise util.Abort( + raise error.Abort( _("popping would remove a public revision"), hint=_('see "hg help phases" for details')) @@ -1534,11 +1534,11 @@ class queue(object): ctx = repo[qp] m, a, r, d = repo.status(qp, '.')[:4] if d: - raise util.Abort(_("deletions found between repo revs")) + raise error.Abort(_("deletions found between repo revs")) tobackup = set(a + m + r) & tobackup if keepchanges and tobackup: - raise util.Abort(_("local changes found, refresh first")) + raise error.Abort(_("local changes found, refresh first")) self.backup(repo, tobackup) repo.dirstate.beginparentchange() for f in a: @@ -1593,9 +1593,9 @@ class queue(object): self.checktoppatch(repo) (top, patchfn) = (self.applied[-1].node, self.applied[-1].name) if repo.changelog.heads(top) != [top]: - raise util.Abort(_("cannot refresh a revision with children")) + raise error.Abort(_("cannot refresh a revision with children")) if not repo[top].mutable(): - raise util.Abort(_("cannot refresh public revision"), + raise error.Abort(_("cannot refresh public revision"), hint=_('see "hg help phases" for details')) cparents = repo.changelog.parents(top) @@ -1812,7 +1812,7 @@ class queue(object): def init(self, repo, create=False): if not create and os.path.isdir(self.path): - raise util.Abort(_("patch queue directory already exists")) + raise error.Abort(_("patch queue directory already exists")) try: os.mkdir(self.path) except OSError as inst: @@ -1823,7 +1823,7 @@ class queue(object): def unapplied(self, repo, patch=None): if patch and patch not in self.series: - raise util.Abort(_("patch %s is not in series file") % patch) + raise error.Abort(_("patch %s is not in series file") % patch) if not patch: start = self.seriesend() else: @@ -2031,19 +2031,19 @@ class queue(object): force=None, git=False): def checkseries(patchname): if patchname in self.series: - raise util.Abort(_('patch %s is already in the series file') + raise error.Abort(_('patch %s is already in the series file') % patchname) if rev: if files: - raise util.Abort(_('option "-r" not valid when importing ' + raise error.Abort(_('option "-r" not valid when importing ' 'files')) rev = scmutil.revrange(repo, rev) rev.sort(reverse=True) elif not files: - raise util.Abort(_('no files or revisions specified')) + raise error.Abort(_('no files or revisions specified')) if (len(files) > 1 or len(rev) > 1) and patchname: - raise util.Abort(_('option "-n" not valid when importing multiple ' + raise error.Abort(_('option "-n" not valid when importing multiple ' 'patches')) imported = [] if rev: @@ -2052,21 +2052,21 @@ class queue(object): # Otherwise, they should form a linear path to a head. heads = repo.changelog.heads(repo.changelog.node(rev.first())) if len(heads) > 1: - raise util.Abort(_('revision %d is the root of more than one ' + raise error.Abort(_('revision %d is the root of more than one ' 'branch') % rev.last()) if self.applied: base = repo.changelog.node(rev.first()) if base in [n.node for n in self.applied]: - raise util.Abort(_('revision %d is already managed') + raise error.Abort(_('revision %d is already managed') % rev.first()) if heads != [self.applied[-1].node]: - raise util.Abort(_('revision %d is not the parent of ' + raise error.Abort(_('revision %d is not the parent of ' 'the queue') % rev.first()) base = repo.changelog.rev(self.applied[0].node) lastparent = repo.changelog.parentrevs(base)[0] else: if heads != [repo.changelog.node(rev.first())]: - raise util.Abort(_('revision %d has unmanaged children') + raise error.Abort(_('revision %d has unmanaged children') % rev.first()) lastparent = None @@ -2075,16 +2075,16 @@ class queue(object): try: for r in rev: if not repo[r].mutable(): - raise util.Abort(_('revision %d is not mutable') % r, + raise error.Abort(_('revision %d is not mutable') % r, hint=_('see "hg help phases" ' 'for details')) p1, p2 = repo.changelog.parentrevs(r) n = repo.changelog.node(r) if p2 != nullrev: - raise util.Abort(_('cannot import merge revision %d') + raise error.Abort(_('cannot import merge revision %d') % r) if lastparent and lastparent != r: - raise util.Abort(_('revision %d is not the parent of ' + raise error.Abort(_('revision %d is not the parent of ' '%d') % (r, lastparent)) lastparent = p1 @@ -2118,13 +2118,14 @@ class queue(object): for i, filename in enumerate(files): if existing: if filename == '-': - raise util.Abort(_('-e is incompatible with import from -')) + raise error.Abort(_('-e is incompatible with import from -') + ) filename = normname(filename) self.checkreservedname(filename) if util.url(filename).islocal(): originpath = self.join(filename) if not os.path.isfile(originpath): - raise util.Abort( + raise error.Abort( _("patch %s does not exist") % filename) if patchname: @@ -2138,7 +2139,7 @@ class queue(object): else: if filename == '-' and not patchname: - raise util.Abort(_('need --name to import a patch from -')) + raise error.Abort(_('need --name to import a patch from -')) elif not patchname: patchname = normname(os.path.basename(filename.rstrip('/'))) self.checkpatchname(patchname, force) @@ -2150,7 +2151,7 @@ class queue(object): text = fp.read() fp.close() except (OSError, IOError): - raise util.Abort(_("unable to read file %s") % filename) + raise error.Abort(_("unable to read file %s") % filename) patchf = self.opener(patchname, "w") patchf.write(text) patchf.close() @@ -2209,7 +2210,7 @@ def applied(ui, repo, patch=None, **opts if patch: if patch not in q.series: - raise util.Abort(_("patch %s is not in series file") % patch) + raise error.Abort(_("patch %s is not in series file") % patch) end = q.series.index(patch) + 1 else: end = q.seriesend(True) @@ -2241,7 +2242,7 @@ def unapplied(ui, repo, patch=None, **op q = repo.mq if patch: if patch not in q.series: - raise util.Abort(_("patch %s is not in series file") % patch) + raise error.Abort(_("patch %s is not in series file") % patch) start = q.series.index(patch) + 1 else: start = q.seriesend(True) @@ -2408,7 +2409,7 @@ def clone(ui, source, dest=None, **opts) try: hg.peer(ui, opts, patchespath) except error.RepoError: - raise util.Abort(_('versioned patch repository not found' + raise error.Abort(_('versioned patch repository not found' ' (see init --mq)')) qbase, destrev = None, None if sr.local(): @@ -2458,7 +2459,7 @@ def commit(ui, repo, *pats, **opts): q = repo.mq r = q.qrepo() if not r: - raise util.Abort('no queue repository') + raise error.Abort('no queue repository') commands.commit(r.ui, r, *pats, **opts) @command("qseries", @@ -2663,9 +2664,9 @@ def fold(ui, repo, *files, **opts): Returns 0 on success.""" q = repo.mq if not files: - raise util.Abort(_('qfold requires at least one patch name')) + raise error.Abort(_('qfold requires at least one patch name')) if not q.checktoppatch(repo)[0]: - raise util.Abort(_('no patches applied')) + raise error.Abort(_('no patches applied')) q.checklocalchanges(repo) message = cmdutil.logmessage(ui, opts) @@ -2678,7 +2679,7 @@ def fold(ui, repo, *files, **opts): if p in patches or p == parent: ui.warn(_('skipping already folded patch %s\n') % p) if q.isapplied(p): - raise util.Abort(_('qfold cannot fold already applied patch %s') + raise error.Abort(_('qfold cannot fold already applied patch %s') % p) patches.append(p) @@ -2690,7 +2691,7 @@ def fold(ui, repo, *files, **opts): pf = q.join(p) (patchsuccess, files, fuzz) = q.patch(repo, pf) if not patchsuccess: - raise util.Abort(_('error folding patch %s') % p) + raise error.Abort(_('error folding patch %s') % p) if not message: ph = patchheader(q.join(parent), q.plainmode) @@ -2789,23 +2790,23 @@ def guard(ui, repo, *args, **opts): args = list(args) if opts.get('list'): if args or opts.get('none'): - raise util.Abort(_('cannot mix -l/--list with options or ' + raise error.Abort(_('cannot mix -l/--list with options or ' 'arguments')) for i in xrange(len(q.series)): status(i) return if not args or args[0][0:1] in '-+': if not q.applied: - raise util.Abort(_('no patches applied')) + raise error.Abort(_('no patches applied')) patch = q.applied[-1].name if patch is None and args[0][0:1] not in '-+': patch = args.pop(0) if patch is None: - raise util.Abort(_('no patch to work with')) + raise error.Abort(_('no patch to work with')) if args or opts.get('none'): idx = q.findseries(patch) if idx is None: - raise util.Abort(_('no patch named %s') % patch) + raise error.Abort(_('no patch named %s') % patch) q.setguards(idx, args) q.savedirty() else: @@ -3031,10 +3032,10 @@ def save(ui, repo, **opts): newpath = os.path.join(q.basepath, opts.get('name')) if os.path.exists(newpath): if not os.path.isdir(newpath): - raise util.Abort(_('destination %s exists and is not ' + raise error.Abort(_('destination %s exists and is not ' 'a directory') % newpath) if not opts.get('force'): - raise util.Abort(_('destination %s exists, ' + raise error.Abort(_('destination %s exists, ' 'use -f to force') % newpath) else: newpath = savename(path) @@ -3178,7 +3179,7 @@ def finish(ui, repo, *revrange, **opts): Returns 0 on success. """ if not opts.get('applied') and not revrange: - raise util.Abort(_('no revisions specified')) + raise error.Abort(_('no revisions specified')) elif opts.get('applied'): revrange = ('qbase::qtip',) + revrange @@ -3267,7 +3268,7 @@ def qqueue(ui, repo, name=None, **opts): def _setactive(name): if q.applied: - raise util.Abort(_('new queue created, but cannot make active ' + raise error.Abort(_('new queue created, but cannot make active ' 'as patches are applied')) _setactivenocheck(name) @@ -3296,12 +3297,12 @@ def qqueue(ui, repo, name=None, **opts): def _delete(name): if name not in existing: - raise util.Abort(_('cannot delete queue that does not exist')) + raise error.Abort(_('cannot delete queue that does not exist')) current = _getcurrent() if name == current: - raise util.Abort(_('cannot delete currently active queue')) + raise error.Abort(_('cannot delete currently active queue')) fh = repo.vfs('patches.queues.new', 'w') for queue in existing: @@ -3325,14 +3326,14 @@ def qqueue(ui, repo, name=None, **opts): return if not _validname(name): - raise util.Abort( + raise error.Abort( _('invalid queue name, may not contain the characters ":\\/."')) existing = _getqueues() if opts.get('create'): if name in existing: - raise util.Abort(_('queue "%s" already exists') % name) + raise error.Abort(_('queue "%s" already exists') % name) if _noqueues(): _addqueue(_defaultqueue) _addqueue(name) @@ -3340,15 +3341,16 @@ def qqueue(ui, repo, name=None, **opts): elif opts.get('rename'): current = _getcurrent() if name == current: - raise util.Abort(_('can\'t rename "%s" to its current name') % name) + raise error.Abort(_('can\'t rename "%s" to its current name') + % name) if name in existing: - raise util.Abort(_('queue "%s" already exists') % name) + raise error.Abort(_('queue "%s" already exists') % name) olddir = _queuedir(current) newdir = _queuedir(name) if os.path.exists(newdir): - raise util.Abort(_('non-queue directory "%s" already exists') % + raise error.Abort(_('non-queue directory "%s" already exists') % newdir) fh = repo.vfs('patches.queues.new', 'w') @@ -3372,7 +3374,7 @@ def qqueue(ui, repo, name=None, **opts): shutil.rmtree(qdir) else: if name not in existing: - raise util.Abort(_('use --create to create a new queue')) + raise error.Abort(_('use --create to create a new queue')) _setactive(name) def mqphasedefaults(repo, roots): @@ -3403,7 +3405,7 @@ def reposetup(ui, repo): parents = self.dirstate.parents() patches = [s.node for s in self.mq.applied] if parents[0] in patches or parents[1] in patches: - raise util.Abort(errmsg) + raise error.Abort(errmsg) def commit(self, text="", user=None, date=None, match=None, force=False, editor=False, extra={}): @@ -3430,7 +3432,7 @@ def reposetup(ui, repo): # looking for pushed and shared changeset for node in outapplied: if self[node].phase() < phases.secret: - raise util.Abort(_('source has mq patches applied')) + raise error.Abort(_('source has mq patches applied')) # no non-secret patches pushed super(mqrepo, self).checkpush(pushop) @@ -3492,12 +3494,12 @@ def mqinit(orig, ui, *args, **kwargs): if args: repopath = args[0] if not hg.islocal(repopath): - raise util.Abort(_('only a local queue repository ' + raise error.Abort(_('only a local queue repository ' 'may be initialized')) else: repopath = cmdutil.findrepo(os.getcwd()) if not repopath: - raise util.Abort(_('there is no Mercurial repository here ' + raise error.Abort(_('there is no Mercurial repository here ' '(.hg not found)')) repo = hg.repository(ui, repopath) return qinit(ui, repo, True) @@ -3514,7 +3516,7 @@ def mqcommand(orig, ui, repo, *args, **k q = repo.mq r = q.qrepo() if not r: - raise util.Abort(_('no queue repository')) + raise error.Abort(_('no queue repository')) return orig(r.ui, r, *args, **kwargs) def summaryhook(ui, repo): diff --git a/hgext/notify.py b/hgext/notify.py --- a/hgext/notify.py +++ b/hgext/notify.py @@ -135,7 +135,7 @@ web.baseurl import email, socket, time from mercurial.i18n import _ -from mercurial import patch, cmdutil, util, mail +from mercurial import patch, cmdutil, util, mail, error import fnmatch # Note for extension authors: ONLY specify testedwith = 'internal' for @@ -277,7 +277,7 @@ class notifier(object): try: msg = p.parsestr(data) except email.Errors.MessageParseError as inst: - raise util.Abort(inst) + raise error.Abort(inst) # store sender and subject sender, subject = msg['From'], msg['Subject'] diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py --- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -60,7 +60,7 @@ You can set patchbomb to always ask for import os, errno, socket, tempfile, cStringIO import email -from mercurial import cmdutil, commands, hg, mail, patch, util +from mercurial import cmdutil, commands, hg, mail, patch, util, error from mercurial import scmutil from mercurial.i18n import _ from mercurial.node import bin @@ -501,15 +501,15 @@ def patchbomb(ui, repo, *revs, **opts): mail.validateconfig(ui) if not (revs or rev or outgoing or bundle or patches): - raise util.Abort(_('specify at least one changeset with -r or -o')) + raise error.Abort(_('specify at least one changeset with -r or -o')) if outgoing and bundle: - raise util.Abort(_("--outgoing mode always on with --bundle;" + raise error.Abort(_("--outgoing mode always on with --bundle;" " do not re-specify --outgoing")) if outgoing or bundle: if len(revs) > 1: - raise util.Abort(_("too many destinations")) + raise error.Abort(_("too many destinations")) if revs: dest = revs[0] else: @@ -518,7 +518,7 @@ def patchbomb(ui, repo, *revs, **opts): if rev: if revs: - raise util.Abort(_('use only one form to specify the revision')) + raise error.Abort(_('use only one form to specify the revision')) revs = rev revs = scmutil.revrange(repo, revs) @@ -578,7 +578,7 @@ def patchbomb(ui, repo, *revs, **opts): to = getaddrs('To', ask=True) if not to: # we can get here in non-interactive mode - raise util.Abort(_('no recipient addresses provided')) + raise error.Abort(_('no recipient addresses provided')) cc = getaddrs('Cc', ask=True, default='') or [] bcc = getaddrs('Bcc') or [] replyto = getaddrs('Reply-To') @@ -598,7 +598,7 @@ def patchbomb(ui, repo, *revs, **opts): ui.write('\n') if ui.promptchoice(_('are you sure you want to send (yn)?' '$$ &Yes $$ &No')): - raise util.Abort(_('patchbomb canceled')) + raise error.Abort(_('patchbomb canceled')) ui.write('\n') diff --git a/hgext/purge.py b/hgext/purge.py --- a/hgext/purge.py +++ b/hgext/purge.py @@ -24,7 +24,7 @@ '''command to delete untracked files from the working directory''' -from mercurial import util, commands, cmdutil, scmutil +from mercurial import util, commands, cmdutil, scmutil, error from mercurial.i18n import _ import os @@ -94,7 +94,7 @@ def purge(ui, repo, *dirs, **opts): except OSError: m = _('%s cannot be removed') % name if opts['abort_on_err']: - raise util.Abort(m) + raise error.Abort(m) ui.warn(_('warning: %s\n') % m) else: ui.write('%s%s' % (name, eol)) diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -225,20 +225,20 @@ def rebase(ui, repo, **opts): help = "hg%s help -e histedit" % enablehistedit msg = _("interactive history editing is supported by the " "'histedit' extension (see \"%s\")") % help - raise util.Abort(msg) + raise error.Abort(msg) if collapsemsg and not collapsef: - raise util.Abort( + raise error.Abort( _('message can only be specified with collapse')) if contf or abortf: if contf and abortf: - raise util.Abort(_('cannot use both abort and continue')) + raise error.Abort(_('cannot use both abort and continue')) if collapsef: - raise util.Abort( + raise error.Abort( _('cannot use collapse with continue or abort')) if srcf or basef or destf: - raise util.Abort( + raise error.Abort( _('abort and continue do not allow specifying revisions')) if abortf and opts.get('tool', False): ui.warn(_('tool option will be ignored\n')) @@ -255,19 +255,19 @@ def rebase(ui, repo, **opts): else: msg = _('cannot continue inconsistent rebase') hint = _('use "hg rebase --abort" to clear broken state') - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) if abortf: return abort(repo, originalwd, target, state, activebookmark=activebookmark) else: if srcf and basef: - raise util.Abort(_('cannot specify both a ' + raise error.Abort(_('cannot specify both a ' 'source and a base')) if revf and basef: - raise util.Abort(_('cannot specify both a ' + raise error.Abort(_('cannot specify both a ' 'revision and a base')) if revf and srcf: - raise util.Abort(_('cannot specify both a ' + raise error.Abort(_('cannot specify both a ' 'revision and a source')) cmdutil.checkunfinished(repo) @@ -335,7 +335,7 @@ def rebase(ui, repo, **opts): if (not (keepf or allowunstable) and repo.revs('first(children(%ld) - %ld)', rebaseset, rebaseset)): - raise util.Abort( + raise error.Abort( _("can't remove original changesets with" " unrebased descendants"), hint=_('use --keep to keep original changesets')) @@ -361,7 +361,7 @@ def rebase(ui, repo, **opts): root = min(rebaseset) if not keepf and not repo[root].mutable(): - raise util.Abort(_("can't rebase public changeset %s") + raise error.Abort(_("can't rebase public changeset %s") % repo[root], hint=_('see "hg help phases" for details')) @@ -384,7 +384,7 @@ def rebase(ui, repo, **opts): for rev in state: branches.add(repo[rev].branch()) if len(branches) > 1: - raise util.Abort(_('cannot collapse multiple named ' + raise error.Abort(_('cannot collapse multiple named ' 'branches')) # Rebase @@ -564,7 +564,7 @@ def externalparent(repo, state, targetan return nullrev if len(parents) == 1: return parents.pop() - raise util.Abort(_('unable to collapse on top of %s, there is more ' + raise error.Abort(_('unable to collapse on top of %s, there is more ' 'than one external parent: %s') % (max(targetancestors), ', '.join(str(p) for p in sorted(parents)))) @@ -677,7 +677,7 @@ def defineparents(repo, rev, target, sta p2 = state[p2n] else: # p2n external if p2 != nullrev: # p1n external too => rev is a merged revision - raise util.Abort(_('cannot use revision %d as base, result ' + raise error.Abort(_('cannot use revision %d as base, result ' 'would have 3 parents') % rev) p2 = p2n repo.ui.debug(" future parents are %d and %d\n" % @@ -866,7 +866,7 @@ def restorestatus(repo): state[repo[oldrev].rev()] = repo[newrev].rev() if keepbranches is None: - raise util.Abort(_('.hg/rebasestate is incomplete')) + raise error.Abort(_('.hg/rebasestate is incomplete')) skipped = set() # recompute the set of skipped revs @@ -885,7 +885,7 @@ def restorestatus(repo): except IOError as err: if err.errno != errno.ENOENT: raise - raise util.Abort(_('no rebase in progress')) + raise error.Abort(_('no rebase in progress')) def needupdate(repo, state): '''check whether we should `update --clean` away from a merge, or if @@ -959,18 +959,18 @@ def buildstate(repo, dest, rebaseset, co # a partially completed rebase is blocked by mq. if 'qtip' in repo.tags() and (dest.node() in [s.node for s in repo.mq.applied]): - raise util.Abort(_('cannot rebase onto an applied mq patch')) + raise error.Abort(_('cannot rebase onto an applied mq patch')) roots = list(repo.set('roots(%ld)', rebaseset)) if not roots: - raise util.Abort(_('no matching revisions')) + raise error.Abort(_('no matching revisions')) roots.sort() state = {} detachset = set() for root in roots: commonbase = root.ancestor(dest) if commonbase == root: - raise util.Abort(_('source is ancestor of destination')) + raise error.Abort(_('source is ancestor of destination')) if commonbase == dest: samebranch = root.branch() == dest.branch() if not collapse and samebranch and root in dest.children(): @@ -1114,7 +1114,7 @@ def pullrebase(orig, ui, repo, *args, ** release(lock, wlock) else: if opts.get('tool'): - raise util.Abort(_('--tool can only be used with --rebase')) + raise error.Abort(_('--tool can only be used with --rebase')) orig(ui, repo, *args, **opts) def _setrebasesetvisibility(repo, revs): diff --git a/hgext/record.py b/hgext/record.py --- a/hgext/record.py +++ b/hgext/record.py @@ -9,7 +9,7 @@ from mercurial.i18n import _ from mercurial import cmdutil, commands, extensions -from mercurial import util +from mercurial import error cmdtable = {} command = cmdutil.command(cmdtable) @@ -54,7 +54,7 @@ def record(ui, repo, *pats, **opts): This command is not available when committing a merge.''' if not ui.interactive(): - raise util.Abort(_('running non-interactively, use %s instead') % + raise error.Abort(_('running non-interactively, use %s instead') % 'commit') opts["interactive"] = True @@ -99,7 +99,7 @@ def _qrecord(cmdsuggest, ui, repo, patch try: mq = extensions.find('mq') except KeyError: - raise util.Abort(_("'mq' extension not loaded")) + raise error.Abort(_("'mq' extension not loaded")) repo.mq.checkpatchname(patch) diff --git a/hgext/relink.py b/hgext/relink.py --- a/hgext/relink.py +++ b/hgext/relink.py @@ -7,7 +7,7 @@ """recreates hardlinks between repository clones""" -from mercurial import cmdutil, hg, util +from mercurial import cmdutil, hg, util, error from mercurial.i18n import _ import os, stat @@ -47,7 +47,7 @@ def relink(ui, repo, origin=None, **opts """ if (not util.safehasattr(util, 'samefile') or not util.safehasattr(util, 'samedevice')): - raise util.Abort(_('hardlinks are not supported on this system')) + raise error.Abort(_('hardlinks are not supported on this system')) src = hg.repository(repo.baseui, ui.expandpath(origin or 'default-relink', origin or 'default')) ui.status(_('relinking %s to %s\n') % (src.store.path, repo.store.path)) @@ -57,7 +57,7 @@ def relink(ui, repo, origin=None, **opts if not util.samedevice(src.store.path, repo.store.path): # No point in continuing - raise util.Abort(_('source and destination are on different devices')) + raise error.Abort(_('source and destination are on different devices')) locallock = repo.lock() try: @@ -114,7 +114,7 @@ def prune(candidates, src, dst, ui): return False if not util.samedevice(src, dst): # No point in continuing - raise util.Abort( + raise error.Abort( _('source and destination are on different devices')) if st.st_size != ts.st_size: return False diff --git a/hgext/schemes.py b/hgext/schemes.py --- a/hgext/schemes.py +++ b/hgext/schemes.py @@ -41,7 +41,7 @@ same name. """ import os, re -from mercurial import extensions, hg, templater, util +from mercurial import extensions, hg, templater, util, error from mercurial.i18n import _ # Note for extension authors: ONLY specify testedwith = 'internal' for @@ -69,7 +69,7 @@ class ShortRepository(object): try: url = url.split('://', 1)[1] except IndexError: - raise util.Abort(_("no '://' in scheme url '%s'") % url) + raise error.Abort(_("no '://' in scheme url '%s'") % url) parts = url.split('/', self.parts) if len(parts) > self.parts: tail = parts[-1] @@ -101,7 +101,7 @@ def extsetup(ui): for scheme, url in schemes.items(): if (os.name == 'nt' and len(scheme) == 1 and scheme.isalpha() and os.path.exists('%s:\\' % scheme)): - raise util.Abort(_('custom scheme %s:// conflicts with drive ' + raise error.Abort(_('custom scheme %s:// conflicts with drive ' 'letter %s:\\\n') % (scheme, scheme.upper())) hg.schemes[scheme] = ShortRepository(url, scheme, t) diff --git a/hgext/share.py b/hgext/share.py --- a/hgext/share.py +++ b/hgext/share.py @@ -38,7 +38,7 @@ The following ``share.`` config options ''' from mercurial.i18n import _ -from mercurial import cmdutil, commands, hg, util, extensions, bookmarks +from mercurial import cmdutil, commands, hg, util, extensions, bookmarks, error from mercurial.hg import repository, parseurl import errno @@ -83,7 +83,7 @@ def unshare(ui, repo): """ if not repo.shared(): - raise util.Abort(_("this is not a shared repo")) + raise error.Abort(_("this is not a shared repo")) destlock = lock = None lock = repo.lock() diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -90,7 +90,7 @@ class shelvedfile(object): except IOError as err: if err.errno != errno.ENOENT: raise - raise util.Abort(_("shelved change '%s' not found") % self.name) + raise error.Abort(_("shelved change '%s' not found") % self.name) def applybundle(self): fp = self.opener() @@ -135,7 +135,7 @@ class shelvedstate(object): version = int(fp.readline().strip()) if version != cls._version: - raise util.Abort(_('this version of shelve is incompatible ' + raise error.Abort(_('this version of shelve is incompatible ' 'with the version used in this repo')) name = fp.readline().strip() wctx = fp.readline().strip() @@ -239,7 +239,7 @@ def createcmd(ui, repo, pats, opts): wctx = repo[None] parents = wctx.parents() if len(parents) > 1: - raise util.Abort(_('cannot shelve while merging')) + raise error.Abort(_('cannot shelve while merging')) parent = parents[0] # we never need the user, so we use a generic user for all shelve operations @@ -290,22 +290,22 @@ def createcmd(ui, repo, pats, opts): if name: if shelvedfile(repo, name, 'hg').exists(): - raise util.Abort(_("a shelved change named '%s' already exists") - % name) + raise error.Abort(_("a shelved change named '%s' already exists" + ) % name) else: for n in gennames(): if not shelvedfile(repo, n, 'hg').exists(): name = n break else: - raise util.Abort(_("too many shelved changes named '%s'") % + raise error.Abort(_("too many shelved changes named '%s'") % label) # ensure we are not creating a subdirectory or a hidden file if '/' in name or '\\' in name: - raise util.Abort(_('shelved change names may not contain slashes')) + raise error.Abort(_('shelved change names may not contain slashes')) if name.startswith('.'): - raise util.Abort(_("shelved change names may not start with '.'")) + raise error.Abort(_("shelved change names may not start with '.'")) interactive = opts.get('interactive', False) def interactivecommitfunc(ui, repo, *pats, **opts): @@ -359,7 +359,7 @@ def cleanupcmd(ui, repo): def deletecmd(ui, repo, pats): """subcommand that deletes a specific shelve""" if not pats: - raise util.Abort(_('no shelved changes specified!')) + raise error.Abort(_('no shelved changes specified!')) wlock = repo.wlock() try: for name in pats: @@ -369,7 +369,7 @@ def deletecmd(ui, repo, pats): except OSError as err: if err.errno != errno.ENOENT: raise - raise util.Abort(_("shelved change '%s' not found") % name) + raise error.Abort(_("shelved change '%s' not found") % name) finally: lockmod.release(wlock) @@ -441,18 +441,18 @@ def listcmd(ui, repo, pats, opts): def singlepatchcmds(ui, repo, pats, opts, subcommand): """subcommand that displays a single shelf""" if len(pats) != 1: - raise util.Abort(_("--%s expects a single shelf") % subcommand) + raise error.Abort(_("--%s expects a single shelf") % subcommand) shelfname = pats[0] if not shelvedfile(repo, shelfname, 'patch').exists(): - raise util.Abort(_("cannot find shelf %s") % shelfname) + raise error.Abort(_("cannot find shelf %s") % shelfname) listcmd(ui, repo, pats, opts) def checkparents(repo, state): """check parent while resuming an unshelve""" if state.parents != repo.dirstate.parents(): - raise util.Abort(_('working directory parents do not match unshelve ' + raise error.Abort(_('working directory parents do not match unshelve ' 'state')) def pathtofiles(repo, files): @@ -527,7 +527,7 @@ def unshelvecontinue(ui, repo, state, op checkparents(repo, state) ms = merge.mergestate(repo) if [f for f in ms if ms[f] == 'u']: - raise util.Abort( + raise error.Abort( _("unresolved conflicts, can't continue"), hint=_("see 'hg resolve', then 'hg unshelve --continue'")) @@ -610,9 +610,9 @@ def unshelve(ui, repo, *shelved, **opts) if abortf or continuef: if abortf and continuef: - raise util.Abort(_('cannot use both abort and continue')) + raise error.Abort(_('cannot use both abort and continue')) if shelved: - raise util.Abort(_('cannot combine abort/continue with ' + raise error.Abort(_('cannot combine abort/continue with ' 'naming a shelved change')) try: @@ -620,25 +620,25 @@ def unshelve(ui, repo, *shelved, **opts) except IOError as err: if err.errno != errno.ENOENT: raise - raise util.Abort(_('no unshelve operation underway')) + raise error.Abort(_('no unshelve operation underway')) if abortf: return unshelveabort(ui, repo, state, opts) elif continuef: return unshelvecontinue(ui, repo, state, opts) elif len(shelved) > 1: - raise util.Abort(_('can only unshelve one change at a time')) + raise error.Abort(_('can only unshelve one change at a time')) elif not shelved: shelved = listshelves(repo) if not shelved: - raise util.Abort(_('no shelved changes to apply!')) + raise error.Abort(_('no shelved changes to apply!')) basename = util.split(shelved[0][1])[1] ui.status(_("unshelving change '%s'\n") % basename) else: basename = shelved[0] if not shelvedfile(repo, basename, 'patch').exists(): - raise util.Abort(_("shelved change '%s' not found") % basename) + raise error.Abort(_("shelved change '%s' not found") % basename) oldquiet = ui.quiet wlock = lock = tr = None @@ -808,12 +808,12 @@ def shelvecmd(ui, repo, *pats, **opts): if opts[opt]: for i, allowable in allowables: if opts[i] and opt not in allowable: - raise util.Abort(_("options '--%s' and '--%s' may not be " + raise error.Abort(_("options '--%s' and '--%s' may not be " "used together") % (opt, i)) return True if checkopt('cleanup'): if pats: - raise util.Abort(_("cannot specify names when using '--cleanup'")) + raise error.Abort(_("cannot specify names when using '--cleanup'")) return cleanupcmd(ui, repo) elif checkopt('delete'): return deletecmd(ui, repo, pats) diff --git a/hgext/strip.py b/hgext/strip.py --- a/hgext/strip.py +++ b/hgext/strip.py @@ -6,7 +6,7 @@ repository. See the command help for det from mercurial.i18n import _ from mercurial.node import nullid from mercurial.lock import release -from mercurial import cmdutil, hg, scmutil, util +from mercurial import cmdutil, hg, scmutil, util, error from mercurial import repair, bookmarks, merge cmdtable = {} @@ -38,10 +38,10 @@ def checklocalchanges(repo, force=False, if not force: if s.modified or s.added or s.removed or s.deleted: _("local changes found") # i18n tool detection - raise util.Abort(_("local changes found" + excsuffix)) + raise error.Abort(_("local changes found" + excsuffix)) if checksubstate(repo): _("local changed subrepos found") # i18n tool detection - raise util.Abort(_("local changed subrepos found" + excsuffix)) + raise error.Abort(_("local changed subrepos found" + excsuffix)) return s def strip(ui, repo, revs, update=True, backup=True, force=None, bookmark=None): @@ -131,7 +131,7 @@ def stripcmd(ui, repo, *revs, **opts): mark = opts.get('bookmark') marks = repo._bookmarks if mark not in marks: - raise util.Abort(_("bookmark '%s' not found") % mark) + raise error.Abort(_("bookmark '%s' not found") % mark) # If the requested bookmark is not the only one pointing to a # a revision we have to only delete the bookmark and not strip @@ -153,7 +153,7 @@ def stripcmd(ui, repo, *revs, **opts): ui.write(_("bookmark '%s' deleted\n") % mark) if not revs: - raise util.Abort(_('empty revision set')) + raise error.Abort(_('empty revision set')) descendants = set(cl.descendants(revs)) strippedrevs = revs.union(descendants) diff --git a/hgext/transplant.py b/hgext/transplant.py --- a/hgext/transplant.py +++ b/hgext/transplant.py @@ -174,7 +174,7 @@ class transplanter(object): else: parent = source.lookup(opts['parent']) if parent not in parents: - raise util.Abort(_('%s is not a parent of %s') % + raise error.Abort(_('%s is not a parent of %s') % (short(parent), short(node))) else: parent = parents[0] @@ -245,7 +245,7 @@ class transplanter(object): environ={'HGUSER': changelog[1], 'HGREVISION': revlog.hex(node), }, - onerr=util.Abort, errprefix=_('filter failed')) + onerr=error.Abort, errprefix=_('filter failed')) user, date, msg = self.parselog(file(headerfile))[1:4] finally: os.unlink(headerfile) @@ -269,7 +269,7 @@ class transplanter(object): self.ui.note('%s %s\n%s\n' % (user, date, message)) if not patchfile and not merge: - raise util.Abort(_('can only omit patchfile if merging')) + raise error.Abort(_('can only omit patchfile if merging')) if patchfile: try: files = set() @@ -332,14 +332,14 @@ class transplanter(object): merge = False if not user or not date or not message or not parents[0]: - raise util.Abort(_('transplant log file is corrupt')) + raise error.Abort(_('transplant log file is corrupt')) parent = parents[0] if len(parents) > 1: if opts.get('parent'): parent = source.lookup(opts['parent']) if parent not in parents: - raise util.Abort(_('%s is not a parent of %s') % + raise error.Abort(_('%s is not a parent of %s') % (short(parent), short(node))) else: merge = True @@ -349,7 +349,7 @@ class transplanter(object): try: p1, p2 = repo.dirstate.parents() if p1 != parent: - raise util.Abort(_('working directory not at transplant ' + raise error.Abort(_('working directory not at transplant ' 'parent %s') % revlog.hex(parent)) if merge: repo.setparents(p1, parents[1]) @@ -358,7 +358,7 @@ class transplanter(object): n = repo.commit(message, user, date, extra=extra, editor=self.getcommiteditor()) if not n: - raise util.Abort(_('commit failed')) + raise error.Abort(_('commit failed')) if not merge: self.transplants.set(n, node) else: @@ -418,7 +418,7 @@ class transplanter(object): inmsg = True message.append(line) if None in (user, date): - raise util.Abort(_("filter corrupted changeset (no user or date)")) + raise error.Abort(_("filter corrupted changeset (no user or date)")) return (node, user, date, '\n'.join(message), parents) def log(self, user, date, message, p1, p2, merge=False): @@ -594,18 +594,18 @@ def transplant(ui, repo, *revs, **opts): def checkopts(opts, revs): if opts.get('continue'): if opts.get('branch') or opts.get('all') or opts.get('merge'): - raise util.Abort(_('--continue is incompatible with ' + raise error.Abort(_('--continue is incompatible with ' '--branch, --all and --merge')) return if not (opts.get('source') or revs or opts.get('merge') or opts.get('branch')): - raise util.Abort(_('no source URL, branch revision or revision ' + raise error.Abort(_('no source URL, branch revision or revision ' 'list provided')) if opts.get('all'): if not opts.get('branch'): - raise util.Abort(_('--all requires a branch revision')) + raise error.Abort(_('--all requires a branch revision')) if revs: - raise util.Abort(_('--all is incompatible with a ' + raise error.Abort(_('--all is incompatible with a ' 'revision list')) checkopts(opts, revs) @@ -622,13 +622,13 @@ def transplant(ui, repo, *revs, **opts): cmdutil.checkunfinished(repo) p1, p2 = repo.dirstate.parents() if len(repo) > 0 and p1 == revlog.nullid: - raise util.Abort(_('no revision checked out')) + raise error.Abort(_('no revision checked out')) if not opts.get('continue'): if p2 != revlog.nullid: - raise util.Abort(_('outstanding uncommitted merges')) + raise error.Abort(_('outstanding uncommitted merges')) m, a, r, d = repo.status()[:4] if m or a or r or d: - raise util.Abort(_('outstanding local changes')) + raise error.Abort(_('outstanding local changes')) sourcerepo = opts.get('source') if sourcerepo: diff --git a/hgext/win32mbcs.py b/hgext/win32mbcs.py --- a/hgext/win32mbcs.py +++ b/hgext/win32mbcs.py @@ -47,7 +47,7 @@ It is useful for the users who want to c import os, sys from mercurial.i18n import _ -from mercurial import util, encoding +from mercurial import error, encoding # Note for extension authors: ONLY specify testedwith = 'internal' for # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should # be specifying the version(s) of Mercurial they are tested with, or @@ -105,7 +105,7 @@ def basewrapper(func, argtype, enc, dec, # return value. return enc(func(*dec(args), **dec(kwds))) except UnicodeError: - raise util.Abort(_("[win32mbcs] filename conversion failed with" + raise error.Abort(_("[win32mbcs] filename conversion failed with" " %s encoding\n") % (_encoding)) def wrapper(func, args, kwds): diff --git a/mercurial/archival.py b/mercurial/archival.py --- a/mercurial/archival.py +++ b/mercurial/archival.py @@ -55,7 +55,7 @@ def tidyprefix(dest, kind, prefix): if prefix.startswith('./'): prefix = prefix[2:] if prefix.startswith('../') or os.path.isabs(lpfx) or '/../' in prefix: - raise util.Abort(_('archive prefix contains illegal components')) + raise error.Abort(_('archive prefix contains illegal components')) return prefix exts = { @@ -292,7 +292,7 @@ def archive(repo, dest, node, kind, deco if kind == 'files': if prefix: - raise util.Abort(_('cannot give prefix when archiving to files')) + raise error.Abort(_('cannot give prefix when archiving to files')) else: prefix = tidyprefix(dest, kind, prefix) @@ -303,7 +303,7 @@ def archive(repo, dest, node, kind, deco archiver.addfile(prefix + name, mode, islink, data) if kind not in archivers: - raise util.Abort(_("unknown archive type '%s'") % kind) + raise error.Abort(_("unknown archive type '%s'") % kind) ctx = repo[node] archiver = archivers[kind](dest, mtime or ctx.date()[0]) diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -19,8 +19,8 @@ from .node import ( ) from . import ( encoding, + error, scmutil, - util, ) array = array.array @@ -250,7 +250,7 @@ class branchcache(dict): repo.ui.log('branchcache', 'wrote %s branch cache with %d labels and %d nodes\n', repo.filtername, len(self), nodecount) - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: repo.ui.debug("couldn't write branch cache: %s\n" % inst) # Abort may be raise by read only opener pass @@ -465,7 +465,7 @@ class revbranchcache(object): for b in self._names[self._rbcnamescount:])) self._rbcsnameslen = f.tell() f.close() - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: repo.ui.debug("couldn't write revision branch cache names: " "%s\n" % inst) return @@ -483,7 +483,7 @@ class revbranchcache(object): end = revs * _rbcrecsize f.write(self._rbcrevs[start:end]) f.close() - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: repo.ui.debug("couldn't write revision branch cache: %s\n" % inst) return diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -627,10 +627,10 @@ def getunbundler(ui, fp, magicstring=Non magicstring = changegroup.readexactly(fp, 4) magic, version = magicstring[0:2], magicstring[2:4] if magic != 'HG': - raise util.Abort(_('not a Mercurial bundle')) + raise error.Abort(_('not a Mercurial bundle')) unbundlerclass = formatmap.get(version) if unbundlerclass is None: - raise util.Abort(_('unknown bundle version %s') % version) + raise error.Abort(_('unknown bundle version %s') % version) unbundler = unbundlerclass(ui, fp) indebug(ui, 'start processing of %s stream' % magicstring) return unbundler @@ -1206,7 +1206,7 @@ class unbundlepart(unpackermixin): self._payloadstream = util.chunkbuffer(self._payloadchunks(chunk)) adjust = self.read(internaloffset) if len(adjust) != internaloffset: - raise util.Abort(_('Seek failed\n')) + raise error.Abort(_('Seek failed\n')) self._pos = newpos # These are only the static capabilities. @@ -1304,19 +1304,19 @@ def handleremotechangegroup(op, inpart): try: raw_url = inpart.params['url'] except KeyError: - raise util.Abort(_('remote-changegroup: missing "%s" param') % 'url') + raise error.Abort(_('remote-changegroup: missing "%s" param') % 'url') parsed_url = util.url(raw_url) if parsed_url.scheme not in capabilities['remote-changegroup']: - raise util.Abort(_('remote-changegroup does not support %s urls') % + raise error.Abort(_('remote-changegroup does not support %s urls') % parsed_url.scheme) try: size = int(inpart.params['size']) except ValueError: - raise util.Abort(_('remote-changegroup: invalid value for param "%s"') + raise error.Abort(_('remote-changegroup: invalid value for param "%s"') % 'size') except KeyError: - raise util.Abort(_('remote-changegroup: missing "%s" param') % 'size') + raise error.Abort(_('remote-changegroup: missing "%s" param') % 'size') digests = {} for typ in inpart.params.get('digests', '').split(): @@ -1324,7 +1324,7 @@ def handleremotechangegroup(op, inpart): try: value = inpart.params[param] except KeyError: - raise util.Abort(_('remote-changegroup: missing "%s" param') % + raise error.Abort(_('remote-changegroup: missing "%s" param') % param) digests[typ] = value @@ -1339,7 +1339,7 @@ def handleremotechangegroup(op, inpart): from . import exchange cg = exchange.readbundle(op.repo.ui, real_part, raw_url) if not isinstance(cg, changegroup.cg1unpacker): - raise util.Abort(_('%s: not a bundle version 1.0') % + raise error.Abort(_('%s: not a bundle version 1.0') % util.hidepassword(raw_url)) ret = changegroup.addchangegroup(op.repo, cg, 'bundle2', 'bundle2') op.records.add('changegroup', {'return': ret}) @@ -1351,8 +1351,8 @@ def handleremotechangegroup(op, inpart): part.addparam('return', '%i' % ret, mandatory=False) try: real_part.validate() - except util.Abort as e: - raise util.Abort(_('bundle at %s is corrupted:\n%s') % + except error.Abort as e: + raise error.Abort(_('bundle at %s is corrupted:\n%s') % (util.hidepassword(raw_url), str(e))) assert not inpart.read() @@ -1399,7 +1399,7 @@ def handlereplycaps(op, inpart): @parthandler('error:abort', ('message', 'hint')) def handleerrorabort(op, inpart): """Used to transmit abort error over the wire""" - raise util.Abort(inpart.params['message'], hint=inpart.params.get('hint')) + raise error.Abort(inpart.params['message'], hint=inpart.params.get('hint')) @parthandler('error:pushkey', ('namespace', 'key', 'new', 'old', 'ret', 'in-reply-to')) diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py --- a/mercurial/bundlerepo.py +++ b/mercurial/bundlerepo.py @@ -282,7 +282,7 @@ class bundlerepository(localrepo.localre in changegroup.packermap)] if not cgparts: - raise util.Abort('No changegroups found') + raise error.Abort('No changegroups found') version = cgparts[0].params.get('version', '01') cgparts = [p for p in cgparts if p.params.get('version', '01') == version] @@ -374,7 +374,7 @@ class bundlerepository(localrepo.localre def instance(ui, path, create): if create: - raise util.Abort(_('cannot create new bundle repository')) + raise error.Abort(_('cannot create new bundle repository')) # internal config: bundle.mainreporoot parentpath = ui.config("bundle", "mainreporoot", "") if not parentpath: diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -37,7 +37,7 @@ def readexactly(stream, n): '''read n bytes from stream.read and abort if less was available''' s = stream.read(n) if len(s) < n: - raise util.Abort(_("stream ended unexpectedly" + raise error.Abort(_("stream ended unexpectedly" " (got %d bytes, expected %d)") % (len(s), n)) return s @@ -48,7 +48,7 @@ def getchunk(stream): l = struct.unpack(">l", d)[0] if l <= 4: if l: - raise util.Abort(_("invalid chunk length %d") % l) + raise error.Abort(_("invalid chunk length %d") % l) return "" return readexactly(stream, l - 4) @@ -144,12 +144,12 @@ def writebundle(ui, cg, filename, bundle # compression argument is only for the bundle2 case assert compression is None if cg.version != '01': - raise util.Abort(_('old bundle types only supports v1 ' - 'changegroups')) + raise error.Abort(_('old bundle types only supports v1 ' + 'changegroups')) header, comp = bundletypes[bundletype] if comp not in util.compressors: - raise util.Abort(_('unknown stream compression type: %s') - % comp) + raise error.Abort(_('unknown stream compression type: %s') + % comp) z = util.compressors[comp]() subchunkiter = cg.getchunks() def chunkiter(): @@ -175,7 +175,7 @@ class cg1unpacker(object): if alg == 'UN': alg = None # get more modern without breaking too much if not alg in util.decompressors: - raise util.Abort(_('unknown stream compression type: %s') + raise error.Abort(_('unknown stream compression type: %s') % alg) if alg == 'BZ': alg = '_truncatedBZ' @@ -198,7 +198,7 @@ class cg1unpacker(object): l = struct.unpack(">l", d)[0] if l <= 4: if l: - raise util.Abort(_("invalid chunk length %d") % l) + raise error.Abort(_("invalid chunk length %d") % l) return 0 if self.callback: self.callback() @@ -477,7 +477,7 @@ class cg1packer(object): for i, fname in enumerate(sorted(changedfiles)): filerevlog = repo.file(fname) if not filerevlog: - raise util.Abort(_("empty or missing revlog for %s") % fname) + raise error.Abort(_("empty or missing revlog for %s") % fname) linkrevnodes = linknodes(filerevlog, fname) # Lookup for filenodes, we collected the linkrev nodes above in the @@ -688,9 +688,9 @@ def addchangegroupfiles(repo, source, re o = len(fl) try: if not fl.addgroup(source, revmap, trp): - raise util.Abort(_("received file revlog group is empty")) + raise error.Abort(_("received file revlog group is empty")) except error.CensoredBaseError as e: - raise util.Abort(_("received delta base is censored: %s") % e) + raise error.Abort(_("received delta base is censored: %s") % e) revisions += len(fl) - o files += 1 if f in needfiles: @@ -700,7 +700,7 @@ def addchangegroupfiles(repo, source, re if n in needs: needs.remove(n) else: - raise util.Abort( + raise error.Abort( _("received spurious file revlog entry")) if not needs: del needfiles[f] @@ -712,7 +712,7 @@ def addchangegroupfiles(repo, source, re try: fl.rev(n) except error.LookupError: - raise util.Abort( + raise error.Abort( _('missing file data for %s:%s - run hg verify') % (f, hex(n))) @@ -784,7 +784,7 @@ def addchangegroup(repo, source, srctype efiles = len(efiles) if not (srccontent or emptyok): - raise util.Abort(_("received changelog group is empty")) + raise error.Abort(_("received changelog group is empty")) clend = len(cl) changesets = clend - clstart repo.ui.progress(_('changesets'), None) diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -85,7 +85,7 @@ def dorecord(ui, repo, commitfunc, cmdsu msg = _('running non-interactively, use %s instead') % cmdsuggest else: msg = _('running non-interactively') - raise util.Abort(msg) + raise error.Abort(msg) # make sure username is set before going interactive if not opts.get('user'): @@ -109,7 +109,7 @@ def dorecord(ui, repo, commitfunc, cmdsu checkunfinished(repo, commit=True) merge = len(repo[None].parents()) > 1 if merge: - raise util.Abort(_('cannot partially commit a merge ' + raise error.Abort(_('cannot partially commit a merge ' '(use "hg commit" instead)')) status = repo.status(match=match) @@ -123,7 +123,7 @@ def dorecord(ui, repo, commitfunc, cmdsu try: chunks = filterfn(ui, originalchunks) except patch.PatchError as err: - raise util.Abort(_('error parsing patch: %s') % err) + raise error.Abort(_('error parsing patch: %s') % err) # We need to keep a backup of files that have been newly added and # modified during the recording process because there is a previous @@ -193,7 +193,7 @@ def dorecord(ui, repo, commitfunc, cmdsu ui.debug(fp.getvalue()) patch.internalpatch(ui, repo, fp, 1, eolmode=None) except patch.PatchError as err: - raise util.Abort(str(err)) + raise error.Abort(str(err)) del fp # 4. We prepared working directory according to filtered @@ -305,10 +305,10 @@ def findrepo(p): def bailifchanged(repo, merge=True): if merge and repo.dirstate.p2() != nullid: - raise util.Abort(_('outstanding uncommitted merge')) + raise error.Abort(_('outstanding uncommitted merge')) modified, added, removed, deleted = repo.status()[:4] if modified or added or removed or deleted: - raise util.Abort(_('uncommitted changes')) + raise error.Abort(_('uncommitted changes')) ctx = repo[None] for s in sorted(ctx.substate): ctx.sub(s).bailifchanged() @@ -319,7 +319,7 @@ def logmessage(ui, opts): logfile = opts.get('logfile') if message and logfile: - raise util.Abort(_('options --message and --logfile are mutually ' + raise error.Abort(_('options --message and --logfile are mutually ' 'exclusive')) if not message and logfile: try: @@ -328,7 +328,7 @@ def logmessage(ui, opts): else: message = '\n'.join(util.readfile(logfile).splitlines()) except IOError as inst: - raise util.Abort(_("can't read commit message '%s': %s") % + raise error.Abort(_("can't read commit message '%s': %s") % (logfile, inst.strerror)) return message @@ -387,9 +387,9 @@ def loglimit(opts): try: limit = int(limit) except ValueError: - raise util.Abort(_('limit must be a positive integer')) + raise error.Abort(_('limit must be a positive integer')) if limit <= 0: - raise util.Abort(_('limit must be positive')) + raise error.Abort(_('limit must be positive')) else: limit = None return limit @@ -437,7 +437,7 @@ def makefilename(repo, pat, node, desc=N i += 1 return ''.join(newname) except KeyError as inst: - raise util.Abort(_("invalid format spec '%%%s' in output filename") % + raise error.Abort(_("invalid format spec '%%%s' in output filename") % inst.args[0]) def makefileobj(repo, pat, node=None, desc=None, total=None, @@ -495,7 +495,7 @@ def openrevlog(repo, cmd, file_, opts): msg = _('cannot specify --changelog or --manifest or --dir ' 'without a repository') if msg: - raise util.Abort(msg) + raise error.Abort(msg) r = None if repo: @@ -503,7 +503,7 @@ def openrevlog(repo, cmd, file_, opts): r = repo.unfiltered().changelog elif dir: if 'treemanifest' not in repo.requirements: - raise util.Abort(_("--dir can only be used on repos with " + raise error.Abort(_("--dir can only be used on repos with " "treemanifest enabled")) dirlog = repo.dirlog(file_) if len(dirlog): @@ -518,7 +518,7 @@ def openrevlog(repo, cmd, file_, opts): if not file_: raise error.CommandError(cmd, _('invalid arguments')) if not os.path.isfile(file_): - raise util.Abort(_("revlog '%s' not found") % file_) + raise error.Abort(_("revlog '%s' not found") % file_) r = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), file_[:-2] + ".i") return r @@ -716,17 +716,17 @@ def copy(ui, repo, pats, opts, rename=Fa pats = scmutil.expandpats(pats) if not pats: - raise util.Abort(_('no source or destination specified')) + raise error.Abort(_('no source or destination specified')) if len(pats) == 1: - raise util.Abort(_('no destination specified')) + raise error.Abort(_('no destination specified')) dest = pats.pop() destdirexists = os.path.isdir(dest) and not os.path.islink(dest) if not destdirexists: if len(pats) > 1 or matchmod.patkind(pats[0]): - raise util.Abort(_('with multiple sources, destination must be an ' + raise error.Abort(_('with multiple sources, destination must be an ' 'existing directory')) if util.endswithsep(dest): - raise util.Abort(_('destination %s is not a directory') % dest) + raise error.Abort(_('destination %s is not a directory') % dest) tfn = targetpathfn if after: @@ -738,7 +738,7 @@ def copy(ui, repo, pats, opts, rename=Fa continue copylist.append((tfn(pat, dest, srcs), srcs)) if not copylist: - raise util.Abort(_('no files to copy')) + raise error.Abort(_('no files to copy')) errors = 0 for targetpath, srcs in copylist: @@ -786,7 +786,7 @@ def service(opts, parentfn=None, initfn= return not os.path.exists(lockpath) pid = util.rundetached(runargs, condfn) if pid < 0: - raise util.Abort(_('child process failed to start')) + raise error.Abort(_('child process failed to start')) writepid(pid) finally: try: @@ -908,7 +908,7 @@ def tryimportone(ui, repo, hunk, parents parents.append(repo[nullid]) if opts.get('exact'): if not nodeid or not p1: - raise util.Abort(_('not a Mercurial patch')) + raise error.Abort(_('not a Mercurial patch')) p1 = repo[p1] p2 = repo[p2 or nullid] elif p2: @@ -946,7 +946,7 @@ def tryimportone(ui, repo, hunk, parents files=files, eolmode=None, similarity=sim / 100.0) except patch.PatchError as e: if not partial: - raise util.Abort(str(e)) + raise error.Abort(str(e)) if partial: rejects = True @@ -993,7 +993,7 @@ def tryimportone(ui, repo, hunk, parents patch.patchrepo(ui, repo, p1, store, tmpname, strip, prefix, files, eolmode=None) except patch.PatchError as e: - raise util.Abort(str(e)) + raise error.Abort(str(e)) if opts.get('exact'): editor = None else: @@ -1012,7 +1012,7 @@ def tryimportone(ui, repo, hunk, parents # and branch bits ui.warn(_("warning: can't check exact import with --no-commit\n")) elif opts.get('exact') and hex(n) != nodeid: - raise util.Abort(_('patch is damaged or loses information')) + raise error.Abort(_('patch is damaged or loses information')) if n: # i18n: refers to a short changeset id msg = _('created %s') % short(n) @@ -1500,9 +1500,9 @@ class changeset_templater(changeset_prin self.t(self._parts['footer'], **props)) except KeyError as inst: msg = _("%s: no key named '%s'") - raise util.Abort(msg % (self.t.mapfile, inst.args[0])) + raise error.Abort(msg % (self.t.mapfile, inst.args[0])) except SyntaxError as inst: - raise util.Abort('%s: %s' % (self.t.mapfile, inst.args[0])) + raise error.Abort('%s: %s' % (self.t.mapfile, inst.args[0])) def gettemplate(ui, tmpl, style): """ @@ -1563,7 +1563,7 @@ def show_changeset(ui, repo, opts, buffe t = changeset_templater(ui, repo, matchfn, opts, tmpl, mapfile, buffered) except SyntaxError as inst: - raise util.Abort(inst.args[0]) + raise error.Abort(inst.args[0]) return t def showmarker(ui, marker): @@ -1603,7 +1603,7 @@ def finddate(ui, repo, date): (rev, util.datestr(results[rev]))) return str(rev) - raise util.Abort(_("revision matching date not found")) + raise error.Abort(_("revision matching date not found")) def increasingwindows(windowsize=8, sizelimit=512): while True: @@ -1658,7 +1658,7 @@ def walkfilerevs(repo, match, follow, re for filename in match.files(): if follow: if filename not in pctx: - raise util.Abort(_('cannot follow file not in parent ' + raise error.Abort(_('cannot follow file not in parent ' 'revision: "%s"') % filename) yield filename, pctx[filename].filenode() else: @@ -1673,7 +1673,7 @@ def walkfilerevs(repo, match, follow, re # A zero count may be a directory or deleted file, so # try to find matching entries on the slow path. if follow: - raise util.Abort( + raise error.Abort( _('cannot follow nonexistent file: "%s"') % file_) raise FileWalkError("Cannot walk via filelog") else: @@ -1804,7 +1804,7 @@ def walkchangerevs(repo, match, opts, pr # changed files if follow: - raise util.Abort(_('can only follow copies/renames for explicit ' + raise error.Abort(_('can only follow copies/renames for explicit ' 'filenames')) # The slow path checks files modified in every changeset. @@ -1976,14 +1976,14 @@ def _makelogrevset(repo, pats, opts, rev slowpath = True continue else: - raise util.Abort(_('cannot follow file not in parent ' + raise error.Abort(_('cannot follow file not in parent ' 'revision: "%s"') % f) filelog = repo.file(f) if not filelog: # A zero count may be a directory or deleted file, so # try to find matching entries on the slow path. if follow: - raise util.Abort( + raise error.Abort( _('cannot follow nonexistent file: "%s"') % f) slowpath = True @@ -2207,7 +2207,7 @@ def graphlog(ui, repo, *pats, **opts): def checkunsupportedgraphflags(pats, opts): for op in ["newest_first"]: if op in opts and opts[op]: - raise util.Abort(_("-G/--graph option is incompatible with --%s") + raise error.Abort(_("-G/--graph option is incompatible with --%s") % op.replace("_", "-")) def graphrevs(repo, nodes, opts): @@ -2485,7 +2485,7 @@ def commit(ui, repo, commitfunc, pats, o # that doesn't support addremove if opts.get('addremove'): if scmutil.addremove(repo, matcher, "", opts) != 0: - raise util.Abort( + raise error.Abort( _("failed to mark all new/missing files as added/removed")) return commitfunc(ui, repo, message, matcher, opts) @@ -2719,7 +2719,7 @@ def commitforceeditor(repo, ctx, subs, f if finishdesc: text = finishdesc(text) if not text.strip(): - raise util.Abort(_("empty commit message")) + raise error.Abort(_("empty commit message")) return text @@ -2730,7 +2730,7 @@ def buildcommittemplate(repo, ctx, subs, try: t = changeset_templater(ui, repo, None, {}, tmpl, mapfile, False) except SyntaxError as inst: - raise util.Abort(inst.args[0]) + raise error.Abort(inst.args[0]) for k, v in repo.ui.configitems('committemplate'): if k != 'changeset': @@ -3097,7 +3097,7 @@ def revert(ui, repo, ctx, parents, *pats try: wctx.sub(sub).revert(ctx.substate[sub], *pats, **opts) except KeyError: - raise util.Abort("subrepository '%s' does not exist in %s!" + raise error.Abort("subrepository '%s' does not exist in %s!" % (sub, short(ctx.node()))) finally: wlock.release() @@ -3168,7 +3168,7 @@ def _performrevert(repo, parents, ctx, a chunks = patch.reversehunks(chunks) except patch.PatchError as err: - raise util.Abort(_('error parsing patch: %s') % err) + raise error.Abort(_('error parsing patch: %s') % err) newlyaddedandmodifiedfiles = newandmodified(chunks, originalchunks) # Apply changes @@ -3181,7 +3181,7 @@ def _performrevert(repo, parents, ctx, a try: patch.internalpatch(repo.ui, repo, fp, 1, eolmode=None) except patch.PatchError as err: - raise util.Abort(str(err)) + raise error.Abort(str(err)) del fp else: for f in actions['revert'][0]: @@ -3302,7 +3302,7 @@ def checkunfinished(repo, commit=False): if commit and allowcommit: continue if repo.vfs.exists(f): - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) def clearunfinished(repo): '''Check for unfinished operations (as above), and clear the ones @@ -3310,7 +3310,7 @@ def clearunfinished(repo): ''' for f, clearable, allowcommit, msg, hint in unfinishedstates: if not clearable and repo.vfs.exists(f): - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) for f, clearable, allowcommit, msg, hint in unfinishedstates: if clearable and repo.vfs.exists(f): util.unlink(repo.join(f)) @@ -3349,7 +3349,7 @@ class dirstateguard(object): if not self._active: # already inactivated msg = (_("can't close already inactivated backup: %s") % self._filename) - raise util.Abort(msg) + raise error.Abort(msg) self._repo.vfs.unlink(self._filename) self._active = False @@ -3368,7 +3368,7 @@ class dirstateguard(object): if not self._active: # already inactivated msg = (_("can't release already inactivated backup: %s") % self._filename) - raise util.Abort(msg) + raise error.Abort(msg) self._abort() _bundlecompspecs = {'none': None, @@ -3402,7 +3402,7 @@ def parsebundletype(repo, spec): elif spec in _bundleversionspecs: version = spec else: - raise util.Abort(_('unknown bundle type specified with --type')) + raise error.Abort(_('unknown bundle type specified with --type')) if comp is None: comp = 'BZ' @@ -3410,7 +3410,7 @@ def parsebundletype(repo, spec): try: comp = _bundlecompspecs[comp] except KeyError: - raise util.Abort(_('unknown bundle type specified with --type')) + raise error.Abort(_('unknown bundle type specified with --type')) if version is None: version = '01' @@ -3420,6 +3420,6 @@ def parsebundletype(repo, spec): try: version = _bundleversionspecs[version] except KeyError: - raise util.Abort(_('unknown bundle type specified with --type')) + raise error.Abort(_('unknown bundle type specified with --type')) return version, comp diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -238,9 +238,9 @@ def addremove(ui, repo, *pats, **opts): try: sim = float(opts.get('similarity') or 100) except ValueError: - raise util.Abort(_('similarity must be a number')) + raise error.Abort(_('similarity must be a number')) if sim < 0 or sim > 100: - raise util.Abort(_('similarity must be between 0 and 100')) + raise error.Abort(_('similarity must be between 0 and 100')) matcher = scmutil.match(repo[None], pats, opts) return scmutil.addremove(repo, matcher, "", opts, similarity=sim / 100.0) @@ -276,7 +276,7 @@ def annotate(ui, repo, *pats, **opts): Returns 0 on success. """ if not pats: - raise util.Abort(_('at least one filename or pattern is required')) + raise error.Abort(_('at least one filename or pattern is required')) if opts.get('follow'): # --follow is deprecated and now just an alias for -f/--file @@ -333,7 +333,7 @@ def annotate(ui, repo, *pats, **opts): linenumber = opts.get('line_number') is not None if linenumber and (not opts.get('changeset')) and (not opts.get('number')): - raise util.Abort(_('at least one of -n/-c is required for -l')) + raise error.Abort(_('at least one of -n/-c is required for -l')) if fm: def makefunc(get, fmt): @@ -348,7 +348,7 @@ def annotate(ui, repo, *pats, **opts): if opts.get(op)) def bad(x, y): - raise util.Abort("%s: %s" % (x, y)) + raise error.Abort("%s: %s" % (x, y)) m = scmutil.match(ctx, pats, opts, badfn=bad) @@ -438,18 +438,18 @@ def archive(ui, repo, dest, **opts): ctx = scmutil.revsingle(repo, opts.get('rev')) if not ctx: - raise util.Abort(_('no working directory: please specify a revision')) + raise error.Abort(_('no working directory: please specify a revision')) node = ctx.node() dest = cmdutil.makefilename(repo, dest, node) if os.path.realpath(dest) == repo.root: - raise util.Abort(_('repository root cannot be destination')) + raise error.Abort(_('repository root cannot be destination')) kind = opts.get('type') or archival.guesskind(dest) or 'files' prefix = opts.get('prefix') if dest == '-': if kind == 'files': - raise util.Abort(_('cannot archive plain files to stdout')) + raise error.Abort(_('cannot archive plain files to stdout')) dest = cmdutil.makefileobj(repo, dest) if not prefix: prefix = os.path.basename(repo.root) + '-%h' @@ -504,13 +504,13 @@ def backout(ui, repo, node=None, rev=Non files. ''' if rev and node: - raise util.Abort(_("please specify just one revision")) + raise error.Abort(_("please specify just one revision")) if not rev: rev = node if not rev: - raise util.Abort(_("please specify a revision to backout")) + raise error.Abort(_("please specify a revision to backout")) date = opts.get('date') if date: @@ -522,22 +522,22 @@ def backout(ui, repo, node=None, rev=Non op1, op2 = repo.dirstate.parents() if not repo.changelog.isancestor(node, op1): - raise util.Abort(_('cannot backout change that is not an ancestor')) + raise error.Abort(_('cannot backout change that is not an ancestor')) p1, p2 = repo.changelog.parents(node) if p1 == nullid: - raise util.Abort(_('cannot backout a change with no parents')) + raise error.Abort(_('cannot backout a change with no parents')) if p2 != nullid: if not opts.get('parent'): - raise util.Abort(_('cannot backout a merge changeset')) + raise error.Abort(_('cannot backout a merge changeset')) p = repo.lookup(opts['parent']) if p not in (p1, p2): - raise util.Abort(_('%s is not a parent of %s') % + raise error.Abort(_('%s is not a parent of %s') % (short(p), short(node))) parent = p else: if opts.get('parent'): - raise util.Abort(_('cannot use --parent on non-merge changeset')) + raise error.Abort(_('cannot use --parent on non-merge changeset')) parent = p1 # the backout should appear on the same branch @@ -746,9 +746,9 @@ def bisect(ui, repo, rev=None, extra=Non if (good or bad or skip or reset) and interactive: return if not state['good']: - raise util.Abort(_('cannot bisect (no known good revisions)')) + raise error.Abort(_('cannot bisect (no known good revisions)')) else: - raise util.Abort(_('cannot bisect (no known bad revisions)')) + raise error.Abort(_('cannot bisect (no known bad revisions)')) return True # backward compatibility @@ -762,7 +762,7 @@ def bisect(ui, repo, rev=None, extra=Non else: reset = True elif extra or good + bad + skip + reset + extend + bool(command) > 1: - raise util.Abort(_('incompatible arguments')) + raise error.Abort(_('incompatible arguments')) cmdutil.checkunfinished(repo) @@ -780,12 +780,12 @@ def bisect(ui, repo, rev=None, extra=Non try: node = state['current'][0] except LookupError: - raise util.Abort(_('current bisect revision is unknown - ' + raise error.Abort(_('current bisect revision is unknown - ' 'start a new bisect to fix')) else: node, p2 = repo.dirstate.parents() if p2 != nullid: - raise util.Abort(_('current bisect revision is a merge')) + raise error.Abort(_('current bisect revision is a merge')) try: while changesets: # update state @@ -798,9 +798,9 @@ def bisect(ui, repo, rev=None, extra=Non transition = "good" # status < 0 means process was killed elif status == 127: - raise util.Abort(_("failed to execute %s") % command) + raise error.Abort(_("failed to execute %s") % command) elif status < 0: - raise util.Abort(_("%s killed") % command) + raise error.Abort(_("%s killed") % command) else: transition = "bad" ctx = scmutil.revsingle(repo, rev, node) @@ -854,7 +854,7 @@ def bisect(ui, repo, rev=None, extra=Non return cmdutil.bailifchanged(repo) return hg.clean(repo, extendnode.node()) - raise util.Abort(_("nothing to extend")) + raise error.Abort(_("nothing to extend")) if changesets == 0: print_result(nodes, good) @@ -937,7 +937,7 @@ def bookmark(ui, repo, *names, **opts): def checkformat(mark): mark = mark.strip() if not mark: - raise util.Abort(_("bookmark names cannot consist entirely of " + raise error.Abort(_("bookmark names cannot consist entirely of " "whitespace")) scmutil.checknewlabel(repo, mark, 'bookmark') return mark @@ -967,21 +967,21 @@ def bookmark(ui, repo, *names, **opts): ui.status(_("moving bookmark '%s' forward from %s\n") % (mark, short(bmctx.node()))) return - raise util.Abort(_("bookmark '%s' already exists " + raise error.Abort(_("bookmark '%s' already exists " "(use -f to force)") % mark) if ((mark in repo.branchmap() or mark == repo.dirstate.branch()) and not force): - raise util.Abort( + raise error.Abort( _("a bookmark cannot have the name of an existing branch")) if delete and rename: - raise util.Abort(_("--delete and --rename are incompatible")) + raise error.Abort(_("--delete and --rename are incompatible")) if delete and rev: - raise util.Abort(_("--rev is incompatible with --delete")) + raise error.Abort(_("--rev is incompatible with --delete")) if rename and rev: - raise util.Abort(_("--rev is incompatible with --rename")) + raise error.Abort(_("--rev is incompatible with --rename")) if not names and (delete or rev): - raise util.Abort(_("bookmark name required")) + raise error.Abort(_("bookmark name required")) if delete or rename or names or inactive: wlock = lock = tr = None @@ -994,7 +994,7 @@ def bookmark(ui, repo, *names, **opts): tr = repo.transaction('bookmark') for mark in names: if mark not in marks: - raise util.Abort(_("bookmark '%s' does not exist") % + raise error.Abort(_("bookmark '%s' does not exist") % mark) if mark == repo._activebookmark: bookmarks.deactivate(repo) @@ -1003,12 +1003,13 @@ def bookmark(ui, repo, *names, **opts): elif rename: tr = repo.transaction('bookmark') if not names: - raise util.Abort(_("new bookmark name required")) + raise error.Abort(_("new bookmark name required")) elif len(names) > 1: - raise util.Abort(_("only one new bookmark name allowed")) + raise error.Abort(_("only one new bookmark name allowed")) mark = checkformat(names[0]) if rename not in marks: - raise util.Abort(_("bookmark '%s' does not exist") % rename) + raise error.Abort(_("bookmark '%s' does not exist") + % rename) checkconflict(repo, mark, cur, force) marks[mark] = marks[rename] if repo._activebookmark == rename and not inactive: @@ -1119,7 +1120,7 @@ def branch(ui, repo, label=None, **opts) elif label: if not opts.get('force') and label in repo.branchmap(): if label not in [p.branch() for p in repo.parents()]: - raise util.Abort(_('a branch of the same name already' + raise error.Abort(_('a branch of the same name already' ' exists'), # i18n: "it" refers to an existing branch hint=_("use 'hg update' to switch to it")) @@ -1251,7 +1252,7 @@ def bundle(ui, repo, fname, dest=None, * bundlecaps = None if base: if dest: - raise util.Abort(_("--base is incompatible with specifying " + raise error.Abort(_("--base is incompatible with specifying " "a destination")) common = [repo.lookup(rev) for rev in base] heads = revs and map(repo.lookup, revs) or revs @@ -1429,7 +1430,7 @@ def clone(ui, source, dest=None, **opts) Returns 0 on success. """ if opts.get('noupdate') and opts.get('updaterev'): - raise util.Abort(_("cannot specify both --noupdate and --updaterev")) + raise error.Abort(_("cannot specify both --noupdate and --updaterev")) r = hg.clone(ui, opts, source, dest, pull=opts.get('pull'), @@ -1501,7 +1502,7 @@ def commit(ui, repo, *pats, **opts): if opts.get('subrepos'): if opts.get('amend'): - raise util.Abort(_('cannot amend with --subrepos')) + raise error.Abort(_('cannot amend with --subrepos')) # Let --subrepos on the command line override config setting. ui.setconfig('ui', 'commitsubrepos', True, 'commit') @@ -1515,24 +1516,24 @@ def commit(ui, repo, *pats, **opts): extra['close'] = 1 if not bheads: - raise util.Abort(_('can only close branch heads')) + raise error.Abort(_('can only close branch heads')) elif opts.get('amend'): if repo.parents()[0].p1().branch() != branch and \ repo.parents()[0].p2().branch() != branch: - raise util.Abort(_('can only close branch heads')) + raise error.Abort(_('can only close branch heads')) if opts.get('amend'): if ui.configbool('ui', 'commitsubrepos'): - raise util.Abort(_('cannot amend with ui.commitsubrepos enabled')) + raise error.Abort(_('cannot amend with ui.commitsubrepos enabled')) old = repo['.'] if not old.mutable(): - raise util.Abort(_('cannot amend public changesets')) + raise error.Abort(_('cannot amend public changesets')) if len(repo[None].parents()) > 1: - raise util.Abort(_('cannot amend while merging')) + raise error.Abort(_('cannot amend while merging')) allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) if not allowunstable and old.children(): - raise util.Abort(_('cannot amend changeset with children')) + raise error.Abort(_('cannot amend changeset with children')) # commitfunc is used only for temporary amend commit by cmdutil.amend def commitfunc(ui, repo, message, match, opts): @@ -1614,11 +1615,11 @@ def config(ui, repo, *values, **opts): if opts.get('edit') or opts.get('local') or opts.get('global'): if opts.get('local') and opts.get('global'): - raise util.Abort(_("can't use --local and --global together")) + raise error.Abort(_("can't use --local and --global together")) if opts.get('local'): if not repo: - raise util.Abort(_("can't use --local outside a repository")) + raise error.Abort(_("can't use --local outside a repository")) paths = [repo.join('hgrc')] elif opts.get('global'): paths = scmutil.systemrcpath() @@ -1643,7 +1644,7 @@ def config(ui, repo, *values, **opts): editor = ui.geteditor() ui.system("%s \"%s\"" % (editor, f), - onerr=util.Abort, errprefix=_("edit failed")) + onerr=error.Abort, errprefix=_("edit failed")) return for f in scmutil.rcpath(): @@ -1653,7 +1654,7 @@ def config(ui, repo, *values, **opts): sections = [v for v in values if '.' not in v] items = [v for v in values if '.' in v] if len(items) > 1 or items and sections: - raise util.Abort(_('only one config item permitted')) + raise error.Abort(_('only one config item permitted')) matched = False for section, name, value in ui.walkconfig(untrusted=untrusted): value = str(value).replace('\n', '\\n') @@ -1715,13 +1716,13 @@ def debugancestor(ui, repo, *args): lookup = r.lookup elif len(args) == 2: if not repo: - raise util.Abort(_("there is no Mercurial repository here " + raise error.Abort(_("there is no Mercurial repository here " "(.hg not found)")) rev1, rev2 = args r = repo.changelog lookup = repo.lookup else: - raise util.Abort(_('either two or three arguments required')) + raise error.Abort(_('either two or three arguments required')) a = r.ancestor(lookup(rev1), lookup(rev2)) ui.write("%d:%s\n" % (r.rev(a), hex(a))) @@ -1772,7 +1773,7 @@ def debugbuilddag(ui, repo, text=None, cl = repo.changelog if len(cl) > 0: - raise util.Abort(_('repository is not empty')) + raise error.Abort(_('repository is not empty')) # determine number of revs in DAG total = 0 @@ -1920,7 +1921,7 @@ def debugbundle(ui, bundlepath, all=None showchunks(fname) else: if isinstance(gen, bundle2.unbundle20): - raise util.Abort(_('use debugbundle2 for this file')) + raise error.Abort(_('use debugbundle2 for this file')) chunkdata = gen.changelogheader() chain = None while True: @@ -1936,7 +1937,7 @@ def debugbundle(ui, bundlepath, all=None def _debugbundle2(ui, gen, **opts): """lists the contents of a bundle2""" if not isinstance(gen, bundle2.unbundle20): - raise util.Abort(_('not a bundle2 file')) + raise error.Abort(_('not a bundle2 file')) ui.write(('Stream params: %s\n' % repr(gen.params))) for part in gen.iterparts(): ui.write('%s -- %r\n' % (part.type, repr(part.params))) @@ -1979,7 +1980,7 @@ def debugcheckstate(ui, repo): errors += 1 if errors: error = _(".hg/dirstate inconsistent with current parent's manifest") - raise util.Abort(error) + raise error.Abort(error) @command('debugcommands', [], _('[COMMAND]'), norepo=True) def debugcommands(ui, cmd='', *args): @@ -2067,7 +2068,7 @@ def debugdag(ui, repo, file_=None, *revs for l in ls: yield 'l', (r, l) else: - raise util.Abort(_('need repo for changelog dag')) + raise error.Abort(_('need repo for changelog dag')) for line in dagparser.dagtextlines(events(), addspaces=spaces, @@ -2094,7 +2095,7 @@ def debugdata(ui, repo, file_, rev=None, try: ui.write(r.revision(r.lookup(rev))) except KeyError: - raise util.Abort(_('invalid revision identifier %s') % rev) + raise error.Abort(_('invalid revision identifier %s') % rev) @command('debugdate', [('e', 'extended', None, _('try extended date formats'))], @@ -2131,7 +2132,7 @@ def debugdiscovery(ui, repo, remoteurl=" def doit(localheads, remoteheads, remote=remote): if opts.get('old'): if localheads: - raise util.Abort('cannot use localheads with old style ' + raise error.Abort('cannot use localheads with old style ' 'discovery') if not util.safehasattr(remote, 'branches'): # enable in-client legacy support @@ -2259,7 +2260,7 @@ def debuggetbundle(ui, repopath, bundlep """ repo = hg.peer(ui, opts, repopath) if not repo.capable('getbundle'): - raise util.Abort("getbundle() not supported by target repository") + raise error.Abort("getbundle() not supported by target repository") args = {} if common: args['common'] = [bin(s) for s in common] @@ -2276,7 +2277,7 @@ def debuggetbundle(ui, repopath, bundlep 'bundle2': 'HG20'} bundletype = btypes.get(bundletype) if bundletype not in changegroup.bundletypes: - raise util.Abort(_('unknown bundle type specified with --type')) + raise error.Abort(_('unknown bundle type specified with --type')) changegroup.writebundle(ui, bundle, bundlepath, bundletype) @command('debugignore', [], '') @@ -2287,7 +2288,7 @@ def debugignore(ui, repo, *values, **opt if includepat is not None: ui.write("%s\n" % includepat) else: - raise util.Abort(_("no ignore patterns found")) + raise error.Abort(_("no ignore patterns found")) @command('debugindex', [('c', 'changelog', False, _('open changelog')), @@ -2301,7 +2302,7 @@ def debugindex(ui, repo, file_=None, **o r = cmdutil.openrevlog(repo, 'debugindex', file_, opts) format = opts.get('format', 0) if format not in (0, 1): - raise util.Abort(_("unknown format %d") % format) + raise error.Abort(_("unknown format %d") % format) generaldelta = r.version & revlog.REVLOGGENERALDELTA if generaldelta: @@ -2387,7 +2388,7 @@ def debuginstall(ui): ui.status(_("checking encoding (%s)...\n") % encoding.encoding) try: encoding.fromlocal("test") - except util.Abort as inst: + except error.Abort as inst: ui.write(" %s\n" % inst) ui.write(_(" (check that your locale is properly set)\n")) problems += 1 @@ -2453,7 +2454,7 @@ def debuginstall(ui): ui.status(_("checking username...\n")) try: ui.username() - except util.Abort as e: + except error.Abort as e: ui.write(" %s\n" % e) ui.write(_(" (specify a username in your configuration file)\n")) problems += 1 @@ -2475,7 +2476,7 @@ def debugknown(ui, repopath, *ids, **opt """ repo = hg.peer(ui, opts, repopath) if not repo.capable('known'): - raise util.Abort("known() not supported by target repository") + raise error.Abort("known() not supported by target repository") flags = repo.known([bin(s) for s in ids]) ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags]))) @@ -2663,12 +2664,12 @@ def debugobsolete(ui, repo, precursor=No raise TypeError() return n except TypeError: - raise util.Abort('changeset references must be full hexadecimal ' + raise error.Abort('changeset references must be full hexadecimal ' 'node identifiers') if precursor is not None: if opts['rev']: - raise util.Abort('cannot select revision when creating marker') + raise error.Abort('cannot select revision when creating marker') metadata = {} metadata['user'] = opts['user'] or ui.username() succs = tuple(parsenodeid(succ) for succ in successors) @@ -2685,7 +2686,7 @@ def debugobsolete(ui, repo, precursor=No parents = None if opts['record_parents']: if prec not in repo.unfiltered(): - raise util.Abort('cannot used --record-parents on ' + raise error.Abort('cannot used --record-parents on ' 'unknown changesets') parents = repo.unfiltered()[prec].parents() parents = tuple(p.node() for p in parents) @@ -2694,7 +2695,7 @@ def debugobsolete(ui, repo, precursor=No metadata=metadata) tr.close() except ValueError as exc: - raise util.Abort(_('bad obsmarker input: %s') % exc) + raise error.Abort(_('bad obsmarker input: %s') % exc) finally: tr.release() finally: @@ -3319,7 +3320,7 @@ def diff(ui, repo, *pats, **opts): if revs and change: msg = _('cannot specify --rev and --change at the same time') - raise util.Abort(msg) + raise error.Abort(msg) elif change: node2 = scmutil.revsingle(repo, change, None).node() node1 = repo[node2].p1().node() @@ -3407,7 +3408,7 @@ def export(ui, repo, *changesets, **opts changesets = ['.'] revs = scmutil.revrange(repo, changesets) if not revs: - raise util.Abort(_("export requires at least one changeset")) + raise error.Abort(_("export requires at least one changeset")) if len(revs) > 1: ui.note(_('exporting patches:\n')) else: @@ -3511,7 +3512,7 @@ def forget(ui, repo, *pats, **opts): """ if not pats: - raise util.Abort(_('no files specified')) + raise error.Abort(_('no files specified')) m = scmutil.match(repo[None], pats, opts) rejected = cmdutil.forget(ui, repo, m, prefix="", explicitonly=False)[0] @@ -3602,7 +3603,7 @@ def graft(ui, repo, *revs, **opts): if opts['continue']: cont = True if revs: - raise util.Abort(_("can't specify --continue and revisions")) + raise error.Abort(_("can't specify --continue and revisions")) # read in unfinished revisions try: nodes = repo.vfs.read('graftstate').splitlines() @@ -3610,12 +3611,12 @@ def graft(ui, repo, *revs, **opts): except IOError as inst: if inst.errno != errno.ENOENT: raise - raise util.Abort(_("no graft state found, can't continue")) + raise error.Abort(_("no graft state found, can't continue")) else: cmdutil.checkunfinished(repo) cmdutil.bailifchanged(repo) if not revs: - raise util.Abort(_('no revisions specified')) + raise error.Abort(_('no revisions specified')) revs = scmutil.revrange(repo, revs) skipped = set() @@ -3738,7 +3739,7 @@ def graft(ui, repo, *revs, **opts): # write out state for --continue nodelines = [repo[rev].hex() + "\n" for rev in revs[pos:]] repo.vfs.write('graftstate', ''.join(nodelines)) - raise util.Abort( + raise error.Abort( _("unresolved conflicts, can't continue"), hint=_('use hg resolve and hg graft --continue')) else: @@ -4101,7 +4102,7 @@ def help_(ui, name=None, **opts): # to look for, or we could have simply failed to found "foo.bar" # because bar isn't a section of foo if section and not (formatted and name): - raise util.Abort(_("help section not found")) + raise error.Abort(_("help section not found")) if 'verbose' in pruned: keep.append('omitted') @@ -4158,7 +4159,7 @@ def identify(ui, repo, source=None, rev= """ if not repo and not source: - raise util.Abort(_("there is no Mercurial repository here " + raise error.Abort(_("there is no Mercurial repository here " "(.hg not found)")) if ui.debugflag: @@ -4177,7 +4178,7 @@ def identify(ui, repo, source=None, rev= if not repo: if num or branch or tags: - raise util.Abort( + raise error.Abort( _("can't query remote revision number, branch, or tags")) if not rev and revs: rev = revs[0] @@ -4370,7 +4371,7 @@ def import_(ui, repo, patch1=None, *patc """ if not patch1: - raise util.Abort(_('need at least one patch to import')) + raise error.Abort(_('need at least one patch to import')) patches = (patch1,) + patches @@ -4380,19 +4381,19 @@ def import_(ui, repo, patch1=None, *patc update = not opts.get('bypass') if not update and opts.get('no_commit'): - raise util.Abort(_('cannot use --no-commit with --bypass')) + raise error.Abort(_('cannot use --no-commit with --bypass')) try: sim = float(opts.get('similarity') or 0) except ValueError: - raise util.Abort(_('similarity must be a number')) + raise error.Abort(_('similarity must be a number')) if sim < 0 or sim > 100: - raise util.Abort(_('similarity must be between 0 and 100')) + raise error.Abort(_('similarity must be between 0 and 100')) if sim and not update: - raise util.Abort(_('cannot use --similarity with --bypass')) + raise error.Abort(_('cannot use --similarity with --bypass')) if opts.get('exact') and opts.get('edit'): - raise util.Abort(_('cannot use --exact with --edit')) + raise error.Abort(_('cannot use --exact with --edit')) if opts.get('exact') and opts.get('prefix'): - raise util.Abort(_('cannot use --exact with --prefix')) + raise error.Abort(_('cannot use --exact with --prefix')) if update: cmdutil.checkunfinished(repo) @@ -4444,7 +4445,7 @@ def import_(ui, repo, patch1=None, *patc break if not haspatch: - raise util.Abort(_('%s: no diffs found') % patchurl) + raise error.Abort(_('%s: no diffs found') % patchurl) if tr: tr.close() @@ -4540,7 +4541,7 @@ def incoming(ui, repo, source="default", return 0 if opts.get('bundle') and opts.get('subrepos'): - raise util.Abort(_('cannot combine --bundle and --subrepos')) + raise error.Abort(_('cannot combine --bundle and --subrepos')) if opts.get('bookmarks'): source, branches = hg.parseurl(ui.expandpath(source), @@ -4806,7 +4807,7 @@ def manifest(ui, repo, node=None, rev=No if opts.get('all'): if rev or node: - raise util.Abort(_("can't specify a revision with --all")) + raise error.Abort(_("can't specify a revision with --all")) res = [] prefix = "data/" @@ -4827,7 +4828,7 @@ def manifest(ui, repo, node=None, rev=No return if rev and node: - raise util.Abort(_("please specify just one revision")) + raise error.Abort(_("please specify just one revision")) if not node: node = rev @@ -4882,7 +4883,7 @@ def merge(ui, repo, node=None, **opts): """ if opts.get('rev') and node: - raise util.Abort(_("please specify just one revision")) + raise error.Abort(_("please specify just one revision")) if not node: node = opts.get('rev') @@ -5012,7 +5013,7 @@ def parents(ui, repo, file_=None, **opts if file_: m = scmutil.match(ctx, (file_,), opts) if m.anypats() or len(m.files()) != 1: - raise util.Abort(_('can only specify an explicit filename')) + raise error.Abort(_('can only specify an explicit filename')) file_ = m.files()[0] filenodes = [] for cp in ctx.parents(): @@ -5023,7 +5024,7 @@ def parents(ui, repo, file_=None, **opts except error.LookupError: pass if not filenodes: - raise util.Abort(_("'%s' not found in manifest!") % file_) + raise error.Abort(_("'%s' not found in manifest!") % file_) p = [] for fn in filenodes: fctx = repo.filectx(file_, fileid=fn) @@ -5112,7 +5113,7 @@ def phase(ui, repo, *revs, **opts): for idx, name in enumerate(phases.phasenames): if opts[name]: if targetphase is not None: - raise util.Abort(_('only one phase can be specified')) + raise error.Abort(_('only one phase can be specified')) targetphase = idx # look for specified revision @@ -5139,7 +5140,7 @@ def phase(ui, repo, *revs, **opts): tr = repo.transaction("phase") # set phase if not revs: - raise util.Abort(_('empty revision set')) + raise error.Abort(_('empty revision set')) nodes = [repo[r].node() for r in revs] # moving revision from public to draft may hide them # We have to check result on an unfiltered repository @@ -5181,7 +5182,7 @@ def postincoming(ui, repo, modheads, opt checkout, movemarkfrom = bookmarks.calculateupdate(ui, repo, checkout) try: ret = hg.update(repo, checkout) - except util.Abort as inst: + except error.Abort as inst: ui.warn(_("not updating: %s\n") % str(inst)) if inst.hint: ui.warn(_("(%s)\n") % inst.hint) @@ -5252,7 +5253,7 @@ def pull(ui, repo, source="default", **o pullopargs['remotebookmarks'] = remotebookmarks for b in opts['bookmark']: if b not in remotebookmarks: - raise util.Abort(_('remote bookmark %s not found!') % b) + raise error.Abort(_('remote bookmark %s not found!') % b) revs.append(remotebookmarks[b]) if revs: @@ -5270,7 +5271,7 @@ def pull(ui, repo, source="default", **o except error.CapabilityError: err = _("other repository doesn't support revision lookup, " "so a rev cannot be specified.") - raise util.Abort(err) + raise error.Abort(err) modheads = exchange.pull(repo, other, heads=revs, force=opts.get('force'), @@ -5350,7 +5351,7 @@ def push(ui, repo, dest=None, **opts): path = ui.paths.getpath(dest, default='default') if not path: - raise util.Abort(_('default repository not configured!'), + raise error.Abort(_('default repository not configured!'), hint=_('see the "path" section in "hg help config"')) dest, branches = path.pushloc, (path.branch, opts.get('branch') or []) ui.status(_('pushing to %s\n') % util.hidepassword(dest)) @@ -5360,7 +5361,7 @@ def push(ui, repo, dest=None, **opts): if revs: revs = [repo.lookup(r) for r in scmutil.revrange(repo, revs)] if not revs: - raise util.Abort(_("specified revisions evaluate to an empty set"), + raise error.Abort(_("specified revisions evaluate to an empty set"), hint=_("use different revision arguments")) repo._subtoppath = dest @@ -5450,7 +5451,7 @@ def remove(ui, repo, *pats, **opts): after, force = opts.get('after'), opts.get('force') if not pats and not after: - raise util.Abort(_('no files specified')) + raise error.Abort(_('no files specified')) m = scmutil.match(repo[None], pats, opts) subrepos = opts.get('subrepos') @@ -5534,11 +5535,11 @@ def resolve(ui, repo, *pats, **opts): [opts.get(o) for o in 'all mark unmark list no_status'.split()] if (show and (mark or unmark)) or (mark and unmark): - raise util.Abort(_("too many options specified")) + raise error.Abort(_("too many options specified")) if pats and all: - raise util.Abort(_("can't specify --all and patterns")) + raise error.Abort(_("can't specify --all and patterns")) if not (all or pats or show or mark or unmark): - raise util.Abort(_('no files or directories specified'), + raise error.Abort(_('no files or directories specified'), hint=('use --all to re-merge all unresolved files')) if show: @@ -5560,7 +5561,7 @@ def resolve(ui, repo, *pats, **opts): ms = mergemod.mergestate(repo) if not (ms.active() or repo.dirstate.p2() != nullid): - raise util.Abort( + raise error.Abort( _('resolve command not applicable when not merging')) m = scmutil.match(repo[None], pats, opts) @@ -5656,13 +5657,13 @@ def revert(ui, repo, *pats, **opts): if opts.get("date"): if opts.get("rev"): - raise util.Abort(_("you can't specify a revision and a date")) + raise error.Abort(_("you can't specify a revision and a date")) opts["rev"] = cmdutil.finddate(ui, repo, opts["date"]) parent, p2 = repo.dirstate.parents() if not opts.get('rev') and p2 != nullid: # revert after merge is a trap for new users (issue2915) - raise util.Abort(_('uncommitted merge with no revision specified'), + raise error.Abort(_('uncommitted merge with no revision specified'), hint=_('use "hg update" or see "hg help revert"')) ctx = scmutil.revsingle(repo, opts.get('rev')) @@ -5673,7 +5674,7 @@ def revert(ui, repo, *pats, **opts): if p2 != nullid: hint = _("uncommitted merge, use --all to discard all changes," " or 'hg update -C .' to abort the merge") - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) dirty = any(repo.status()) node = ctx.node() if node != parent: @@ -5687,7 +5688,7 @@ def revert(ui, repo, *pats, **opts): hint = _("uncommitted changes, use --all to discard all changes") else: hint = _("use --all to revert all files") - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) return cmdutil.revert(ui, repo, ctx, (parent, p2), *pats, **opts) @@ -5799,7 +5800,7 @@ def serve(ui, repo, **opts): """ if opts["stdio"] and opts["cmdserver"]: - raise util.Abort(_("cannot use --stdio with --cmdserver")) + raise error.Abort(_("cannot use --stdio with --cmdserver")) if opts["stdio"]: if repo is None: @@ -5968,7 +5969,7 @@ def status(ui, repo, *pats, **opts): if revs and change: msg = _('cannot specify --rev and --change at the same time') - raise util.Abort(msg) + raise error.Abort(msg) elif change: node2 = scmutil.revsingle(repo, change, None).node() node1 = repo[node2].p1().node() @@ -6320,14 +6321,14 @@ def tag(ui, repo, name1, *names, **opts) rev_ = "." names = [t.strip() for t in (name1,) + names] if len(names) != len(set(names)): - raise util.Abort(_('tag names must be unique')) + raise error.Abort(_('tag names must be unique')) for n in names: scmutil.checknewlabel(repo, n, 'tag') if not n: - raise util.Abort(_('tag names cannot consist entirely of ' + raise error.Abort(_('tag names cannot consist entirely of ' 'whitespace')) if opts.get('rev') and opts.get('remove'): - raise util.Abort(_("--rev and --remove are incompatible")) + raise error.Abort(_("--rev and --remove are incompatible")) if opts.get('rev'): rev_ = opts['rev'] message = opts.get('message') @@ -6339,12 +6340,12 @@ def tag(ui, repo, name1, *names, **opts) for n in names: if not repo.tagtype(n): - raise util.Abort(_("tag '%s' does not exist") % n) + raise error.Abort(_("tag '%s' does not exist") % n) if repo.tagtype(n) != expectedtype: if expectedtype == 'global': - raise util.Abort(_("tag '%s' is not a global tag") % n) + raise error.Abort(_("tag '%s' is not a global tag") % n) else: - raise util.Abort(_("tag '%s' is not a local tag") % n) + raise error.Abort(_("tag '%s' is not a local tag") % n) rev_ = 'null' if not message: # we don't translate commit messages @@ -6352,15 +6353,15 @@ def tag(ui, repo, name1, *names, **opts) elif not opts.get('force'): for n in names: if n in repo.tags(): - raise util.Abort(_("tag '%s' already exists " + raise error.Abort(_("tag '%s' already exists " "(use -f to force)") % n) if not opts.get('local'): p1, p2 = repo.dirstate.parents() if p2 != nullid: - raise util.Abort(_('uncommitted merge')) + raise error.Abort(_('uncommitted merge')) bheads = repo.branchheads() if not opts.get('force') and bheads and p1 not in bheads: - raise util.Abort(_('not at a branch head (use -f to force)')) + raise error.Abort(_('not at a branch head (use -f to force)')) r = scmutil.revsingle(repo, rev_).node() if not message: @@ -6381,7 +6382,7 @@ def tag(ui, repo, name1, *names, **opts) # don't allow tagging the null rev if (not opts.get('remove') and scmutil.revsingle(repo, rev_).rev() == nullrev): - raise util.Abort(_("cannot tag null revision")) + raise error.Abort(_("cannot tag null revision")) repo.tag(names, r, message, opts.get('local'), opts.get('user'), date, editor=editor) @@ -6470,7 +6471,7 @@ def unbundle(ui, repo, fname1, *fnames, op = bundle2.processbundle(repo, gen, lambda: tr) tr.close() except error.BundleUnknownFeatureError as exc: - raise util.Abort(_('%s: unknown bundle feature, %s') + raise error.Abort(_('%s: unknown bundle feature, %s') % (fname, exc), hint=_("see https://mercurial-scm.org/" "wiki/BundleFeature for more " @@ -6549,7 +6550,7 @@ def update(ui, repo, node=None, rev=None Returns 0 on success, 1 if there are unresolved files. """ if rev and node: - raise util.Abort(_("please specify just one revision")) + raise error.Abort(_("please specify just one revision")) if rev is None or rev == '': rev = node @@ -6560,7 +6561,7 @@ def update(ui, repo, node=None, rev=None if date: if rev is not None: - raise util.Abort(_("you can't specify a revision and a date")) + raise error.Abort(_("you can't specify a revision and a date")) rev = cmdutil.finddate(ui, repo, date) # with no argument, we also move the active bookmark, if any @@ -6571,7 +6572,8 @@ def update(ui, repo, node=None, rev=None rev = scmutil.revsingle(repo, rev, rev).rev() if check and clean: - raise util.Abort(_("cannot specify both -c/--check and -C/--clean")) + raise error.Abort(_("cannot specify both -c/--check and -C/--clean") + ) if check: cmdutil.bailifchanged(repo, merge=False) diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py --- a/mercurial/commandserver.py +++ b/mercurial/commandserver.py @@ -8,7 +8,7 @@ from i18n import _ import struct import sys, os, errno, traceback, SocketServer -import dispatch, encoding, util +import dispatch, encoding, util, error logfile = None @@ -222,7 +222,7 @@ class server(object): else: # clients are expected to check what commands are supported by # looking at the servers capabilities - raise util.Abort(_('unknown command %s') % cmd) + raise error.Abort(_('unknown command %s') % cmd) return cmd != '' @@ -301,7 +301,7 @@ class _requesthandler(SocketServer.Strea sv.serve() # handle exceptions that may be raised by command server. most of # known exceptions are caught by dispatch. - except util.Abort as inst: + except error.Abort as inst: ui.warn(_('abort: %s\n') % inst) except IOError as inst: if inst.errno != errno.EPIPE: @@ -323,9 +323,9 @@ class unixservice(object): self.repo = repo self.address = opts['address'] if not util.safehasattr(SocketServer, 'UnixStreamServer'): - raise util.Abort(_('unsupported platform')) + raise error.Abort(_('unsupported platform')) if not self.address: - raise util.Abort(_('no socket path specified with --address')) + raise error.Abort(_('no socket path specified with --address')) def init(self): class cls(SocketServer.ForkingMixIn, SocketServer.UnixStreamServer): @@ -351,4 +351,4 @@ def createservice(ui, repo, opts): try: return _servicemap[mode](ui, repo, opts) except KeyError: - raise util.Abort(_('unknown mode %s') % mode) + raise error.Abort(_('unknown mode %s') % mode) diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1060,7 +1060,7 @@ class filectx(basefilectx): except error.CensoredNodeError: if self._repo.ui.config("censor", "policy", "abort") == "ignore": return "" - raise util.Abort(_("censored node: %s") % short(self._filenode), + raise error.Abort(_("censored node: %s") % short(self._filenode), hint=_("set censor.policy to ignore errors")) def size(self): @@ -1120,7 +1120,7 @@ class committablectx(basectx): try: branch = encoding.fromlocal(self._repo.dirstate.branch()) except UnicodeDecodeError: - raise util.Abort(_('branch name not in UTF-8!')) + raise error.Abort(_('branch name not in UTF-8!')) self._extra['branch'] = branch if self._extra['branch'] == '': self._extra['branch'] = 'default' diff --git a/mercurial/crecord.py b/mercurial/crecord.py --- a/mercurial/crecord.py +++ b/mercurial/crecord.py @@ -22,8 +22,8 @@ import tempfile from .i18n import _ from . import ( encoding, + error, patch as patchmod, - util, ) # This is required for ncurses to display non-ASCII characters in default user @@ -47,7 +47,7 @@ try: curses except NameError: if os.name != 'nt': # Temporary hack to get running on Windows again - raise util.Abort( + raise error.Abort( _('the python curses/wcurses module is not available/installed')) _origstdout = sys.__stdout__ # used by gethw() @@ -498,7 +498,7 @@ def chunkselector(ui, headerlist): f = signal.getsignal(signal.SIGTSTP) curses.wrapper(chunkselector.main) if chunkselector.initerr is not None: - raise util.Abort(chunkselector.initerr) + raise error.Abort(chunkselector.initerr) # ncurses does not restore signal handler for SIGTSTP signal.signal(signal.SIGTSTP, f) @@ -1566,7 +1566,7 @@ are you sure you want to review/edit and elif keypressed in ["H", "KEY_SLEFT"]: self.leftarrowshiftevent() elif keypressed in ["q"]: - raise util.Abort(_('user quit')) + raise error.Abort(_('user quit')) elif keypressed in ["c"]: if self.confirmcommit(): return True diff --git a/mercurial/dagparser.py b/mercurial/dagparser.py --- a/mercurial/dagparser.py +++ b/mercurial/dagparser.py @@ -11,7 +11,7 @@ import re import string from .i18n import _ -from . import util +from . import error def parsedag(desc): '''parses a DAG from a concise textual description; generates events @@ -269,7 +269,7 @@ def parsedag(desc): s += c i += 1 c = nextch() - raise util.Abort(_('invalid character in dag description: ' + raise error.Abort(_('invalid character in dag description: ' '%s...') % s) def dagtextlines(events, @@ -298,13 +298,13 @@ def dagtextlines(events, # sanity check if r != wantr: - raise util.Abort(_("expected id %i, got %i") % (wantr, r)) + raise error.Abort(_("expected id %i, got %i") % (wantr, r)) if not ps: ps = [-1] else: for p in ps: if p >= r: - raise util.Abort(_("parent id %i is larger than " + raise error.Abort(_("parent id %i is larger than " "current id %i") % (p, r)) wantr += 1 @@ -366,7 +366,7 @@ def dagtextlines(events, yield '#' + data yield '\n' else: - raise util.Abort(_("invalid event type in dag: %s") + raise error.Abort(_("invalid event type in dag: %s") % str((type, data))) if run: yield '+' + str(run) diff --git a/mercurial/destutil.py b/mercurial/destutil.py --- a/mercurial/destutil.py +++ b/mercurial/destutil.py @@ -8,7 +8,6 @@ from .i18n import _ from . import ( error, - util, obsolete, ) @@ -26,7 +25,7 @@ def destupdate(repo): if wc.branch() == 'default': # no default branch! node = repo.lookup('tip') # update to tip else: - raise util.Abort(_("branch %s not found") % wc.branch()) + raise error.Abort(_("branch %s not found") % wc.branch()) if p1.obsolete() and not p1.children(): # allow updating to successors diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -7,7 +7,7 @@ from node import nullid from i18n import _ -import scmutil, util, osutil, parsers, encoding, pathutil +import scmutil, util, osutil, parsers, encoding, pathutil, error import os, stat, errno import match as matchmod @@ -134,7 +134,7 @@ class dirstate(object): if l == 40: return st[:20], st[20:40] elif l > 0 and l < 40: - raise util.Abort(_('working directory state appears damaged!')) + raise error.Abort(_('working directory state appears damaged!')) except IOError as err: if err.errno != errno.ENOENT: raise @@ -412,13 +412,13 @@ class dirstate(object): if state == 'a' or oldstate == 'r': scmutil.checkfilename(f) if f in self._dirs: - raise util.Abort(_('directory %r already in dirstate') % f) + raise error.Abort(_('directory %r already in dirstate') % f) # shadows for d in util.finddirs(f): if d in self._dirs: break if d in self._map and self[d] != 'r': - raise util.Abort( + raise error.Abort( _('file %r in dirstate clashes with %r') % (d, f)) if oldstate in "?r" and "_dirs" in self.__dict__: self._dirs.addpath(f) @@ -464,7 +464,7 @@ class dirstate(object): def otherparent(self, f): '''Mark as coming from the other parent, always dirty.''' if self._pl[1] == nullid: - raise util.Abort(_("setting %r to other parent " + raise error.Abort(_("setting %r to other parent " "only allowed in merges") % f) if f in self and self[f] == 'n': # merge-like diff --git a/mercurial/discovery.py b/mercurial/discovery.py --- a/mercurial/discovery.py +++ b/mercurial/discovery.py @@ -16,6 +16,7 @@ from .node import ( from . import ( bookmarks, branchmap, + error, obsolete, phases, setdiscovery, @@ -262,7 +263,7 @@ def checkheads(repo, remote, outgoing, r # 1. Check for new branches on the remote. if newbranches and not newbranch: # new branch requires --new-branch branchnames = ', '.join(sorted(newbranches)) - raise util.Abort(_("push creates new remote branches: %s!") + raise error.Abort(_("push creates new remote branches: %s!") % branchnames, hint=_("use 'hg push --new-branch' to create" " new remote branches")) @@ -390,4 +391,4 @@ def checkheads(repo, remote, outgoing, r for h in dhs: repo.ui.note((" %s\n") % short(h)) if errormsg: - raise util.Abort(errormsg, hint=hint) + raise error.Abort(errormsg, hint=hint) diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -100,7 +100,7 @@ def dispatch(req): req.ui.fout = req.fout if req.ferr: req.ui.ferr = req.ferr - except util.Abort as inst: + except error.Abort as inst: ferr.write(_("abort: %s\n") % inst) if inst.hint: ferr.write(_("(%s)\n") % inst.hint) @@ -253,7 +253,7 @@ def _runcatch(req): # check if the command is in a disabled extension # (but don't check for extensions themselves) commands.help_(ui, inst.args[0], unknowncmd=True) - except (error.UnknownCommand, util.Abort): + except (error.UnknownCommand, error.Abort): suggested = False if len(inst.args) == 2: sim = _getsimilar(inst.args[1], inst.args[0]) @@ -266,7 +266,7 @@ def _runcatch(req): except error.InterventionRequired as inst: ui.warn("%s\n" % inst) return 1 - except util.Abort as inst: + except error.Abort as inst: ui.warn(_("abort: %s\n") % inst) if inst.hint: ui.warn(_("(%s)\n") % inst.hint) @@ -398,7 +398,7 @@ def aliasargs(fn, givenargs): nums.append(num) if num < len(givenargs): return givenargs[num] - raise util.Abort(_('too few arguments for command alias')) + raise error.Abort(_('too few arguments for command alias')) cmd = re.sub(r'\$(\d+|\$)', replacer, cmd) givenargs = [x for i, x in enumerate(givenargs) if i not in nums] @@ -525,7 +525,7 @@ class cmdalias(object): hint = _("'%s' is provided by '%s' extension") % (cmd, ext) except error.UnknownCommand: pass - raise util.Abort(self.badalias, hint=hint) + raise error.Abort(self.badalias, hint=hint) if self.shadows: ui.debug("alias '%s' shadows command '%s'\n" % (self.name, self.cmdname)) @@ -614,7 +614,7 @@ def _parseconfig(ui, config): ui.setconfig(section, name, value, '--config') configs.append((section, name, value)) except (IndexError, ValueError): - raise util.Abort(_('malformed --config option: %r ' + raise error.Abort(_('malformed --config option: %r ' '(use --config section.name=value)') % cfg) return configs @@ -690,7 +690,7 @@ def _getlocal(ui, rpath): try: wd = os.getcwd() except OSError as e: - raise util.Abort(_("error getting current working directory: %s") % + raise error.Abort(_("error getting current working directory: %s") % e.strerror) path = cmdutil.findrepo(wd) or "" if not path: @@ -813,11 +813,11 @@ def _dispatch(req): cmd, func, args, options, cmdoptions = _parse(lui, args) if options["config"]: - raise util.Abort(_("option --config may not be abbreviated!")) + raise error.Abort(_("option --config may not be abbreviated!")) if options["cwd"]: - raise util.Abort(_("option --cwd may not be abbreviated!")) + raise error.Abort(_("option --cwd may not be abbreviated!")) if options["repository"]: - raise util.Abort(_( + raise error.Abort(_( "option -R has to be separated from other options (e.g. not -qR) " "and --repository may only be abbreviated as --repo!")) @@ -884,7 +884,7 @@ def _dispatch(req): try: repo = hg.repository(ui, path=path) if not repo.local(): - raise util.Abort(_("repository '%s' is not local") % path) + raise error.Abort(_("repository '%s' is not local") % path) repo.ui.setconfig("bundle", "mainreporoot", repo.root, 'repo') except error.RequirementError: raise @@ -936,7 +936,7 @@ def lsprofile(ui, func, fp): try: from . import lsprof except ImportError: - raise util.Abort(_( + raise error.Abort(_( 'lsprof not available - install from ' 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/')) p = lsprof.Profiler() @@ -960,7 +960,7 @@ def flameprofile(ui, func, fp): try: from flamegraph import flamegraph except ImportError: - raise util.Abort(_( + raise error.Abort(_( 'flamegraph not available - install from ' 'https://github.com/evanhempel/python-flamegraph')) # developer config: profiling.freq @@ -985,7 +985,7 @@ def statprofile(ui, func, fp): try: import statprof except ImportError: - raise util.Abort(_( + raise error.Abort(_( 'statprof not available - install using "easy_install statprof"')) freq = ui.configint('profiling', 'freq', default=1000) diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -30,7 +30,7 @@ def readbundle(ui, fh, fname, vfs=None): magic, version = header[0:2], header[2:4] if magic != 'HG': - raise util.Abort(_('%s: not a Mercurial bundle') % fname) + raise error.Abort(_('%s: not a Mercurial bundle') % fname) if version == '10': if alg is None: alg = changegroup.readexactly(fh, 2) @@ -38,7 +38,7 @@ def readbundle(ui, fh, fname, vfs=None): elif version.startswith('2'): return bundle2.getunbundler(ui, fh, magicstring=magic + version) else: - raise util.Abort(_('%s: unknown bundle version %s') % (fname, version)) + raise error.Abort(_('%s: unknown bundle version %s') % (fname, version)) def buildobsmarkerspart(bundler, markers): """add an obsmarker part to the bundler with @@ -193,7 +193,7 @@ def push(repo, remote, force=False, revs msg = _("required features are not" " supported in the destination:" " %s") % (', '.join(sorted(missing))) - raise util.Abort(msg) + raise error.Abort(msg) # there are two ways to push to remote repo: # @@ -204,7 +204,7 @@ def push(repo, remote, force=False, revs # servers, http servers). if not pushop.remote.canpush(): - raise util.Abort(_("destination does not support push")) + raise error.Abort(_("destination does not support push")) # get local lock as we might write phase data localwlock = locallock = None try: @@ -435,9 +435,9 @@ def _pushcheckoutgoing(pushop): for node in outgoing.missingheads: ctx = unfi[node] if ctx.obsolete(): - raise util.Abort(mso % ctx) + raise error.Abort(mso % ctx) elif ctx.troubled(): - raise util.Abort(mst[ctx.troubles()[0]] % ctx) + raise error.Abort(mst[ctx.troubles()[0]] % ctx) # internal config: bookmarks.pushing newbm = pushop.ui.configlist('bookmarks', 'pushing') @@ -658,14 +658,14 @@ def _pushbundle2(pushop): try: reply = pushop.remote.unbundle(stream, ['force'], 'push') except error.BundleValueError as exc: - raise util.Abort('missing support for %s' % exc) + raise error.Abort('missing support for %s' % exc) try: trgetter = None if pushback: trgetter = pushop.trmanager.transaction op = bundle2.processbundle(pushop.repo, reply, trgetter) except error.BundleValueError as exc: - raise util.Abort('missing support for %s' % exc) + raise error.Abort('missing support for %s' % exc) except error.PushkeyFailed as exc: partid = int(exc.partid) if partid not in pushop.pkfailcb: @@ -967,7 +967,7 @@ def pull(repo, remote, heads=None, force msg = _("required features are not" " supported in the destination:" " %s") % (', '.join(sorted(missing))) - raise util.Abort(msg) + raise error.Abort(msg) lock = pullop.repo.lock() try: @@ -1108,7 +1108,7 @@ def _pullbundle2(pullop): try: op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction) except error.BundleValueError as exc: - raise util.Abort('missing support for %s' % exc) + raise error.Abort('missing support for %s' % exc) if pullop.fetch: results = [cg['return'] for cg in op.records['changegroup']] @@ -1158,7 +1158,7 @@ def _pullchangeset(pullop): elif pullop.heads is None: cg = pullop.remote.changegroup(pullop.fetch, 'pull') elif not pullop.remote.capable('changegroupsubset'): - raise util.Abort(_("partial pull cannot be done because " + raise error.Abort(_("partial pull cannot be done because " "other repository doesn't support " "changegroupsubset.")) else: diff --git a/mercurial/fancyopts.py b/mercurial/fancyopts.py --- a/mercurial/fancyopts.py +++ b/mercurial/fancyopts.py @@ -10,7 +10,7 @@ from __future__ import absolute_import import getopt from .i18n import _ -from . import util +from . import error def gnugetopt(args, options, longoptions): """Parse options mostly like getopt.gnu_getopt. @@ -114,7 +114,7 @@ def fancyopts(args, options, state, gnu= try: state[name] = int(val) except ValueError: - raise util.Abort(_('invalid value %r for option %s, ' + raise error.Abort(_('invalid value %r for option %s, ' 'expected int') % (val, opt)) elif t is type(''): state[name] = val diff --git a/mercurial/fileset.py b/mercurial/fileset.py --- a/mercurial/fileset.py +++ b/mercurial/fileset.py @@ -363,7 +363,7 @@ def encoding(mctx, x): try: d.decode(enc) except LookupError: - raise util.Abort(_("unknown encoding '%s'") % enc) + raise error.Abort(_("unknown encoding '%s'") % enc) except UnicodeDecodeError: continue s.append(f) diff --git a/mercurial/formatter.py b/mercurial/formatter.py --- a/mercurial/formatter.py +++ b/mercurial/formatter.py @@ -18,8 +18,8 @@ from .node import ( from . import ( encoding, + error, templater, - util, ) class baseformatter(object): @@ -179,7 +179,7 @@ def lookuptemplate(ui, topic, tmpl): if tmpl == 'list': ui.write(_("available styles: %s\n") % templater.stylelist()) - raise util.Abort(_("specify a template")) + raise error.Abort(_("specify a template")) # perhaps it's a path to a map or a template if ('/' in tmpl or '\\' in tmpl) and os.path.isfile(tmpl): diff --git a/mercurial/hbisect.py b/mercurial/hbisect.py --- a/mercurial/hbisect.py +++ b/mercurial/hbisect.py @@ -20,7 +20,6 @@ from .node import ( ) from . import ( error, - util, ) def bisect(changelog, state): @@ -74,8 +73,8 @@ def bisect(changelog, state): if not ancestors: # now we're confused if (len(state['bad']) == 1 and len(state['good']) == 1 and state['bad'] != state['good']): - raise util.Abort(_("starting revisions are not directly related")) - raise util.Abort(_("inconsistent state, %s:%s is good and bad") + raise error.Abort(_("starting revisions are not directly related")) + raise error.Abort(_("inconsistent state, %s:%s is good and bad") % (badrev, short(bad))) # build children dict @@ -149,7 +148,7 @@ def load_state(repo): kind, node = l[:-1].split() node = repo.lookup(node) if kind not in state: - raise util.Abort(_("unknown bisect kind %s") % kind) + raise error.Abort(_("unknown bisect kind %s") % kind) state[kind].append(node) return state diff --git a/mercurial/help.py b/mercurial/help.py --- a/mercurial/help.py +++ b/mercurial/help.py @@ -502,7 +502,7 @@ def help_(ui, name, unknowncmd=False, fu if not rst: msg = _('no matches') hint = _('try "hg help" for a list of topics') - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) elif name and name != 'shortlist': queries = [] if unknowncmd: @@ -525,7 +525,7 @@ def help_(ui, name, unknowncmd=False, fu else: msg = _('no such help topic: %s') % name hint = _('try "hg help --keyword %s"') % name - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) else: # program name if not ui.quiet: diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -65,7 +65,7 @@ def addbranchrevs(lrepo, other, branches if not peer.capable('branchmap'): if branches: - raise util.Abort(_("remote branch lookup not supported")) + raise error.Abort(_("remote branch lookup not supported")) revs.append(hashbranch) return revs, revs[0] branchmap = peer.branchmap() @@ -73,7 +73,7 @@ def addbranchrevs(lrepo, other, branches def primary(branch): if branch == '.': if not lrepo: - raise util.Abort(_("dirstate branch not accessible")) + raise error.Abort(_("dirstate branch not accessible")) branch = lrepo.dirstate.branch() if branch in branchmap: revs.extend(node.hex(r) for r in reversed(branchmap[branch])) @@ -160,7 +160,7 @@ def repository(ui, path='', create=False peer = _peerorrepo(ui, path, create) repo = peer.local() if not repo: - raise util.Abort(_("repository '%s' is not local") % + raise error.Abort(_("repository '%s' is not local") % (path or peer.url())) return repo.filtered('visible') @@ -194,7 +194,7 @@ def share(ui, source, dest=None, update= '''create a shared repository''' if not islocal(source): - raise util.Abort(_('can only share local repositories')) + raise error.Abort(_('can only share local repositories')) if not dest: dest = defaultdest(source) @@ -217,7 +217,7 @@ def share(ui, source, dest=None, update= destvfs = scmutil.vfs(os.path.join(destwvfs.base, '.hg'), realpath=True) if destvfs.lexists(): - raise util.Abort(_('destination already exists')) + raise error.Abort(_('destination already exists')) if not destwvfs.isdir(): destwvfs.mkdir() @@ -320,7 +320,7 @@ def clonewithshare(ui, peeropts, sharepa revs = None if rev: if not srcpeer.capable('lookup'): - raise util.Abort(_("src repository does not support " + raise error.Abort(_("src repository does not support " "revision lookup and so doesn't " "support clone by revision")) revs = [srcpeer.lookup(r) for r in rev] @@ -416,14 +416,14 @@ def clone(ui, peeropts, source, dest=Non source = util.urllocalpath(source) if not dest: - raise util.Abort(_("empty destination path is not valid")) + raise error.Abort(_("empty destination path is not valid")) destvfs = scmutil.vfs(dest, expandpath=True) if destvfs.lexists(): if not destvfs.isdir(): - raise util.Abort(_("destination '%s' already exists") % dest) + raise error.Abort(_("destination '%s' already exists") % dest) elif destvfs.listdir(): - raise util.Abort(_("destination '%s' is not empty") % dest) + raise error.Abort(_("destination '%s' is not empty") % dest) shareopts = shareopts or {} sharepool = shareopts.get('pool') @@ -448,7 +448,7 @@ def clone(ui, peeropts, source, dest=Non elif sharenamemode == 'remote': sharepath = os.path.join(sharepool, util.sha1(source).hexdigest()) else: - raise util.Abort('unknown share naming mode: %s' % sharenamemode) + raise error.Abort('unknown share naming mode: %s' % sharenamemode) if sharepath: return clonewithshare(ui, peeropts, sharepath, source, srcpeer, @@ -494,7 +494,7 @@ def clone(ui, peeropts, source, dest=Non except OSError as inst: if inst.errno == errno.EEXIST: cleandir = None - raise util.Abort(_("destination '%s' already exists") + raise error.Abort(_("destination '%s' already exists") % dest) raise @@ -534,14 +534,14 @@ def clone(ui, peeropts, source, dest=Non except OSError as inst: if inst.errno == errno.EEXIST: cleandir = None - raise util.Abort(_("destination '%s' already exists") + raise error.Abort(_("destination '%s' already exists") % dest) raise revs = None if rev: if not srcpeer.capable('lookup'): - raise util.Abort(_("src repository does not support " + raise error.Abort(_("src repository does not support " "revision lookup and so doesn't " "support clone by revision")) revs = [srcpeer.lookup(r) for r in rev] @@ -557,7 +557,8 @@ def clone(ui, peeropts, source, dest=Non exchange.push(srcrepo, destpeer, revs=revs, bookmarks=srcrepo._bookmarks.keys()) else: - raise util.Abort(_("clone from remote to remote not supported")) + raise error.Abort(_("clone from remote to remote not supported") + ) cleandir = None diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py --- a/mercurial/hgweb/hgwebdir_mod.py +++ b/mercurial/hgweb/hgwebdir_mod.py @@ -118,7 +118,7 @@ class hgwebdir(object): if not isinstance(self.conf, (dict, list, tuple)): map = {'paths': 'hgweb-paths'} if not os.path.exists(self.conf): - raise util.Abort(_('config file %s not found!') % self.conf) + raise error.Abort(_('config file %s not found!') % self.conf) u.readconfig(self.conf, remap=map, trust=True) paths = [] for name, ignored in u.configitems('hgweb-paths'): diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py --- a/mercurial/hgweb/server.py +++ b/mercurial/hgweb/server.py @@ -208,7 +208,7 @@ class _httprequesthandleropenssl(_httpre import OpenSSL OpenSSL.SSL.Context except ImportError: - raise util.Abort(_("SSL support is unavailable")) + raise error.Abort(_("SSL support is unavailable")) ctx = OpenSSL.SSL.Context(OpenSSL.SSL.TLSv1_METHOD) ctx.use_privatekey_file(ssl_cert) ctx.use_certificate_file(ssl_cert) @@ -249,7 +249,7 @@ class _httprequesthandlerssl(_httpreques import ssl ssl.wrap_socket except ImportError: - raise util.Abort(_("SSL support is unavailable")) + raise error.Abort(_("SSL support is unavailable")) httpserver.socket = ssl.wrap_socket( httpserver.socket, server_side=True, certfile=ssl_cert, ssl_version=ssl.PROTOCOL_TLSv1) @@ -345,5 +345,5 @@ def create_server(ui, app): try: return cls(ui, app, (address, port), handler) except socket.error as inst: - raise util.Abort(_("cannot start server at '%s:%d': %s") + raise error.Abort(_("cannot start server at '%s:%d': %s") % (address, port, inst.args[1])) diff --git a/mercurial/hook.py b/mercurial/hook.py --- a/mercurial/hook.py +++ b/mercurial/hook.py @@ -35,7 +35,7 @@ def _pythonhook(ui, repo, name, hname, f else: d = funcname.rfind('.') if d == -1: - raise util.Abort(_('%s hook is invalid ("%s" not in ' + raise error.Abort(_('%s hook is invalid ("%s" not in ' 'a module)') % (hname, funcname)) modname = funcname[:d] oldpaths = sys.path @@ -63,7 +63,7 @@ def _pythonhook(ui, repo, name, hname, f ui.warn(_('exception from second failed import ' 'attempt:\n')) ui.traceback(e2) - raise util.Abort(_('%s hook is invalid ' + raise error.Abort(_('%s hook is invalid ' '(import of "%s" failed)') % (hname, modname)) sys.path = oldpaths @@ -71,11 +71,11 @@ def _pythonhook(ui, repo, name, hname, f for p in funcname.split('.')[1:]: obj = getattr(obj, p) except AttributeError: - raise util.Abort(_('%s hook is invalid ' + raise error.Abort(_('%s hook is invalid ' '("%s" is not defined)') % (hname, funcname)) if not callable(obj): - raise util.Abort(_('%s hook is invalid ' + raise error.Abort(_('%s hook is invalid ' '("%s" is not callable)') % (hname, funcname)) @@ -91,7 +91,7 @@ def _pythonhook(ui, repo, name, hname, f r = obj(ui=ui, repo=repo, hooktype=name, **args) except Exception as exc: - if isinstance(exc, util.Abort): + if isinstance(exc, error.Abort): ui.warn(_('error: %s hook failed: %s\n') % (hname, exc.args[0])) else: diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py --- a/mercurial/httppeer.py +++ b/mercurial/httppeer.py @@ -49,7 +49,7 @@ class httppeer(wireproto.wirepeer): self.requestbuilder = None u = util.url(path) if u.query or u.fragment: - raise util.Abort(_('unsupported URL component: "%s"') % + raise error.Abort(_('unsupported URL component: "%s"') % (u.query or u.fragment)) # urllib cannot handle URLs with embedded user or passwd @@ -86,7 +86,7 @@ class httppeer(wireproto.wirepeer): return self.caps def lock(self): - raise util.Abort(_('operation not supported over http')) + raise error.Abort(_('operation not supported over http')) def _callstream(self, cmd, **args): if cmd == 'pushkey': @@ -137,7 +137,7 @@ class httppeer(wireproto.wirepeer): resp = self.urlopener.open(req) except urllib2.HTTPError as inst: if inst.code == 401: - raise util.Abort(_('authorization failed')) + raise error.Abort(_('authorization failed')) raise except httplib.HTTPException as inst: self.ui.debug('http error while sending %s command\n' % cmd) @@ -145,7 +145,7 @@ class httppeer(wireproto.wirepeer): raise IOError(None, inst) except IndexError: # this only happens with Python 2.3, later versions raise URLError - raise util.Abort(_('http error, possibly caused by proxy setting')) + raise error.Abort(_('http error, possibly caused by proxy setting')) # record the url we got redirected to resp_url = resp.geturl() if resp_url.endswith(qs): @@ -223,8 +223,8 @@ class httppeer(wireproto.wirepeer): return vals except socket.error as err: if err.args[0] in (errno.ECONNRESET, errno.EPIPE): - raise util.Abort(_('push failed: %s') % err.args[1]) - raise util.Abort(err.args[1]) + raise error.Abort(_('push failed: %s') % err.args[1]) + raise error.Abort(err.args[1]) finally: fp.close() os.unlink(tempname) @@ -263,13 +263,13 @@ class httppeer(wireproto.wirepeer): class httpspeer(httppeer): def __init__(self, ui, path): if not url.has_https: - raise util.Abort(_('Python support for SSL and HTTPS ' + raise error.Abort(_('Python support for SSL and HTTPS ' 'is not installed')) httppeer.__init__(self, ui, path) def instance(ui, path, create): if create: - raise util.Abort(_('cannot create new http repository')) + raise error.Abort(_('cannot create new http repository')) try: if path.startswith('https:'): inst = httpspeer(ui, path) diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -640,7 +640,7 @@ class localrepository(object): if not local: m = matchmod.exact(self.root, '', ['.hgtags']) if any(self.status(match=m, unknown=True, ignored=True)): - raise util.Abort(_('working copy of .hgtags is changed'), + raise error.Abort(_('working copy of .hgtags is changed'), hint=_('please commit .hgtags manually')) self.tags() # instantiate the cache @@ -1119,7 +1119,7 @@ class localrepository(object): desc = None if not force and self['.'] != self['tip'] and desc == 'commit': - raise util.Abort( + raise error.Abort( _('rollback of last commit while not checked out ' 'may lose data'), hint=_('use -f to force')) @@ -1433,7 +1433,7 @@ class localrepository(object): extra = {} def fail(f, msg): - raise util.Abort('%s: %s' % (f, msg)) + raise error.Abort('%s: %s' % (f, msg)) if not match: match = matchmod.always(self.root, '') @@ -1449,7 +1449,7 @@ class localrepository(object): merge = len(wctx.parents()) > 1 if not force and merge and match.ispartial(): - raise util.Abort(_('cannot partially commit a merge ' + raise error.Abort(_('cannot partially commit a merge ' '(do not specify files or patterns)')) status = self.status(match=match, clean=force) @@ -1477,12 +1477,12 @@ class localrepository(object): newstate[s] = oldstate[s] continue if not force: - raise util.Abort( + raise error.Abort( _("commit with new subrepo %s excluded") % s) dirtyreason = wctx.sub(s).dirtyreason(True) if dirtyreason: if not self.ui.configbool('ui', 'commitsubrepos'): - raise util.Abort(dirtyreason, + raise error.Abort(dirtyreason, hint=_("use --subrepos for recursive commit")) subs.append(s) commitsubs.add(s) @@ -1499,7 +1499,7 @@ class localrepository(object): if subs: if (not match('.hgsub') and '.hgsub' in (wctx.modified() + wctx.added())): - raise util.Abort( + raise error.Abort( _("can't commit subrepos without .hgsub")) status.modified.insert(0, '.hgsubstate') @@ -1541,12 +1541,12 @@ class localrepository(object): return None if merge and cctx.deleted(): - raise util.Abort(_("cannot commit merge with missing files")) + raise error.Abort(_("cannot commit merge with missing files")) ms = mergemod.mergestate(self) for f in status.modified: if f in ms and ms[f] == 'u': - raise util.Abort(_('unresolved merge conflicts ' + raise error.Abort(_('unresolved merge conflicts ' '(see "hg help resolve")')) if editor: diff --git a/mercurial/mail.py b/mercurial/mail.py --- a/mercurial/mail.py +++ b/mercurial/mail.py @@ -18,6 +18,7 @@ import time from .i18n import _ from . import ( encoding, + error, sslutil, util, ) @@ -93,7 +94,7 @@ if util.safehasattr(smtplib.SMTP, '_get_ return new_socket else: def SMTPS(sslkwargs, keyfile=None, certfile=None, **kwargs): - raise util.Abort(_('SMTPS requires Python 2.6 or later')) + raise error.Abort(_('SMTPS requires Python 2.6 or later')) def _smtp(ui): '''build an smtp connection and return a function to send mail''' @@ -103,14 +104,14 @@ def _smtp(ui): starttls = tls == 'starttls' or util.parsebool(tls) smtps = tls == 'smtps' if (starttls or smtps) and not util.safehasattr(socket, 'ssl'): - raise util.Abort(_("can't use TLS: Python SSL support not installed")) + raise error.Abort(_("can't use TLS: Python SSL support not installed")) mailhost = ui.config('smtp', 'host') if not mailhost: - raise util.Abort(_('smtp.host not configured - cannot send mail')) + raise error.Abort(_('smtp.host not configured - cannot send mail')) verifycert = ui.config('smtp', 'verifycert', 'strict') if verifycert not in ['strict', 'loose']: if util.parsebool(verifycert) is not False: - raise util.Abort(_('invalid smtp.verifycert configuration: %s') + raise error.Abort(_('invalid smtp.verifycert configuration: %s') % (verifycert)) verifycert = False if (starttls or smtps) and verifycert: @@ -151,16 +152,16 @@ def _smtp(ui): try: s.login(username, password) except smtplib.SMTPException as inst: - raise util.Abort(inst) + raise error.Abort(inst) def send(sender, recipients, msg): try: return s.sendmail(sender, recipients, msg) except smtplib.SMTPRecipientsRefused as inst: recipients = [r[1] for r in inst.recipients.values()] - raise util.Abort('\n' + '\n'.join(recipients)) + raise error.Abort('\n' + '\n'.join(recipients)) except smtplib.SMTPException as inst: - raise util.Abort(inst) + raise error.Abort(inst) return send @@ -174,7 +175,7 @@ def _sendmail(ui, sender, recipients, ms fp.write(msg) ret = fp.close() if ret: - raise util.Abort('%s %s' % ( + raise error.Abort('%s %s' % ( os.path.basename(program.split(None, 1)[0]), util.explainexit(ret)[0])) @@ -208,11 +209,11 @@ def validateconfig(ui): method = ui.config('email', 'method', 'smtp') if method == 'smtp': if not ui.config('smtp', 'host'): - raise util.Abort(_('smtp specified as email transport, ' + raise error.Abort(_('smtp specified as email transport, ' 'but no smtp host configured')) else: if not util.findexe(method): - raise util.Abort(_('%r specified as email transport, ' + raise error.Abort(_('%r specified as email transport, ' 'but not in PATH') % method) def mimetextpatch(s, subtype='plain', display=False): @@ -302,13 +303,13 @@ def _addressencode(ui, name, addr, chars dom = dom.decode(encoding.encoding).encode('idna') addr = '%s@%s' % (acc, dom) except UnicodeDecodeError: - raise util.Abort(_('invalid email address: %s') % addr) + raise error.Abort(_('invalid email address: %s') % addr) except ValueError: try: # too strict? addr = addr.encode('ascii') except UnicodeDecodeError: - raise util.Abort(_('invalid local address: %s') % addr) + raise error.Abort(_('invalid local address: %s') % addr) return email.Utils.formataddr((name, addr)) def addressencode(ui, address, charsets=None, display=False): diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -13,6 +13,7 @@ import re from .i18n import _ from . import ( + error, pathutil, util, ) @@ -37,7 +38,7 @@ def _expandsets(kindpats, ctx, listsubre for kind, pat, source in kindpats: if kind == 'set': if not ctx: - raise util.Abort("fileset expression with no context") + raise error.Abort("fileset expression with no context") s = ctx.getfileset(pat) fset.update(s) @@ -290,7 +291,7 @@ class match(object): files = files.splitlines() files = [f for f in files if f] except EnvironmentError: - raise util.Abort(_("unable to read file list (%s)") % pat) + raise error.Abort(_("unable to read file list (%s)") % pat) for k, p, source in self._normalize(files, default, root, cwd, auditor): kindpats.append((k, p, pat)) @@ -302,8 +303,8 @@ class match(object): for k, p, source in self._normalize(includepats, default, root, cwd, auditor): kindpats.append((k, p, source or pat)) - except util.Abort as inst: - raise util.Abort('%s: %s' % (pat, inst[0])) + except error.Abort as inst: + raise error.Abort('%s: %s' % (pat, inst[0])) except IOError as inst: if self._warn: self._warn(_("skipping unreadable pattern file " @@ -587,11 +588,11 @@ def _buildregexmatch(kindpats, globsuffi _rematcher('(?:%s)' % _regex(k, p, globsuffix)) except re.error: if s: - raise util.Abort(_("%s: invalid pattern (%s): %s") % + raise error.Abort(_("%s: invalid pattern (%s): %s") % (s, k, p)) else: - raise util.Abort(_("invalid pattern (%s): %s") % (k, p)) - raise util.Abort(_("invalid pattern")) + raise error.Abort(_("invalid pattern (%s): %s") % (k, p)) + raise error.Abort(_("invalid pattern")) def _roots(kindpats): '''return roots and exact explicitly listed files from patterns diff --git a/mercurial/mdiff.py b/mercurial/mdiff.py --- a/mercurial/mdiff.py +++ b/mercurial/mdiff.py @@ -6,7 +6,7 @@ # GNU General Public License version 2 or any later version. from i18n import _ -import bdiff, mpatch, util, base85 +import bdiff, mpatch, util, base85, error import re, struct, zlib def splitnewlines(text): @@ -59,7 +59,7 @@ class diffopts(object): try: self.context = int(self.context) except ValueError: - raise util.Abort(_('diff context lines count must be ' + raise error.Abort(_('diff context lines count must be ' 'an integer, not %r') % self.context) def copy(self, **kwargs): diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -22,6 +22,7 @@ from .node import ( from . import ( copies, destutil, + error, filemerge, obsolete, subrepo, @@ -98,7 +99,7 @@ class mergestate(object): bits = record.split('\0') self._state[bits[0]] = bits[1:] elif not rtype.islower(): - raise util.Abort(_('unsupported merge state record: %s') + raise error.Abort(_('unsupported merge state record: %s') % rtype) self._dirty = False @@ -346,7 +347,7 @@ def _checkunknownfiles(repo, wctx, mctx, for f in sorted(aborts): repo.ui.warn(_("%s: untracked file differs\n") % f) if aborts: - raise util.Abort(_("untracked files in working directory differ " + raise error.Abort(_("untracked files in working directory differ " "from files in requested revision")) for f, (m, args, msg) in actions.iteritems(): @@ -419,7 +420,7 @@ def _checkcollision(repo, wmf, actions): for f in sorted(pmmf): fold = util.normcase(f) if fold in foldmap: - raise util.Abort(_("case-folding collision between %s and %s") + raise error.Abort(_("case-folding collision between %s and %s") % (f, foldmap[fold])) foldmap[fold] = f @@ -1011,18 +1012,18 @@ def update(repo, node, branchmerge, forc ### check phase if not overwrite and len(pl) > 1: - raise util.Abort(_("outstanding uncommitted merge")) + raise error.Abort(_("outstanding uncommitted merge")) if branchmerge: if pas == [p2]: - raise util.Abort(_("merging with a working directory ancestor" + raise error.Abort(_("merging with a working directory ancestor" " has no effect")) elif pas == [p1]: if not mergeancestor and p1.branch() == p2.branch(): - raise util.Abort(_("nothing to merge"), + raise error.Abort(_("nothing to merge"), hint=_("use 'hg update' " "or check 'hg heads'")) if not force and (wc.files() or wc.deleted()): - raise util.Abort(_("uncommitted changes"), + raise error.Abort(_("uncommitted changes"), hint=_("use 'hg status' to list changes")) for s in sorted(wc.substate): wc.sub(s).bailifchanged() @@ -1051,11 +1052,11 @@ def update(repo, node, branchmerge, forc else: hint = _("commit or update --clean to discard" " changes") - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) else: # node is none msg = _("not a linear update") hint = _("merge or update --check to force update") - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) else: # Allow jumping branches if clean and specific rev given pas = [p1] diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py --- a/mercurial/obsolete.py +++ b/mercurial/obsolete.py @@ -68,7 +68,7 @@ comment associated with each format for """ import errno, struct -import util, base85, node, parsers +import util, base85, node, parsers, error import phases from i18n import _ @@ -164,7 +164,7 @@ def _fm0readmarkers(data, off): # (metadata will be decoded on demand) metadata = data[off:off + mdsize] if len(metadata) != mdsize: - raise util.Abort(_('parsing obsolete marker: metadata is too ' + raise error.Abort(_('parsing obsolete marker: metadata is too ' 'short, %d bytes expected, got %d') % (mdsize, len(metadata))) off += mdsize @@ -200,7 +200,7 @@ def _fm0readmarkers(data, off): def _fm0encodeonemarker(marker): pre, sucs, flags, metadata, date, parents = marker if flags & usingsha256: - raise util.Abort(_('cannot handle sha256 with old obsstore format')) + raise error.Abort(_('cannot handle sha256 with old obsstore format')) metadata = dict(metadata) time, tz = date metadata['date'] = '%r %i' % (time, tz) @@ -414,7 +414,7 @@ def _readmarkers(data): diskversion = _unpack('>B', data[off:off + 1])[0] off += 1 if diskversion not in formats: - raise util.Abort(_('parsing obsolete marker: unknown version %r') + raise error.Abort(_('parsing obsolete marker: unknown version %r') % diskversion) return diskversion, formats[diskversion][0](data, off) @@ -496,7 +496,7 @@ def _checkinvalidmarkers(markers): """ for mark in markers: if node.nullid in mark[1]: - raise util.Abort(_('bad obsolescence marker detected: ' + raise error.Abort(_('bad obsolescence marker detected: ' 'invalid successors nullid')) class obsstore(object): @@ -583,8 +583,8 @@ class obsstore(object): Take care of filtering duplicate. Return the number of new marker.""" if self._readonly: - raise util.Abort('creating obsolete markers is not enabled on this ' - 'repo') + raise error.Abort('creating obsolete markers is not enabled on ' + 'this repo') known = set(self._all) new = [] for m in markers: @@ -1217,7 +1217,7 @@ def createmarkers(repo, relations, flag= localmetadata.update(rel[2]) if not prec.mutable(): - raise util.Abort("cannot obsolete public changeset: %s" + raise error.Abort("cannot obsolete public changeset: %s" % prec, hint='see "hg help phases" for details') nprec = prec.node() @@ -1226,7 +1226,7 @@ def createmarkers(repo, relations, flag= if not nsucs: npare = tuple(p.node() for p in prec.parents()) if nprec in nsucs: - raise util.Abort("changeset %s cannot obsolete itself" % prec) + raise error.Abort("changeset %s cannot obsolete itself" % prec) repo.obsstore.create(tr, nprec, nsucs, flag, parents=npare, date=date, metadata=localmetadata) repo.filteredrevcache.clear() @@ -1250,7 +1250,7 @@ def isenabled(repo, option): # createmarkers must be enabled if other options are enabled if ((allowunstableopt in result or exchangeopt in result) and not createmarkersopt in result): - raise util.Abort(_("'createmarkers' obsolete option must be enabled " + raise error.Abort(_("'createmarkers' obsolete option must be enabled " "if other obsolete options are enabled")) return option in result diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -1056,7 +1056,7 @@ the hunk is left unchanged. elif r == 6: # all ret = skipall = True elif r == 7: # quit - raise util.Abort(_('user quit')) + raise error.Abort(_('user quit')) return ret, skipfile, skipall, newpatches seen = set() @@ -1964,7 +1964,7 @@ def _applydiff(ui, fp, patcher, backend, else: store.setfile(path, data, mode) else: - raise util.Abort(_('unsupported parser state: %s') % state) + raise error.Abort(_('unsupported parser state: %s') % state) if current_file: rejects += current_file.close() @@ -2022,7 +2022,7 @@ def patchbackend(ui, backend, patchobj, if eolmode is None: eolmode = ui.config('patch', 'eol', 'strict') if eolmode.lower() not in eolmodes: - raise util.Abort(_('unsupported line endings type: %s') % eolmode) + raise error.Abort(_('unsupported line endings type: %s') % eolmode) eolmode = eolmode.lower() store = filestore() @@ -2095,7 +2095,7 @@ def changedfiles(ui, repo, patchpath, st if gp.op == 'RENAME': changed.add(gp.oldpath) elif state not in ('hunk', 'git'): - raise util.Abort(_('unsupported parser state: %s') % state) + raise error.Abort(_('unsupported parser state: %s') % state) return changed finally: fp.close() diff --git a/mercurial/pathutil.py b/mercurial/pathutil.py --- a/mercurial/pathutil.py +++ b/mercurial/pathutil.py @@ -8,6 +8,7 @@ import stat from .i18n import _ from . import ( encoding, + error, util, ) @@ -47,18 +48,18 @@ class pathauditor(object): return # AIX ignores "/" at end of path, others raise EISDIR. if util.endswithsep(path): - raise util.Abort(_("path ends in directory separator: %s") % path) + raise error.Abort(_("path ends in directory separator: %s") % path) parts = util.splitpath(path) if (os.path.splitdrive(path)[0] or _lowerclean(parts[0]) in ('.hg', '.hg.', '') or os.pardir in parts): - raise util.Abort(_("path contains illegal component: %s") % path) + raise error.Abort(_("path contains illegal component: %s") % path) # Windows shortname aliases for p in parts: if "~" in p: first, last = p.split("~", 1) if last.isdigit() and first.upper() in ["HG", "HG8B6C"]: - raise util.Abort(_("path contains illegal component: %s") + raise error.Abort(_("path contains illegal component: %s") % path) if '.hg' in _lowerclean(path): lparts = [_lowerclean(p.lower()) for p in parts] @@ -66,7 +67,7 @@ class pathauditor(object): if p in lparts[1:]: pos = lparts.index(p) base = os.path.join(*parts[:pos]) - raise util.Abort(_("path '%s' is inside nested repo %r") + raise error.Abort(_("path '%s' is inside nested repo %r") % (path, base)) normparts = util.splitpath(normpath) @@ -90,13 +91,13 @@ class pathauditor(object): raise else: if stat.S_ISLNK(st.st_mode): - raise util.Abort( + raise error.Abort( _('path %r traverses symbolic link %r') % (path, prefix)) elif (stat.S_ISDIR(st.st_mode) and os.path.isdir(os.path.join(curpath, '.hg'))): if not self.callback or not self.callback(curpath): - raise util.Abort(_("path '%s' is inside nested " + raise error.Abort(_("path '%s' is inside nested " "repo %r") % (path, prefix)) prefixes.append(normprefix) @@ -112,7 +113,7 @@ class pathauditor(object): try: self(path) return True - except (OSError, util.Abort): + except (OSError, error.Abort): return False def canonpath(root, cwd, myname, auditor=None): @@ -167,10 +168,10 @@ def canonpath(root, cwd, myname, auditor canonpath(root, root, myname, auditor) hint = (_("consider using '--cwd %s'") % os.path.relpath(root, cwd)) - except util.Abort: + except error.Abort: pass - raise util.Abort(_("%s not under root '%s'") % (myname, root), + raise error.Abort(_("%s not under root '%s'") % (myname, root), hint=hint) def normasprefix(path): diff --git a/mercurial/phases.py b/mercurial/phases.py --- a/mercurial/phases.py +++ b/mercurial/phases.py @@ -115,7 +115,6 @@ from .node import ( ) from . import ( error, - util, ) allphases = public, draft, secret = range(3) @@ -306,7 +305,7 @@ class phasecache(object): if self.phase(repo, repo[n].rev()) < targetphase] if newroots: if nullid in newroots: - raise util.Abort(_('cannot change null revision phase')) + raise error.Abort(_('cannot change null revision phase')) currentroots = currentroots.copy() currentroots.update(newroots) ctxs = repo.set('roots(%ln::)', currentroots) diff --git a/mercurial/repair.py b/mercurial/repair.py --- a/mercurial/repair.py +++ b/mercurial/repair.py @@ -15,6 +15,7 @@ from .node import short from . import ( bundle2, changegroup, + error, exchange, util, ) @@ -156,7 +157,7 @@ def strip(ui, repo, nodelist, backup=Tru if curtr is not None: del curtr # avoid carrying reference to transaction for nothing msg = _('programming error: cannot strip from inside a transaction') - raise util.Abort(msg, hint=_('contact your extension maintainer')) + raise error.Abort(msg, hint=_('contact your extension maintainer')) tr = repo.transaction("strip") offset = len(tr.entries) diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -480,11 +480,11 @@ def _mergedefaultdest(repo, subset, x): else: node = bmheads[0] elif len(bmheads) > 2: - raise util.Abort(_("multiple matching bookmarks to merge - " + raise error.Abort(_("multiple matching bookmarks to merge - " "please merge with an explicit rev or bookmark"), hint=_("run 'hg heads' to see all heads")) elif len(bmheads) <= 1: - raise util.Abort(_("no matching bookmark to merge - " + raise error.Abort(_("no matching bookmark to merge - " "please merge with an explicit rev or bookmark"), hint=_("run 'hg heads' to see all heads")) else: @@ -493,7 +493,7 @@ def _mergedefaultdest(repo, subset, x): nbhs = [bh for bh in bheads if not repo[bh].bookmarks()] if len(nbhs) > 2: - raise util.Abort(_("branch '%s' has %d heads - " + raise error.Abort(_("branch '%s' has %d heads - " "please merge with an explicit rev") % (branch, len(bheads)), hint=_("run 'hg heads .' to see heads")) @@ -501,21 +501,21 @@ def _mergedefaultdest(repo, subset, x): parent = repo.dirstate.p1() if len(nbhs) <= 1: if len(bheads) > 1: - raise util.Abort(_("heads are bookmarked - " + raise error.Abort(_("heads are bookmarked - " "please merge with an explicit rev"), hint=_("run 'hg heads' to see all heads")) if len(repo.heads()) > 1: - raise util.Abort(_("branch '%s' has one head - " + raise error.Abort(_("branch '%s' has one head - " "please merge with an explicit rev") % branch, hint=_("run 'hg heads' to see all heads")) msg, hint = _('nothing to merge'), None if parent != repo.lookup(branch): hint = _("use 'hg update' instead") - raise util.Abort(msg, hint=hint) + raise error.Abort(msg, hint=hint) if parent not in bheads: - raise util.Abort(_('working directory not at a head revision'), + raise error.Abort(_('working directory not at a head revision'), hint=_("use 'hg update' or merge with an " "explicit revision")) if parent == nbhs[0]: @@ -721,7 +721,7 @@ def bundle(repo, subset, x): try: bundlerevs = repo.changelog.bundlerevs except AttributeError: - raise util.Abort(_("no bundle provided - specify with -R")) + raise error.Abort(_("no bundle provided - specify with -R")) return subset & bundlerevs def checkstatus(repo, subset, pat, field): @@ -2669,7 +2669,7 @@ def _expandaliases(aliases, tree, expand alias = _getalias(aliases, tree) if alias is not None: if alias.error: - raise util.Abort(alias.error) + raise error.Abort(alias.error) if alias in expanding: raise error.ParseError(_('infinite expansion of revset alias "%s" ' 'detected') % alias.name) @@ -2868,7 +2868,7 @@ def formatspec(expr, *args): ret += listexp(list(args[arg]), d) arg += 1 else: - raise util.Abort('unexpected revspec format character %s' % d) + raise error.Abort('unexpected revspec format character %s' % d) else: ret += c pos += 1 diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -123,20 +123,20 @@ def checknewlabel(repo, lbl, kind): # Do not use the "kind" parameter in ui output. # It makes strings difficult to translate. if lbl in ['tip', '.', 'null']: - raise util.Abort(_("the name '%s' is reserved") % lbl) + raise error.Abort(_("the name '%s' is reserved") % lbl) for c in (':', '\0', '\n', '\r'): if c in lbl: - raise util.Abort(_("%r cannot be used in a name") % c) + raise error.Abort(_("%r cannot be used in a name") % c) try: int(lbl) - raise util.Abort(_("cannot use an integer as a name")) + raise error.Abort(_("cannot use an integer as a name")) except ValueError: pass def checkfilename(f): '''Check that the filename f is an acceptable filename for a tracked file''' if '\r' in f or '\n' in f: - raise util.Abort(_("'\\n' and '\\r' disallowed in filenames: %r") % f) + raise error.Abort(_("'\\n' and '\\r' disallowed in filenames: %r") % f) def checkportable(ui, f): '''Check if filename f is portable and warn or abort depending on config''' @@ -147,7 +147,7 @@ def checkportable(ui, f): if msg: msg = "%s: %r" % (msg, f) if abort: - raise util.Abort(msg) + raise error.Abort(msg) ui.warn(_("warning: %s\n") % msg) def checkportabilityalert(ui): @@ -182,7 +182,7 @@ class casecollisionauditor(object): if fl in self._loweredfiles and f not in self._dirstate: msg = _('possible case-folding collision for %s') % f if self._abort: - raise util.Abort(msg) + raise error.Abort(msg) self._ui.warn(_("warning: %s\n") % msg) self._loweredfiles.add(fl) self._newfiles.add(f) @@ -475,7 +475,7 @@ class vfs(abstractvfs): if self._audit: r = util.checkosfilename(path) if r: - raise util.Abort("%s: %r" % (r, path)) + raise error.Abort("%s: %r" % (r, path)) self.audit(path) f = self.join(path) @@ -583,7 +583,7 @@ class readonlyvfs(abstractvfs, auditvfs) def __call__(self, path, mode='r', *args, **kw): if mode not in ('r', 'rb'): - raise util.Abort('this vfs is read only') + raise error.Abort('this vfs is read only') return self.vfs(path, mode, *args, **kw) def join(self, path, *insidef): @@ -689,7 +689,7 @@ def revsingle(repo, revspec, default='.' l = revrange(repo, [revspec]) if not l: - raise util.Abort(_('empty revision set')) + raise error.Abort(_('empty revision set')) return repo[l.last()] def _pairspec(revspec): @@ -716,7 +716,7 @@ def revpair(repo, revs): second = l.last() if first is None: - raise util.Abort(_('empty revision range')) + raise error.Abort(_('empty revision range')) # if top-level is range expression, the result must always be a pair if first == second and len(revs) == 1 and not _pairspec(revs[0]): diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py --- a/mercurial/setdiscovery.py +++ b/mercurial/setdiscovery.py @@ -52,7 +52,7 @@ from .node import ( ) from . import ( dagutil, - util, + error, ) def _updatesample(dag, nodes, sample, quicksamplesize=0): @@ -241,7 +241,7 @@ def findcommonheads(ui, local, remote, if not result and srvheadhashes != [nullid]: if abortwhenunrelated: - raise util.Abort(_("repository is unrelated")) + raise error.Abort(_("repository is unrelated")) else: ui.warn(_("warning: repository is unrelated\n")) return (set([nullid]), True, srvheadhashes,) diff --git a/mercurial/simplemerge.py b/mercurial/simplemerge.py --- a/mercurial/simplemerge.py +++ b/mercurial/simplemerge.py @@ -23,6 +23,7 @@ import sys from .i18n import _ from . import ( + error, mdiff, scmutil, util, @@ -361,7 +362,7 @@ def simplemerge(ui, local, base, other, if not opts.get('quiet'): ui.warn(_('warning: %s\n') % msg) if not opts.get('text'): - raise util.Abort(msg) + raise error.Abort(msg) return text mode = opts.get('mode','merge') @@ -381,13 +382,13 @@ def simplemerge(ui, local, base, other, if len(labels) > 2: name_base = labels[2] if len(labels) > 3: - raise util.Abort(_("can only specify three labels.")) + raise error.Abort(_("can only specify three labels.")) try: localtext = readfile(local) basetext = readfile(base) othertext = readfile(other) - except util.Abort: + except error.Abort: return 1 local = os.path.realpath(local) diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py --- a/mercurial/sshpeer.py +++ b/mercurial/sshpeer.py @@ -277,7 +277,7 @@ class sshpeer(wireproto.wirepeer): r = self._call(cmd, **args) if r: # XXX needs to be made better - raise util.Abort('unexpected remote reply: %s' % r) + raise error.Abort('unexpected remote reply: %s' % r) while True: d = fp.read(4096) if not d: diff --git a/mercurial/sshserver.py b/mercurial/sshserver.py --- a/mercurial/sshserver.py +++ b/mercurial/sshserver.py @@ -12,6 +12,7 @@ import os import sys from . import ( + error, hook, util, wireproto, @@ -39,7 +40,7 @@ class sshserver(wireproto.abstractserver argline = self.fin.readline()[:-1] arg, l = argline.split() if arg not in keys: - raise util.Abort("unexpected parameter %r" % arg) + raise error.Abort("unexpected parameter %r" % arg) if arg == '*': star = {} for k in xrange(int(l)): diff --git a/mercurial/sslutil.py b/mercurial/sslutil.py --- a/mercurial/sslutil.py +++ b/mercurial/sslutil.py @@ -14,7 +14,7 @@ import ssl import sys from .i18n import _ -from . import util +from . import error, util _canloaddefaultcerts = False try: @@ -50,7 +50,7 @@ try: # closed # - see http://bugs.python.org/issue13721 if not sslsocket.cipher(): - raise util.Abort(_('ssl connection failed')) + raise error.Abort(_('ssl connection failed')) return sslsocket except AttributeError: def wrapsocket(sock, keyfile, certfile, ui, cert_reqs=ssl.CERT_NONE, @@ -62,7 +62,7 @@ except AttributeError: # closed # - see http://bugs.python.org/issue13721 if not sslsocket.cipher(): - raise util.Abort(_('ssl connection failed')) + raise error.Abort(_('ssl connection failed')) return sslsocket def _verifycert(cert, hostname): @@ -140,7 +140,7 @@ def sslkwargs(ui, host): elif cacerts: cacerts = util.expandpath(cacerts) if not os.path.exists(cacerts): - raise util.Abort(_('could not find web.cacerts: %s') % cacerts) + raise error.Abort(_('could not find web.cacerts: %s') % cacerts) else: cacerts = _defaultcacerts() if cacerts and cacerts != '!': @@ -163,15 +163,15 @@ class validator(object): hostfingerprint = self.ui.config('hostfingerprints', host) if not sock.cipher(): # work around http://bugs.python.org/issue13721 - raise util.Abort(_('%s ssl connection error') % host) + raise error.Abort(_('%s ssl connection error') % host) try: peercert = sock.getpeercert(True) peercert2 = sock.getpeercert() except AttributeError: - raise util.Abort(_('%s ssl connection error') % host) + raise error.Abort(_('%s ssl connection error') % host) if not peercert: - raise util.Abort(_('%s certificate error: ' + raise error.Abort(_('%s certificate error: ' 'no certificate received') % host) peerfingerprint = util.sha1(peercert).hexdigest() nicefingerprint = ":".join([peerfingerprint[x:x + 2] @@ -179,7 +179,7 @@ class validator(object): if hostfingerprint: if peerfingerprint.lower() != \ hostfingerprint.replace(':', '').lower(): - raise util.Abort(_('certificate for %s has unexpected ' + raise error.Abort(_('certificate for %s has unexpected ' 'fingerprint %s') % (host, nicefingerprint), hint=_('check hostfingerprint configuration')) self.ui.debug('%s certificate matched fingerprint %s\n' % @@ -187,13 +187,13 @@ class validator(object): elif cacerts != '!': msg = _verifycert(peercert2, host) if msg: - raise util.Abort(_('%s certificate error: %s') % (host, msg), + raise error.Abort(_('%s certificate error: %s') % (host, msg), hint=_('configure hostfingerprint %s or use ' '--insecure to connect insecurely') % nicefingerprint) self.ui.debug('%s certificate successfully verified\n' % host) elif strict: - raise util.Abort(_('%s certificate with fingerprint %s not ' + raise error.Abort(_('%s certificate with fingerprint %s not ' 'verified') % (host, nicefingerprint), hint=_('check hostfingerprints or web.cacerts ' 'config setting')) diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -171,9 +171,9 @@ class statichttprepository(localrepo.loc return statichttppeer(self) def lock(self, wait=True): - raise util.Abort(_('cannot lock static-http repository')) + raise error.Abort(_('cannot lock static-http repository')) def instance(ui, path, create): if create: - raise util.Abort(_('cannot create new static-http repository')) + raise error.Abort(_('cannot create new static-http repository')) return statichttprepository(ui, path[7:]) diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -6,7 +6,7 @@ # GNU General Public License version 2 or any later version. from i18n import _ -import scmutil, util, parsers +import scmutil, util, parsers, error import os, stat, errno _sha = util.sha1 @@ -405,7 +405,7 @@ class fncache(object): for n, line in enumerate(fp): if not line.rstrip('\n'): t = _('invalid entry in fncache, line %s') % (n + 1) - raise util.Abort(t) + raise error.Abort(t) fp.close() def write(self, tr): diff --git a/mercurial/streamclone.py b/mercurial/streamclone.py --- a/mercurial/streamclone.py +++ b/mercurial/streamclone.py @@ -123,11 +123,11 @@ def maybeperformlegacystreamclone(pullop raise error.ResponseError( _('unexpected response from remote server:'), l) if resp == 1: - raise util.Abort(_('operation forbidden by server')) + raise error.Abort(_('operation forbidden by server')) elif resp == 2: - raise util.Abort(_('locking the remote repository failed')) + raise error.Abort(_('locking the remote repository failed')) elif resp != 0: - raise util.Abort(_('the server sent an unknown error code')) + raise error.Abort(_('the server sent an unknown error code')) l = fp.readline() try: diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -95,7 +95,7 @@ def state(ctx, ui): return p.parse(f, data, sections, remap, read) else: - raise util.Abort(_("subrepo spec file \'%s\' not found") % + raise error.Abort(_("subrepo spec file \'%s\' not found") % repo.pathto(f)) if '.hgsub' in ctx: read('.hgsub') @@ -113,7 +113,7 @@ def state(ctx, ui): try: revision, path = l.split(" ", 1) except ValueError: - raise util.Abort(_("invalid subrepository revision " + raise error.Abort(_("invalid subrepository revision " "specifier in \'%s\' line %d") % (repo.pathto('.hgsubstate'), (i + 1))) rev[path] = revision @@ -133,7 +133,7 @@ def state(ctx, ui): try: src = re.sub(pattern, repl, src, 1) except re.error as e: - raise util.Abort(_("bad subrepository pattern in %s: %s") + raise error.Abort(_("bad subrepository pattern in %s: %s") % (p.source('subpaths', pattern), e)) return src @@ -142,7 +142,7 @@ def state(ctx, ui): kind = 'hg' if src.startswith('['): if ']' not in src: - raise util.Abort(_('missing ] in subrepo source')) + raise error.Abort(_('missing ] in subrepo source')) kind, src = src.split(']', 1) kind = kind[1:] src = src.lstrip() # strip any extra whitespace after ']' @@ -324,7 +324,7 @@ def _abssource(repo, push=False, abort=T # chop off the .hg component to get the default path form return os.path.dirname(repo.sharedpath) if abort: - raise util.Abort(_("default path for subrepository not found")) + raise error.Abort(_("default path for subrepository not found")) def _sanitize(ui, vfs, ignore): for dirname, dirs, names in vfs.walk(): @@ -353,7 +353,7 @@ def subrepo(ctx, path, allowwdir=False): pathutil.pathauditor(ctx.repo().root)(path) state = ctx.substate[path] if state[2] not in types: - raise util.Abort(_('unknown subrepo type %s') % state[2]) + raise error.Abort(_('unknown subrepo type %s') % state[2]) if allowwdir: state = (state[0], ctx.subrev(path), state[2]) return types[state[2]](ctx, path, state[:2]) @@ -371,7 +371,7 @@ def nullsubrepo(ctx, path, pctx): pathutil.pathauditor(ctx.repo().root)(path) state = ctx.substate[path] if state[2] not in types: - raise util.Abort(_('unknown subrepo type %s') % state[2]) + raise error.Abort(_('unknown subrepo type %s') % state[2]) subrev = '' if state[2] == 'hg': subrev = "0" * 40 @@ -384,7 +384,7 @@ def newcommitphase(ui, ctx): return commitphase check = ui.config('phases', 'checksubrepos', 'follow') if check not in ('ignore', 'follow', 'abort'): - raise util.Abort(_('invalid phases.checksubrepos configuration: %s') + raise error.Abort(_('invalid phases.checksubrepos configuration: %s') % (check)) if check == 'ignore': return commitphase @@ -398,7 +398,7 @@ def newcommitphase(ui, ctx): maxsub = s if commitphase < maxphase: if check == 'abort': - raise util.Abort(_("can't commit in %s phase" + raise error.Abort(_("can't commit in %s phase" " conflicting %s from subrepository %s") % (phases.phasenames[commitphase], phases.phasenames[maxphase], maxsub)) @@ -456,7 +456,7 @@ class abstractsubrepo(object): """ dirtyreason = self.dirtyreason(ignoreupdate=ignoreupdate) if dirtyreason: - raise util.Abort(dirtyreason) + raise error.Abort(dirtyreason) def basestate(self): """current working directory base state, disregarding .hgsubstate @@ -1073,7 +1073,7 @@ class svnsubrepo(abstractsubrepo): self._state = state self._exe = util.findexe('svn') if not self._exe: - raise util.Abort(_("'svn' executable not found for subrepo '%s'") + raise error.Abort(_("'svn' executable not found for subrepo '%s'") % self._path) def _svncommand(self, commands, filename='', failok=False): @@ -1108,7 +1108,8 @@ class svnsubrepo(abstractsubrepo): stderr = stderr.strip() if not failok: if p.returncode: - raise util.Abort(stderr or 'exited with code %d' % p.returncode) + raise error.Abort(stderr or 'exited with code %d' + % p.returncode) if stderr: self.ui.warn(stderr + '\n') return stdout, stderr @@ -1118,7 +1119,7 @@ class svnsubrepo(abstractsubrepo): output, err = self._svncommand(['--version', '--quiet'], filename=None) m = re.search(r'^(\d+)\.(\d+)', output) if not m: - raise util.Abort(_('cannot retrieve svn tool version')) + raise error.Abort(_('cannot retrieve svn tool version')) return (int(m.group(1)), int(m.group(2))) def _wcrevs(self): @@ -1196,11 +1197,11 @@ class svnsubrepo(abstractsubrepo): return self.basestate() if extchanged: # Do not try to commit externals - raise util.Abort(_('cannot commit svn externals')) + raise error.Abort(_('cannot commit svn externals')) if missing: # svn can commit with missing entries but aborting like hg # seems a better approach. - raise util.Abort(_('cannot commit missing svn entries')) + raise error.Abort(_('cannot commit missing svn entries')) commitinfo, err = self._svncommand(['commit', '-m', text]) self.ui.status(commitinfo) newrev = re.search('Committed revision ([0-9]+).', commitinfo) @@ -1210,8 +1211,8 @@ class svnsubrepo(abstractsubrepo): # svn one. For instance, svn ignores missing files # when committing. If there are only missing files, no # commit is made, no output and no error code. - raise util.Abort(_('failed to commit svn changes')) - raise util.Abort(commitinfo.splitlines()[-1]) + raise error.Abort(_('failed to commit svn changes')) + raise error.Abort(commitinfo.splitlines()[-1]) newrev = newrev.groups()[0] self.ui.status(self._svncommand(['update', '-r', newrev])[0]) return newrev @@ -1250,7 +1251,7 @@ class svnsubrepo(abstractsubrepo): self.remove() self.get(state, overwrite=False) return - raise util.Abort((status or err).splitlines()[-1]) + raise error.Abort((status or err).splitlines()[-1]) self.ui.status(status) @annotatesubrepoerror @@ -1307,7 +1308,7 @@ class gitsubrepo(abstractsubrepo): if versionstatus == 'unknown': self.ui.warn(_('cannot retrieve git version\n')) elif versionstatus == 'abort': - raise util.Abort(_('git subrepo requires at least 1.6.0 or later')) + raise error.Abort(_('git subrepo requires at least 1.6.0 or later')) elif versionstatus == 'warning': self.ui.warn(_('git subrepo requires at least 1.6.0 or later\n')) @@ -1394,7 +1395,7 @@ class gitsubrepo(abstractsubrepo): if command in ('cat-file', 'symbolic-ref'): return retdata, p.returncode # for all others, abort - raise util.Abort('git %s error %d in %s' % + raise error.Abort('git %s error %d in %s' % (command, p.returncode, self._relpath)) return retdata, p.returncode @@ -1491,7 +1492,7 @@ class gitsubrepo(abstractsubrepo): # try only origin: the originally cloned repo self._gitcommand(['fetch']) if not self._githavelocally(revision): - raise util.Abort(_("revision %s does not exist in subrepo %s\n") % + raise error.Abort(_("revision %s does not exist in subrepo %s\n") % (revision, self._relpath)) @annotatesubrepoerror @@ -1600,7 +1601,7 @@ class gitsubrepo(abstractsubrepo): @annotatesubrepoerror def commit(self, text, user, date): if self._gitmissing(): - raise util.Abort(_("subrepo %s is missing") % self._relpath) + raise error.Abort(_("subrepo %s is missing") % self._relpath) cmd = ['commit', '-a', '-m', text] env = os.environ.copy() if user: @@ -1646,7 +1647,7 @@ class gitsubrepo(abstractsubrepo): if not self._state[1]: return True if self._gitmissing(): - raise util.Abort(_("subrepo %s is missing") % self._relpath) + raise error.Abort(_("subrepo %s is missing") % self._relpath) # if a branch in origin contains the revision, nothing to do branch2rev, rev2branch = self._gitbranchmap() if self._state[1] in rev2branch: diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -270,7 +270,7 @@ def runfilter(context, mapping, data): dt = arg[1][1] else: dt = arg[1] - raise util.Abort(_("template filter '%s' is not compatible with " + raise error.Abort(_("template filter '%s' is not compatible with " "keyword '%s'") % (filt.func_name, dt)) def buildmap(exp, context): @@ -840,7 +840,7 @@ def stylelist(): stylelist.append(split[1]) return ", ".join(sorted(stylelist)) -class TemplateNotFound(util.Abort): +class TemplateNotFound(error.Abort): pass class templater(object): @@ -873,7 +873,7 @@ class templater(object): if not mapfile: return if not os.path.exists(mapfile): - raise util.Abort(_("style '%s' not found") % mapfile, + raise error.Abort(_("style '%s' not found") % mapfile, hint=_("available styles: %s") % stylelist()) conf = config.config(includepaths=templatepaths()) diff --git a/mercurial/transaction.py b/mercurial/transaction.py --- a/mercurial/transaction.py +++ b/mercurial/transaction.py @@ -71,7 +71,7 @@ def _playback(journal, report, opener, v except (IOError, OSError) as inst: if inst.errno != errno.ENOENT: raise - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: if not c: raise @@ -83,7 +83,7 @@ def _playback(journal, report, opener, v for f in backupfiles: if opener.exists(f): opener.unlink(f) - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: # only pure backup file remains, it is sage to ignore any error pass @@ -417,7 +417,7 @@ class transaction(object): if not f and b and vfs.exists(b): try: vfs.unlink(b) - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: if not c: raise # Abort may be raise by read only opener @@ -440,7 +440,7 @@ class transaction(object): if b and vfs.exists(b): try: vfs.unlink(b) - except (IOError, OSError, util.Abort) as inst: + except (IOError, OSError, error.Abort) as inst: if not c: raise # Abort may be raise by read only opener diff --git a/mercurial/treediscovery.py b/mercurial/treediscovery.py --- a/mercurial/treediscovery.py +++ b/mercurial/treediscovery.py @@ -16,7 +16,6 @@ from .node import ( ) from . import ( error, - util, ) def findcommonincoming(repo, remote, heads=None, force=False): @@ -149,7 +148,7 @@ def findcommonincoming(repo, remote, hea if force: repo.ui.warn(_("warning: repository is unrelated\n")) else: - raise util.Abort(_("repository is unrelated")) + raise error.Abort(_("repository is unrelated")) repo.ui.debug("found new changesets starting at " + " ".join([short(f) for f in fetch]) + "\n") diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -535,11 +535,12 @@ class ui(object): except KeyError: pass if not user: - raise util.Abort(_('no username supplied'), + raise error.Abort(_('no username supplied'), hint=_('use "hg config --edit" ' 'to set your username')) if "\n" in user: - raise util.Abort(_("username %s contains a newline\n") % repr(user)) + raise error.Abort(_("username %s contains a newline\n") + % repr(user)) return user def shortuser(self, user): @@ -755,7 +756,7 @@ class ui(object): self.write(r, "\n") return r except EOFError: - raise util.Abort(_('response expected')) + raise error.Abort(_('response expected')) @staticmethod def extractchoices(prompt): @@ -802,7 +803,7 @@ class ui(object): else: return getpass.getpass('') except EOFError: - raise util.Abort(_('response expected')) + raise error.Abort(_('response expected')) def status(self, *msg, **opts): '''write status message to output (if ui.quiet is False) @@ -858,7 +859,7 @@ class ui(object): self.system("%s \"%s\"" % (editor, name), environ=environ, - onerr=util.Abort, errprefix=_("edit failed")) + onerr=error.Abort, errprefix=_("edit failed")) f = open(name) t = f.read() diff --git a/mercurial/unionrepo.py b/mercurial/unionrepo.py --- a/mercurial/unionrepo.py +++ b/mercurial/unionrepo.py @@ -21,6 +21,7 @@ from .node import nullid from . import ( changelog, cmdutil, + error, filelog, localrepo, manifest, @@ -231,7 +232,7 @@ class unionrepository(localrepo.localrep def instance(ui, path, create): if create: - raise util.Abort(_('cannot create new union repository')) + raise error.Abort(_('cannot create new union repository')) parentpath = ui.config("bundle", "mainreporoot", "") if not parentpath: # try to find the correct path to the working directory repo diff --git a/mercurial/url.py b/mercurial/url.py --- a/mercurial/url.py +++ b/mercurial/url.py @@ -19,6 +19,7 @@ import urllib2 from .i18n import _ from . import ( + error, httpconnection as httpconnectionmod, keepalive, sslutil, @@ -48,7 +49,7 @@ class passwordmgr(urllib2.HTTPPasswordMg u = util.url(authuri) u.query = None if not self.ui.interactive(): - raise util.Abort(_('http authorization required for %s') % + raise error.Abort(_('http authorization required for %s') % util.hidepassword(str(u))) self.ui.write(_("http authorization required for %s\n") % diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -1925,7 +1925,7 @@ def getport(port): If port is an integer, it's returned as is. If it's a string, it's looked up using socket.getservbyname(). If there's no matching - service, util.Abort is raised. + service, error.Abort is raised. """ try: return int(port) diff --git a/mercurial/verify.py b/mercurial/verify.py --- a/mercurial/verify.py +++ b/mercurial/verify.py @@ -50,7 +50,7 @@ def _verify(repo): lrugetctx = util.lrucachefunc(repo.changectx) if not repo.url().startswith('file:'): - raise util.Abort(_("cannot verify bundle or remote repos")) + raise error.Abort(_("cannot verify bundle or remote repos")) def err(linkrev, msg, filename=None): if linkrev is not None: diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py --- a/mercurial/wireproto.py +++ b/mercurial/wireproto.py @@ -690,7 +690,7 @@ def pushkey(repo, proto, namespace, key, try: r = repo.pushkey(encoding.tolocal(namespace), encoding.tolocal(key), encoding.tolocal(old), new) or False - except util.Abort: + except error.Abort: r = False output = proto.restore() @@ -752,12 +752,12 @@ def unbundle(repo, proto, heads): fp.close() os.unlink(tempname) - except (error.BundleValueError, util.Abort, error.PushRaced) as exc: + except (error.BundleValueError, error.Abort, error.PushRaced) as exc: # handle non-bundle2 case first if not getattr(exc, 'duringunbundle2', False): try: raise - except util.Abort: + except error.Abort: # The old code we moved used sys.stderr directly. # We did not change it to minimise code change. # This need to be moved to something proper. @@ -798,7 +798,7 @@ def unbundle(repo, proto, heads): errpart.addparam('parttype', exc.parttype) if exc.params: errpart.addparam('params', '\0'.join(exc.params)) - except util.Abort as exc: + except error.Abort as exc: manargs = [('message', str(exc))] advargs = [] if exc.hint is not None: diff --git a/mercurial/worker.py b/mercurial/worker.py --- a/mercurial/worker.py +++ b/mercurial/worker.py @@ -14,7 +14,7 @@ import sys import threading from .i18n import _ -from . import util +from . import error def countcpus(): '''try to count the number of CPUs on the system''' @@ -45,7 +45,7 @@ def _numworkers(ui): if n >= 1: return n except ValueError: - raise util.Abort(_('number of cpus must be an integer')) + raise error.Abort(_('number of cpus must be an integer')) return min(max(countcpus(), 4), 32) if os.name == 'posix': diff --git a/tests/autodiff.py b/tests/autodiff.py --- a/tests/autodiff.py +++ b/tests/autodiff.py @@ -1,7 +1,7 @@ # Extension dedicated to test patch.diff() upgrade modes # # -from mercurial import cmdutil, scmutil, patch, util +from mercurial import cmdutil, scmutil, patch, error cmdtable = {} command = cmdutil.command(cmdtable) @@ -30,9 +30,9 @@ def autodiff(ui, repo, *pats, **opts): diffopts.git = False diffopts.upgrade = True def losedatafn(fn=None, **kwargs): - raise util.Abort('losing data for %s' % fn) + raise error.Abort('losing data for %s' % fn) else: - raise util.Abort('--git must be yes, no or auto') + raise error.Abort('--git must be yes, no or auto') node1, node2 = scmutil.revpair(repo, []) m = scmutil.match(repo[node2], pats, opts) diff --git a/tests/test-abort-checkin.t b/tests/test-abort-checkin.t --- a/tests/test-abort-checkin.t +++ b/tests/test-abort-checkin.t @@ -1,7 +1,7 @@ $ cat > abortcommit.py < from mercurial import util + > from mercurial import error > def hook(**args): - > raise util.Abort("no commits allowed") + > raise error.Abort("no commits allowed") > def reposetup(ui, repo): > repo.ui.setconfig("hooks", "pretxncommit.nocommits", hook) > EOF diff --git a/tests/test-addremove-similar.t b/tests/test-addremove-similar.t --- a/tests/test-addremove-similar.t +++ b/tests/test-addremove-similar.t @@ -69,7 +69,7 @@ should all fail $ cd .. -Issue1527: repeated addremove causes util.Abort +Issue1527: repeated addremove causes Abort $ hg init rep3; cd rep3 $ mkdir d diff --git a/tests/test-annotate.t b/tests/test-annotate.t --- a/tests/test-annotate.t +++ b/tests/test-annotate.t @@ -299,7 +299,7 @@ and (2) the extension to allow filelog m and its ancestor by overriding "repo._filecommit". $ cat > ../legacyrepo.py < from mercurial import node, util + > from mercurial import node, error > def reposetup(ui, repo): > class legacyrepo(repo.__class__): > def _filecommit(self, fctx, manifest1, manifest2, @@ -312,12 +312,12 @@ and its ancestor by overriding "repo._fi > meta = {} > copy = fctx.renamed() > if copy and copy[0] != fname: - > raise util.Abort('copying is not supported') + > raise error.Abort('copying is not supported') > if fparent2 != node.nullid: > changelist.append(fname) > return flog.add(text, meta, tr, linkrev, > fparent1, fparent2) - > raise util.Abort('only merging is supported') + > raise error.Abort('only merging is supported') > repo.__class__ = legacyrepo > EOF diff --git a/tests/test-bundle2-exchange.t b/tests/test-bundle2-exchange.t --- a/tests/test-bundle2-exchange.t +++ b/tests/test-bundle2-exchange.t @@ -453,7 +453,7 @@ Setting up > used to test error handling in bundle2 > """ > - > from mercurial import util + > from mercurial import error > from mercurial import bundle2 > from mercurial import exchange > from mercurial import extensions @@ -471,7 +471,7 @@ Setting up > > @bundle2.parthandler("test:abort") > def handleabort(op, part): - > raise util.Abort('Abandon ship!', hint="don't panic") + > raise error.Abort('Abandon ship!', hint="don't panic") > > def uisetup(ui): > exchange.b2partsgenmapping['failpart'] = _pushbundle2failpart diff --git a/tests/test-bundle2-format.t b/tests/test-bundle2-format.t --- a/tests/test-bundle2-format.t +++ b/tests/test-bundle2-format.t @@ -90,7 +90,7 @@ Create an extension to test bundle2 API > try: > bundler.addparam(*p) > except ValueError, exc: - > raise util.Abort('%s' % exc) + > raise error.Abort('%s' % exc) > > if opts['compress']: > bundler.setcompression(opts['compress']) @@ -164,7 +164,7 @@ Create an extension to test bundle2 API > for chunk in bundler.getchunks(): > file.write(chunk) > except RuntimeError, exc: - > raise util.Abort(exc) + > raise error.Abort(exc) > > @command('unbundle2', [], '') > def cmdunbundle2(ui, repo, replypath=None): @@ -178,9 +178,9 @@ Create an extension to test bundle2 API > op = bundle2.processbundle(repo, unbundler, lambda: tr) > tr.close() > except error.BundleValueError, exc: - > raise util.Abort('missing support for %s' % exc) + > raise error.Abort('missing support for %s' % exc) > except error.PushRaced, exc: - > raise util.Abort('push race: %s' % exc) + > raise error.Abort('push race: %s' % exc) > finally: > if tr is not None: > tr.release() @@ -204,7 +204,7 @@ Create an extension to test bundle2 API > try: > params = unbundler.params > except error.BundleValueError, exc: - > raise util.Abort('unknown parameters: %s' % exc) + > raise error.Abort('unknown parameters: %s' % exc) > ui.write('options count: %i\n' % len(params)) > for key in sorted(params): > ui.write('- %s\n' % key) diff --git a/tests/test-custom-filters.t b/tests/test-custom-filters.t --- a/tests/test-custom-filters.t +++ b/tests/test-custom-filters.t @@ -10,11 +10,11 @@ > EOF $ cat > prefix.py < from mercurial import util + > from mercurial import error > def stripprefix(s, cmd, filename, **kwargs): > header = '%s\n' % cmd > if s[:len(header)] != header: - > raise util.Abort('missing header "%s" in %s' % (cmd, filename)) + > raise error.Abort('missing header "%s" in %s' % (cmd, filename)) > return s[len(header):] > def insertprefix(s, cmd): > return '%s\n%s' % (cmd, s) diff --git a/tests/test-dirstate.t b/tests/test-dirstate.t --- a/tests/test-dirstate.t +++ b/tests/test-dirstate.t @@ -66,10 +66,10 @@ Verify that exceptions during a dirstate coherent (issue4353) $ cat > ../dirstateexception.py < from mercurial import merge, extensions, util + > from mercurial import merge, extensions, error > > def wraprecordupdates(orig, repo, actions, branchmerge): - > raise util.Abort("simulated error while recording dirstateupdates") + > raise error.Abort("simulated error while recording dirstateupdates") > > def reposetup(ui, repo): > extensions.wrapfunction(merge, 'recordupdates', wraprecordupdates) diff --git a/tests/test-fncache.t b/tests/test-fncache.t --- a/tests/test-fncache.t +++ b/tests/test-fncache.t @@ -202,12 +202,12 @@ Aborting lock does not prevent fncache w $ cat > exceptionext.py < import os - > from mercurial import commands, util + > from mercurial import commands, error > from mercurial.extensions import wrapfunction > > def lockexception(orig, vfs, lockname, wait, releasefn, *args, **kwargs): > def releasewrap(): - > raise util.Abort("forced lock failure") + > raise error.Abort("forced lock failure") > return orig(vfs, lockname, wait, releasewrap, *args, **kwargs) > > def reposetup(ui, repo): @@ -231,13 +231,13 @@ Aborting transaction prevents fncache ch $ cat > ../exceptionext.py < import os - > from mercurial import commands, util, localrepo + > from mercurial import commands, error, localrepo > from mercurial.extensions import wrapfunction > > def wrapper(orig, self, *args, **kwargs): > tr = orig(self, *args, **kwargs) > def fail(tr): - > raise util.Abort("forced transaction failure") + > raise error.Abort("forced transaction failure") > # zzz prefix to ensure it sorted after store.write > tr.addfinalize('zzz-forcefails', fail) > return tr @@ -262,19 +262,19 @@ Aborted transactions can be recovered la $ cat > ../exceptionext.py < import os - > from mercurial import commands, util, transaction, localrepo + > from mercurial import commands, error, transaction, localrepo > from mercurial.extensions import wrapfunction > > def trwrapper(orig, self, *args, **kwargs): > tr = orig(self, *args, **kwargs) > def fail(tr): - > raise util.Abort("forced transaction failure") + > raise error.Abort("forced transaction failure") > # zzz prefix to ensure it sorted after store.write > tr.addfinalize('zzz-forcefails', fail) > return tr > > def abortwrapper(orig, self, *args, **kwargs): - > raise util.Abort("forced transaction failure") + > raise error.Abort("forced transaction failure") > > def uisetup(ui): > wrapfunction(localrepo.localrepository, 'transaction', trwrapper) diff --git a/tests/test-histedit-edit.t b/tests/test-histedit-edit.t --- a/tests/test-histedit-edit.t +++ b/tests/test-histedit-edit.t @@ -298,11 +298,11 @@ modify the message check saving last-message.txt, at first $ cat > $TESTTMP/commitfailure.py < from mercurial import util + > from mercurial import error > def reposetup(ui, repo): > class commitfailure(repo.__class__): > def commit(self, *args, **kwargs): - > raise util.Abort('emulating unexpected abort') + > raise error.Abort('emulating unexpected abort') > repo.__class__ = commitfailure > EOF $ cat >> .hg/hgrc < hooktests.py < from mercurial import util + > from mercurial import error > > uncallable = 0 > @@ -421,7 +421,7 @@ preoutgoing hook can prevent outgoing ch > raise LocalException('exception from hook') > > def aborthook(**args): - > raise util.Abort('raise abort from hook') + > raise error.Abort('raise abort from hook') > > def brokenhook(**args): > return 1 + {} diff --git a/tests/test-lock-badness.t b/tests/test-lock-badness.t --- a/tests/test-lock-badness.t +++ b/tests/test-lock-badness.t @@ -14,7 +14,7 @@ Prepare Test that raising an exception in the release function doesn't cause the lock to choke $ cat > testlock.py << EOF - > from mercurial import cmdutil, error, util + > from mercurial import cmdutil, error, error > > cmdtable = {} > command = cmdutil.command(cmdtable) @@ -22,7 +22,7 @@ Test that raising an exception in the re > def acquiretestlock(repo, releaseexc): > def unlock(): > if releaseexc: - > raise util.Abort('expected release exception') + > raise error.Abort('expected release exception') > l = repo._lock(repo.vfs, 'testlock', False, unlock, None, 'test lock') > return l > @@ -35,7 +35,7 @@ Test that raising an exception in the re > try: > testlock = acquiretestlock(repo, False) > except error.LockHeld: - > raise util.Abort('lockfile on disk even after releasing!') + > raise error.Abort('lockfile on disk even after releasing!') > testlock.release() > EOF $ cat >> $HGRCPATH << EOF diff --git a/tests/test-merge1.t b/tests/test-merge1.t --- a/tests/test-merge1.t +++ b/tests/test-merge1.t @@ -214,10 +214,10 @@ isn't changed on the filesystem (see als $ cat > $TESTTMP/abort.py < # emulate aborting before "recordupdates()". in this case, files > # are changed without updating dirstate - > from mercurial import extensions, merge, util + > from mercurial import extensions, merge, error > def applyupdates(orig, *args, **kwargs): > orig(*args, **kwargs) - > raise util.Abort('intentional aborting') + > raise error.Abort('intentional aborting') > def extsetup(ui): > extensions.wrapfunction(merge, "applyupdates", applyupdates) > EOF diff --git a/tests/test-mq-qfold.t b/tests/test-mq-qfold.t --- a/tests/test-mq-qfold.t +++ b/tests/test-mq-qfold.t @@ -149,11 +149,11 @@ Test saving last-message.txt: $ hg qrefresh -m "original message" $ cat > $TESTTMP/commitfailure.py < from mercurial import util + > from mercurial import error > def reposetup(ui, repo): > class commitfailure(repo.__class__): > def commit(self, *args, **kwargs): - > raise util.Abort('emulating unexpected abort') + > raise error.Abort('emulating unexpected abort') > repo.__class__ = commitfailure > EOF diff --git a/tests/test-mq-qnew.t b/tests/test-mq-qnew.t --- a/tests/test-mq-qnew.t +++ b/tests/test-mq-qnew.t @@ -248,11 +248,11 @@ Test saving last-message.txt $ cd repo $ cat > $TESTTMP/commitfailure.py < from mercurial import util + > from mercurial import error > def reposetup(ui, repo): > class commitfailure(repo.__class__): > def commit(self, *args, **kwargs): - > raise util.Abort('emulating unexpected abort') + > raise error.Abort('emulating unexpected abort') > repo.__class__ = commitfailure > EOF $ cat >> .hg/hgrc < EOF $ cat > $TESTTMP/commitfailure.py < from mercurial import util + > from mercurial import error > def reposetup(ui, repo): > class commitfailure(repo.__class__): > def commit(self, *args, **kwargs): - > raise util.Abort('emulating unexpected abort') + > raise error.Abort('emulating unexpected abort') > repo.__class__ = commitfailure > EOF diff --git a/tests/test-simplemerge.py b/tests/test-simplemerge.py --- a/tests/test-simplemerge.py +++ b/tests/test-simplemerge.py @@ -15,7 +15,7 @@ import unittest from unittest import TestCase -from mercurial import util, simplemerge +from mercurial import util, simplemerge, error # bzr compatible interface, for the tests class Merge3(simplemerge.Merge3Text): @@ -29,7 +29,7 @@ class Merge3(simplemerge.Merge3Text): atext = '\n'.join([i.strip('\n') for i in a] + ['']) btext = '\n'.join([i.strip('\n') for i in b] + ['']) if util.binary(basetext) or util.binary(atext) or util.binary(btext): - raise util.Abort("don't know how to merge binary files") + raise error.Abort("don't know how to merge binary files") simplemerge.Merge3Text.__init__(self, basetext, atext, btext, base, a, b) @@ -321,7 +321,7 @@ bbb self.assertEquals(ml, MERGED_RESULT) def test_binary(self): - self.assertRaises(util.Abort, Merge3, ['\x00'], ['a'], ['b']) + self.assertRaises(error.Abort, Merge3, ['\x00'], ['a'], ['b']) def test_dos_text(self): base_text = 'a\r\n' diff --git a/tests/test-subrepo.t b/tests/test-subrepo.t --- a/tests/test-subrepo.t +++ b/tests/test-subrepo.t @@ -1028,8 +1028,8 @@ Create repo without default path, pull t Ensure a full traceback, not just the SubrepoAbort part - $ hg -R issue1852b update --traceback 2>&1 | grep 'raise util\.Abort' - raise util.Abort(_("default path for subrepository not found")) + $ hg -R issue1852b update --traceback 2>&1 | grep 'raise error\.Abort' + raise error.Abort(_("default path for subrepository not found")) Pull -u now doesn't help diff --git a/tests/test-trusted.py b/tests/test-trusted.py --- a/tests/test-trusted.py +++ b/tests/test-trusted.py @@ -166,7 +166,7 @@ print u2.config('foobar', 'baz', untrust print print "# error handling" -def assertraises(f, exc=util.Abort): +def assertraises(f, exc=error.Abort): try: f() except exc as inst: