aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/gensync/gensync')
-rwxr-xr-xdeprecated/gensync/gensync226
1 files changed, 226 insertions, 0 deletions
diff --git a/deprecated/gensync/gensync b/deprecated/gensync/gensync
new file mode 100755
index 0000000..52f25ed
--- /dev/null
+++ b/deprecated/gensync/gensync
@@ -0,0 +1,226 @@
+#!/usr/bin/python
+#
+# Simple program to rsync from various 3rd party ebuild servers.
+#
+#
+# Copyright (c) 2004, Matthew Schick <matt@breakmygentoo.net> (original author)
+# Copyright (c) 2004, Gentoo Technologies, Inc
+# Copyright (c) 2004, Karl Trygve Kalleberg <karltk@gentoo.org>
+#
+# Distributed under the terms of the GNU General Public License v2
+
+__author__ = "Matt Schick <matt@breakmygentoo.net>, Karl Trygve Kalleberg <karltk@gentoo.org>"
+__email__ = "karltk@gentoo.org"
+__version__ = "0.1.0"
+__productname__ = "gensync"
+__description__ = "Gentoo Overlay Sync Tool"
+
+
+import sys
+import os
+import fileinput
+
+sys.path.insert(0, "/usr/lib/portage/pym")
+import portage
+
+try:
+ from portage.output import *
+except ImportError:
+ from output import *
+
+class ConfigDefaults:
+ def __init__(self):
+ self.rsync_timeout = 0
+ self.base_overlay = "/usr/local/overlays"
+ self.confdir = '/etc/gensync'
+ self._init_from_file()
+ self._setup_rsync()
+ def _init_from_file(self):
+ try:
+ ins = open("/etc/gensync/gensync.conf")
+ for x in ins.readlines():
+ # Skip line if it's a comment or not well-formed
+ if x.find("=") == -1 or \
+ (len(x) and x[0] == "#"):
+ continue
+ (attrib, value) = x.split('=')
+ attrib = attrib.strip().strip('"')
+ value = value.strip().strip('"')
+ if attrib == "rsync_timeout":
+ self.rsync_timeout = value
+ elif attrib == "base_overlay":
+ self.base_overlay = value
+ except:
+ pass
+
+ def _setup_rsync(self):
+ if self.rsync_timeout == 0:
+ try:
+ self.rsync_timeout = portage.settings["RSYNC_TIMEOUT"]
+ except:
+ self.rsync_timeout = 180
+ self.rsync_command = "/usr/bin/rsync " + \
+ "-rlptDvz --progress " + \
+ "--delete --delete-after " + \
+ "--timeout=" + str(self.rsync_timeout) + " " \
+ "--exclude='distfiles/*' " + \
+ "--exclude='local/*' " + \
+ "--exclude='packages/*' "
+
+Config = ConfigDefaults()
+
+class SyncSource:
+ """Contains all details about an upstream rsync source."""
+ def __init__(self,filename):
+ self.id = "#unset#"
+ self.name = "#unset#"
+ self.url = "#unset#"
+ self.overlay = "#unset#"
+ self._init_from_file(filename)
+
+ if self.overlay == "#unset#":
+ self.overlay = Config.base_overlay + "/" + self.id
+ elif len(self.overlay) and self.overlay[0] != "/":
+ self.overlay = Config.base_overlay + "/" + self.overlay
+ elif len(self.overlay) and self.overlay[0] == "/":
+ pass
+ else:
+ print "Malformed overlay, '" + self.overlay + "'"
+ sys.exit(-2)
+
+ def _init_from_file(self, filename):
+ """Loads configuration settings from a .syncsource file."""
+ ins = open(filename)
+ for x in ins.readlines():
+ # Skip line if it's a comment or not well-formed
+ if x.find("=") == -1 or \
+ (len(x) and x[0] == "#"):
+ continue
+ (attrib, value) = x.split("=")
+ attrib = attrib.strip().strip('"')
+ value = value.strip().strip('"')
+ if attrib == "id":
+ self.id = value
+ elif attrib == "description":
+ self.name = value
+ elif attrib == "rsync":
+ self.url = value
+ elif attrib == "overlay":
+ self.overlay = value
+ def perform_sync(self):
+ """Syncs with upstream source."""
+ cmd = Config.rsync_command + self.url +"/* " + self.overlay
+ exitcode = portage.spawn(cmd, portage.settings, free=1)
+
+ def dump(self,ous=sys.stdout):
+ ous.write("id =\"%s\"\n" % (self.id) + \
+ "name =\"%s\"\n" % (self.name) + \
+ "rsync =\"%s\"\n" % (self.url) + \
+ "overlay=\"%s\"\n\n" % (self.overlay))
+
+class SyncSourceManager:
+ """Holds information on all known upstream rsync sources."""
+ def __init__(self):
+ self.sources = []
+ self._load_source_info()
+ def _load_source_info(self):
+ for x in os.listdir(Config.confdir):
+ if x.rfind(".syncsource") > 0 and \
+ x.endswith(".syncsource"):
+ ss = SyncSource(Config.confdir + "/" + x)
+ self.sources.append(ss)
+ def list_sources(self):
+ for x in self.sources:
+ x.dump()
+ def get_sync_source(self, source_id):
+ for x in self.sources:
+ if x.id == source_id:
+ return x
+ return None
+ def get_all_sync_sources(self):
+ return self.sources
+
+def print_version():
+ print __productname__ + "(" + __version__ + ") - " + \
+ __description__
+ print "Author(s): " + __author__
+
+def print_usage():
+ print white("Usage: ") + turquoise(__productname__) + \
+ yellow(" <options> ") + green("repo-id-1 repo-id-2 ...")
+ print "where " + yellow("<options>") + " is one of"
+ print yellow(" -a, --all-sources") + " - sync all know sources"
+ print yellow(" -l, --list-sources") + " - list known rsync sources"
+ print yellow(" -C, --no-color") + " - turn off colours"
+ print yellow(" -h, --help") + " - this help screen"
+ print yellow(" -V, --version") + " - display version info"
+
+
+def parse_args(cliargs):
+
+ cmd = "sync-sources"
+ args = []
+ options = []
+
+ for x in cliargs:
+ if x in ["-V", "--version"]:
+ cmd = "print-version"
+ break
+ elif x in ["-h", "--help"]:
+ cmd = "print-usage"
+ break
+ elif x in ["-C", "--no-color"]:
+ options.append("nocolor")
+ break
+ elif x in ["-l", "--list-sources"]:
+ cmd = "list-sources"
+ elif x in ["-a", "--all-sources"]:
+ cmd = "all-sources"
+ else:
+ args.append(x)
+ return (cmd, args, options)
+
+def main():
+
+ # Setup colors, as per system defaults
+ if (not sys.stdout.isatty()) or \
+ (portage.settings["NOCOLOR"] in ["yes","true"]):
+ nocolor()
+
+ # Parse arguments
+ (cmd, args, options) = parse_args(sys.argv[1:])
+
+ # Turn off color, if specified by cmdline switch
+ if "nocolor" in options:
+ nocolor()
+
+ # Initialise sync source manager
+ ssmgr = SyncSourceManager()
+
+ # Perform selected command
+ if cmd == "list-sources":
+ ssmgr.list_sources()
+ elif cmd == "print-version":
+ print_version()
+ elif cmd == "print-usage":
+ print_usage()
+ elif cmd == "sync-sources":
+ for x in args:
+ repo = ssmgr.get_sync_source(x)
+ if repo:
+ print "Syncing '%s' into '%s'" % \
+ (repo.id, repo.overlay)
+ repo.perform_sync()
+ elif cmd == "all-sources":
+ for repo in ssmgr.get_all_sync_sources():
+ print "Syncing '%s' into '%s'" % \
+ (repo.id, repo.overlay)
+ repo.perform_sync()
+ else:
+ print red("Unknown command '" + cmd + "'")
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ print "Operation aborted by user keypress!"