[py-svn] py-trunk commit 0530b0720167: removing some py.execnet references and moving scripts to execnet repo
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Tue Oct 27 09:43:08 CET 2009
# HG changeset patch -- Bitbucket.org
# Project py-trunk
# URL http://bitbucket.org/hpk42/py-trunk/overview/
# User holger krekel <holger at merlinux.eu>
# Date 1256631563 -3600
# Node ID 0530b07201676100ca553767972ed537aa8883d3
# Parent ded48829fe86317694801bb622a7c2679eb24efd
removing some py.execnet references and moving scripts to execnet repo
--- a/contrib/sysinfo.py
+++ /dev/null
@@ -1,139 +0,0 @@
-"""
-sysinfo.py [host1] [host2] [options]
-
-obtain system info from remote machine.
-"""
-
-import py
-import sys
-
-
-parser = py.std.optparse.OptionParser(usage=__doc__)
-parser.add_option("-f", "--sshconfig", action="store", dest="ssh_config", default=None,
- help="use given ssh config file, and add info all contained hosts for getting info")
-parser.add_option("-i", "--ignore", action="store", dest="ignores", default=None,
- help="ignore hosts (useful if the list of hostnames come from a file list)")
-
-def parsehosts(path):
- path = py.path.local(path)
- l = []
- rex = py.std.re.compile(r'Host\s*(\S+)')
- for line in path.readlines():
- m = rex.match(line)
- if m is not None:
- sshname, = m.groups()
- l.append(sshname)
- return l
-
-class RemoteInfo:
- def __init__(self, gateway):
- self.gw = gateway
- self._cache = {}
-
- def exreceive(self, execstring):
- if execstring not in self._cache:
- channel = self.gw.remote_exec(execstring)
- self._cache[execstring] = channel.receive()
- return self._cache[execstring]
-
- def getmodattr(self, modpath):
- module = modpath.split(".")[0]
- return self.exreceive("""
- import %s
- channel.send(%s)
- """ %(module, modpath))
-
- def islinux(self):
- return self.getmodattr('sys.platform').find("linux") != -1
-
- def getfqdn(self):
- return self.exreceive("""
- import socket
- channel.send(socket.getfqdn())
- """)
-
- def getmemswap(self):
- if self.islinux():
- return self.exreceive("""
- import commands, re
- out = commands.getoutput("free")
- mem = re.search(r"Mem:\s+(\S*)", out).group(1)
- swap = re.search(r"Swap:\s+(\S*)", out).group(1)
- channel.send((mem, swap))
- """)
-
- def getcpuinfo(self):
- if self.islinux():
- return self.exreceive("""
- # a hyperthreaded cpu core only counts as 1, although it
- # is present as 2 in /proc/cpuinfo. Counting it as 2 is
- # misleading because it is *by far* not as efficient as
- # two independent cores.
- cpus = {}
- cpuinfo = {}
- f = open("/proc/cpuinfo")
- lines = f.readlines()
- f.close()
- for line in lines + ['']:
- if line.strip():
- key, value = line.split(":", 1)
- cpuinfo[key.strip()] = value.strip()
- else:
- corekey = (cpuinfo.get("physical id"),
- cpuinfo.get("core id"))
- cpus[corekey] = 1
- numcpus = len(cpus)
- model = cpuinfo.get("model name")
- channel.send((numcpus, model))
- """)
-
-def debug(*args):
- print >>sys.stderr, " ".join(map(str, args))
-def error(*args):
- debug("ERROR", args[0] + ":", *args[1:])
-
-def getinfo(sshname, ssh_config=None, loginfo=sys.stdout):
- debug("connecting to", sshname)
- try:
- gw = execnet.SshGateway(sshname, ssh_config=ssh_config)
- except IOError:
- error("could not get sshagteway", sshname)
- else:
- ri = RemoteInfo(gw)
- #print "%s info:" % sshname
- prefix = sshname.upper() + " "
- print >>loginfo, prefix, "fqdn:", ri.getfqdn()
- for attr in (
- "sys.platform",
- "sys.version_info",
- ):
- loginfo.write("%s %s: " %(prefix, attr,))
- loginfo.flush()
- value = ri.getmodattr(attr)
- loginfo.write(str(value))
- loginfo.write("\n")
- loginfo.flush()
- memswap = ri.getmemswap()
- if memswap:
- mem,swap = memswap
- print >>loginfo, prefix, "Memory:", mem, "Swap:", swap
- cpuinfo = ri.getcpuinfo()
- if cpuinfo:
- numcpu, model = cpuinfo
- print >>loginfo, prefix, "number of cpus:", numcpu
- print >>loginfo, prefix, "cpu model", model
- return ri
-
-if __name__ == '__main__':
- options, args = parser.parse_args()
- hosts = list(args)
- ssh_config = options.ssh_config
- if ssh_config:
- hosts.extend(parsehosts(ssh_config))
- ignores = options.ignores or ()
- if ignores:
- ignores = ignores.split(",")
- for host in hosts:
- if host not in ignores:
- getinfo(host, ssh_config=ssh_config)
-
--- a/contrib/svn-sync-repo.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env python
-
-"""
-
-small utility for hot-syncing a svn repository through ssh.
-uses execnet.
-
-"""
-
-import py
-import sys, os
-
-def usage():
- arg0 = sys.argv[0]
- print """%s [user@]remote-host:/repo/location localrepo [identity keyfile]""" % (arg0,)
-
-
-def main(args):
- remote = args[0]
- localrepo = py.path.local(args[1])
- if not localrepo.check(dir=1):
- raise SystemExit("localrepo %s does not exist" %(localrepo,))
- if len(args) == 3:
- keyfile = py.path.local(args[2])
- else:
- keyfile = None
- remote_host, path = remote.split(':', 1)
- print "ssh-connecting to", remote_host
- gw = getgateway(remote_host, keyfile)
-
- local_rev = get_svn_youngest(localrepo)
-
- # local protocol
- # 1. client sends rev/repo -> server
- # 2. server checks for newer revisions and sends dumps
- # 3. client receives dumps, updates local repo
- # 4. client goes back to step 1
- c = gw.remote_exec("""
- import py
- import os
- remote_rev, repopath = channel.receive()
- while 1:
- rev = py.process.cmdexec('svnlook youngest "%s"' % repopath)
- rev = int(rev)
- if rev > remote_rev:
- revrange = (remote_rev+1, rev)
- dumpchannel = channel.gateway.newchannel()
- channel.send(revrange)
- channel.send(dumpchannel)
-
- f = os.popen(
- "svnadmin dump -q --incremental -r %s:%s %s"
- % (revrange[0], revrange[1], repopath), 'r')
- try:
- maxcount = dumpchannel.receive()
- count = maxcount
- while 1:
- s = f.read(8192)
- if not s:
- raise EOFError
- dumpchannel.send(s)
- count = count - 1
- if count <= 0:
- ack = dumpchannel.receive()
- count = maxcount
-
- except EOFError:
- dumpchannel.close()
- remote_rev = rev
- else:
- # using svn-hook instead would be nice here
- py.std.time.sleep(30)
- """)
-
- c.send((local_rev, path))
- print "checking revisions from %d in %s" %(local_rev, remote)
- while 1:
- revstart, revend = c.receive()
- dumpchannel = c.receive()
- print "receiving revisions", revstart, "-", revend, "replaying..."
- svn_load(localrepo, dumpchannel)
- print "current revision", revend
-
-def svn_load(repo, dumpchannel, maxcount=100):
- # every maxcount we will send an ACK to the other
- # side in order to synchronise and avoid our side
- # growing buffers (py.execnet does not control
- # RAM usage or receive queue sizes)
- dumpchannel.send(maxcount)
- f = os.popen("svnadmin load -q %s" %(repo, ), "w")
- count = maxcount
- for x in dumpchannel:
- sys.stdout.write(".")
- sys.stdout.flush()
- f.write(x)
- count = count - 1
- if count <= 0:
- dumpchannel.send(maxcount)
- count = maxcount
- print >>sys.stdout
- f.close()
-
-def get_svn_youngest(repo):
- rev = py.process.cmdexec('svnlook youngest "%s"' % repo)
- return int(rev)
-
-def getgateway(host, keyfile=None):
- return execnet.SshGateway(host, identity=keyfile)
-
-if __name__ == '__main__':
- if len(sys.argv) < 3:
- usage()
- raise SystemExit(1)
-
- main(sys.argv[1:])
-
--- a/README.txt
+++ b/README.txt
@@ -2,7 +2,6 @@ The py lib is a Python development suppo
the following tools and modules:
* py.test: tool for distributed automated testing
-* py.execnet: ad-hoc distributed execution
* py.code: dynamic code generation and introspection
* py.path: uniform local and svn path objects
--- a/doc/confrest.py
+++ b/doc/confrest.py
@@ -73,7 +73,6 @@ pageTracker._trackPageview();
html.div(
html.h3("supporting APIs:"),
self.a_docref("pylib index", "index.html"),
- self.a_docref("py.execnet", "execnet.html"),
self.a_docref("py.path", "path.html"),
self.a_docref("py.code", "code.html"),
)
More information about the pytest-commit
mailing list