Source code for CIME.Servers.svn

"""
SVN Server class.  Interact with a server using SVN protocol
"""
# pylint: disable=super-init-not-called
from CIME.XML.standard_module_setup import *
from CIME.Servers.generic_server import GenericServer

logger = logging.getLogger(__name__)


[docs] class SVN(GenericServer): def __init__(self, address, user="", passwd=""): self._args = "" if user: self._args += "--username {}".format(user) if passwd: self._args += "--password {}".format(passwd) self._svn_loc = address err = run_cmd( "svn --non-interactive --trust-server-cert {} ls {}".format( self._args, address ) )[0] if err != 0: logging.warning( """ Could not connect to svn repo '{0}' This is most likely either a credential, proxy, or network issue . To check connection and store your credential run 'svn ls {0}' and permanently store your password""".format( address ) ) return None
[docs] def fileexists(self, rel_path): full_url = os.path.join(self._svn_loc, rel_path) stat, out, err = run_cmd( "svn --non-interactive --trust-server-cert {} ls {}".format( self._args, full_url ) ) if stat != 0: logging.warning( "FAIL: SVN repo '{}' does not have file '{}'\nReason:{}\n{}\n".format( self._svn_loc, full_url, out, err ) ) return False return True
[docs] def getfile(self, rel_path, full_path): if not rel_path: return False full_url = os.path.join(self._svn_loc, rel_path) stat, output, errput = run_cmd( "svn --non-interactive --trust-server-cert {} export {} {}".format( self._args, full_url, full_path ) ) if stat != 0: logging.warning( "svn export failed with output: {} and errput {}\n".format( output, errput ) ) return False else: logging.info("SUCCESS\n") return True
[docs] def getdirectory(self, rel_path, full_path): full_url = os.path.join(self._svn_loc, rel_path) stat, output, errput = run_cmd( "svn --non-interactive --trust-server-cert {} export --force {} {}".format( self._args, full_url, full_path ) ) if stat != 0: logging.warning( "svn export failed with output: {} and errput {}\n".format( output, errput ) ) return False else: logging.info("SUCCESS\n") return True