| # Copyright 1999-2014 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import logging |
| |
| import portage |
| from portage import os |
| from portage.util import writemsg_level |
| from portage.sync.syncbase import NewBase |
| |
| |
| class CVSSync(NewBase): |
| '''CVS sync module''' |
| |
| short_desc = "Perform sync operations on CVS repositories" |
| |
| @staticmethod |
| def name(): |
| return "CVSSync" |
| |
| |
| def __init__(self): |
| NewBase.__init__(self, "cvs", portage.const.CVS_PACKAGE_ATOM) |
| |
| |
| def exists(self, **kwargs): |
| '''Tests whether the repo is checked out''' |
| return os.path.exists(os.path.join(self.repo.location, 'CVS')) |
| |
| |
| def new(self, **kwargs): |
| if kwargs: |
| self._kwargs(kwargs) |
| #initial checkout |
| cvs_root = self.repo.sync_uri |
| if portage.process.spawn_bash( |
| "cd %s; exec cvs -z0 -d %s co -P -d %s %s" % |
| (portage._shell_quote(os.path.dirname(self.repo.location)), portage._shell_quote(cvs_root), |
| portage._shell_quote(os.path.basename(self.repo.location)), |
| portage._shell_quote(self.repo.module_specific_options["sync-cvs-repo"])), |
| **self.spawn_kwargs) != os.EX_OK: |
| msg = "!!! cvs checkout error; exiting." |
| self.logger(self.xterm_titles, msg) |
| writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR) |
| return (1, False) |
| return (0, False) |
| |
| |
| def update(self): |
| """ |
| Internal function to update an existing CVS repository |
| |
| @return: tuple of return code (0=success), whether the cache |
| needs to be updated |
| @rtype: (int, bool) |
| """ |
| |
| #cvs update |
| exitcode = portage.process.spawn_bash( |
| "cd %s; exec cvs -z0 -q update -dP" % \ |
| (portage._shell_quote(self.repo.location),), |
| **self.spawn_kwargs) |
| if exitcode != os.EX_OK: |
| msg = "!!! cvs update error; exiting." |
| self.logger(self.xterm_titles, msg) |
| writemsg_level(msg + "\n", noiselevel=-1, level=logging.ERROR) |
| return (exitcode, False) |