aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'roverlay/remote/repo.py')
-rw-r--r--roverlay/remote/repo.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/roverlay/remote/repo.py b/roverlay/remote/repo.py
new file mode 100644
index 0000000..f54f448
--- /dev/null
+++ b/roverlay/remote/repo.py
@@ -0,0 +1,54 @@
+
+import logging
+
+#from roverlay.remote.basicrepo import LocalRepo, RemoteRepo
+from roverlay.remote.basicrepo import RemoteRepo
+
+from roverlay.remote.rsync import RsyncJob
+
+class RsyncRepo ( RemoteRepo ):
+
+ def __init__ (
+ self, name,
+ directory=None, src_uri=None, rsync_uri=None, base_uri=None,
+ extra_rsync_opts=None
+ ):
+ # super's init: name, remote protocol, directory_kw, **uri_kw
+ # using '' as remote protocol which leaves uris unchanged when
+ # normalizing them for rsync usage
+ super ( RsyncRepo, self ) . __init__ (
+ name, '', directory=directory,
+ src_uri=src_uri, remote_uri=rsync_uri, base_uri=base_uri
+ )
+ self.extra_rsync_opts = extra_rsync_opts
+ # --- end of __init__ (...) ---
+
+
+ def sync ( self ):
+ retcode = None
+ try:
+ job = RsyncJob (
+ remote=self.remote_uri, distdir=self.distdir,
+ run_now=True,
+ extra_opts=self.extra_rsync_opts
+ )
+ if job.returncode == 0: return True
+
+ retcode = job.returncode
+ except Exception as e:
+ # catch exceptions, log them and return False
+ ## TODO: which exceptions to catch||pass?
+ logging.exception ( e )
+ retcode = '<undef>'
+
+
+ logging.error (
+ 'Repo %s cannot be used for ebuild creation due to errors '
+ 'while running rsync (return code was %s).' % ( self.name, retcode )
+ )
+ return False
+ # --- end of sync (...) ---
+
+ def __str__ ( self ):
+ return "rsync repo '%s': DISTDIR '%s', SRC_URI '%s', RSYNC_URI '%s'" \
+ % ( self.name, self.distdir, self.src_uri, self.remote_uri )