def layman_sync(logger, cache=True): """ Syncs Layman repos """ from layman import Layman import shutil l = Layman(stderr=sys.__stderr__, stdin=sys.__stdin__, stdout=sys.__stdout__, config=settings.LAYMAN_CONFIG, root="/") installed_overlays = l.get_installed() for overlay in installed_overlays: logger.info('Cleaning cache for overlay %s...' % overlay) overlay_path = os.path.join(l.config['storage'], overlay) dirs = [ os.path.join(overlay_path, 'metadata/cache'), os.path.join(overlay_path, 'metadata/md5-cache') ] files = [os.path.join(overlay_path, 'profiles/use.local.desc')] for dirname in dirs: if os.path.isdir(dirname): shutil.rmtree(dirname, True) for filename in files: if os.path.exists(filename): os.remove(filename) # FIXME, try to find a way to log layman output... #l.sync(installed_overlays, output_results=False) env = dict(os.environ) env['ROOT'] = '/' cmd = ['layman', '-S', '--config', settings.LAYMAN_CONFIG] _launch_command(cmd, env=env, logger=logger) cmd = [ 'egencache', '--jobs', "%s" % settings.EGENCACHE_JOBS, '--rsync', '--config-root', settings.PORTAGE_CONFIGROOT, '--update', '--update-use-local-desc' ] for overlay in installed_overlays: logger.info('Generating cache for overlay %s...' % overlay) overlay_path = os.path.join(l.config['storage'], overlay) repo_path = os.path.join(overlay_path, 'profiles/repo_name') if not os.path.exists(repo_path): continue _launch_command(cmd + ['--repo', overlay], logger=logger)
def populate_overlays(logger): l = Layman(stderr=sys.__stderr__, stdin=sys.__stdin__, stdout=sys.__stdout__, config=settings.LAYMAN_CONFIG, root="/") installed_overlays = l.get_installed() info = l.get_all_info(installed_overlays) for overlay in installed_overlays: if not overlay: continue obj, created = Overlay.objects.get_or_create(name=overlay) if overlay in info and type(info[overlay]) == dict: obj.description = info[overlay]["description"] obj.homepage = info[overlay]["homepage"] obj.overlay_path = os.path.join(l.config['storage'], overlay) obj.save() if created: logger.info("+ [o] %s", overlay)
def layman_sync(config): # check for an available layman api try: from layman import Layman except ImportError: # run it in a subprocess if config['verbose'] >= 0: emsg("Doing " + config['layman-cmd'] + " now", config) if config['verbose'] == 1: errorcode = os.system(config['layman-cmd'] + " | tee " + laymanlog_sync + " 2>&1") else: errorcode = os.system(config['layman-cmd'] + " > " + laymanlog_sync + " 2>&1") if errorcode != 0: error("'" + config['layman-cmd'] + "' failed, see " + laymanlog_sync + " for errors", fatal=False) print("") return False, [] return True, [] # run the api to sync emsg("Running the Layman API", config) if config['verbose'] < 1: quietness = 0 else: quietness = 4 _layman = Layman(stdout=config['stdout'], stderr=config['stderr'], quiet=config['verbose'] < 1, quietness=quietness, verbose=config['verbose'] > 0, nocolor=config['nocolor']) repos = _layman.get_installed() success = _layman.sync(repos, output_results=config['verbose'] > 0) warnings = _layman.sync_results[1] if not success: error("Syncing with the layman api "\ "failed.\n Failures were:", fatal=False) fatals = _layman.sync_results[2] for ovl, result in fatals: error(result, fatal=False) return success, warnings
def layman_sync(logger, cache=True): """ Syncs Layman repos """ from layman import Layman import shutil l = Layman(stderr=sys.__stderr__, stdin=sys.__stdin__, stdout=sys.__stdout__, config=settings.LAYMAN_CONFIG, root="/") installed_overlays = l.get_installed() for overlay in installed_overlays: logger.info('Cleaning cache for overlay %s...' % overlay) overlay_path = os.path.join(l.config['storage'], overlay) dirs = [os.path.join(overlay_path, 'metadata/cache'), os.path.join(overlay_path, 'metadata/md5-cache')] files = [os.path.join(overlay_path, 'profiles/use.local.desc')] for dirname in dirs: if os.path.isdir(dirname): shutil.rmtree(dirname, True) for filename in files: if os.path.exists(filename): os.remove(filename) # FIXME, try to find a way to log layman output... #l.sync(installed_overlays, output_results=False) env = dict(os.environ) env['ROOT'] = '/' cmd = ['layman', '-S', '--config', settings.LAYMAN_CONFIG] _launch_command(cmd, env=env, logger=logger) cmd = ['egencache', '--jobs', "%s" % settings.EGENCACHE_JOBS, '--rsync', '--config-root', settings.PORTAGE_CONFIGROOT, '--update', '--update-use-local-desc'] for overlay in installed_overlays: logger.info('Generating cache for overlay %s...' % overlay) overlay_path = os.path.join(l.config['storage'], overlay) repo_path = os.path.join(overlay_path, 'profiles/repo_name') if not os.path.exists(repo_path): continue _launch_command(cmd + ['--repo', overlay], logger=logger)
def populate_overlays(logger): l = Layman(stderr=sys.__stderr__, stdin=sys.__stdin__, stdout=sys.__stdout__, config=settings.LAYMAN_CONFIG, root="/") installed_overlays = l.get_installed() info = l.get_all_info(installed_overlays) for overlay in installed_overlays: if not overlay: continue obj, created = Overlay.objects.get_or_create(name=overlay) if overlay in info: obj.description = info[overlay]["description"] obj.homepage = info[overlay]["homepage"] obj.overlay_path = os.path.join(l.config['storage'], overlay) obj.save() if created: logger.info("+ [o] %s", overlay)
def layman_sync(config): # check for an available layman api try: from layman import Layman except ImportError: # run it in a subprocess if config['verbose'] >= 0: emsg("Doing " + config['layman-cmd'] +" now", config) if config['verbose'] == 1: errorcode = os.system(config['layman-cmd'] + " | tee " + laymanlog_sync + " 2>&1") else: errorcode = os.system(config['layman-cmd'] + " > " + laymanlog_sync + " 2>&1") if errorcode != 0: error("'" + config['layman-cmd'] + "' failed, see " + laymanlog_sync + " for errors", fatal=False) print("") return False, [] return True, [] # run the api to sync emsg("Running the Layman API", config) if config['verbose']<1: quietness=0 else: quietness=4 _layman = Layman(stdout=config['stdout'], stderr=config['stderr'], quiet=config['verbose']<1, quietness=quietness, verbose=config['verbose']>0, nocolor=config['nocolor']) repos = _layman.get_installed() success = _layman.sync(repos, output_results=config['verbose']>0) warnings = _layman.sync_results[1] if not success: error("Syncing with the layman api "\ "failed.\n Failures were:", fatal=False) fatals = _layman.sync_results[2] for ovl, result in fatals: error(result, fatal=False) return success, warnings
def get_layman_repos(): lay = Layman(config=settings.LAYMAN_CONFIG) installed_overlays = lay.get_installed() return lay.get_all_info(installed_overlays)