eggs/infrae.subversion-1.4.5-py2.6.egg/infrae/subversion/Py.py
changeset 69 c6bca38c1cbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eggs/infrae.subversion-1.4.5-py2.6.egg/infrae/subversion/Py.py	Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,87 @@
+# 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])