diff --git a/etc/layman.cfg b/etc/layman.cfg index 8a39ab9..4073605 100644 --- a/etc/layman.cfg +++ b/etc/layman.cfg @@ -163,6 +163,7 @@ news_reporter: portage #svn_command : /usr/bin/svn #tar_command : /bin/tar #g-common_command : /usr/bin/g-common +#g-sorcery_command : /usr/bin/g-sorcery #----------------------------------------------------------- @@ -198,6 +199,8 @@ news_reporter: portage #svn_syncopts : #g-common_generateopts : #g-common_syncopts : +#g-sorcery_generateopts : +#g-sorcery_syncopts : #----------------------------------------------------------- @@ -221,6 +224,7 @@ news_reporter: portage #svn_postsync : #tar_postsync : #g-common_postsync : +#g-sorcery_postsync : #----------------------------------------------------------- diff --git a/layman/config.py b/layman/config.py index bb15abb..5a93c85 100644 --- a/layman/config.py +++ b/layman/config.py @@ -115,6 +115,7 @@ class BareConfig(object): 'darcs_command': path([self.root, EPREFIX,'/usr/bin/darcs']), 'git_command': path([self.root, EPREFIX,'/usr/bin/git']), 'g-common_command': path([self.root, EPREFIX,'/usr/bin/g-common']), + 'g-sorcery_command': path([self.root, EPREFIX,'/usr/bin/g-sorcery']), 'mercurial_command': path([self.root, EPREFIX,'/usr/bin/hg']), 'rsync_command': path([self.root, EPREFIX,'/usr/bin/rsync']), 'svn_command': path([self.root, EPREFIX,'/usr/bin/svn']), @@ -135,6 +136,8 @@ class BareConfig(object): 'svn_syncopts' : '', 'g-common_generateopts' : '', 'g-common_syncopts' : '', + 'g-sorcery_generateopts' : '', + 'g-sorcery_syncopts' : '', 'bzr_postsync' : '', 'cvs_postsync' : '', 'darcs_postsync' : '', @@ -144,6 +147,7 @@ class BareConfig(object): 'svn_postsync' : '', 'tar_postsync' : '', 'g-common_postsync' : '', + 'g-sorcery_postsync' : '', 'git_user': 'layman', 'git_email': 'layman@localhost', } diff --git a/layman/overlays/g_sorcery.py b/layman/overlays/g_sorcery.py new file mode 100644 index 0000000..6e0b200 --- /dev/null +++ b/layman/overlays/g_sorcery.py @@ -0,0 +1,91 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +################################################################################# +# LAYMAN G-SORCERY OVERLAY HANDLER +################################################################################# +# File: g_sorcery.py +# +# Handles repositories generated by g-sorcery backends +# +# Copyright: +# (c) 2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# +# Author(s): +# Jauhien Piatlicki +# Auke Booij +# +''' g-sorcery repository support.''' + +#=============================================================================== +# +# Dependencies +# +#------------------------------------------------------------------------------- + +import os +from layman.utils import path +from layman.overlays.source import OverlaySource, require_supported + +#=============================================================================== +# +# Class GSorceryOverlay +# +#------------------------------------------------------------------------------- + +class GSorceryOverlay(OverlaySource): + ''' Handles g-sorcery repositories.''' + + type = 'g-sorcery' + type_key = 'g-sorcery' + + def __init__(self, parent, config, _location, ignore = 0): + super(GSorceryOverlay, self).__init__(parent, config, + _location, ignore) + #split source into backend and repository. + self.backend=self.src[:self.src.find(' ')] + self.repository=self.src[self.src.find(' ')+1:] + self.subpath = None + + def add(self, base): + '''Add overlay.''' + + if not self.supported(): + return 1 + + target = path([base, self.parent.name]) + + os.makedirs(target) + + return self.sync(base) + + def sync(self, base): + '''Sync overlay.''' + + if not self.supported(): + return 1 + + target = path([base, self.parent.name]) + + args = [self.backend, '-o', target, '-r', self.repository, 'sync'] + returncode = self.run_command(self.command(), args, cwd=target) + if returncode: + return returncode + args = [self.backend, '-o', target, 'generate-tree'] + return self.postsync( + self.run_command(self.command(), args, cwd=target, cmd=self.type), + cwd=target) + + def supported(self): + '''Overlay type supported?''' + + return require_supported( + [(self.command(), + 'g-sorcery', + 'app-portage/g-sorcery'), + + ('/usr/bin/' + self.backend, + self.backend, + 'app-portage/' + self.backend),], + + self.output.warn) diff --git a/layman/overlays/overlay.py b/layman/overlays/overlay.py index f2cfc92..65c148b 100755 --- a/layman/overlays/overlay.py +++ b/layman/overlays/overlay.py @@ -40,6 +40,7 @@ from layman.overlays.bzr import BzrOverlay from layman.overlays.darcs import DarcsOverlay from layman.overlays.git import GitOverlay from layman.overlays.g_common import GCommonOverlay +from layman.overlays.g_sorcery import GSorceryOverlay from layman.overlays.mercurial import MercurialOverlay from layman.overlays.cvs import CvsOverlay from layman.overlays.svn import SvnOverlay @@ -55,6 +56,7 @@ from layman.overlays.tar import TarOverlay OVERLAY_TYPES = dict((e.type_key, e) for e in ( GitOverlay, GCommonOverlay, + GSorceryOverlay, CvsOverlay, SvnOverlay, RsyncOverlay,