diff options
author | Lars Wirzenius <liw@liw.fi> | 2014-03-11 19:26:30 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2014-03-11 19:26:30 +0000 |
commit | 091f9d57ca70fec9a469a00783a18ca6cd239c45 (patch) | |
tree | e1d7010e13d3a364a7dea6efcaa85b21884a318c | |
parent | f49ccfdb11d022fdf18b578aa8f702f24144af61 (diff) | |
download | obnam-091f9d57ca70fec9a469a00783a18ca6cd239c45.tar.gz |
Turn IO/OSError into structured errors in backup
-rw-r--r-- | obnamlib/__init__.py | 2 | ||||
-rw-r--r-- | obnamlib/plugins/backup_plugin.py | 19 | ||||
-rw-r--r-- | tests/unreadable-dir.stderr | 2 | ||||
-rw-r--r-- | tests/unreadable-file.stderr | 2 |
4 files changed, 19 insertions, 6 deletions
diff --git a/obnamlib/__init__.py b/obnamlib/__init__.py index cafd9a8c..fadb3bfe 100644 --- a/obnamlib/__init__.py +++ b/obnamlib/__init__.py @@ -95,7 +95,7 @@ from vfs_local import LocalFS from fsck_work_item import WorkItem from lockmgr import LockManager from forget_policy import ForgetPolicy -from app import App +from app import App, ObnamIOError, ObnamSystemError from repo_factory import ( RepositoryFactory, diff --git a/obnamlib/plugins/backup_plugin.py b/obnamlib/plugins/backup_plugin.py index c9900bee..384f2800 100644 --- a/obnamlib/plugins/backup_plugin.py +++ b/obnamlib/plugins/backup_plugin.py @@ -526,9 +526,21 @@ class BackupPlugin(obnamlib.ObnamPlugin): metadata.md5 = self.backup_file_contents(pathname, metadata) self.backup_metadata(pathname, metadata) - except (IOError, OSError), e: - msg = 'Can\'t back up %s: %s' % (pathname, e.strerror) - self.progress.error(msg, e) + except (IOError, OSError) as e: + + if type(e) is IOError: + e2 = obnamlib.ObnamIOError( + errno=e.errno, + strerror=e.strerror, + filename=e.filename) + else: + e2 = obnamlib.ObnamSystemError( + errno=e.errno, + strerror=e.strerror, + filename=e.filename) + + msg = 'Can\'t back up %s: %s' % (pathname, str(e2)) + self.progress.error(msg, exc=e) if not existed and not self.pretend: try: self.repo.remove_file( @@ -550,6 +562,7 @@ class BackupPlugin(obnamlib.ObnamPlugin): self.progress.error(msg, ee) if e.errno == errno.ENOSPC: raise + if self.time_for_checkpoint(): self.make_checkpoint() self.progress.what(pathname) diff --git a/tests/unreadable-dir.stderr b/tests/unreadable-dir.stderr index 287a4851..4c7ac5b7 100644 --- a/tests/unreadable-dir.stderr +++ b/tests/unreadable-dir.stderr @@ -1,2 +1,2 @@ -ERROR: Can't back up TMP/data/bbb: Permission denied +ERROR: Can't back up TMP/data/bbb: RD5FA4X: System error: TMP/data/bbb: 13: Permission denied ERROR: R4C3BCX: There were errors during the backup diff --git a/tests/unreadable-file.stderr b/tests/unreadable-file.stderr index 287a4851..b6ac2bda 100644 --- a/tests/unreadable-file.stderr +++ b/tests/unreadable-file.stderr @@ -1,2 +1,2 @@ -ERROR: Can't back up TMP/data/bbb: Permission denied +ERROR: Can't back up TMP/data/bbb: RCE08AX: I/O error: TMP/data/bbb: 13: Permission denied ERROR: R4C3BCX: There were errors during the backup |