Add ability to keep local cache for debmirror's repo syncs
Add new cache_dir parameter to keep local cache for debmirror
repo and re-use it. During first run debmirror will create
cache and then using hardlinks cache will be copied to target
repo. All next runs will copy cache first and then run debmirror
with prepared cached.
Change-Id: Ib7932e64c75743b06b3b12507fe87a30d4d93311
(cherry picked from commit 964ba9a2b45335c2c7cc2bcf7aab094296de0d36)
diff --git a/_states/debmirror.py b/_states/debmirror.py
index 83c51a6..2c0bb8a 100644
--- a/_states/debmirror.py
+++ b/_states/debmirror.py
@@ -101,6 +101,11 @@
return env
+def _check_mirror_cache(cache_dir):
+ cacheReadinessKeyFile = os.path.join(cache_dir, '.ready')
+ return os.path.isfile(cacheReadinessKeyFile)
+
+
def _get_cmdline(name, tgt):
cmdline = " debmirror "
if tgt.get('extra_flags'):
@@ -129,7 +134,15 @@
for key, value in enumerate(sorted(tgt['filter'])):
cmdline += " " + tgt['filter'][value]
if tgt.get('target_dir', False):
- cmdline += ' ' + _get_target_path(name, tgt)['target_dir']
+ target_dir = _get_target_path(name, tgt)['target_dir']
+ if tgt.get('cache_dir'):
+ cache_dir = tgt.get('cache_dir')
+ if _check_mirror_cache(cache_dir):
+ cmdline += ' ' + target_dir
+ else:
+ cmdline += ' ' + cache_dir
+ else:
+ cmdline += ' ' + target_dir
return cmdline
@@ -154,8 +167,29 @@
fh.setFormatter(fh_format)
log2file = logging.getLogger("debmirror")
log2file.addHandler(fh)
- result = __salt__['cmd.run_all'](cmdline, redirect_stderr=True,
- env=env_vars)
+ # check cache usage
+ if tgt.get('cache_dir'):
+ cache_dir = tgt.get('cache_dir')
+ target_dir = _get_target_path(name, tgt)['target_dir']
+ cpline = "find . -name *.deb -exec cp -rlf --parent {} %s \\;" % (
+ target_dir)
+ if _check_mirror_cache(cache_dir):
+ result = __salt__['cmd.run_all'](cpline, redirect_stderr=True,
+ cwd=cache_dir, env=env_vars)
+ if result['retcode'] == 0:
+ log2file.debug(result['stdout'])
+ result = __salt__['cmd.run_all'](cmdline, redirect_stderr=True,
+ env=env_vars)
+ else:
+ result = __salt__['cmd.run_all'](cmdline, redirect_stderr=True,
+ env=env_vars)
+ if result['retcode'] == 0:
+ log2file.debug(result['stdout'])
+ result = __salt__['cmd.run_all'](cpline, redirect_stderr=True,
+ cwd=cache_dir, env=env_vars)
+ else:
+ result = __salt__['cmd.run_all'](cmdline, redirect_stderr=True,
+ env=env_vars)
log2file.debug(result['stdout'])
# destroy file logger
for i in list(log2file.handlers):