summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2014-03-11 19:26:30 +0000
committerLars Wirzenius <liw@liw.fi>2014-03-11 19:26:30 +0000
commit091f9d57ca70fec9a469a00783a18ca6cd239c45 (patch)
treee1d7010e13d3a364a7dea6efcaa85b21884a318c
parentf49ccfdb11d022fdf18b578aa8f702f24144af61 (diff)
downloadobnam-091f9d57ca70fec9a469a00783a18ca6cd239c45.tar.gz
Turn IO/OSError into structured errors in backup
-rw-r--r--obnamlib/__init__.py2
-rw-r--r--obnamlib/plugins/backup_plugin.py19
-rw-r--r--tests/unreadable-dir.stderr2
-rw-r--r--tests/unreadable-file.stderr2
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