From: Mark Wooding Date: Sat, 1 Jun 2024 03:18:01 +0000 (+0100) Subject: fshash.in: Collect exception values using `sys.exc_info'. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/rsync-backup/commitdiff_plain/c687c90e317085543c8f6510f443cc7fa1a1b74d fshash.in: Collect exception values using `sys.exc_info'. --- diff --git a/fshash.in b/fshash.in index 5db05af..8fb7317 100644 --- a/fshash.in +++ b/fshash.in @@ -23,7 +23,7 @@ ### along with rsync-backup; if not, write to the Free Software Foundation, ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -from sys import argv, exit, stdin, stdout, stderr +from sys import argv, exc_info, exit, stdin, stdout, stderr import errno as E import hashlib as H import optparse as OP @@ -40,6 +40,8 @@ VERSION = '@VERSION@' ###-------------------------------------------------------------------------- ### Utilities. +def excval(): return exc_info()[1] + QUIS = OS.path.basename(argv[0]) def moan(msg): @@ -68,17 +70,17 @@ class FileInfo (object): try: me.st = OS.lstat(file) me.err = None - except OSError, err: + except OSError: me.st = None - me.err = err + me.err = excval() def enum_walk(file, func): def dirents(name): try: return OS.listdir(name) - except OSError, err: - syserr("failed to read directory `%s': %s" % (name, err.strerror)) + except OSError: + syserr("failed to read directory `%s': %s" % (name, excval().strerror)) return [] def dir(ee, dev): @@ -165,8 +167,8 @@ def enum_rsync(f, func): ## Call the client. try: fi = FileInfo(name) - except OSError, err: - syserr("failed to stat `%s': %s" % (name, err.strerror)) + except OSError: + syserr("failed to stat `%s': %s" % (name, excval().strerror)) continue func(fi) @@ -295,9 +297,9 @@ class HashCache (object): fi.st = OS.fstat(f.fileno()) ##fi.st.st_size = sz hash = h.digest() - except (OSError, IOError), err: + except (OSError, IOError): fi.st = None - fi.err = err + fi.err = excval() return None hash = hash.encode('hex') @@ -391,7 +393,8 @@ class LinkFormatter (GenericFormatter): try: d = OS.readlink(me.fi.name) return '%s -> %s' % (n, me._enc_name(d)) - except OSError, err: + except OSError: + err = excval() return '%s -> ' % (n, err.errno, err.strerror) class DirectoryFormatter (GenericFormatter): @@ -500,7 +503,8 @@ def clear_entry(db, lno, line): try: st = OS.lstat(name) - except OSError, e: + except OSError: + e = excval() moan("failed to stat `%s': %s" % (name, e.strerror)) if e.errno != E.ENOENT: good = False else: