From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id C6B80138824 for ; Wed, 22 Oct 2014 13:36:51 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id DC055E0854; Wed, 22 Oct 2014 13:36:49 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 57B0FE0854 for ; Wed, 22 Oct 2014 13:36:49 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 6545534046E for ; Wed, 22 Oct 2014 13:36:47 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 11D76878A for ; Wed, 22 Oct 2014 13:36:46 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1413984907.85b4c59acc08931239681ef79b0bef939ffd9f8e.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:plugin-sync commit in: pym/portage/tests/sync/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/tests/sync/__init__.py pym/portage/tests/sync/test_sync_local.py X-VCS-Directories: pym/portage/tests/sync/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 85b4c59acc08931239681ef79b0bef939ffd9f8e X-VCS-Branch: plugin-sync Date: Wed, 22 Oct 2014 13:36:46 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 46e0bc56-e0e5-4fdf-9454-94db7cd1f106 X-Archives-Hash: 5922a67baf7667dc59392e12e96411d4 commit: 85b4c59acc08931239681ef79b0bef939ffd9f8e Author: Zac Medico gentoo org> AuthorDate: Wed Oct 22 13:35:07 2014 +0000 Commit: Zac Medico gentoo org> CommitDate: Wed Oct 22 13:35:07 2014 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=85b4c59a Test sync with rsync and git, using file:// uri --- pym/portage/tests/sync/__init__.py | 2 + pym/portage/tests/sync/test_sync_local.py | 189 ++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+) diff --git a/pym/portage/tests/sync/__init__.py b/pym/portage/tests/sync/__init__.py new file mode 100644 index 0000000..7cd880e --- /dev/null +++ b/pym/portage/tests/sync/__init__.py @@ -0,0 +1,2 @@ +# Copyright 2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 diff --git a/pym/portage/tests/sync/test_sync_local.py b/pym/portage/tests/sync/test_sync_local.py new file mode 100644 index 0000000..65c20f8 --- /dev/null +++ b/pym/portage/tests/sync/test_sync_local.py @@ -0,0 +1,189 @@ +# Copyright 2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +import subprocess +import sys +import textwrap +import time + +import portage +from portage import os, shutil +from portage import _unicode_decode +from portage.const import PORTAGE_PYM_PATH, TIMESTAMP_FORMAT +from portage.process import find_binary +from portage.tests import TestCase +from portage.tests.resolver.ResolverPlayground import ResolverPlayground +from portage.util import ensure_dirs + +class SyncLocalTestCase(TestCase): + """ + Test sync with rsync and git, using file:// sync-uri. + """ + + def _must_skip(self): + if find_binary("rsync") is None: + return "rsync: command not found" + if find_binary("git") is None: + return "git: command not found" + + def testSyncLocal(self): + debug = False + + skip_reason = self._must_skip() + if skip_reason: + self.portage_skip = skip_reason + self.assertFalse(True, skip_reason) + return + + repos_conf = textwrap.dedent(""" + [test_repo] + location = %(EPREFIX)s/var/repositories/test_repo + sync-type = %(sync-type)s + sync-uri = file:/%(EPREFIX)s/var/repositories/test_repo_sync + auto-sync = yes + """) + + profile = { + "eapi": ("5",), + "package.use.stable.mask": ("dev-libs/A flag",) + } + + ebuilds = { + "dev-libs/A-0": {} + } + + playground = ResolverPlayground(ebuilds=ebuilds, + profile=profile, user_config={}, debug=debug) + settings = playground.settings + eprefix = settings["EPREFIX"] + eroot = settings["EROOT"] + homedir = os.path.join(eroot, "home") + distdir = os.path.join(eprefix, "distdir") + repo = settings.repositories["test_repo"] + metadata_dir = os.path.join(repo.location, "metadata") + + cmds = {} + for cmd in ("emerge", "emaint"): + cmds[cmd] = (portage._python_interpreter, + "-b", "-Wd", os.path.join(self.bindir, cmd)) + + git_binary = find_binary("git") + git_cmd = (git_binary,) + + committer_name = "Gentoo Dev" + committer_email = "gentoo-dev@gentoo.org" + + def change_sync_type(sync_type): + env["PORTAGE_REPOSITORIES"] = repos_conf % \ + {"EPREFIX": eprefix, "sync-type": sync_type} + + sync_cmds = ( + (homedir, cmds["emerge"] + ("--sync",)), + (homedir, lambda: self.assertTrue(os.path.exists( + os.path.join(repo.location, "dev-libs", "A") + ), "dev-libs/A expected, but missing")), + (homedir, cmds["emaint"] + ("sync", "-A")), + ) + + rename_repo = ( + (homedir, lambda: os.rename(repo.location, + repo.location + "_sync")), + ) + + delete_sync_repo = ( + (homedir, lambda: shutil.rmtree( + repo.location + "_sync")), + ) + + git_repo_create = ( + (repo.location, git_cmd + + ("config", "--global", "user.name", committer_name,)), + (repo.location, git_cmd + + ("config", "--global", "user.email", committer_email,)), + (repo.location, git_cmd + ("init-db",)), + (repo.location, git_cmd + ("add", ".")), + (repo.location, git_cmd + + ("commit", "-a", "-m", "add whole repo")), + ) + + sync_type_git = ( + (homedir, lambda: change_sync_type("git")), + ) + + pythonpath = os.environ.get("PYTHONPATH") + if pythonpath is not None and not pythonpath.strip(): + pythonpath = None + if pythonpath is not None and \ + pythonpath.split(":")[0] == PORTAGE_PYM_PATH: + pass + else: + if pythonpath is None: + pythonpath = "" + else: + pythonpath = ":" + pythonpath + pythonpath = PORTAGE_PYM_PATH + pythonpath + + env = { + "PORTAGE_OVERRIDE_EPREFIX" : eprefix, + "DISTDIR" : distdir, + "GENTOO_COMMITTER_NAME" : committer_name, + "GENTOO_COMMITTER_EMAIL" : committer_email, + "HOME" : homedir, + "PATH" : os.environ["PATH"], + "PORTAGE_GRPNAME" : os.environ["PORTAGE_GRPNAME"], + "PORTAGE_USERNAME" : os.environ["PORTAGE_USERNAME"], + "PORTAGE_REPOSITORIES" : repos_conf % + {"EPREFIX": eprefix, "sync-type": "rsync"}, + "PYTHONPATH" : pythonpath, + } + + if os.environ.get("SANDBOX_ON") == "1": + # avoid problems from nested sandbox instances + env["FEATURES"] = "-sandbox -usersandbox" + + dirs = [homedir, metadata_dir] + try: + for d in dirs: + ensure_dirs(d) + + timestamp_path = os.path.join(metadata_dir, 'timestamp.chk') + with open(timestamp_path, 'w') as f: + f.write(time.strftime('%s\n' % TIMESTAMP_FORMAT, time.gmtime())) + + if debug: + # The subprocess inherits both stdout and stderr, for + # debugging purposes. + stdout = None + else: + # The subprocess inherits stderr so that any warnings + # triggered by python -Wd will be visible. + stdout = subprocess.PIPE + + for cwd, cmd in rename_repo + sync_cmds + \ + delete_sync_repo + git_repo_create + sync_type_git + \ + rename_repo + sync_cmds: + + if hasattr(cmd, '__call__'): + cmd() + continue + + abs_cwd = os.path.join(repo.location, cwd) + proc = subprocess.Popen(cmd, + cwd=abs_cwd, env=env, stdout=stdout) + + if debug: + proc.wait() + else: + output = proc.stdout.readlines() + proc.wait() + proc.stdout.close() + if proc.returncode != os.EX_OK: + for line in output: + sys.stderr.write(_unicode_decode(line)) + + self.assertEqual(os.EX_OK, proc.returncode, + "%s failed in %s" % (cmd, cwd,)) + + + finally: + playground.cleanup()