From 680940dfe390cb342e6c3f8a8cd73394914ed001 Mon Sep 17 00:00:00 2001 From: bigeagle Date: Sat, 22 Nov 2014 19:26:39 +0800 Subject: [PATCH] TUNASYNC_WORKING_DIR and TUNASYNC_UPSTREAM_URL as env to shell provider --- examples/shell_provider.sh | 3 ++- examples/tunasync.conf | 2 +- tunasync/jobs.py | 2 ++ tunasync/loglimit.py | 2 +- tunasync/mirror_config.py | 35 ++++++++++++++++++----------------- tunasync/mirror_provider.py | 9 +++++++-- 6 files changed, 31 insertions(+), 22 deletions(-) diff --git a/examples/shell_provider.sh b/examples/shell_provider.sh index b163003..9e949dc 100755 --- a/examples/shell_provider.sh +++ b/examples/shell_provider.sh @@ -1,5 +1,6 @@ #!/bin/bash -echo $TUNASYNC_LOCAL_DIR +echo $TUNASYNC_WORKING_DIR echo $TUNASYNC_LOG_FILE +echo $TUNASYNC_UPSTREAM_URL sleep 5 exit 1 diff --git a/examples/tunasync.conf b/examples/tunasync.conf index a9edb43..fef5354 100644 --- a/examples/tunasync.conf +++ b/examples/tunasync.conf @@ -15,7 +15,6 @@ ctrl_addr = "/tmp/tunasync.sock" [btrfs] service_dir = "{mirror_root}/_current/{mirror_name}" working_dir = "{mirror_root}/_working/{mirror_name}" -gc_root = "{mirror_root}/_garbage/" gc_dir = "{mirror_root}/_garbage/_gc_{mirror_name}_{{timestamp}}" # [[mirrors]] @@ -43,6 +42,7 @@ local_dir = "/mnt/sdb1/mirror/archlinux/current/" name = "arch4" provider = "shell" command = "./shell_provider.sh" +upstream = "https://pypi.python.org/" # log_file = "/tmp/arch4-{date}.log" use_btrfs = false diff --git a/tunasync/jobs.py b/tunasync/jobs.py index da10b3c..451a456 100644 --- a/tunasync/jobs.py +++ b/tunasync/jobs.py @@ -31,6 +31,8 @@ def run_job(sema, child_q, manager_q, provider, **settings): status = "syncing" manager_q.put(("UPDATE", (provider.name, status))) ctx = {} # put context info in it + ctx['current_dir'] = provider.local_dir + try: for hook in provider.hooks: hook.before_job(provider=provider, ctx=ctx) diff --git a/tunasync/loglimit.py b/tunasync/loglimit.py index 5390b79..9071f07 100644 --- a/tunasync/loglimit.py +++ b/tunasync/loglimit.py @@ -56,7 +56,7 @@ class LogLimitHook(JobHook): sh.mv(log_file, log_file_save) except: pass - self.create_lin(log_link, log_file_save) + self.create_link(log_link, log_file_save) def ensure_log_dir(self, log_dir): if not os.path.exists(log_dir): diff --git a/tunasync/mirror_config.py b/tunasync/mirror_config.py index ebc2078..a688c02 100644 --- a/tunasync/mirror_config.py +++ b/tunasync/mirror_config.py @@ -60,26 +60,27 @@ class MirrorConfig(object): def to_provider(self, hooks=[]): if self.provider == "rsync": provider = RsyncProvider( - self.name, - self.upstream, - self.local_dir, - self.log_dir, - self.use_ipv6, - self.password, - self.exclude_file, - self.log_file, - self.interval, - hooks, + name=self.name, + upstream_url=self.upstream, + local_dir=self.local_dir, + log_dir=self.log_dir, + useIPv6=self.use_ipv6, + password=self.password, + exclude_file=self.exclude_file, + log_file=self.log_file, + interval=self.interval, + hooks=hooks, ) elif self.options["provider"] == "shell": provider = ShellProvider( - self.name, - self.command, - self.local_dir, - self.log_dir, - self.log_file, - self.interval, - hooks + name=self.name, + command=self.command, + upstream_url=self.upstream, + local_dir=self.local_dir, + log_dir=self.log_dir, + log_file=self.log_file, + interval=self.interval, + hooks=hooks ) return provider diff --git a/tunasync/mirror_provider.py b/tunasync/mirror_provider.py index e1f5401..702dc8f 100644 --- a/tunasync/mirror_provider.py +++ b/tunasync/mirror_provider.py @@ -83,7 +83,9 @@ class RsyncProvider(MirrorProvider): def run(self, ctx={}): _args = self.options _args.append(self.upstream_url) - _args.append(self.local_dir) + + working_dir = ctx.get("current_dir", self.local_dir) + _args.append(working_dir) log_file = self.get_log_file(ctx) new_env = os.environ.copy() @@ -96,11 +98,12 @@ class RsyncProvider(MirrorProvider): class ShellProvider(MirrorProvider): - def __init__(self, name, command, local_dir, log_dir, + def __init__(self, name, command, upstream_url, local_dir, log_dir, log_file="/dev/null", interval=120, hooks=[]): super(ShellProvider, self).__init__(name, local_dir, log_dir, log_file, interval, hooks) + self.upstream_url = str(upstream_url) self.command = command.split() def run(self, ctx={}): @@ -110,6 +113,8 @@ class ShellProvider(MirrorProvider): new_env = os.environ.copy() new_env["TUNASYNC_MIRROR_NAME"] = self.name new_env["TUNASYNC_LOCAL_DIR"] = self.local_dir + new_env["TUNASYNC_WORKING_DIR"] = ctx.get("current_dir", self.local_dir) + new_env["TUNASYNC_UPSTREAM_URL"] = self.upstream_url new_env["TUNASYNC_LOG_FILE"] = log_file _cmd = self.command[0]