From 0ca1a18b33e1ff6ce68d40f64a3f235b69c5aeb8 Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Tue, 31 May 2016 02:35:54 +0200 Subject: [PATCH] Make borg.platform a package --- setup.py | 38 ++++++++++++------- src/borg/platform.py | 24 ------------ src/borg/platform/__init__.py | 24 ++++++++++++ .../{platform_base.py => platform/base.py} | 0 .../darwin.pyx} | 6 +-- .../freebsd.pyx} | 6 +-- .../linux.pyx} | 10 ++--- .../posix.pyx} | 0 src/borg/repository.py | 2 +- src/borg/testsuite/platform.py | 2 +- 10 files changed, 62 insertions(+), 50 deletions(-) delete mode 100644 src/borg/platform.py create mode 100644 src/borg/platform/__init__.py rename src/borg/{platform_base.py => platform/base.py} (100%) rename src/borg/{platform_darwin.pyx => platform/darwin.pyx} (95%) rename src/borg/{platform_freebsd.pyx => platform/freebsd.pyx} (95%) rename src/borg/{platform_linux.pyx => platform/linux.pyx} (97%) rename src/borg/{platform_posix.pyx => platform/posix.pyx} (100%) diff --git a/setup.py b/setup.py index 90fe402e..23f2f97e 100644 --- a/setup.py +++ b/setup.py @@ -45,10 +45,22 @@ compress_source = 'src/borg/compress.pyx' crypto_source = 'src/borg/crypto.pyx' chunker_source = 'src/borg/chunker.pyx' hashindex_source = 'src/borg/hashindex.pyx' -platform_posix_source = 'src/borg/platform_posix.pyx' -platform_linux_source = 'src/borg/platform_linux.pyx' -platform_darwin_source = 'src/borg/platform_darwin.pyx' -platform_freebsd_source = 'src/borg/platform_freebsd.pyx' +platform_posix_source = 'src/borg/platform/posix.pyx' +platform_linux_source = 'src/borg/platform/linux.pyx' +platform_darwin_source = 'src/borg/platform/darwin.pyx' +platform_freebsd_source = 'src/borg/platform/freebsd.pyx' + +cython_sources = [ + compress_source, + crypto_source, + chunker_source, + hashindex_source, + + platform_posix_source, + platform_linux_source, + platform_freebsd_source, + platform_darwin_source, +] try: from Cython.Distutils import build_ext @@ -56,7 +68,7 @@ try: class Sdist(sdist): def __init__(self, *args, **kwargs): - for src in glob('src/borg/*.pyx'): + for src in cython_sources: cython_compiler.compile(src, cython_compiler.default_options) super().__init__(*args, **kwargs) @@ -66,10 +78,10 @@ try: 'src/borg/crypto.c', 'src/borg/chunker.c', 'src/borg/_chunker.c', 'src/borg/hashindex.c', 'src/borg/_hashindex.c', - 'src/borg/platform_posix.c', - 'src/borg/platform_linux.c', - 'src/borg/platform_freebsd.c', - 'src/borg/platform_darwin.c', + 'src/borg/platform/posix.c', + 'src/borg/platform/linux.c', + 'src/borg/platform/freebsd.c', + 'src/borg/platform/darwin.c', ]) super().make_distribution() @@ -295,14 +307,14 @@ if not on_rtd: Extension('borg.hashindex', [hashindex_source]) ] if sys.platform.startswith(('linux', 'freebsd', 'darwin')): - ext_modules.append(Extension('borg.platform_posix', [platform_posix_source])) + ext_modules.append(Extension('borg.platform.posix', [platform_posix_source])) if sys.platform == 'linux': - ext_modules.append(Extension('borg.platform_linux', [platform_linux_source], libraries=['acl'])) + ext_modules.append(Extension('borg.platform.linux', [platform_linux_source], libraries=['acl'])) elif sys.platform.startswith('freebsd'): - ext_modules.append(Extension('borg.platform_freebsd', [platform_freebsd_source])) + ext_modules.append(Extension('borg.platform.freebsd', [platform_freebsd_source])) elif sys.platform == 'darwin': - ext_modules.append(Extension('borg.platform_darwin', [platform_darwin_source])) + ext_modules.append(Extension('borg.platform.darwin', [platform_darwin_source])) setup( name='borgbackup', diff --git a/src/borg/platform.py b/src/borg/platform.py deleted file mode 100644 index 88f32ca6..00000000 --- a/src/borg/platform.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys - -""" -Platform-specific APIs. - -Public APIs are documented in platform_base. -""" - -from .platform_base import acl_get, acl_set -from .platform_base import set_flags, get_flags -from .platform_base import SyncFile, sync_dir, fdatasync -from .platform_base import swidth, API_VERSION - -if sys.platform.startswith('linux'): # pragma: linux only - from .platform_linux import acl_get, acl_set - from .platform_linux import set_flags, get_flags - from .platform_linux import SyncFile - from .platform_linux import swidth, API_VERSION -elif sys.platform.startswith('freebsd'): # pragma: freebsd only - from .platform_freebsd import acl_get, acl_set - from .platform_freebsd import swidth, API_VERSION -elif sys.platform == 'darwin': # pragma: darwin only - from .platform_darwin import acl_get, acl_set - from .platform_darwin import swidth, API_VERSION diff --git a/src/borg/platform/__init__.py b/src/borg/platform/__init__.py new file mode 100644 index 00000000..29a97fc4 --- /dev/null +++ b/src/borg/platform/__init__.py @@ -0,0 +1,24 @@ +import sys + +""" +Platform-specific APIs. + +Public APIs are documented in platform.base. +""" + +from .base import acl_get, acl_set +from .base import set_flags, get_flags +from .base import SyncFile, sync_dir, fdatasync +from .base import swidth, API_VERSION + +if sys.platform.startswith('linux'): # pragma: linux only + from .linux import acl_get, acl_set + from .linux import set_flags, get_flags + from .linux import SyncFile + from .linux import swidth, API_VERSION +elif sys.platform.startswith('freebsd'): # pragma: freebsd only + from .freebsd import acl_get, acl_set + from .freebsd import swidth, API_VERSION +elif sys.platform == 'darwin': # pragma: darwin only + from .darwin import acl_get, acl_set + from .darwin import swidth, API_VERSION diff --git a/src/borg/platform_base.py b/src/borg/platform/base.py similarity index 100% rename from src/borg/platform_base.py rename to src/borg/platform/base.py diff --git a/src/borg/platform_darwin.pyx b/src/borg/platform/darwin.pyx similarity index 95% rename from src/borg/platform_darwin.pyx rename to src/borg/platform/darwin.pyx index 7e88376b..016ad5aa 100644 --- a/src/borg/platform_darwin.pyx +++ b/src/borg/platform/darwin.pyx @@ -1,8 +1,8 @@ import os -from .helpers import user2uid, group2gid -from .helpers import safe_decode, safe_encode -from .platform_posix import swidth +from ..helpers import user2uid, group2gid +from ..helpers import safe_decode, safe_encode +from .posix import swidth API_VERSION = 3 diff --git a/src/borg/platform_freebsd.pyx b/src/borg/platform/freebsd.pyx similarity index 95% rename from src/borg/platform_freebsd.pyx rename to src/borg/platform/freebsd.pyx index ecf51bed..7553a26c 100644 --- a/src/borg/platform_freebsd.pyx +++ b/src/borg/platform/freebsd.pyx @@ -1,8 +1,8 @@ import os -from .helpers import posix_acl_use_stored_uid_gid -from .helpers import safe_encode, safe_decode -from .platform_posix import swidth +from ..helpers import posix_acl_use_stored_uid_gid +from ..helpers import safe_encode, safe_decode +from .posix import swidth API_VERSION = 3 diff --git a/src/borg/platform_linux.pyx b/src/borg/platform/linux.pyx similarity index 97% rename from src/borg/platform_linux.pyx rename to src/borg/platform/linux.pyx index 7a0c83d3..76d76521 100644 --- a/src/borg/platform_linux.pyx +++ b/src/borg/platform/linux.pyx @@ -3,11 +3,11 @@ import re import resource import stat -from .helpers import posix_acl_use_stored_uid_gid -from .helpers import user2uid, group2gid -from .helpers import safe_decode, safe_encode -from .platform_base import SyncFile as BaseSyncFile -from .platform_posix import swidth +from ..helpers import posix_acl_use_stored_uid_gid +from ..helpers import user2uid, group2gid +from ..helpers import safe_decode, safe_encode +from .base import SyncFile as BaseSyncFile +from .posix import swidth from libc cimport errno from libc.stdint cimport int64_t diff --git a/src/borg/platform_posix.pyx b/src/borg/platform/posix.pyx similarity index 100% rename from src/borg/platform_posix.pyx rename to src/borg/platform/posix.pyx diff --git a/src/borg/repository.py b/src/borg/repository.py index 0714f726..70413183 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -55,7 +55,7 @@ class Repository: established by a COMMIT. Note that the COMMIT can't establish consistency by itself, but only manages to do so with proper support from - the platform (including the hardware). See platform_base.SyncFile for details. + the platform (including the hardware). See platform.base.SyncFile for details. A PUT inserts a key-value pair. The value is stored in the log entry, hence the repository implements full data logging, meaning that all data is consistent, not just metadata (which is common in file systems). diff --git a/src/borg/testsuite/platform.py b/src/borg/testsuite/platform.py index 9eaede98..85792007 100644 --- a/src/borg/testsuite/platform.py +++ b/src/borg/testsuite/platform.py @@ -102,7 +102,7 @@ class PlatformLinuxTestCase(BaseTestCase): self.assert_in(group_entry_numeric, acl_access_numeric) def test_utils(self): - from ..platform_linux import acl_use_local_uid_gid + from ..platform.linux import acl_use_local_uid_gid self.assert_equal(acl_use_local_uid_gid(b'user:nonexistent1234:rw-:1234'), b'user:1234:rw-') self.assert_equal(acl_use_local_uid_gid(b'group:nonexistent1234:rw-:1234'), b'group:1234:rw-') self.assert_equal(acl_use_local_uid_gid(b'user:root:rw-:0'), b'user:0:rw-')