# Copyright (c) 2007-2008 Infrae. All rights reserved. # $Id: Py.py 32775 2009-01-05 10:53:29Z sylvain $ import os import py from Common import BaseRecipe, prepareURLs from Common import checkAddedPaths, checkExistPath, reportInvalidFiles class Recipe(BaseRecipe): """infrae.subversion recipe. """ def __init__(self, buildout, name, options): super(Recipe, self).__init__(buildout, name, options) if self.verbose: print 'Using py implementation.' if not self.offline: # Py is not able to do svn status # without asking something on a # server. self._updateAllRevisionInformation() self._exportInformationToOptions() def _updateRevisionInformation(self, link, path): """Update revision information on a path. """ if isinstance(path, str): path = py.path.svnwc(path) revision = path.status().rev super(Recipe, self)._updateRevisionInformation(link, revision) def _updatePath(self, link, path): """Update a single path. """ wc = py.path.svnwc(path) wc.update() self._updateRevisionInformation(link, wc) def _installPath(self, link, path): """Checkout a single entry. """ if self.export: raise NotImplementedError wc = py.path.svnwc(path) wc.checkout(link) self._updateRevisionInformation(link, wc) def uninstall(name, options): r""" This is an uninstallation hook for the 'infrae.subversion' recipe. Its only job is to raise an exception when there are changes in a subversion tree that a user might not want to lose. This function does *not* delete or otherwise touch any files. The location of the path is passed as options['location']. """ if bool(options.get('export', False)): return # SVN Export, there is nothing to check. if bool(options.get('ignore_verification', False)): return # Verification disabled. # XXX This makes the assumption that we're in the buildout # directory and that our part is in 'parts'. We don't have # options['buildout'] available so no # 'buildout:parts-directory'. location = options.get('location', os.path.join('.', 'parts', name)) urls = prepareURLs(location, options['urls']) if not checkExistPath(location): return checkAddedPaths(location, urls) for path in urls.keys(): if not checkExistPath(path): continue wc = py.path.svnwc(path) status = wc.status(rec=1) badfiles = [] + status.modified + status.incomplete + status.unknown reportInvalidFiles(path, name, [file.strpath for file in badfiles])