# HG changeset patch # User Gregory Szorc # Date 2015-06-24 05:20:08 # Node ID 328739ea70c3aeab1b865f00db7d78660e99666b # Parent d60678a567a9be275a7bb90c4031f41d92157050 global: mass rewrite to use modern exception syntax Python 2.6 introduced the "except type as instance" syntax, replacing the "except type, instance" syntax that came before. Python 3 dropped support for the latter syntax. Since we no longer support Python 2.4 or 2.5, we have no need to continue supporting the "except type, instance". This patch mass rewrites the exception syntax to be Python 2.6+ and Python 3 compatible. This patch was produced by running `2to3 -f except -w -n .`. diff --git a/contrib/check-code.py b/contrib/check-code.py --- a/contrib/check-code.py +++ b/contrib/check-code.py @@ -455,7 +455,7 @@ def checkfile(f, logfunc=_defaultlogger. try: fp = open(f) - except IOError, e: + except IOError as e: print "Skipping %s, %s" % (f, str(e).split(':', 1)[0]) return result pre = post = fp.read() diff --git a/contrib/import-checker.py b/contrib/import-checker.py --- a/contrib/import-checker.py +++ b/contrib/import-checker.py @@ -328,7 +328,7 @@ def find_cycles(imports): for mod in sorted(imports.iterkeys()): try: checkmod(mod, imports) - except CircularImport, e: + except CircularImport as e: cycle = e.args[0] cycles.add(" -> ".join(rotatecycle(cycle))) return cycles diff --git a/contrib/revsetbenchmarks.py b/contrib/revsetbenchmarks.py --- a/contrib/revsetbenchmarks.py +++ b/contrib/revsetbenchmarks.py @@ -33,7 +33,7 @@ def update(rev): """update the repo to a revision""" try: check_call(['hg', 'update', '--quiet', '--check', str(rev)]) - except CalledProcessError, exc: + except CalledProcessError as exc: print >> sys.stderr, 'update to revision %s failed, aborting' % rev sys.exit(exc.returncode) @@ -56,7 +56,7 @@ def perf(revset, target=None): try: output = hg(['perfrevset', revset], repo=target) return parseoutput(output) - except CalledProcessError, exc: + except CalledProcessError as exc: print >> sys.stderr, 'abort: cannot run revset benchmark: %s' % exc.cmd if exc.output is None: print >> sys.stderr, '(no ouput)' @@ -201,7 +201,7 @@ def getrevs(spec): """get the list of rev matched by a revset""" try: out = check_output(['hg', 'log', '--template={rev}\n', '--rev', spec]) - except CalledProcessError, exc: + except CalledProcessError as exc: print >> sys.stderr, "abort, can't get revision from %s" % spec sys.exit(exc.returncode) return [r for r in out.split() if r] diff --git a/contrib/synthrepo.py b/contrib/synthrepo.py --- a/contrib/synthrepo.py +++ b/contrib/synthrepo.py @@ -253,7 +253,7 @@ def synthesize(ui, repo, descpath, **opt ''' try: fp = hg.openpath(ui, descpath) - except Exception, err: + except Exception as err: raise util.Abort('%s: %s' % (descpath, err[0].strerror)) desc = json.load(fp) fp.close() @@ -285,7 +285,7 @@ def synthesize(ui, repo, descpath, **opt dictfile = opts.get('dict') or '/usr/share/dict/words' try: fp = open(dictfile, 'rU') - except IOError, err: + except IOError as err: raise util.Abort('%s: %s' % (dictfile, err.strerror)) words = fp.read().splitlines() fp.close() diff --git a/hgext/blackbox.py b/hgext/blackbox.py --- a/hgext/blackbox.py +++ b/hgext/blackbox.py @@ -52,14 +52,14 @@ def wrapui(ui): def rotate(oldpath, newpath): try: os.unlink(newpath) - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: self.debug("warning: cannot remove '%s': %s\n" % (newpath, err.strerror)) try: if newpath: os.rename(oldpath, newpath) - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: self.debug("warning: cannot rename '%s' to '%s': %s\n" % (newpath, oldpath, err.strerror)) @@ -92,7 +92,7 @@ def wrapui(ui): elif util.safehasattr(self, '_bbopener'): try: self._blackbox = self._openlogfile() - except (IOError, OSError), err: + except (IOError, OSError) as err: self.debug('warning: cannot write to blackbox.log: %s\n' % err.strerror) del self._bbopener @@ -110,7 +110,7 @@ def wrapui(ui): formattedmsg = msg[0] % msg[1:] try: blackbox.write('%s %s> %s' % (date, user, formattedmsg)) - except IOError, err: + except IOError as err: self.debug('warning: cannot write to blackbox.log: %s\n' % err.strerror) lastblackbox = blackbox diff --git a/hgext/bugzilla.py b/hgext/bugzilla.py --- a/hgext/bugzilla.py +++ b/hgext/bugzilla.py @@ -357,7 +357,7 @@ class bzmysql(bzaccess): try: import MySQLdb as mysql bzmysql._MySQLdb = mysql - except ImportError, err: + except ImportError as err: raise util.Abort(_('python mysql support not available: %s') % err) bzaccess.__init__(self, ui) @@ -910,5 +910,5 @@ def hook(ui, repo, hooktype, node=None, for bug in bugs: bz.update(bug, bugs[bug], ctx) bz.notify(bugs, util.email(ctx.user())) - except Exception, e: + except Exception as e: raise util.Abort(_('Bugzilla error: %s') % e) diff --git a/hgext/censor.py b/hgext/censor.py --- a/hgext/censor.py +++ b/hgext/censor.py @@ -147,7 +147,7 @@ def censor(ui, repo, path, rev='', tombs # Immediate children of censored node must be re-added as fulltext. try: revdata = flog.revision(srev) - except error.CensoredNodeError, e: + except error.CensoredNodeError as e: revdata = e.tombstone dlen = rewrite(srev, offset, revdata) else: diff --git a/hgext/churn.py b/hgext/churn.py --- a/hgext/churn.py +++ b/hgext/churn.py @@ -26,7 +26,7 @@ def maketemplater(ui, repo, tmpl): try: t = cmdutil.changeset_templater(ui, repo, False, None, tmpl, None, False) - except SyntaxError, inst: + except SyntaxError as inst: raise util.Abort(inst.args[0]) return t diff --git a/hgext/color.py b/hgext/color.py --- a/hgext/color.py +++ b/hgext/color.py @@ -194,7 +194,7 @@ def _terminfosetup(ui, mode): try: curses.setupterm() - except curses.error, e: + except curses.error as e: _terminfo_params = {} return diff --git a/hgext/convert/common.py b/hgext/convert/common.py --- a/hgext/convert/common.py +++ b/hgext/convert/common.py @@ -427,7 +427,7 @@ class mapfile(dict): return try: fp = open(self.path, 'r') - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise return @@ -451,7 +451,7 @@ class mapfile(dict): if self.fp is None: try: self.fp = open(self.path, 'a') - except IOError, err: + except IOError as err: raise util.Abort(_('could not open map file %r: %s') % (self.path, err.strerror)) self.fp.write('%s %s\n' % (key, value)) diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py +++ b/hgext/convert/convcmd.py @@ -54,7 +54,7 @@ def convertsource(ui, path, type, rev): try: if not type or name == type: return source(ui, path, rev), sortmode - except (NoRepo, MissingTool), inst: + except (NoRepo, MissingTool) as inst: exceptions.append(inst) if not ui.quiet: for inst in exceptions: @@ -68,9 +68,9 @@ def convertsink(ui, path, type): try: if not type or name == type: return sink(ui, path) - except NoRepo, inst: + except NoRepo as inst: ui.note(_("convert: %s\n") % inst) - except MissingTool, inst: + except MissingTool as inst: raise util.Abort('%s\n' % inst) raise util.Abort(_('%s: unknown repository type') % path) diff --git a/hgext/convert/cvs.py b/hgext/convert/cvs.py --- a/hgext/convert/cvs.py +++ b/hgext/convert/cvs.py @@ -136,7 +136,7 @@ class convert_cvs(converter_source): passw = part2 break pf.close() - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: if not getattr(inst, 'filename', None): inst.filename = cvspass diff --git a/hgext/convert/cvsps.py b/hgext/convert/cvsps.py --- a/hgext/convert/cvsps.py +++ b/hgext/convert/cvsps.py @@ -179,7 +179,7 @@ def createlog(ui, directory=None, root=" break ui.note(_('cache has %d log entries\n') % len(oldlog)) - except Exception, e: + except Exception as e: ui.note(_('error reading cache: %r\n') % e) if oldlog: @@ -824,7 +824,7 @@ def debugcvsps(ui, *args, **opts): log += createlog(ui, d, root=opts["root"], cache=cache) else: log = createlog(ui, root=opts["root"], cache=cache) - except logerror, e: + except logerror as e: ui.write("%r\n"%e) return diff --git a/hgext/convert/darcs.py b/hgext/convert/darcs.py --- a/hgext/convert/darcs.py +++ b/hgext/convert/darcs.py @@ -197,7 +197,7 @@ class darcs_source(converter_source, com try: data = util.readfile(path) mode = os.lstat(path).st_mode - except IOError, inst: + except IOError as inst: if inst.errno == errno.ENOENT: return None, None raise diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -42,7 +42,7 @@ class mercurial_sink(converter_sink): if not self.repo.local(): raise NoRepo(_('%s is not a local Mercurial repository') % path) - except error.RepoError, err: + except error.RepoError as err: ui.traceback() raise NoRepo(err.args[0]) else: @@ -487,7 +487,7 @@ class mercurial_source(converter_source) copies[name] = copysource except TypeError: pass - except error.LookupError, e: + except error.LookupError as e: if not self.ignoreerrors: raise self.ignored.add(name) diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py --- a/hgext/convert/subversion.py +++ b/hgext/convert/subversion.py @@ -126,7 +126,7 @@ def get_log_child(fp, url, paths, start, except IOError: # Caller may interrupt the iteration pickle.dump(None, fp, protocol) - except Exception, inst: + except Exception as inst: pickle.dump(str(inst), fp, protocol) else: pickle.dump(None, fp, protocol) @@ -216,7 +216,7 @@ def httpcheck(ui, path, proto): opener = urllib2.build_opener() rsp = opener.open('%s://%s/!svn/ver/0/.svn' % (proto, path)) data = rsp.read() - except urllib2.HTTPError, inst: + except urllib2.HTTPError as inst: if inst.code != 404: # Except for 404 we cannot know for sure this is not an svn repo ui.warn(_('svn: cannot probe remote repository, assume it could ' @@ -944,7 +944,8 @@ class svn_source(converter_source): firstcset.parents.append(latest) except SvnPathNotFound: pass - except SubversionException, (inst, num): + 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') % to_revnum) @@ -970,7 +971,7 @@ class svn_source(converter_source): info = info[-1] mode = ("svn:executable" in info) and 'x' or '' mode = ("svn:special" in info) and 'l' or mode - except SubversionException, e: + except SubversionException as e: notfound = (svn.core.SVN_ERR_FS_NOT_FOUND, svn.core.SVN_ERR_RA_DAV_PATH_NOT_FOUND) if e.apr_err in notfound: # File not found diff --git a/hgext/convert/transport.py b/hgext/convert/transport.py --- a/hgext/convert/transport.py +++ b/hgext/convert/transport.py @@ -87,7 +87,8 @@ class SvnRaTransport(object): self.ra = svn.client.open_ra_session( self.svn_url, self.client, self.pool) - except SubversionException, (inst, num): + except SubversionException as xxx_todo_changeme: + (inst, num) = xxx_todo_changeme.args if num in (svn.core.SVN_ERR_RA_ILLEGAL_URL, svn.core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED, svn.core.SVN_ERR_BAD_URL): diff --git a/hgext/eol.py b/hgext/eol.py --- a/hgext/eol.py +++ b/hgext/eol.py @@ -218,7 +218,7 @@ def parseeol(ui, repo, nodes): return eolfile(ui, repo.root, data) except (IOError, LookupError): pass - except error.ParseError, inst: + except error.ParseError as inst: ui.warn(_("warning: ignoring .hgeol file due to parse error " "at %s: %s\n") % (inst.args[1], inst.args[0])) return None diff --git a/hgext/gpg.py b/hgext/gpg.py --- a/hgext/gpg.py +++ b/hgext/gpg.py @@ -283,7 +283,7 @@ def sign(ui, repo, *revs, **opts): editor = cmdutil.getcommiteditor(editform='gpg.sign', **opts) repo.commit(message, opts['user'], opts['date'], match=msigs, editor=editor) - except ValueError, inst: + except ValueError as inst: raise util.Abort(str(inst)) def shortkey(ui, key): diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -222,7 +222,7 @@ class histeditstate(object): """Load histedit state from disk and set fields appropriately.""" try: fp = self.repo.vfs('histedit-state', 'r') - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise raise util.Abort(_('no histedit in progress')) diff --git a/hgext/largefiles/basestore.py b/hgext/largefiles/basestore.py --- a/hgext/largefiles/basestore.py +++ b/hgext/largefiles/basestore.py @@ -96,7 +96,7 @@ class basestore(object): try: gothash = self._getfile(tmpfile, filename, hash) - except StoreError, err: + except StoreError as err: self.ui.warn(err.longmessage()) gothash = "" tmpfile.close() diff --git a/hgext/largefiles/lfcommands.py b/hgext/largefiles/lfcommands.py --- a/hgext/largefiles/lfcommands.py +++ b/hgext/largefiles/lfcommands.py @@ -391,7 +391,7 @@ def cachelfiles(ui, repo, node, filelist for lfile in lfiles: try: expectedhash = repo[node][lfutil.standin(lfile)].data().strip() - except IOError, err: + except IOError as err: if err.errno == errno.ENOENT: continue # node must be None and standin wasn't found in wctx raise diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -580,7 +580,7 @@ def overridecopy(orig, ui, repo, pats, o installnormalfilesmatchfn(repo[None].manifest()) try: result = orig(ui, repo, pats, opts, rename) - except util.Abort, e: + except util.Abort as e: if str(e) != _('no files to copy'): raise e else: @@ -682,7 +682,7 @@ def overridecopy(orig, ui, repo, pats, o lfdirstate.add(destlfile) lfdirstate.write() - except util.Abort, e: + except util.Abort as e: if str(e) != _('no files to copy'): raise e else: diff --git a/hgext/largefiles/proto.py b/hgext/largefiles/proto.py --- a/hgext/largefiles/proto.py +++ b/hgext/largefiles/proto.py @@ -37,7 +37,7 @@ def putlfile(repo, proto, sha): raise IOError(0, _('largefile contents do not match hash')) tmpfp.close() lfutil.linktousercache(repo, sha) - except IOError, e: + except IOError as e: repo.ui.warn(_('largefiles: failed to put %s into store: %s\n') % (sha, e.strerror)) return wireproto.pushres(1) diff --git a/hgext/largefiles/remotestore.py b/hgext/largefiles/remotestore.py --- a/hgext/largefiles/remotestore.py +++ b/hgext/largefiles/remotestore.py @@ -38,7 +38,7 @@ class remotestore(basestore.basestore): try: fd = lfutil.httpsendfile(self.ui, filename) return self._put(hash, fd) - except IOError, e: + except IOError as e: raise util.Abort( _('remotestore: could not open file %s: %s') % (filename, str(e))) @@ -49,17 +49,17 @@ class remotestore(basestore.basestore): def _getfile(self, tmpfile, filename, hash): try: chunks = self._get(hash) - except urllib2.HTTPError, e: + except urllib2.HTTPError as e: # 401s get converted to util.Aborts; everything else is fine being # turned into a StoreError raise basestore.StoreError(filename, hash, self.url, str(e)) - except urllib2.URLError, 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' % (util.hidepassword(self.url), e.reason)) - except IOError, e: + except IOError as e: raise basestore.StoreError(filename, hash, self.url, str(e)) return lfutil.copyandhash(chunks, tmpfile) diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -448,7 +448,7 @@ class queue(object): try: lines = self.opener.read(self.statuspath).splitlines() return list(parselines(lines)) - except IOError, e: + except IOError as e: if e.errno == errno.ENOENT: return [] raise @@ -457,7 +457,7 @@ class queue(object): def fullseries(self): try: return self.opener.read(self.seriespath).splitlines() - except IOError, e: + except IOError as e: if e.errno == errno.ENOENT: return [] raise @@ -574,7 +574,7 @@ class queue(object): self.activeguards = [] try: guards = self.opener.read(self.guardspath).split() - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise guards = [] @@ -675,7 +675,7 @@ class queue(object): return try: os.unlink(undo) - except OSError, inst: + except OSError as inst: self.ui.warn(_('error removing undo: %s\n') % str(inst)) def backup(self, repo, files, copy=False): @@ -804,7 +804,7 @@ class queue(object): fuzz = patchmod.patch(self.ui, repo, patchfile, strip=1, files=files, eolmode=None) return (True, list(files), fuzz) - except Exception, inst: + except Exception as inst: self.ui.note(str(inst) + '\n') if not self.ui.verbose: self.ui.warn(_("patch failed, unable to continue (try -v)\n")) @@ -959,7 +959,7 @@ class queue(object): for p in patches: try: os.unlink(self.join(p)) - except OSError, inst: + except OSError as inst: if inst.errno != errno.ENOENT: raise @@ -1159,7 +1159,7 @@ class queue(object): try: # if patch file write fails, abort early p = self.opener(patchfn, "w") - except IOError, e: + except IOError as e: raise util.Abort(_('cannot write patch "%s": %s') % (patchfn, e.strerror)) try: @@ -1816,7 +1816,7 @@ class queue(object): raise util.Abort(_("patch queue directory already exists")) try: os.mkdir(self.path) - except OSError, inst: + except OSError as inst: if inst.errno != errno.EEXIST or not create: raise if create: diff --git a/hgext/notify.py b/hgext/notify.py --- a/hgext/notify.py +++ b/hgext/notify.py @@ -276,7 +276,7 @@ class notifier(object): p = email.Parser.Parser() try: msg = p.parsestr(data) - except email.Errors.MessageParseError, inst: + except email.Errors.MessageParseError as inst: raise util.Abort(inst) # store sender and subject diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py --- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -628,7 +628,7 @@ def patchbomb(ui, repo, *revs, **opts): try: generator.flatten(m, 0) fp.write('\n') - except IOError, inst: + except IOError as inst: if inst.errno != errno.EPIPE: raise if fp is not ui: diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -838,7 +838,7 @@ def restorestatus(repo): _setrebasesetvisibility(repo, state.keys()) return (originalwd, target, state, skipped, collapse, keep, keepbranches, external, activebookmark) - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise raise util.Abort(_('no rebase in progress')) diff --git a/hgext/relink.py b/hgext/relink.py --- a/hgext/relink.py +++ b/hgext/relink.py @@ -178,7 +178,7 @@ def do_relink(src, dst, files, ui): ui.progress(_('relinking'), pos, f, _('files'), total) relinked += 1 savedbytes += sz - except OSError, inst: + except OSError as inst: ui.warn('%s: %s\n' % (tgt, str(inst))) ui.progress(_('relinking'), None) diff --git a/hgext/share.py b/hgext/share.py --- a/hgext/share.py +++ b/hgext/share.py @@ -84,7 +84,7 @@ def _hassharedbookmarks(repo): """Returns whether this repo has shared bookmarks""" try: shared = repo.vfs.read('shared').splitlines() - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise return False diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -69,7 +69,7 @@ class shelvedfile(object): def opener(self, mode='rb'): try: return self.vfs(self.fname, mode) - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise raise util.Abort(_("shelved change '%s' not found") % self.name) @@ -294,7 +294,7 @@ def deletecmd(ui, repo, pats): for name in pats: for suffix in 'hg patch'.split(): shelvedfile(repo, name, suffix).unlink() - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise raise util.Abort(_("shelved change '%s' not found") % name) @@ -305,7 +305,7 @@ def listshelves(repo): """return all shelves in repo as list of (time, filename)""" try: names = repo.vfs.readdir('shelved') - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise return [] @@ -532,7 +532,7 @@ def unshelve(ui, repo, *shelved, **opts) try: state = shelvedstate.load(repo) - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise raise util.Abort(_('no unshelve operation underway')) diff --git a/hgext/transplant.py b/hgext/transplant.py --- a/hgext/transplant.py +++ b/hgext/transplant.py @@ -272,7 +272,7 @@ class transplanter(object): files = set() patch.patch(self.ui, repo, patchfile, files=files, eolmode=None) files = list(files) - except Exception, inst: + except Exception as inst: seriespath = os.path.join(self.path, 'series') if os.path.exists(seriespath): os.unlink(seriespath) diff --git a/i18n/polib.py b/i18n/polib.py --- a/i18n/polib.py +++ b/i18n/polib.py @@ -1276,7 +1276,7 @@ class _POFileParser(object): (action, state) = self.transitions[(symbol, self.current_state)] if action(): self.current_state = state - except Exception, exc: + except Exception as exc: raise IOError('Syntax error in po file (line %s)' % linenum) # state handlers diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -45,7 +45,7 @@ class bmstore(dict): self[refspec] = repo.changelog.lookup(sha) except LookupError: pass - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise @@ -54,7 +54,7 @@ class bmstore(dict): if 'HG_PENDING' in os.environ: try: bkfile = repo.vfs('bookmarks.pending') - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise if bkfile is None: @@ -116,7 +116,7 @@ def readactive(repo): mark = None try: file = repo.vfs('bookmarks.current') - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise return None @@ -159,7 +159,7 @@ def deactivate(repo): try: repo.vfs.unlink('bookmarks.current') repo._activebookmark = None - except OSError, inst: + except OSError as inst: if inst.errno != errno.ENOENT: raise finally: diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -55,7 +55,7 @@ def read(repo): partial._closednodes.add(node) except KeyboardInterrupt: raise - except Exception, inst: + except Exception as inst: if repo.ui.debugflag: msg = 'invalid branchheads cache' if repo.filtername is not None: @@ -203,7 +203,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), inst: + except (IOError, OSError, util.Abort) as inst: repo.ui.debug("couldn't write branch cache: %s\n" % inst) # Abort may be raise by read only opener pass @@ -315,7 +315,7 @@ class revbranchcache(object): bndata = repo.vfs.read(_rbcnames) self._rbcsnameslen = len(bndata) # for verification before writing self._names = [encoding.tolocal(bn) for bn in bndata.split('\0')] - except (IOError, OSError), inst: + except (IOError, OSError) as inst: if readonly: # don't try to use cache - fall back to the slow path self.branchinfo = self._branchinfo @@ -324,7 +324,7 @@ class revbranchcache(object): try: data = repo.vfs.read(_rbcrevs) self._rbcrevs.fromstring(data) - except (IOError, OSError), inst: + except (IOError, OSError) as inst: repo.ui.debug("couldn't read revision branch cache: %s\n" % inst) # remember number of good records on disk @@ -418,7 +418,7 @@ class revbranchcache(object): for b in self._names[self._rbcnamescount:])) self._rbcsnameslen = f.tell() f.close() - except (IOError, OSError, util.Abort), inst: + except (IOError, OSError, util.Abort) as inst: repo.ui.debug("couldn't write revision branch cache names: " "%s\n" % inst) return @@ -436,7 +436,7 @@ class revbranchcache(object): end = revs * _rbcrecsize f.write(self._rbcrevs[start:end]) f.close() - except (IOError, OSError, util.Abort), inst: + except (IOError, OSError, util.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 @@ -336,7 +336,7 @@ def processbundle(repo, unbundler, trans try: for nbpart, part in iterparts: _processpart(op, part) - except BaseException, exc: + except BaseException as exc: for nbpart, part in iterparts: # consume the bundle content part.seek(0, 2) @@ -380,7 +380,7 @@ def _processpart(op, part): raise error.UnsupportedPartError(parttype=part.type, params=unknownparams) status = 'supported' - except error.UnsupportedPartError, exc: + except error.UnsupportedPartError as exc: if part.mandatory: # mandatory parts raise indebug(op.ui, 'ignoring unsupported advisory part %s' % exc) @@ -585,7 +585,7 @@ class unpackermixin(object): if self._seekable: try: return self._fp.tell() - except IOError, e: + except IOError as e: if e.errno == errno.ESPIPE: self._seekable = False else: @@ -841,7 +841,7 @@ class bundlepart(object): outdebug(ui, 'payload chunk size: %i' % len(chunk)) yield _pack(_fpayloadsize, len(chunk)) yield chunk - except BaseException, exc: + except BaseException as exc: # backup exception data for later ui.debug('bundle2-input-stream-interrupt: encoding exception %s' % exc) @@ -1248,7 +1248,7 @@ def handleremotechangegroup(op, inpart): part.addparam('return', '%i' % ret, mandatory=False) try: real_part.validate() - except util.Abort, e: + except util.Abort as e: raise util.Abort(_('bundle at %s is corrupted:\n%s') % (util.hidepassword(raw_url), str(e))) assert not inpart.read() diff --git a/mercurial/byterange.py b/mercurial/byterange.py --- a/mercurial/byterange.py +++ b/mercurial/byterange.py @@ -264,7 +264,7 @@ class FTPRangeHandler(urllib2.FTPHandler try: host = socket.gethostbyname(host) - except socket.error, msg: + except socket.error as msg: raise urllib2.URLError(msg) path, attrs = splitattr(req.get_selector()) dirs = path.split('/') @@ -322,7 +322,7 @@ class FTPRangeHandler(urllib2.FTPHandler headers += "Content-Length: %d\n" % retrlen headers = email.message_from_string(headers) return addinfourl(fp, headers, req.get_full_url()) - except ftplib.all_errors, msg: + except ftplib.all_errors as msg: raise IOError('ftp error', msg) def connect_ftp(self, user, passwd, host, port, dirs): @@ -352,7 +352,7 @@ class ftpwrapper(urllib.ftpwrapper): # Use nlst to see if the file exists at all try: self.ftp.nlst(file) - except ftplib.error_perm, reason: + except ftplib.error_perm as reason: raise IOError('ftp error', reason) # Restore the transfer mode! self.ftp.voidcmd(cmd) @@ -360,7 +360,7 @@ class ftpwrapper(urllib.ftpwrapper): try: cmd = 'RETR ' + file conn = self.ftp.ntransfercmd(cmd, rest) - except ftplib.error_perm, reason: + except ftplib.error_perm as reason: if str(reason).startswith('501'): # workaround for REST not supported error fp, retrlen = self.retrfile(file, type) diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -491,7 +491,7 @@ class cg1packer(object): if revlog.iscensored(base) or revlog.iscensored(rev): try: delta = revlog.revision(node) - except error.CensoredNodeError, e: + except error.CensoredNodeError as e: delta = e.tombstone if base == nullrev: prefix = mdiff.trivialdiffheader(len(delta)) @@ -665,7 +665,7 @@ def addchangegroupfiles(repo, source, re try: if not fl.addgroup(source, revmap, trp): raise util.Abort(_("received file revlog group is empty")) - except error.CensoredBaseError, e: + except error.CensoredBaseError as e: raise util.Abort(_("received delta base is censored: %s") % e) revisions += len(fl) - o files += 1 diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -119,7 +119,7 @@ def dorecord(ui, repo, commitfunc, cmdsu # 1. filter patch, so we have intending-to apply subset of it try: chunks = filterfn(ui, originalchunks) - except patch.PatchError, err: + except patch.PatchError as err: raise util.Abort(_('error parsing patch: %s') % err) # We need to keep a backup of files that have been newly added and @@ -153,7 +153,7 @@ def dorecord(ui, repo, commitfunc, cmdsu backupdir = repo.join('record-backups') try: os.mkdir(backupdir) - except OSError, err: + except OSError as err: if err.errno != errno.EEXIST: raise try: @@ -189,7 +189,7 @@ def dorecord(ui, repo, commitfunc, cmdsu ui.debug('applying patch\n') ui.debug(fp.getvalue()) patch.internalpatch(ui, repo, fp, 1, eolmode=None) - except patch.PatchError, err: + except patch.PatchError as err: raise util.Abort(str(err)) del fp @@ -309,7 +309,7 @@ def logmessage(ui, opts): message = ui.fin.read() else: message = '\n'.join(util.readfile(logfile).splitlines()) - except IOError, inst: + except IOError as inst: raise util.Abort(_("can't read commit message '%s': %s") % (logfile, inst.strerror)) return message @@ -418,7 +418,7 @@ def makefilename(repo, pat, node, desc=N newname.append(c) i += 1 return ''.join(newname) - except KeyError, inst: + except KeyError as inst: raise util.Abort(_("invalid format spec '%%%s' in output filename") % inst.args[0]) @@ -605,7 +605,7 @@ def copy(ui, repo, pats, opts, rename=Fa else: util.copyfile(src, target) srcexists = True - except IOError, inst: + except IOError as inst: if inst.errno == errno.ENOENT: ui.warn(_('%s: deleted in working directory\n') % relsrc) srcexists = False @@ -773,7 +773,7 @@ def service(opts, parentfn=None, initfn= finally: try: os.unlink(lockpath) - except OSError, e: + except OSError as e: if e.errno != errno.ENOENT: raise if parentfn: @@ -898,7 +898,7 @@ def tryimportone(ui, repo, hunk, parents try: patch.patch(ui, repo, tmpname, strip=strip, prefix=prefix, files=files, eolmode=None, similarity=sim / 100.0) - except patch.PatchError, e: + except patch.PatchError as e: if not partial: raise util.Abort(str(e)) if partial: @@ -942,7 +942,7 @@ def tryimportone(ui, repo, hunk, parents try: patch.patchrepo(ui, repo, p1, store, tmpname, strip, prefix, files, eolmode=None) - except patch.PatchError, e: + except patch.PatchError as e: raise util.Abort(str(e)) if opts.get('exact'): editor = None @@ -1459,10 +1459,10 @@ class changeset_templater(changeset_prin self.footer = templater.stringify(self.t(types['footer'], **props)) - except KeyError, inst: + except KeyError as inst: msg = _("%s: no key named '%s'") raise util.Abort(msg % (self.t.mapfile, inst.args[0])) - except SyntaxError, inst: + except SyntaxError as inst: raise util.Abort('%s: %s' % (self.t.mapfile, inst.args[0])) def gettemplate(ui, tmpl, style): @@ -1523,7 +1523,7 @@ def show_changeset(ui, repo, opts, buffe try: t = changeset_templater(ui, repo, matchfn, opts, tmpl, mapfile, buffered) - except SyntaxError, inst: + except SyntaxError as inst: raise util.Abort(inst.args[0]) return t @@ -2682,7 +2682,7 @@ def buildcommittemplate(repo, ctx, subs, try: t = changeset_templater(ui, repo, None, {}, tmpl, mapfile, False) - except SyntaxError, inst: + except SyntaxError as inst: raise util.Abort(inst.args[0]) for k, v in repo.ui.configitems('committemplate'): @@ -3115,7 +3115,7 @@ def _performrevert(repo, parents, ctx, a if reversehunks: chunks = patch.reversehunks(chunks) - except patch.PatchError, err: + except patch.PatchError as err: raise util.Abort(_('error parsing patch: %s') % err) newlyaddedandmodifiedfiles = newandmodified(chunks, originalchunks) @@ -3128,7 +3128,7 @@ def _performrevert(repo, parents, ctx, a if dopatch: try: patch.internalpatch(repo.ui, repo, fp, 1, eolmode=None) - except patch.PatchError, err: + except patch.PatchError as err: raise util.Abort(str(err)) del fp else: diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2340,7 +2340,7 @@ def debuginstall(ui): ui.status(_("checking encoding (%s)...\n") % encoding.encoding) try: encoding.fromlocal("test") - except util.Abort, inst: + except util.Abort as inst: ui.write(" %s\n" % inst) ui.write(_(" (check that your locale is properly set)\n")) problems += 1 @@ -2358,7 +2358,7 @@ def debuginstall(ui): try: import bdiff, mpatch, base85, osutil dir(bdiff), dir(mpatch), dir(base85), dir(osutil) # quiet pyflakes - except Exception, inst: + except Exception as inst: ui.write(" %s\n" % inst) ui.write(_(" One or more extensions could not be found")) ui.write(_(" (check that you compiled the extensions)\n")) @@ -2374,7 +2374,7 @@ def debuginstall(ui): # template found, check if it is working try: templater.templater(m) - except Exception, inst: + except Exception as inst: ui.write(" %s\n" % inst) p = None else: @@ -2406,7 +2406,7 @@ def debuginstall(ui): ui.status(_("checking username...\n")) try: ui.username() - except util.Abort, e: + except util.Abort as e: ui.write(" %s\n" % e) ui.write(_(" (specify a username in your configuration file)\n")) problems += 1 @@ -2517,7 +2517,7 @@ def debuglocks(ui, repo, **opts): % (user, pid, host) ui.write("%-6s %s (%ds)\n" % (name + ":", locker, age)) return 1 - except OSError, e: + except OSError as e: if e.errno != errno.ENOENT: raise @@ -2581,7 +2581,7 @@ def debugobsolete(ui, repo, precursor=No parents=parents, date=date, metadata=metadata) tr.close() - except ValueError, exc: + except ValueError as exc: raise util.Abort(_('bad obsmarker input: %s') % exc) finally: tr.release() @@ -3470,7 +3470,7 @@ def graft(ui, repo, *revs, **opts): try: nodes = repo.vfs.read('graftstate').splitlines() revs = [repo[node].rev() for node in nodes] - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise raise util.Abort(_("no graft state found, can't continue")) @@ -3664,7 +3664,7 @@ def grep(ui, repo, pattern, *pats, **opt reflags |= re.I try: regexp = util.re.compile(pattern, reflags) - except re.error, inst: + except re.error as inst: ui.warn(_("grep: invalid match pattern: %s\n") % inst) return 1 sep, eol = ':', '\n' @@ -5083,7 +5083,7 @@ def postincoming(ui, repo, modheads, opt checkout, movemarkfrom = bookmarks.calculateupdate(ui, repo, checkout) try: ret = hg.update(repo, checkout) - except util.Abort, inst: + except util.Abort as inst: ui.warn(_("not updating: %s\n") % str(inst)) if inst.hint: ui.warn(_("(%s)\n") % inst.hint) diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py --- a/mercurial/commandserver.py +++ b/mercurial/commandserver.py @@ -300,9 +300,9 @@ 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, inst: + except util.Abort as inst: ui.warn(_('abort: %s\n') % inst) - except IOError, inst: + except IOError as inst: if inst.errno != errno.EPIPE: raise except KeyboardInterrupt: diff --git a/mercurial/config.py b/mercurial/config.py --- a/mercurial/config.py +++ b/mercurial/config.py @@ -122,7 +122,7 @@ class config(object): try: include(inc, remap=remap, sections=sections) break - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise error.ParseError(_("cannot include %s (%s)") % (inc, inst.strerror), diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1438,7 +1438,7 @@ class workingctx(committablectx): def copy(self, source, dest): try: st = self._repo.wvfs.lstat(dest) - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise self._repo.ui.warn(_("%s does not exist!\n") % dest) @@ -1684,7 +1684,7 @@ class workingfilectx(committablefilectx) t, tz = self._changectx.date() try: return (int(self._repo.wvfs.lstat(self._path).st_mtime), tz) - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise return (t, tz) diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -115,7 +115,7 @@ class dirstate(object): def _branch(self): try: return self._opener.read("branch").strip() or "default" - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise return "default" @@ -131,7 +131,7 @@ class dirstate(object): return st[:20], st[20:40] elif l > 0 and l < 40: raise util.Abort(_('working directory state appears damaged!')) - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise return [nullid, nullid] @@ -331,7 +331,7 @@ class dirstate(object): st = fp.read() finally: fp.close() - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise return @@ -717,7 +717,7 @@ class dirstate(object): badfn(ff, badtype(kind)) if nf in dmap: results[nf] = None - except OSError, inst: # nf not found on disk - it is dirstate only + except OSError as inst: # nf not found on disk - it is dirstate only if nf in dmap: # does it exactly match a missing file? results[nf] = None else: # does it match a missing directory? @@ -802,7 +802,7 @@ class dirstate(object): skip = '.hg' try: entries = listdir(join(nd), stat=True, skip=skip) - except OSError, inst: + except OSError as inst: if inst.errno in (errno.EACCES, errno.ENOENT): match.bad(self.pathto(nd), inst.strerror) continue diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -76,12 +76,12 @@ def dispatch(req): req.ui.fout = req.fout if req.ferr: req.ui.ferr = req.ferr - except util.Abort, inst: + except util.Abort as inst: ferr.write(_("abort: %s\n") % inst) if inst.hint: ferr.write(_("(%s)\n") % inst.hint) return -1 - except error.ParseError, inst: + except error.ParseError as inst: _formatparse(ferr.write, inst) return -1 @@ -172,29 +172,29 @@ def _runcatch(req): # Global exception handling, alphabetically # Mercurial-specific first, followed by built-in and library exceptions - except error.AmbiguousCommand, inst: + except error.AmbiguousCommand as inst: ui.warn(_("hg: command '%s' is ambiguous:\n %s\n") % (inst.args[0], " ".join(inst.args[1]))) - except error.ParseError, inst: + except error.ParseError as inst: _formatparse(ui.warn, inst) return -1 - except error.LockHeld, inst: + except error.LockHeld as inst: if inst.errno == errno.ETIMEDOUT: reason = _('timed out waiting for lock held by %s') % inst.locker else: reason = _('lock held by %s') % inst.locker ui.warn(_("abort: %s: %s\n") % (inst.desc or inst.filename, reason)) - except error.LockUnavailable, inst: + except error.LockUnavailable as inst: ui.warn(_("abort: could not lock %s: %s\n") % (inst.desc or inst.filename, inst.strerror)) - except error.CommandError, inst: + except error.CommandError as inst: if inst.args[0]: ui.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1])) commands.help_(ui, inst.args[0], full=False, command=True) else: ui.warn(_("hg: %s\n") % inst.args[1]) commands.help_(ui, 'shortlist') - except error.OutOfBandError, inst: + except error.OutOfBandError as inst: if inst.args: msg = _("abort: remote error:\n") else: @@ -204,11 +204,11 @@ def _runcatch(req): ui.warn(''.join(inst.args)) if inst.hint: ui.warn('(%s)\n' % inst.hint) - except error.RepoError, inst: + except error.RepoError as inst: ui.warn(_("abort: %s!\n") % inst) if inst.hint: ui.warn(_("(%s)\n") % inst.hint) - except error.ResponseError, inst: + except error.ResponseError as inst: ui.warn(_("abort: %s") % inst.args[0]) if not isinstance(inst.args[1], basestring): ui.warn(" %r\n" % (inst.args[1],)) @@ -216,13 +216,13 @@ def _runcatch(req): ui.warn(_(" empty string\n")) else: ui.warn("\n%r\n" % util.ellipsis(inst.args[1])) - except error.CensoredNodeError, inst: + except error.CensoredNodeError as inst: ui.warn(_("abort: file censored %s!\n") % inst) - except error.RevlogError, inst: + except error.RevlogError as inst: ui.warn(_("abort: %s!\n") % inst) except error.SignalInterrupt: ui.warn(_("killed!\n")) - except error.UnknownCommand, inst: + except error.UnknownCommand as inst: ui.warn(_("hg: unknown command '%s'\n") % inst.args[0]) try: # check if the command is in a disabled extension @@ -238,21 +238,21 @@ def _runcatch(req): suggested = True if not suggested: commands.help_(ui, 'shortlist') - except error.InterventionRequired, inst: + except error.InterventionRequired as inst: ui.warn("%s\n" % inst) return 1 - except util.Abort, inst: + except util.Abort as inst: ui.warn(_("abort: %s\n") % inst) if inst.hint: ui.warn(_("(%s)\n") % inst.hint) - except ImportError, inst: + except ImportError as inst: ui.warn(_("abort: %s!\n") % inst) m = str(inst).split()[-1] if m in "mpatch bdiff".split(): ui.warn(_("(did you forget to compile extensions?)\n")) elif m in "zlib".split(): ui.warn(_("(is your Python install correct?)\n")) - except IOError, inst: + except IOError as inst: if util.safehasattr(inst, "code"): ui.warn(_("abort: %s\n") % inst) elif util.safehasattr(inst, "reason"): @@ -276,7 +276,7 @@ def _runcatch(req): ui.warn(_("abort: %s\n") % inst.strerror) else: raise - except OSError, inst: + except OSError as inst: if getattr(inst, "filename", None) is not None: ui.warn(_("abort: %s: '%s'\n") % (inst.strerror, inst.filename)) else: @@ -284,7 +284,7 @@ def _runcatch(req): except KeyboardInterrupt: try: ui.warn(_("interrupted!\n")) - except IOError, inst: + except IOError as inst: if inst.errno == errno.EPIPE: if ui.debugflag: ui.warn(_("\nbroken pipe\n")) @@ -292,11 +292,11 @@ def _runcatch(req): raise except MemoryError: ui.warn(_("abort: out of memory\n")) - except SystemExit, inst: + except SystemExit as inst: # Commands shouldn't sys.exit directly, but give a return code. # Just in case catch this and and pass exit code to caller. return inst.code - except socket.error, inst: + except socket.error as inst: ui.warn(_("abort: %s\n") % inst.args[-1]) except: # re-raises myver = util.version() @@ -452,7 +452,7 @@ class cmdalias(object): try: args = shlex.split(self.definition) - except ValueError, inst: + except ValueError as inst: self.badalias = (_("error in definition for alias '%s': %s") % (self.name, inst)) return @@ -543,7 +543,7 @@ def _parse(ui, args): try: args = fancyopts.fancyopts(args, commands.globalopts, options) - except fancyopts.getopt.GetoptError, inst: + except fancyopts.getopt.GetoptError as inst: raise error.CommandError(None, inst) if args: @@ -566,7 +566,7 @@ def _parse(ui, args): try: args = fancyopts.fancyopts(args, c, cmdoptions, True) - except fancyopts.getopt.GetoptError, inst: + except fancyopts.getopt.GetoptError as inst: raise error.CommandError(cmd, inst) # separate global options back out @@ -665,7 +665,7 @@ def _getlocal(ui, rpath): """ try: wd = os.getcwd() - except OSError, e: + except OSError as e: raise util.Abort(_("error getting current working directory: %s") % e.strerror) path = cmdutil.findrepo(wd) or "" diff --git a/mercurial/encoding.py b/mercurial/encoding.py --- a/mercurial/encoding.py +++ b/mercurial/encoding.py @@ -138,7 +138,7 @@ def tolocal(s): except UnicodeDecodeError: u = s.decode("utf-8", "replace") # last ditch return u.encode(encoding, "replace") # can't round-trip - except LookupError, k: + except LookupError as k: raise error.Abort(k, hint="please check your locale settings") def fromlocal(s): @@ -158,10 +158,10 @@ def fromlocal(s): try: return s.decode(encoding, encodingmode).encode("utf-8") - except UnicodeDecodeError, inst: + except UnicodeDecodeError as inst: sub = s[max(0, inst.start - 10):inst.start + 10] raise error.Abort("decoding near '%s': %s!" % (sub, inst)) - except LookupError, k: + except LookupError as k: raise error.Abort(k, hint="please check your locale settings") # How to treat ambiguous-width characters. Set to 'wide' to treat as wide. @@ -330,7 +330,7 @@ def lower(s): return lu.encode(encoding) except UnicodeError: return s.lower() # we don't know how to fold this except in ASCII - except LookupError, k: + except LookupError as k: raise error.Abort(k, hint="please check your locale settings") def upper(s): @@ -353,7 +353,7 @@ def upperfallback(s): return uu.encode(encoding) except UnicodeError: return s.upper() # we don't know how to fold this except in ASCII - except LookupError, k: + except LookupError as k: raise error.Abort(k, hint="please check your locale settings") class normcasespecs(object): diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -215,7 +215,7 @@ def push(repo, remote, force=False, revs localwlock = pushop.repo.wlock() locallock = pushop.repo.lock() pushop.locallocked = True - except IOError, err: + except IOError as err: pushop.locallocked = False if err.errno != errno.EACCES: raise @@ -646,16 +646,16 @@ def _pushbundle2(pushop): try: try: reply = pushop.remote.unbundle(stream, ['force'], 'push') - except error.BundleValueError, exc: + except error.BundleValueError as exc: raise util.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, exc: + except error.BundleValueError as exc: raise util.Abort('missing support for %s' % exc) - except error.PushkeyFailed, exc: + except error.PushkeyFailed as exc: partid = int(exc.partid) if partid not in pushop.pkfailcb: raise @@ -1061,7 +1061,7 @@ def _pullbundle2(pullop): bundle = pullop.remote.getbundle('pull', **kwargs) try: op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction) - except error.BundleValueError, exc: + except error.BundleValueError as exc: raise util.Abort('missing support for %s' % exc) if pullop.fetch: @@ -1425,7 +1425,7 @@ def unbundle(repo, cg, heads, source, ur def recordout(output): r.newpart('output', data=output, mandatory=False) tr.close() - except BaseException, exc: + except BaseException as exc: exc.duringunbundle2 = True if captureoutput and r is not None: parts = exc._bundle2salvagedoutput = r.salvageoutput() diff --git a/mercurial/extensions.py b/mercurial/extensions.py --- a/mercurial/extensions.py +++ b/mercurial/extensions.py @@ -53,7 +53,7 @@ def loadpath(path, module_name): else: try: return imp.load_source(module_name, path) - except IOError, exc: + except IOError as exc: if not exc.filename: exc.filename = path # python does not fill this raise @@ -82,7 +82,7 @@ def load(ui, name, path): return mod try: mod = importh("hgext.%s" % name) - except ImportError, err: + except ImportError as err: ui.debug('could not import hgext.%s (%s): trying %s\n' % (name, err, name)) if ui.debugflag: @@ -105,7 +105,7 @@ def loadall(ui): load(ui, name, path) except KeyboardInterrupt: raise - except Exception, inst: + except Exception as inst: if path: ui.warn(_("*** failed to import extension %s from %s: %s\n") % (name, path, inst)) diff --git a/mercurial/fileset.py b/mercurial/fileset.py --- a/mercurial/fileset.py +++ b/mercurial/fileset.py @@ -280,7 +280,7 @@ def grep(mctx, x): try: # i18n: "grep" is a keyword r = re.compile(getstring(x, _("grep requires a pattern"))) - except re.error, e: + except re.error as e: raise error.ParseError(_('invalid match pattern: %s') % e) return [f for f in mctx.existing() if r.search(mctx.ctx[f].data())] diff --git a/mercurial/help.py b/mercurial/help.py --- a/mercurial/help.py +++ b/mercurial/help.py @@ -228,7 +228,7 @@ def help_(ui, name, unknowncmd=False, fu try: aliases, entry = cmdutil.findcmd(name, commands.table, strict=unknowncmd) - except error.AmbiguousCommand, inst: + except error.AmbiguousCommand as inst: # py3k fix: except vars can't be used outside the scope of the # except block, nor can be used inside a lambda. python issue4617 prefix = inst.args[0] diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -202,7 +202,7 @@ def share(ui, source, dest=None, update= requirements = '' try: requirements = srcrepo.vfs.read('requires') - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise @@ -388,7 +388,7 @@ def clone(ui, peeropts, source, dest=Non try: destpath = hgdir util.makedir(destpath, notindexed=True) - except OSError, inst: + except OSError as inst: if inst.errno == errno.EEXIST: cleandir = None raise util.Abort(_("destination '%s' already exists") @@ -428,7 +428,7 @@ def clone(ui, peeropts, source, dest=Non try: destpeer = peer(srcrepo or ui, peeropts, dest, create=True) # only pass ui when no srcrepo - except OSError, inst: + except OSError as inst: if inst.errno == errno.EEXIST: cleandir = None raise util.Abort(_("destination '%s' already exists") diff --git a/mercurial/hgweb/common.py b/mercurial/hgweb/common.py --- a/mercurial/hgweb/common.py +++ b/mercurial/hgweb/common.py @@ -153,7 +153,7 @@ def staticfile(directory, fname, req): req.respond(HTTP_OK, ct, body=data) except TypeError: raise ErrorResponse(HTTP_SERVER_ERROR, 'illegal filename') - except OSError, err: + except OSError as err: if err.errno == errno.ENOENT: raise ErrorResponse(HTTP_NOT_FOUND) else: diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py --- a/mercurial/hgweb/hgweb_mod.py +++ b/mercurial/hgweb/hgweb_mod.py @@ -190,7 +190,7 @@ class hgweb(object): if cmd in perms: self.check_perm(req, perms[cmd]) return protocol.call(self.repo, req, cmd) - except ErrorResponse, inst: + except ErrorResponse as inst: # A client that sends unbundle without 100-continue will # break if we respond early. if (cmd == 'unbundle' and @@ -269,17 +269,17 @@ class hgweb(object): return content - except (error.LookupError, error.RepoLookupError), err: + except (error.LookupError, error.RepoLookupError) as err: req.respond(HTTP_NOT_FOUND, ctype) msg = str(err) if (util.safehasattr(err, 'name') and not isinstance(err, error.ManifestLookupError)): msg = 'revision not found: %s' % err.name return tmpl('error', error=msg) - except (error.RepoError, error.RevlogError), inst: + except (error.RepoError, error.RevlogError) as inst: req.respond(HTTP_SERVER_ERROR, ctype) return tmpl('error', error=str(inst)) - except ErrorResponse, inst: + except ErrorResponse as inst: req.respond(inst, ctype) if inst.code == HTTP_NOT_MODIFIED: # Not allowed to return a body on a 304 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 @@ -219,10 +219,10 @@ class hgwebdir(object): # ensure caller gets private copy of ui repo = hg.repository(self.ui.copy(), real) return hgweb(repo).run_wsgi(req) - except IOError, inst: + except IOError as inst: msg = inst.strerror raise ErrorResponse(HTTP_SERVER_ERROR, msg) - except error.RepoError, inst: + except error.RepoError as inst: raise ErrorResponse(HTTP_SERVER_ERROR, str(inst)) up = virtualrepo.rfind('/') @@ -240,7 +240,7 @@ class hgwebdir(object): req.respond(HTTP_NOT_FOUND, ctype) return tmpl("notfound", repo=virtual) - except ErrorResponse, err: + except ErrorResponse as err: req.respond(err, ctype) return tmpl('error', error=err.message or '') finally: @@ -336,7 +336,7 @@ class hgwebdir(object): u = self.ui.copy() try: u.readconfig(os.path.join(path, '.hg', 'hgrc')) - except Exception, e: + except Exception as e: u.warn(_('error reading %s/.hg/hgrc: %s\n') % (path, e)) continue def get(section, name, default=None): diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py --- a/mercurial/hgweb/request.py +++ b/mercurial/hgweb/request.py @@ -111,7 +111,7 @@ class wsgirequest(object): if thing: try: self.server_write(thing) - except socket.error, inst: + except socket.error as inst: if inst[0] != errno.ECONNRESET: raise diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py --- a/mercurial/hgweb/server.py +++ b/mercurial/hgweb/server.py @@ -71,7 +71,7 @@ class _httprequesthandler(BaseHTTPServer def do_write(self): try: self.do_hgweb() - except socket.error, inst: + except socket.error as inst: if inst[0] != errno.EPIPE: raise @@ -226,7 +226,7 @@ class _httprequesthandleropenssl(_httpre import OpenSSL try: _httprequesthandler.do_write(self) - except OpenSSL.SSL.SysCallError, inst: + except OpenSSL.SSL.SysCallError as inst: if inst.args[0] != errno.EPIPE: raise @@ -344,6 +344,6 @@ def create_server(ui, app): port = util.getport(ui.config('web', 'port', 8000)) try: return cls(ui, app, (address, port), handler) - except socket.error, inst: + except socket.error as inst: raise util.Abort(_("cannot start server at '%s:%d': %s") % (address, port, inst.args[1])) diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py +++ b/mercurial/hgweb/webcommands.py @@ -76,7 +76,7 @@ def rawfile(web, req, tmpl): try: fctx = webutil.filectx(web.repo, req) - except error.LookupError, inst: + except error.LookupError as inst: try: content = manifest(web, req, tmpl) req.respond(HTTP_OK, web.ctype) @@ -160,7 +160,7 @@ def file(web, req, tmpl): return manifest(web, req, tmpl) try: return _filerevision(web, req, tmpl, webutil.filectx(web.repo, req)) - except error.LookupError, inst: + except error.LookupError as inst: try: return manifest(web, req, tmpl) except ErrorResponse: diff --git a/mercurial/hook.py b/mercurial/hook.py --- a/mercurial/hook.py +++ b/mercurial/hook.py @@ -80,7 +80,7 @@ def _pythonhook(ui, repo, name, hname, f sys.stdout, sys.stderr, sys.stdin = ui.fout, ui.ferr, ui.fin r = obj(ui=ui, repo=repo, hooktype=name, **args) - except Exception, exc: + except Exception as exc: if isinstance(exc, util.Abort): ui.warn(_('error: %s hook failed: %s\n') % (hname, exc.args[0])) diff --git a/mercurial/httpclient/__init__.py b/mercurial/httpclient/__init__.py --- a/mercurial/httpclient/__init__.py +++ b/mercurial/httpclient/__init__.py @@ -166,7 +166,7 @@ class HTTPResponse(object): raise HTTPTimeoutException('timeout reading data') try: data = self.sock.recv(INCOMING_BUFFER_SIZE) - except socket.sslerror, e: + except socket.sslerror as e: if e.args[0] != socket.SSL_ERROR_WANT_READ: raise logger.debug('SSL_ERROR_WANT_READ in _select, should retry later') @@ -555,7 +555,7 @@ class HTTPConnection(object): try: try: data = r[0].recv(INCOMING_BUFFER_SIZE) - except socket.sslerror, e: + except socket.sslerror as e: if e.args[0] != socket.SSL_ERROR_WANT_READ: raise logger.debug('SSL_ERROR_WANT_READ while sending ' @@ -610,7 +610,7 @@ class HTTPConnection(object): # Jump to the next select() call so we load more # data if the server is still sending us content. continue - except socket.error, e: + except socket.error as e: if e[0] != errno.EPIPE and not was_first: raise @@ -633,7 +633,7 @@ class HTTPConnection(object): else: out = data amt = w[0].send(out) - except socket.error, e: + except socket.error as e: if e[0] == socket.SSL_ERROR_WANT_WRITE and self.ssl: # This means that SSL hasn't flushed its buffer into # the socket yet. diff --git a/mercurial/httpclient/socketutil.py b/mercurial/httpclient/socketutil.py --- a/mercurial/httpclient/socketutil.py +++ b/mercurial/httpclient/socketutil.py @@ -64,7 +64,7 @@ except AttributeError: sock = socket.socket(af, socktype, proto) logger.info("connect: (%s, %s)", host, port) sock.connect(sa) - except socket.error, msg: + except socket.error as msg: logger.info('connect fail: %s %s', host, port) if sock: sock.close() @@ -100,7 +100,7 @@ else: while True: try: return self._ssl.read(buflen) - except socket.sslerror, x: + except socket.sslerror as x: if x.args[0] == socket.SSL_ERROR_WANT_READ: continue else: diff --git a/mercurial/httpconnection.py b/mercurial/httpconnection.py --- a/mercurial/httpconnection.py +++ b/mercurial/httpconnection.py @@ -211,7 +211,7 @@ class http2handler(urllib2.HTTPHandler, path = '/' + path h.request(req.get_method(), path, req.data, headers) r = h.getresponse() - except socket.error, err: # XXX what error? + except socket.error as err: # XXX what error? raise urllib2.URLError(err) # Pick apart the HTTPResponse object to get the addinfourl diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py --- a/mercurial/httppeer.py +++ b/mercurial/httppeer.py @@ -119,11 +119,11 @@ class httppeer(wireproto.wirepeer): req.add_unredirected_header('Content-Length', '%d' % size) try: resp = self.urlopener.open(req) - except urllib2.HTTPError, inst: + except urllib2.HTTPError as inst: if inst.code == 401: raise util.Abort(_('authorization failed')) raise - except httplib.HTTPException, inst: + except httplib.HTTPException as inst: self.ui.debug('http error while sending %s command\n' % cmd) self.ui.traceback() raise IOError(None, inst) @@ -205,7 +205,7 @@ class httppeer(wireproto.wirepeer): if len(vals) < 2: raise error.ResponseError(_("unexpected response:"), r) return vals - except socket.error, err: + 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]) @@ -267,7 +267,7 @@ def instance(ui, path, create): # No luck, try older compatibility check. inst.between([(nullid, nullid)]) return inst - except error.RepoError, httpexception: + except error.RepoError as httpexception: try: r = statichttprepo.instance(ui, "static-" + path, create) ui.note('(falling back to static-http)\n') diff --git a/mercurial/keepalive.py b/mercurial/keepalive.py --- a/mercurial/keepalive.py +++ b/mercurial/keepalive.py @@ -251,7 +251,7 @@ class KeepAliveHandler(object): self._cm.add(host, h, 0) self._start_transaction(h, req) r = h.getresponse() - except (socket.error, httplib.HTTPException), err: + except (socket.error, httplib.HTTPException) as err: raise urllib2.URLError(err) # if not a persistent connection, don't try to reuse it @@ -343,7 +343,7 @@ class KeepAliveHandler(object): h.putheader('Content-length', '%d' % len(data)) else: h.putrequest('GET', req.get_selector(), **skipheaders) - except (socket.error), err: + except (socket.error) as err: raise urllib2.URLError(err) for k, v in headers.items(): h.putheader(k, v) @@ -550,7 +550,7 @@ def safesend(self, str): data = read(blocksize) else: self.sock.sendall(str) - except socket.error, v: + except socket.error as v: reraise = True if v[0] == errno.EPIPE: # Broken pipe if self._HTTPConnection__state == httplib._CS_REQ_SENT: @@ -605,7 +605,7 @@ def error_handler(url): status, reason = fo.status, fo.reason except AttributeError: status, reason = None, None - except IOError, e: + except IOError as e: print " EXCEPTION: %s" % e raise else: diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -135,7 +135,7 @@ class localpeer(peer.peerrepository): stream = util.chunkbuffer(ret.getchunks()) ret = bundle2.getunbundler(self.ui, stream) return ret - except Exception, exc: + except Exception as exc: # If the exception contains output salvaged from a bundle2 # reply, we need to make sure it is printed before continuing # to fail. So we build a bundle2 with such output and consume @@ -152,7 +152,7 @@ class localpeer(peer.peerrepository): b = bundle2.getunbundler(self.ui, stream) bundle2.processbundle(self._repo, b) raise - except error.PushRaced, exc: + except error.PushRaced as exc: raise error.ResponseError(_('push failed:'), str(exc)) def lock(self): @@ -272,7 +272,7 @@ class localrepository(object): try: self.requirements = scmutil.readrequires( self.vfs, self.supported) - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise @@ -285,7 +285,7 @@ class localrepository(object): raise error.RepoError( _('.hg/sharedpath points to nonexistent directory %s') % s) self.sharedpath = s - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise @@ -578,7 +578,7 @@ class localrepository(object): try: fp = self.wfile('.hgtags', 'rb+') - except IOError, e: + except IOError as e: if e.errno != errno.ENOENT: raise fp = self.wfile('.hgtags', 'ab') @@ -1189,7 +1189,7 @@ class localrepository(object): def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc): try: l = lockmod.lock(vfs, lockname, 0, releasefn, desc=desc) - except error.LockHeld, inst: + except error.LockHeld as inst: if not wait: raise self.ui.warn(_("waiting for lock on %s held by %r\n") % @@ -1570,10 +1570,10 @@ class localrepository(object): m[f] = self._filecommit(fctx, m1, m2, linkrev, trp, changed) m.setflag(f, fctx.flags()) - except OSError, inst: + except OSError as inst: self.ui.warn(_("trouble committing %s!\n") % f) raise - except IOError, inst: + except IOError as inst: errcode = getattr(inst, 'errno', errno.ENOENT) if error or errcode and errcode != errno.ENOENT: self.ui.warn(_("trouble committing %s!\n") % f) @@ -1888,7 +1888,7 @@ class localrepository(object): hookargs['old'] = old hookargs['new'] = new self.hook('prepushkey', throw=True, **hookargs) - except error.HookAbort, exc: + except error.HookAbort as exc: self.ui.write_err(_("pushkey-abort: %s\n") % exc) if exc.hint: self.ui.write_err(_("(%s)\n") % exc.hint) diff --git a/mercurial/lock.py b/mercurial/lock.py --- a/mercurial/lock.py +++ b/mercurial/lock.py @@ -58,7 +58,7 @@ class lock(object): try: self.trylock() return self.timeout - timeout - except error.LockHeld, inst: + except error.LockHeld as inst: if timeout != 0: time.sleep(1) if timeout > 0: @@ -78,7 +78,7 @@ class lock(object): try: self.vfs.makelock(lockname, self.f) self.held = 1 - except (OSError, IOError), why: + except (OSError, IOError) as why: if why.errno == errno.EEXIST: locker = self.testlock() if locker is not None: @@ -102,7 +102,7 @@ class lock(object): """ try: locker = self.vfs.readlock(self.f) - except (OSError, IOError), why: + except (OSError, IOError) as why: if why.errno == errno.ENOENT: return None raise diff --git a/mercurial/mail.py b/mercurial/mail.py --- a/mercurial/mail.py +++ b/mercurial/mail.py @@ -138,16 +138,16 @@ def _smtp(ui): (username)) try: s.login(username, password) - except smtplib.SMTPException, inst: + except smtplib.SMTPException as inst: raise util.Abort(inst) def send(sender, recipients, msg): try: return s.sendmail(sender, recipients, msg) - except smtplib.SMTPRecipientsRefused, inst: + except smtplib.SMTPRecipientsRefused as inst: recipients = [r[1] for r in inst.recipients.values()] raise util.Abort('\n' + '\n'.join(recipients)) - except smtplib.SMTPException, inst: + except smtplib.SMTPException as inst: raise util.Abort(inst) return send diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -293,9 +293,9 @@ 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, inst: + except util.Abort as inst: raise util.Abort('%s: %s' % (pat, inst[0])) - except IOError, inst: + except IOError as inst: if self._warn: self._warn(_("skipping unreadable pattern file " "'%s': %s\n") % (pat, inst.strerror)) diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -145,7 +145,7 @@ class mergestate(object): else: records.append(('F', l[:-1])) f.close() - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise return records @@ -170,7 +170,7 @@ class mergestate(object): off += length records.append((rtype, record)) f.close() - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise return records @@ -660,7 +660,7 @@ def batchremove(repo, actions): audit(f) try: unlink(wjoin(f), ignoremissing=True) - except OSError, inst: + except OSError as inst: repo.ui.warn(_("update failed to remove %s: %s!\n") % (f, inst.strerror)) if i == 100: diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -431,12 +431,12 @@ class fsbackend(abstractbackend): isexec = False try: isexec = self.opener.lstat(fname).st_mode & 0o100 != 0 - except OSError, e: + except OSError as e: if e.errno != errno.ENOENT: raise try: return (self.opener.read(fname), (False, isexec)) - except IOError, e: + except IOError as e: if e.errno != errno.ENOENT: raise return None, None @@ -1363,7 +1363,7 @@ class binhunk(object): l = ord(l) - ord('a') + 27 try: dec.append(base85.b85decode(line[1:])[:l]) - except ValueError, e: + except ValueError as e: raise PatchError(_('could not decode "%s" binary patch: %s') % (self._fname, str(e))) line = getline(lr, self.hunk) @@ -1938,7 +1938,7 @@ def _applydiff(ui, fp, patcher, backend, try: current_file = patcher(ui, gp, backend, store, eolmode=eolmode) - except PatchError, inst: + except PatchError as inst: ui.warn(str(inst) + '\n') current_file = None rejects += 1 diff --git a/mercurial/pathutil.py b/mercurial/pathutil.py --- a/mercurial/pathutil.py +++ b/mercurial/pathutil.py @@ -76,7 +76,7 @@ class pathauditor(object): curpath = os.path.join(self.root, prefix) try: st = os.lstat(curpath) - except OSError, err: + except OSError as err: # EINVAL can be raised as invalid path syntax under win32. # They must be ignored for patterns can be checked too. if err.errno not in (errno.ENOENT, errno.ENOTDIR, errno.EINVAL): diff --git a/mercurial/phases.py b/mercurial/phases.py --- a/mercurial/phases.py +++ b/mercurial/phases.py @@ -129,7 +129,7 @@ def _readroots(repo, phasedefaults=None) if 'HG_PENDING' in os.environ: try: f = repo.svfs('phaseroots.pending') - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise if f is None: @@ -140,7 +140,7 @@ def _readroots(repo, phasedefaults=None) roots[int(phase)].add(bin(nh)) finally: f.close() - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise if phasedefaults: diff --git a/mercurial/posix.py b/mercurial/posix.py --- a/mercurial/posix.py +++ b/mercurial/posix.py @@ -115,7 +115,7 @@ def copymode(src, dst, mode=None): using umask.''' try: st_mode = os.lstat(src).st_mode & 0o777 - except OSError, inst: + except OSError as inst: if inst.errno != errno.ENOENT: raise st_mode = mode @@ -166,7 +166,7 @@ def checklink(path): fd.close() except AttributeError: return False - except OSError, inst: + except OSError as inst: # sshfs might report failure while successfully creating the link if inst[0] == errno.EIO and os.path.exists(name): os.unlink(name) @@ -355,7 +355,7 @@ def testpid(pid): try: os.kill(pid, 0) return True - except OSError, inst: + except OSError as inst: return inst.errno != errno.ESRCH def explainexit(code): @@ -410,7 +410,7 @@ def statfiles(files): st = lstat(nf) if getkind(st.st_mode) not in _wantedkinds: st = None - except OSError, err: + except OSError as err: if err.errno not in (errno.ENOENT, errno.ENOTDIR): raise st = None @@ -477,7 +477,7 @@ def termwidth(): pass except ValueError: pass - except IOError, e: + except IOError as e: if e[0] == errno.EINVAL: pass else: @@ -493,7 +493,7 @@ def unlinkpath(f, ignoremissing=False): """unlink and remove the directory if it is empty""" try: os.unlink(f) - except OSError, e: + except OSError as e: if not (ignoremissing and e.errno == errno.ENOENT): raise # try removing directories that might now be empty @@ -560,7 +560,7 @@ class unixdomainserver(socket.socket): os.unlink(self.path) try: self.bind(self.realpath) - except socket.error, err: + except socket.error as err: if err.args[0] == 'AF_UNIX path too long': tmpdir = tempfile.mkdtemp(prefix='hg-%s-' % subsystem) self.realpath = os.path.join(tmpdir, sockname) @@ -578,7 +578,7 @@ class unixdomainserver(socket.socket): def okayifmissing(f, path): try: f(path) - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise diff --git a/mercurial/repair.py b/mercurial/repair.py --- a/mercurial/repair.py +++ b/mercurial/repair.py @@ -205,7 +205,7 @@ def strip(ui, repo, nodelist, backup=Tru for undovfs, undofile in repo.undofiles(): try: undovfs.unlink(undofile) - except OSError, e: + except OSError as e: if e.errno != errno.ENOENT: ui.warn(_('error removing %s: %s\n') % (undovfs.join(undofile), str(e))) diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -89,7 +89,7 @@ def decompress(bin): if t == 'x': try: return _decompress(bin) - except zlib.error, e: + except zlib.error as e: raise RevlogError(_("revlog decompress error: %s") % str(e)) if t == 'u': return bin[1:] @@ -246,7 +246,7 @@ class revlog(object): if len(i) > 0: v = struct.unpack(versionformat, i[:4])[0] self._initempty = False - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise @@ -1571,7 +1571,7 @@ class revlog(object): actual = f.tell() f.close() dd = actual - expected - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise dd = 0 @@ -1590,7 +1590,7 @@ class revlog(object): databytes += max(0, self.length(r)) dd = 0 di = actual - len(self) * s - databytes - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise di = 0 diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -1019,7 +1019,7 @@ def grep(repo, subset, x): try: # i18n: "grep" is a keyword gr = re.compile(getstring(x, _("grep requires a string"))) - except re.error, e: + except re.error as e: raise error.ParseError(_('invalid match pattern: %s') % e) def matches(x): @@ -1900,7 +1900,7 @@ def _stringmatcher(pattern): pattern = pattern[3:] try: regex = re.compile(pattern) - except re.error, e: + except re.error as e: raise error.ParseError(_('invalid regular expression: %s') % e) return 're', pattern, regex.search @@ -2416,7 +2416,7 @@ def _parsealiasdecl(decl): return (name, ('func', ('symbol', name)), args, None) return (decl, None, None, _("invalid format")) - except error.ParseError, inst: + except error.ParseError as inst: return (decl, None, None, parseerrordetail(inst)) def _parsealiasdefn(defn, args): @@ -2505,7 +2505,7 @@ class revsetalias(object): self.replacement = _parsealiasdefn(value, self.args) # Check for placeholder injection _checkaliasarg(self.replacement, self.args) - except error.ParseError, inst: + except error.ParseError as inst: self.error = _('failed to parse the definition of revset alias' ' "%s": %s') % (self.name, parseerrordetail(inst)) diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -222,7 +222,7 @@ class abstractvfs(object): '''gracefully return an empty string for missing files''' try: return self.read(path) - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise return "" @@ -231,7 +231,7 @@ class abstractvfs(object): '''gracefully return an empty array for missing files''' try: return self.readlines(path, mode=mode) - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise return [] @@ -491,7 +491,7 @@ class vfs(abstractvfs): if nlink < 1: nlink = 2 # force mktempcopy (issue1922) fd.close() - except (OSError, IOError), e: + except (OSError, IOError) as e: if e.errno != errno.ENOENT: raise nlink = 0 @@ -519,7 +519,7 @@ class vfs(abstractvfs): if self._cansymlink: try: os.symlink(src, linkname) - except OSError, err: + except OSError as err: raise OSError(err.errno, _('could not symlink to %r: %s') % (src, err.strerror), linkname) else: @@ -1058,7 +1058,7 @@ class filecachesubentry(object): def stat(path): try: return util.cachestat(path) - except OSError, e: + except OSError as e: if e.errno != errno.ENOENT: raise diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -33,10 +33,10 @@ class httprangereader(object): f = self.opener.open(req) data = f.read() code = f.code - except urllib2.HTTPError, inst: + except urllib2.HTTPError as inst: num = inst.code == 404 and errno.ENOENT or None raise IOError(num, inst) - except urllib2.URLError, inst: + except urllib2.URLError as inst: raise IOError(None, inst.reason[1]) if code == 200: @@ -106,7 +106,7 @@ class statichttprepository(localrepo.loc try: requirements = scmutil.readrequires(self.vfs, self.supported) - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise requirements = set() @@ -116,7 +116,7 @@ class statichttprepository(localrepo.loc fp = self.vfs("00changelog.i") fp.read(1) fp.close() - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise # we do not care about empty old-style repositories here diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -489,7 +489,7 @@ class fncachestore(basicstore): ef = self.encode(f) try: yield f, ef, self.getsize(ef) - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise @@ -513,7 +513,7 @@ class fncachestore(basicstore): try: self.getsize(ef) return True - except OSError, err: + except OSError as err: if err.errno != errno.ENOENT: raise # nonexistent entry diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -44,10 +44,10 @@ def annotatesubrepoerror(func): def decoratedmethod(self, *args, **kargs): try: res = func(self, *args, **kargs) - except SubrepoAbort, ex: + except SubrepoAbort as ex: # This exception has already been handled raise ex - except error.Abort, ex: + except error.Abort as ex: subrepo = subrelpath(self) errormsg = str(ex) + ' ' + _('(in subrepo %s)') % subrepo # avoid handling this exception by raising a SubrepoAbort exception @@ -66,7 +66,7 @@ def state(ctx, ui): if f in ctx: try: data = ctx[f].data() - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise # handle missing subrepo spec files as removed @@ -101,7 +101,7 @@ def state(ctx, ui): % (util.pathto(repo.root, repo.getcwd(), '.hgsubstate'), (i + 1))) rev[path] = revision - except IOError, err: + except IOError as err: if err.errno != errno.ENOENT: raise @@ -116,7 +116,7 @@ def state(ctx, ui): repl = re.sub(r'\\\\([0-9]+)', r'\\\1', repl) try: src = re.sub(pattern, repl, src, 1) - except re.error, e: + except re.error as e: raise util.Abort(_("bad subrepository pattern in %s: %s") % (p.source('subpaths', pattern), e)) return src @@ -734,7 +734,7 @@ class hgsubrepo(abstractsubrepo): ctx1 = self._repo[rev1] ctx2 = self._repo[rev2] return self._repo.status(ctx1, ctx2, **opts) - except error.RepoLookupError, inst: + except error.RepoLookupError as inst: self.ui.warn(_('warning: error "%s" in subrepository "%s"\n') % (inst, subrelpath(self))) return scmutil.status([], [], [], [], [], [], []) @@ -751,7 +751,7 @@ class hgsubrepo(abstractsubrepo): node1, node2, match, prefix=posixpath.join(prefix, self._path), listsubrepos=True, **opts) - except error.RepoLookupError, inst: + except error.RepoLookupError as inst: self.ui.warn(_('warning: error "%s" in subrepository "%s"\n') % (inst, subrelpath(self))) @@ -1280,7 +1280,7 @@ class gitsubrepo(abstractsubrepo): try: self._gitexecutable = 'git' out, err = self._gitnodir(['--version']) - except OSError, e: + except OSError as e: if e.errno != 2 or os.name != 'nt': raise self._gitexecutable = 'git.cmd' diff --git a/mercurial/tags.py b/mercurial/tags.py --- a/mercurial/tags.py +++ b/mercurial/tags.py @@ -120,7 +120,7 @@ def readlocaltags(ui, repo, alltags, tag '''Read local tags in repo. Update alltags and tagtypes.''' try: data = repo.vfs.read("localtags") - except IOError, inst: + except IOError as inst: if inst.errno != errno.ENOENT: raise return @@ -545,7 +545,7 @@ class hgtagsfnodescache(object): self._dirtyoffset = None finally: f.close() - except (IOError, OSError), inst: + except (IOError, OSError) as inst: repo.ui.log('tagscache', "couldn't write %s: %s\n" % ( _fnodescachefile, inst)) diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -770,7 +770,7 @@ class templater(object): if val[0] in "'\"": try: self.cache[key] = unquotestring(val) - except SyntaxError, inst: + except SyntaxError as inst: raise SyntaxError('%s: %s' % (conf.source('', key), inst.args[0])) else: @@ -787,10 +787,10 @@ class templater(object): if t not in self.cache: try: self.cache[t] = util.readfile(self.map[t][1]) - except KeyError, inst: + except KeyError as inst: raise TemplateNotFound(_('"%s" not in template map') % inst.args[0]) - except IOError, inst: + except IOError as inst: raise IOError(inst.args[0], _('template file %s: %s') % (self.map[t][1], inst.args[1])) return self.cache[t] diff --git a/mercurial/transaction.py b/mercurial/transaction.py --- a/mercurial/transaction.py +++ b/mercurial/transaction.py @@ -39,7 +39,7 @@ def _playback(journal, report, opener, v else: try: opener.unlink(f) - except (IOError, OSError), inst: + except (IOError, OSError) as inst: if inst.errno != errno.ENOENT: raise @@ -62,10 +62,10 @@ def _playback(journal, report, opener, v target = f or b try: vfs.unlink(target) - except (IOError, OSError), inst: + except (IOError, OSError) as inst: if inst.errno != errno.ENOENT: raise - except (IOError, OSError, util.Abort), inst: + except (IOError, OSError, util.Abort) as inst: if not c: raise @@ -77,7 +77,7 @@ def _playback(journal, report, opener, v for f in backupfiles: if opener.exists(f): opener.unlink(f) - except (IOError, OSError, util.Abort), inst: + except (IOError, OSError, util.Abort) as inst: # only pure backup file remains, it is sage to ignore any error pass @@ -405,7 +405,7 @@ class transaction(object): if not f and b and vfs.exists(b): try: vfs.unlink(b) - except (IOError, OSError, util.Abort), inst: + except (IOError, OSError, util.Abort) as inst: if not c: raise # Abort may be raise by read only opener @@ -428,7 +428,7 @@ class transaction(object): if b and vfs.exists(b): try: vfs.unlink(b) - except (IOError, OSError, util.Abort), inst: + except (IOError, OSError, util.Abort) as inst: if not c: raise # Abort may be raise by read only opener diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -153,7 +153,7 @@ class ui(object): try: cfg.read(filename, fp, sections=sections, remap=remap) fp.close() - except error.ConfigError, inst: + except error.ConfigError as inst: if trusted: raise self.warn(_("ignored: %s\n") % str(inst)) @@ -605,7 +605,7 @@ class ui(object): # including stdout. if not getattr(self.ferr, 'closed', False): self.ferr.flush() - except IOError, inst: + except IOError as inst: if inst.errno not in (errno.EPIPE, errno.EIO, errno.EBADF): raise diff --git a/mercurial/url.py b/mercurial/url.py --- a/mercurial/url.py +++ b/mercurial/url.py @@ -159,7 +159,7 @@ if has_https: sock.connect(sa) return sock - except socket.error, msg: + except socket.error as msg: if sock is not None: sock.close() @@ -411,7 +411,7 @@ class httpdigestauthhandler(urllib2.HTTP try: return urllib2.HTTPDigestAuthHandler.http_error_auth_reqed( self, auth_header, host, req, headers) - except ValueError, inst: + except ValueError as inst: arg = inst.args[0] if arg.startswith("AbstractDigestAuthHandler doesn't know "): return diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -816,7 +816,7 @@ def copyfile(src, dest, hardlink=False): try: shutil.copyfile(src, dest) shutil.copymode(src, dest) - except shutil.Error, inst: + except shutil.Error as inst: raise Abort(str(inst)) def copyfiles(src, dst, hardlink=None, progress=lambda t, pos: None): @@ -915,7 +915,7 @@ else: def makelock(info, pathname): try: return os.symlink(info, pathname) - except OSError, why: + except OSError as why: if why.errno == errno.EEXIST: raise except AttributeError: # no symlink in os @@ -928,7 +928,7 @@ def makelock(info, pathname): def readlock(pathname): try: return os.readlink(pathname) - except OSError, why: + except OSError as why: if why.errno not in (errno.EINVAL, errno.ENOSYS): raise except AttributeError: # no symlink in os @@ -1145,7 +1145,7 @@ def mktempcopy(name, emptyok=False, crea try: try: ifp = posixfile(name, "rb") - except IOError, inst: + except IOError as inst: if inst.errno == errno.ENOENT: return temp if not getattr(inst, 'filename', None): @@ -1204,7 +1204,7 @@ def makedirs(name, mode=None, notindexed """recursive directory creation with parent mode inheritance""" try: makedir(name, notindexed) - except OSError, err: + except OSError as err: if err.errno == errno.EEXIST: return if err.errno != errno.ENOENT or not name: @@ -1231,7 +1231,7 @@ def ensuredirs(name, mode=None, notindex ensuredirs(parent, mode, notindexed) try: makedir(name, notindexed) - except OSError, err: + except OSError as err: if err.errno == errno.EEXIST and os.path.isdir(name): # someone else seems to have won a directory creation race return diff --git a/mercurial/verify.py b/mercurial/verify.py --- a/mercurial/verify.py +++ b/mercurial/verify.py @@ -108,7 +108,7 @@ def _verify(repo): if p2 not in seen and p2 != nullid: err(lr, _("unknown parent 2 %s of %s") % (short(p2), short(node)), f) - except Exception, inst: + except Exception as inst: exc(lr, _("checking parents of %s") % short(node), inst, f) if node in seen: @@ -144,7 +144,7 @@ def _verify(repo): refersmf = True for f in changes[3]: filelinkrevs.setdefault(_normpath(f), []).append(i) - except Exception, inst: + except Exception as inst: refersmf = True exc(i, _("unpacking changeset %s") % short(n), inst) ui.progress(_('checking'), None) @@ -171,7 +171,7 @@ def _verify(repo): err(lr, _("file without name in manifest")) elif f != "/dev/null": # ignore this in very old repos filenodes.setdefault(_normpath(f), {}).setdefault(fn, lr) - except Exception, inst: + except Exception as inst: exc(lr, _("reading manifest delta %s") % short(n), inst) ui.progress(_('checking'), None) @@ -237,7 +237,7 @@ def _verify(repo): try: fl = repo.file(f) - except error.RevlogError, e: + except error.RevlogError as e: err(lr, _("broken revlog! (%s)") % e, f) continue @@ -272,7 +272,7 @@ def _verify(repo): except error.CensoredNodeError: if ui.config("censor", "policy", "abort") == "abort": err(lr, _("censored file data"), f) - except Exception, inst: + except Exception as inst: exc(lr, _("unpacking %s") % short(n), inst, f) # check renames @@ -298,7 +298,7 @@ def _verify(repo): % (f, lr, rp[0], short(rp[1]))) else: fl2.rev(rp[1]) - except Exception, inst: + except Exception as inst: exc(lr, _("checking rename of %s") % short(n), inst, f) # cross-check diff --git a/mercurial/win32.py b/mercurial/win32.py --- a/mercurial/win32.py +++ b/mercurial/win32.py @@ -467,7 +467,7 @@ def unlink(f): try: os.rename(f, temp) # raises OSError EEXIST if temp exists break - except OSError, e: + except OSError as e: if e.errno != errno.EEXIST: raise else: diff --git a/mercurial/windows.py b/mercurial/windows.py --- a/mercurial/windows.py +++ b/mercurial/windows.py @@ -38,7 +38,7 @@ def posixfile(name, mode='r', buffering= fp.seek(0, os.SEEK_END) return fp - except WindowsError, err: + except WindowsError as err: # convert to a friendlier exception raise IOError(err.errno, '%s: %s' % (name, err.strerror)) @@ -69,7 +69,7 @@ class winstdout(object): end = start + limit self.fp.write(s[start:end]) start = end - except IOError, inst: + except IOError as inst: if inst.errno != 0: raise self.close() @@ -78,7 +78,7 @@ class winstdout(object): def flush(self): try: return self.fp.flush() - except IOError, inst: + except IOError as inst: if inst.errno != errno.EINVAL: raise self.close() @@ -259,7 +259,7 @@ def statfiles(files): dmap = dict([(normcase(n), s) for n, k, s in osutil.listdir(dir, True) if getkind(s.st_mode) in _wantedkinds]) - except OSError, err: + except OSError as err: # Python >= 2.5 returns ENOENT and adds winerror field # EINVAL is raised if dir is not a directory. if err.errno not in (errno.ENOENT, errno.EINVAL, @@ -303,7 +303,7 @@ def unlinkpath(f, ignoremissing=False): """unlink and remove the directory if it is empty""" try: unlink(f) - except OSError, e: + except OSError as e: if not (ignoremissing and e.errno == errno.ENOENT): raise # try removing directories that might now be empty @@ -316,7 +316,7 @@ def rename(src, dst): '''atomically rename file src to dst, replacing dst if it exists''' try: os.rename(src, dst) - except OSError, e: + except OSError as e: if e.errno != errno.EEXIST: raise unlink(dst) diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py --- a/mercurial/wireproto.py +++ b/mercurial/wireproto.py @@ -705,7 +705,7 @@ def lookup(repo, proto, key): c = repo[k] r = c.hex() success = 1 - except Exception, inst: + except Exception as inst: r = str(inst) success = 0 return "%s %s\n" % (success, r) @@ -800,7 +800,7 @@ def unbundle(repo, proto, heads): fp.close() os.unlink(tempname) - except (error.BundleValueError, util.Abort, error.PushRaced), exc: + except (error.BundleValueError, util.Abort, error.PushRaced) as exc: # handle non-bundle2 case first if not getattr(exc, 'duringunbundle2', False): try: @@ -821,7 +821,7 @@ def unbundle(repo, proto, heads): try: try: raise - except error.PushkeyFailed, exc: + except error.PushkeyFailed as exc: # check client caps remotecaps = getattr(exc, '_replycaps', None) if (remotecaps is not None @@ -840,19 +840,19 @@ def unbundle(repo, proto, heads): part.addparam('old', exc.old, mandatory=False) if exc.ret is not None: part.addparam('ret', exc.ret, mandatory=False) - except error.BundleValueError, exc: + except error.BundleValueError as exc: errpart = bundler.newpart('error:unsupportedcontent') if exc.parttype is not None: errpart.addparam('parttype', exc.parttype) if exc.params: errpart.addparam('params', '\0'.join(exc.params)) - except util.Abort, exc: + except util.Abort as exc: manargs = [('message', str(exc))] advargs = [] if exc.hint is not None: advargs.append(('hint', exc.hint)) bundler.addpart(bundle2.bundlepart('error:abort', manargs, advargs)) - except error.PushRaced, exc: + except error.PushRaced as exc: bundler.newpart('error:pushraced', [('message', str(exc))]) return streamres(bundler.getchunks()) diff --git a/mercurial/worker.py b/mercurial/worker.py --- a/mercurial/worker.py +++ b/mercurial/worker.py @@ -101,7 +101,7 @@ def _posixworker(ui, func, staticargs, a for p in pids: try: os.kill(p, signal.SIGTERM) - except OSError, err: + except OSError as err: if err.errno != errno.ESRCH: raise def waitforworkers(): diff --git a/tests/md5sum.py b/tests/md5sum.py --- a/tests/md5sum.py +++ b/tests/md5sum.py @@ -23,7 +23,7 @@ except ImportError: for filename in sys.argv[1:]: try: fp = open(filename, 'rb') - except IOError, msg: + except IOError as msg: sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg)) sys.exit(1) @@ -34,7 +34,7 @@ for filename in sys.argv[1:]: if not data: break m.update(data) - except IOError, msg: + except IOError as msg: sys.stderr.write('%s: I/O error: %s\n' % (filename, msg)) sys.exit(1) sys.stdout.write('%s %s\n' % (m.hexdigest(), filename)) diff --git a/tests/readlink.py b/tests/readlink.py --- a/tests/readlink.py +++ b/tests/readlink.py @@ -5,7 +5,7 @@ import errno, os, sys for f in sys.argv[1:]: try: print f, '->', os.readlink(f) - except OSError, err: + except OSError as err: if err.errno != errno.EINVAL: raise print f, 'not a symlink' diff --git a/tests/test-manifest.py b/tests/test-manifest.py --- a/tests/test-manifest.py +++ b/tests/test-manifest.py @@ -325,21 +325,21 @@ class basemanifesttests(object): try: self.parsemanifest(backwards) self.fail('Should have raised ValueError') - except ValueError, v: + except ValueError as v: self.assertIn('Manifest lines not in sorted order.', str(v)) def testNoTerminalNewline(self): try: self.parsemanifest(A_SHORT_MANIFEST + 'wat') self.fail('Should have raised ValueError') - except ValueError, v: + except ValueError as v: self.assertIn('Manifest did not end in a newline.', str(v)) def testNoNewLineAtAll(self): try: self.parsemanifest('wat') self.fail('Should have raised ValueError') - except ValueError, v: + except ValueError as v: self.assertIn('Manifest did not end in a newline.', str(v)) def testHugeManifest(self): diff --git a/tests/test-trusted.py b/tests/test-trusted.py --- a/tests/test-trusted.py +++ b/tests/test-trusted.py @@ -169,7 +169,7 @@ print "# error handling" def assertraises(f, exc=util.Abort): try: f() - except exc, inst: + except exc as inst: print 'raised', inst.__class__.__name__ else: print 'no exception?!' @@ -188,10 +188,10 @@ f.close() try: testui(user='abc', group='def', silent=True) -except error.ParseError, inst: +except error.ParseError as inst: print inst try: testui(debug=True, silent=True) -except error.ParseError, inst: +except error.ParseError as inst: print inst diff --git a/tests/test-ui-config.py b/tests/test-ui-config.py --- a/tests/test-ui-config.py +++ b/tests/test-ui-config.py @@ -39,7 +39,7 @@ print repr(testui.config('values', 'unkn print "---" try: print repr(testui.configbool('values', 'string')) -except error.ConfigError, inst: +except error.ConfigError as inst: print inst print repr(testui.configbool('values', 'bool1')) print repr(testui.configbool('values', 'bool2')) diff --git a/tests/tinyproxy.py b/tests/tinyproxy.py --- a/tests/tinyproxy.py +++ b/tests/tinyproxy.py @@ -45,7 +45,7 @@ class ProxyHandler (BaseHTTPServer.BaseH host_port = netloc, 80 print "\t" "connect to %s:%d" % host_port try: soc.connect(host_port) - except socket.error, arg: + except socket.error as arg: try: msg = arg[1] except (IndexError, TypeError): msg = arg self.send_error(404, msg)