diff options
Diffstat (limited to 'overlord/overlays/svn.py')
-rw-r--r-- | overlord/overlays/svn.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/overlord/overlays/svn.py b/overlord/overlays/svn.py new file mode 100644 index 0000000..1570450 --- /dev/null +++ b/overlord/overlays/svn.py @@ -0,0 +1,86 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +################################################################################# +# overlord SVN OVERLAY HANDLER +################################################################################# +# File: svn.py +# +# Handles subversion overlays +# +# Copyright: +# (c) 2005 - 2008 Gunnar Wrobel +# Distributed under the terms of the GNU General Public License v2 +# +# Author(s): +# Gunnar Wrobel <wrobel@gentoo.org> +# +''' Subversion overlay support.''' + +__version__ = "$Id: svn.py 236 2006-09-05 20:39:37Z wrobel $" + +#=============================================================================== +# +# Dependencies +# +#------------------------------------------------------------------------------- + +from overlord.utils import path +from overlord.overlays.source import OverlaySource, require_supported + +#=============================================================================== +# +# Class SvnOverlay +# +#------------------------------------------------------------------------------- + +class SvnOverlay(OverlaySource): + ''' Handles subversion overlays.''' + + type = 'Subversion' + type_key = 'svn' + + def __init__(self, parent, xml, config, _location, ignore = 0, quiet = False): + + super(SvnOverlay, self).__init__(parent, xml, config, _location, ignore, quiet) + + def add(self, base, quiet = False): + '''Add overlay.''' + + self.supported() + + super(SvnOverlay, self).add(base) + + args = ['co'] + if quiet: + args.append('-q') + args.append(self.src + '/@') + args.append(path([base, self.parent.name])) + + return self.run_command(*args) + + def sync(self, base, quiet = False): + '''Sync overlay.''' + + self.supported() + + def checkout_location(): + # Append '@' iff needed + # Keeps users of SVN <1.6.5 happy in more cases (bug #313303) + repo_part = self.parent.name + if self.parent.name.find('@') != -1: + repo_part = repo_part + '@' + return path([base, repo_part]) + + # svn up [-q] TARGET + args = ['up'] + if quiet: + args.append('-q') + args.append(checkout_location()) + + return self.run_command(*args) + + def supported(self): + '''Overlay type supported?''' + + return require_supported([(self.command(), 'svn', + 'dev-vcs/subversion'),]) |