summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-08-08 18:31:28 +0100
committerLars Wirzenius <liw@liw.fi>2011-08-08 18:31:28 +0100
commit426874e2d002dd0d4638ff9c96160c5ae5d6e656 (patch)
tree490915bf6ba9e03f3c095d5072e37c299dfb8f5d
parentba20bfebd024c9a41a98a58ec8c2848dec0ce80c (diff)
downloadobnam-426874e2d002dd0d4638ff9c96160c5ae5d6e656.tar.gz
Add support for Unix sockets.
-rw-r--r--NEWS1
-rwxr-xr-xblackboxtest9
-rw-r--r--obnamlib/plugins/restore_plugin.py8
3 files changed, 17 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 972bc61b..3f597224 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,7 @@ USER VISIBLE CHANGES:
* The error message when trying to use an encrypted repository without
encryption is now better (and suggests missing encryption being the
reason). Thanks, chrysn.
+* Obnam now supports backing up of Unix sockets.
Version 0.19, released 2011-08-03; a BETA release
-------------------------------------------------
diff --git a/blackboxtest b/blackboxtest
index 264b5cd6..1a51c319 100755
--- a/blackboxtest
+++ b/blackboxtest
@@ -356,7 +356,7 @@ class ObnamTestCase(unittest.TestCase):
logging.error('file %s not in restored data' % name)
self.report_contents(self.data_dir, origs)
self.report_contents(self.restored_dir, restoreds)
- raise cliapp.AppException('%s not in restored data' % name)
+ raise Exception('%s not in restored data' % name)
restored_stat = restoreds[name]
self.assert_same_stat(name, orig_stat, restored_stat)
if stat.S_ISREG(orig_stat.st_mode):
@@ -417,6 +417,13 @@ class RestoreTests(ObnamTestCase):
self.restore()
self.assert_restored_correctly()
+ def test_restores_socket(self):
+ pathname = os.path.join(self.data_dir, 'socket')
+ os.mknod(pathname, 0600 | stat.S_IFSOCK)
+ self.backup()
+ self.restore()
+ self.assert_restored_correctly()
+
def _mangle_chunks(self):
chunkdir = os.path.join(self.repo_dir, 'chunks')
for dirname, subdirs, basenames in os.walk(chunkdir):
diff --git a/obnamlib/plugins/restore_plugin.py b/obnamlib/plugins/restore_plugin.py
index 9c2ac83b..ff93dbea 100644
--- a/obnamlib/plugins/restore_plugin.py
+++ b/obnamlib/plugins/restore_plugin.py
@@ -152,6 +152,8 @@ class RestorePlugin(obnamlib.ObnamPlugin):
self.restore_regular_file(gen, to_dir, filename, metadata)
elif stat.S_ISFIFO(metadata.st_mode):
self.restore_fifo(gen, to_dir, filename, metadata)
+ elif stat.S_ISSOCK(metadata.st_mode):
+ self.restore_socket(gen, to_dir, filename, metadata)
else:
msg = ('Unknown file type: %s (%o)' %
(filename, metadata.st_mode))
@@ -215,3 +217,9 @@ class RestorePlugin(obnamlib.ObnamPlugin):
self.fs.mknod(to_filename, metadata.st_mode)
obnamlib.set_metadata(self.fs, to_filename, metadata)
+ def restore_socket(self, gen, to_dir, filename, metadata):
+ logging.debug('restoring socket %s' % filename)
+ to_filename = os.path.join(to_dir, './' + filename)
+ self.fs.mknod(to_filename, metadata.st_mode)
+ obnamlib.set_metadata(self.fs, to_filename, metadata)
+