Source code for anybox.recipe.openerp.vcs.svn

import os
import subprocess
import logging

from ..utils import working_directory_keeper
from .base import BaseRepo

logger = logging.getLogger(__name__)


[docs]class SvnCheckout(BaseRepo): vcs_control_dir = '.svn' vcs_official_name = 'Subversion'
[docs] def get_update(self, revision): """Ensure that target_dir is a branch of url at specified revision. If target_dir already exists, does a simple pull. Offline-mode: no branch nor pull, but update. """ target_dir = self.target_dir url = self.url offline = self.offline rev_str = revision and '-r ' + revision or '' with working_directory_keeper: if not os.path.exists(target_dir): # TODO case of local url ? if offline: raise IOError( "svn checkout %s does not exist; cannot checkout " "from %s (offline mode)" % (target_dir, url)) os.chdir(os.path.split(target_dir)[0]) logger.info("Checkouting %s ...", url) subprocess.check_call('svn checkout %s %s %s' % ( rev_str, url, target_dir), shell=True) else: os.chdir(target_dir) # TODO what if remote repo is actually local fs ? if offline: logger.warning( "Offline mode: keeping checkout %s in its current rev", target_dir) else: logger.info("Updating %s to location %s, revision %s...", target_dir, url, revision) # switch is necessary in order to move in tags # TODO support also change of svn root url subprocess.check_call('svn switch %s' % url, shell=True) subprocess.check_call('svn up %s' % rev_str, shell=True)