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
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):