Hello community,
here is the log from the commit of package python3-PyVirtualDisplay for
openSUSE:Factory checked in at 2015-01-12 09:49:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-PyVirtualDisplay (Old)
and /work/SRC/openSUSE:Factory/.python3-PyVirtualDisplay.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-PyVirtualDisplay"
Changes:
--------
---
/work/SRC/openSUSE:Factory/python3-PyVirtualDisplay/python3-PyVirtualDisplay.changes
2013-06-21 19:01:23.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python3-PyVirtualDisplay.new/python3-PyVirtualDisplay.changes
2015-01-12 09:50:00.000000000 +0100
@@ -1,0 +2,20 @@
+Sat Jan 10 19:44:45 UTC 2015 - [email protected]
+
+- specfile: update copyright year
+
+- update to version 0.1.5:
+ * fix pypi name
+
+- changes from version 0.1.4:
+ * call parent constructor in every class ( fixes #10 )
+ * test case for #10
+ * use versioneer for versioning
+ * drop py25 and py31 support, add py33 support
+ * fix tox.ini
+
+- changes from version 0.1.3:
+ * Support -fbdir option in Xvfb ( closes #9 )
+ * - make sure rfbport parameter is a string - add geometry and depth options
to tightvncserver startup call
+ * simplified pavement tasks
+
+-------------------------------------------------------------------
Old:
----
PyVirtualDisplay-0.1.2.tar.gz
New:
----
PyVirtualDisplay-0.1.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-PyVirtualDisplay.spec ++++++
--- /var/tmp/diff_new_pack.CWvBKh/_old 2015-01-12 09:50:00.000000000 +0100
+++ /var/tmp/diff_new_pack.CWvBKh/_new 2015-01-12 09:50:00.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python3-PyVirtualDisplay
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python3-PyVirtualDisplay
-Version: 0.1.2
+Version: 0.1.5
Release: 0
Url: https://github.com/ponty/PyVirtualDisplay
Summary: Python wrapper for Xvfb, Xephyr and Xvnc
++++++ PyVirtualDisplay-0.1.2.tar.gz -> PyVirtualDisplay-0.1.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/MANIFEST.in
new/PyVirtualDisplay-0.1.5/MANIFEST.in
--- old/PyVirtualDisplay-0.1.2/MANIFEST.in 2013-02-16 18:35:27.000000000
+0100
+++ new/PyVirtualDisplay-0.1.5/MANIFEST.in 1970-01-01 01:00:00.000000000
+0100
@@ -1,9 +0,0 @@
-graft docs
-include LICENSE*
-include pavement.py
-include TODO*
-include requirements.txt
-include CHANGES*
-include README*
-include setup.py
-prune docs/_build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/PKG-INFO
new/PyVirtualDisplay-0.1.5/PKG-INFO
--- old/PyVirtualDisplay-0.1.2/PKG-INFO 2013-02-16 18:35:27.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PKG-INFO 2014-04-11 17:16:50.000000000 +0200
@@ -1,8 +1,8 @@
Metadata-Version: 1.1
Name: PyVirtualDisplay
-Version: 0.1.2
+Version: 0.1.5
Summary: python wrapper for Xvfb, Xephyr and Xvnc
-Home-page: https://github.com/ponty/PyVirtualDisplay
+Home-page: https://github.com/ponty/pyvirtualdisplay
Author: ponty
Author-email: UNKNOWN
License: BSD
@@ -16,14 +16,14 @@
Features:
- python wrapper
- - supported python versions: 2.5, 2.6, 2.7, 3.1, 3.2, PyPy
+ - supported python versions: 2.6, 2.7, 3.2, 3.3
- back-ends: Xvfb_, Xephyr_, Xvnc_
-
+
.. warning:: at least one back-end should be installed
-
+
Known problems:
- only a few back-end options are supported
-
+
Possible applications:
* GUI testing
* automatic GUI screenshot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/PKG-INFO
new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/PKG-INFO
--- old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/PKG-INFO
2013-02-16 18:35:27.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/PKG-INFO
1970-01-01 01:00:00.000000000 +0100
@@ -1,102 +0,0 @@
-Metadata-Version: 1.1
-Name: PyVirtualDisplay
-Version: 0.1.2
-Summary: python wrapper for Xvfb, Xephyr and Xvnc
-Home-page: https://github.com/ponty/PyVirtualDisplay
-Author: ponty
-Author-email: UNKNOWN
-License: BSD
-Description: pyvirtualdisplay is a python wrapper for Xvfb_, Xephyr_ and Xvnc_
-
-
- Links:
- * home: https://github.com/ponty/PyVirtualDisplay
- * documentation: http://ponty.github.com/PyVirtualDisplay
-
-
- Features:
- - python wrapper
- - supported python versions: 2.5, 2.6, 2.7, 3.1, 3.2, PyPy
- - back-ends: Xvfb_, Xephyr_, Xvnc_
-
- .. warning:: at least one back-end should be installed
-
- Known problems:
- - only a few back-end options are supported
-
- Possible applications:
- * GUI testing
- * automatic GUI screenshot
-
- Basic usages
- ============
-
- Start Xephyr::
-
- from pyvirtualdisplay import Display
- xephyr=Display(visible=1, size=(320, 240)).start()
-
- Create screenshot of xmessage with Xvfb::
-
- from easyprocess import EasyProcess
- from pyvirtualdisplay.smartdisplay import SmartDisplay
- with SmartDisplay(visible=0, bgcolor='black') as disp:
- with EasyProcess('xmessage hello'):
- img = disp.waitgrab()
- img.show()
-
- Installation
- ============
-
- General
- --------
-
- * install Xvfb_ or Xephyr_ or Xvnc_.
- * install pip_
- * optional: pyscreenshot_ and PIL_ should be installed for
``smartdisplay`` submodule
- * install the program::
-
- # as root
- pip install pyvirtualdisplay
-
- Ubuntu
- ----------
- ::
-
- sudo apt-get install python-pip
- sudo apt-get install xvfb
- sudo apt-get install xserver-xephyr
- sudo apt-get install tightvncserver
- sudo pip install pyvirtualdisplay
- # optional
- sudo apt-get install python-imaging
- sudo apt-get install scrot
- sudo pip install pyscreenshot
- # optional for examples
- sudo pip install entrypoint2
-
-
- Uninstall
- ----------
-
- ::
-
- # as root
- pip uninstall pyvirtualdisplay
-
-
- .. _setuptools: http://peak.telecommunity.com/DevCenter/EasyInstall
- .. _pip: http://pip.openplans.org/
- .. _Xvfb: http://en.wikipedia.org/wiki/Xvfb
- .. _Xephyr: http://en.wikipedia.org/wiki/Xephyr
- .. _pyscreenshot: https://github.com/ponty/pyscreenshot
- .. _PIL: http://www.pythonware.com/library/pil/
- .. _Xvnc: http://www.hep.phy.cam.ac.uk/vnc_docs/xvnc.html
-
-
-Keywords: Xvfb Xephyr X wrapper
-Platform: UNKNOWN
-Classifier: License :: OSI Approved :: BSD License
-Classifier: Natural Language :: English
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/SOURCES.txt
new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/SOURCES.txt
--- old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/SOURCES.txt
2013-02-16 18:35:27.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/SOURCES.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-LICENSE.txt
-MANIFEST.in
-README.rst
-TODO
-pavement.py
-requirements.txt
-setup.py
-PyVirtualDisplay.egg-info/PKG-INFO
-PyVirtualDisplay.egg-info/SOURCES.txt
-PyVirtualDisplay.egg-info/dependency_links.txt
-PyVirtualDisplay.egg-info/not-zip-safe
-PyVirtualDisplay.egg-info/requires.txt
-PyVirtualDisplay.egg-info/top_level.txt
-docs/api.rst
-docs/conf.py
-docs/index.rst
-docs/readme.rst
-docs/struct.rst
-docs/usage.rst
-pyvirtualdisplay/__init__.py
-pyvirtualdisplay/abstractdisplay.py
-pyvirtualdisplay/display.py
-pyvirtualdisplay/smartdisplay.py
-pyvirtualdisplay/xephyr.py
-pyvirtualdisplay/xvfb.py
-pyvirtualdisplay/xvnc.py
-pyvirtualdisplay/examples/__init__.py
-pyvirtualdisplay/examples/lowres.py
-pyvirtualdisplay/examples/screenshot1.py
-pyvirtualdisplay/examples/screenshot3.py
-pyvirtualdisplay/examples/screenshot4.py
-pyvirtualdisplay/examples/vncserver.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/dependency_links.txt
new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/dependency_links.txt
--- old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/dependency_links.txt
2013-02-16 18:35:27.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/dependency_links.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/not-zip-safe
new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/not-zip-safe
--- old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/not-zip-safe
2011-02-23 18:17:13.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/not-zip-safe
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/requires.txt
new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/requires.txt
--- old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/requires.txt
2013-02-16 18:35:27.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/requires.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-EasyProcess
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/top_level.txt
new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/top_level.txt
--- old/PyVirtualDisplay-0.1.2/PyVirtualDisplay.egg-info/top_level.txt
2013-02-16 18:35:27.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/PyVirtualDisplay.egg-info/top_level.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-pyvirtualdisplay
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/README.rst
new/PyVirtualDisplay-0.1.5/README.rst
--- old/PyVirtualDisplay-0.1.2/README.rst 2013-02-16 18:34:05.000000000
+0100
+++ new/PyVirtualDisplay-0.1.5/README.rst 2014-04-09 15:00:04.000000000
+0200
@@ -8,14 +8,14 @@
Features:
- python wrapper
- - supported python versions: 2.5, 2.6, 2.7, 3.1, 3.2, PyPy
+ - supported python versions: 2.6, 2.7, 3.2, 3.3
- back-ends: Xvfb_, Xephyr_, Xvnc_
-
+
.. warning:: at least one back-end should be installed
-
+
Known problems:
- only a few back-end options are supported
-
+
Possible applications:
* GUI testing
* automatic GUI screenshot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/docs/conf.py
new/PyVirtualDisplay-0.1.5/docs/conf.py
--- old/PyVirtualDisplay-0.1.2/docs/conf.py 2013-02-16 18:28:23.000000000
+0100
+++ new/PyVirtualDisplay-0.1.5/docs/conf.py 2014-04-09 15:00:04.000000000
+0200
@@ -1,24 +1,10 @@
-from path import path
-from setuptools import find_packages
+from easyprocess import EasyProcess
import logging
-import sphinx
-import sys
-def read_project_version(py=None, where='.', exclude=['bootstrap', 'pavement',
'doc', 'docs', 'test', 'tests', ]):
- if not py:
- py = path(where) / find_packages(where=where, exclude=exclude)[0]
- py = path(py)
- if py.isdir():
- py = py / '__init__.py'
- __version__ = None
- for line in py.lines():
- if '__version__' in line:
- exec line
- break
- return __version__
-
-release = read_project_version(where='..')
+p = EasyProcess('python setup.py --version', cwd='..').call()
+release = p.stdout.splitlines()[-1]
+print release
project = 'PyVirtualDisplay'
author = 'ponty'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pavement.py
new/PyVirtualDisplay-0.1.5/pavement.py
--- old/PyVirtualDisplay-0.1.2/pavement.py 2013-02-16 18:28:23.000000000
+0100
+++ new/PyVirtualDisplay-0.1.5/pavement.py 2014-04-09 15:00:04.000000000
+0200
@@ -11,12 +11,13 @@
from paved.docs import *
from paved.pycheck import *
from paved.pkg import *
-from sphinxcontrib import paverutils
# get info from setup.py
+sys.path.append('.')
setup_py = ''.join(
- [x for x in path('setup.py').lines() if 'setuptools' not in x])
+ [x for x in path('setup.py').lines() if 'distutils' not in x])
exec(setup_py)
+sys.path.pop()
options(
@@ -24,10 +25,10 @@
docroot='docs',
builddir="_build",
),
- pdf=Bunch(
- builddir='_build',
- builder='latex',
- ),
+# pdf=Bunch(
+# builddir='_build',
+# builder='latex',
+# ),
)
options.paved.clean.rmdirs += ['.tox',
@@ -48,6 +49,7 @@
options.paved.dist.manifest.include.remove('distribute_setup.py')
options.paved.dist.manifest.include.remove('paver-minilib.zip')
options.paved.dist.manifest.include.add('requirements.txt')
+options.paved.dist.manifest.include.add('versioneer.py')
@task
@@ -65,28 +67,9 @@
@task
-@needs('sphinxcontrib.paverutils.html')
-def html():
- pass
-
-
-@task
-@needs('sphinxcontrib.paverutils.pdf')
-def pdf():
- fpdf = list(path('docs/_build/latex').walkfiles('*.pdf'))[0]
- d = path('docs/_build/html')
- d.makedirs()
- fpdf.copy(d)
-
-
-@task
-def tox():
- '''Run tox.'''
- sh('tox')
-
-
-@task
-@needs('manifest', 'setuptools.command.sdist')
+@needs('manifest',
+ 'distutils.command.sdist',
+ )
def sdist():
"""Overrides sdist to make sure that our MANIFEST.in is generated.
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/__init__.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/__init__.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/__init__.py 2013-02-16
18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/__init__.py 2014-04-09
15:00:04.000000000 +0200
@@ -1,7 +1,10 @@
from display import Display
import logging
-__version__ = '0.1.2'
-
log = logging.getLogger(__name__)
+
+from ._version import get_versions
+__version__ = get_versions()['version']
+del get_versions
+
log.debug('version=' + __version__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/_version.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/_version.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/_version.py 1970-01-01
01:00:00.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/_version.py 2014-04-11
17:16:50.000000000 +0200
@@ -0,0 +1,11 @@
+
+# This file was generated by 'versioneer.py' (0.10) from
+# revision-control system data, or from the parent directory name of an
+# unpacked source archive. Distribution tarballs contain a pre-generated copy
+# of this file.
+
+version_version = '0.1.5'
+version_full = '1a8ea7e0afb4ee30e1e55e47302d225228eb7364'
+def get_versions(default={}, verbose=False):
+ return {'version': version_version, 'full': version_full}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/abstractdisplay.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/abstractdisplay.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/abstractdisplay.py
2013-02-16 18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/abstractdisplay.py
2014-04-09 15:00:04.000000000 +0200
@@ -21,6 +21,10 @@
Common parent for Xvfb and Xephyr
'''
+ def __init__(self):
+ self.display = self.search_for_display()
+ EasyProcess.__init__(self, self._cmd)
+
@property
def new_display_var(self):
return ':%s' % (self.display)
@@ -70,8 +74,6 @@
:rtype: self
'''
- self.display = self.search_for_display()
- EasyProcess.__init__(self, self._cmd)
EasyProcess.start(self)
# https://github.com/ponty/PyVirtualDisplay/issues/2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/display.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/display.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/display.py 2013-02-16
18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/display.py 2014-04-09
15:00:04.000000000 +0200
@@ -35,6 +35,7 @@
color_depth=color_depth,
bgcolor=bgcolor,
**kwargs)
+ AbstractDisplay.__init__(self)
@property
def display_class(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/xephyr.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/xephyr.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/xephyr.py 2013-02-16
18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/xephyr.py 2014-04-09
15:00:04.000000000 +0200
@@ -22,6 +22,7 @@
self.screen = 0
self.process = None
self.display = None
+ AbstractDisplay.__init__(self)
@classmethod
def check_installed(cls):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/xvfb.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/xvfb.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/xvfb.py 2013-02-16
18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/xvfb.py 2014-04-09
15:00:04.000000000 +0200
@@ -17,9 +17,11 @@
hardware and no physical input devices. It emulates a dumb
framebuffer using virtual memory.
'''
- def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black'):
+ def __init__(self, size=(1024, 768), color_depth=24, bgcolor='black',
fbdir=None):
'''
:param bgcolor: 'black' or 'white'
+ :param fbdir: If non-null, the virtual screen is memory-mapped
+ to a file in the given directory ('-fbdir' option)
'''
self.screen = 0
self.size = size
@@ -27,6 +29,8 @@
self.process = None
self.bgcolor = bgcolor
self.display = None
+ self.fbdir = fbdir
+ AbstractDisplay.__init__(self)
@classmethod
def check_installed(cls):
@@ -35,11 +39,13 @@
@property
def _cmd(self):
- cmd = [PROGRAM,
+ cmd = [
dict(black='-br', white='-wr')[self.bgcolor],
'-screen',
str(self.screen),
'x'.join(map(str, list(self.size) + [self.color_depth])),
self.new_display_var,
]
- return cmd
+ if self.fbdir:
+ cmd += ['-fbdir', self.fbdir]
+ return [PROGRAM] + cmd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/xvnc.py
new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/xvnc.py
--- old/PyVirtualDisplay-0.1.2/pyvirtualdisplay/xvnc.py 2013-02-16
18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/pyvirtualdisplay/xvnc.py 2014-04-09
15:00:04.000000000 +0200
@@ -25,6 +25,7 @@
self.bgcolor = bgcolor
self.display = None
self.rfbport = rfbport
+ AbstractDisplay.__init__(self)
@classmethod
def check_installed(cls):
@@ -34,11 +35,9 @@
@property
def _cmd(self):
cmd = [PROGRAM,
- # dict(black='-br', white='-wr')[self.bgcolor],
- # '-screen',
- # str(self.screen),
- # 'x'.join(map(str, list(self.size) +
[self.color_depth])),
- '-rfbport', self.rfbport,
+ '-depth', str(self.color_depth),
+ '-geometry', '%dx%d' % (self.size[0], self.size[1]),
+ '-rfbport', str(self.rfbport),
self.new_display_var,
]
return cmd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/setup.cfg
new/PyVirtualDisplay-0.1.5/setup.cfg
--- old/PyVirtualDisplay-0.1.2/setup.cfg 2013-02-16 18:35:27.000000000
+0100
+++ new/PyVirtualDisplay-0.1.5/setup.cfg 1970-01-01 01:00:00.000000000
+0100
@@ -1,5 +0,0 @@
-[egg_info]
-tag_build =
-tag_date = 0
-tag_svn_revision = 0
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/setup.py
new/PyVirtualDisplay-0.1.5/setup.py
--- old/PyVirtualDisplay-0.1.2/setup.py 2013-02-16 18:28:23.000000000 +0100
+++ new/PyVirtualDisplay-0.1.5/setup.py 2014-04-11 17:14:58.000000000 +0200
@@ -1,22 +1,21 @@
-from setuptools import find_packages, setup
+import versioneer
+from distutils.core import setup
import os.path
import sys
-def read_project_version(package):
- py = os.path.join(package, '__init__.py')
- __version__ = None
- for line in open(py).read().splitlines():
- if '__version__' in line:
- exec(line)
- break
- return __version__
-
-PACKAGE = 'pyvirtualdisplay'
-NAME = 'PyVirtualDisplay'
-URL = 'https://github.com/ponty/PyVirtualDisplay'
+NAME = 'pyvirtualdisplay'
+PYPI_NAME = 'PyVirtualDisplay'
+URL = 'https://github.com/ponty/pyvirtualdisplay'
DESCRIPTION = 'python wrapper for Xvfb, Xephyr and Xvnc'
-VERSION = read_project_version(PACKAGE)
+PACKAGES = [NAME,
+ NAME + '.examples',
+ ]
+
+versioneer.versionfile_source = NAME + '/_version.py'
+versioneer.versionfile_build = versioneer.versionfile_source
+versioneer.tag_prefix = ''
+versioneer.parentdir_prefix = NAME + '-'
extra = {}
if sys.version_info >= (3,):
@@ -33,10 +32,10 @@
install_requires = open("requirements.txt").read().split('\n')
-# compatible with distutils of python 2.3+ or later
setup(
- name=NAME,
- version=VERSION,
+ name=PYPI_NAME,
+ version=versioneer.get_version(),
+ cmdclass=versioneer.get_cmdclass(),
description=DESCRIPTION,
long_description=open('README.rst', 'r').read(),
classifiers=classifiers,
@@ -45,10 +44,7 @@
# author_email='',
url=URL,
license='BSD',
- packages=find_packages(exclude=['bootstrap', 'pavement', ]),
- include_package_data=True,
- test_suite='nose.collector',
- zip_safe=False,
+ packages=PACKAGES,
install_requires=install_requires,
**extra
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyVirtualDisplay-0.1.2/versioneer.py
new/PyVirtualDisplay-0.1.5/versioneer.py
--- old/PyVirtualDisplay-0.1.2/versioneer.py 1970-01-01 01:00:00.000000000
+0100
+++ new/PyVirtualDisplay-0.1.5/versioneer.py 2014-04-09 15:00:04.000000000
+0200
@@ -0,0 +1,885 @@
+
+# Version: 0.10
+
+"""
+The Versioneer
+==============
+
+* like a rocketeer, but for versions!
+* https://github.com/warner/python-versioneer
+* Brian Warner
+* License: Public Domain
+* Compatible With: python2.6, 2.7, and 3.2, 3.3
+
+[](https://travis-ci.org/warner/python-versioneer)
+
+This is a tool for managing a recorded version number in distutils-based
+python projects. The goal is to remove the tedious and error-prone "update
+the embedded version string" step from your release process. Making a new
+release should be as easy as recording a new tag in your version-control
+system, and maybe making new tarballs.
+
+
+## Quick Install
+
+* `pip install versioneer` to somewhere to your $PATH
+* run `versioneer-installer` in your source tree: this installs `versioneer.py`
+* follow the instructions below (also in the `versioneer.py` docstring)
+
+## Version Identifiers
+
+Source trees come from a variety of places:
+
+* a version-control system checkout (mostly used by developers)
+* a nightly tarball, produced by build automation
+* a snapshot tarball, produced by a web-based VCS browser, like github's
+ "tarball from tag" feature
+* a release tarball, produced by "setup.py sdist", distributed through PyPI
+
+Within each source tree, the version identifier (either a string or a number,
+this tool is format-agnostic) can come from a variety of places:
+
+* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows
+ about recent "tags" and an absolute revision-id
+* the name of the directory into which the tarball was unpacked
+* an expanded VCS variable ($Id$, etc)
+* a `_version.py` created by some earlier build step
+
+For released software, the version identifier is closely related to a VCS
+tag. Some projects use tag names that include more than just the version
+string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool
+needs to strip the tag prefix to extract the version identifier. For
+unreleased software (between tags), the version identifier should provide
+enough information to help developers recreate the same tree, while also
+giving them an idea of roughly how old the tree is (after version 1.2, before
+version 1.3). Many VCS systems can report a description that captures this,
+for example 'git describe --tags --dirty --always' reports things like
+"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the
+0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has
+uncommitted changes.
+
+The version identifier is used for multiple purposes:
+
+* to allow the module to self-identify its version: `myproject.__version__`
+* to choose a name and prefix for a 'setup.py sdist' tarball
+
+## Theory of Operation
+
+Versioneer works by adding a special `_version.py` file into your source
+tree, where your `__init__.py` can import it. This `_version.py` knows how to
+dynamically ask the VCS tool for version information at import time. However,
+when you use "setup.py build" or "setup.py sdist", `_version.py` in the new
+copy is replaced by a small static file that contains just the generated
+version data.
+
+`_version.py` also contains `$Revision$` markers, and the installation
+process marks `_version.py` to have this marker rewritten with a tag name
+during the "git archive" command. As a result, generated tarballs will
+contain enough information to get the proper version.
+
+
+## Installation
+
+First, decide on values for the following configuration variables:
+
+* `versionfile_source`:
+
+ A project-relative pathname into which the generated version strings should
+ be written. This is usually a `_version.py` next to your project's main
+ `__init__.py` file. If your project uses `src/myproject/__init__.py`, this
+ should be `src/myproject/_version.py`. This file should be checked in to
+ your VCS as usual: the copy created below by `setup.py versioneer` will
+ include code that parses expanded VCS keywords in generated tarballs. The
+ 'build' and 'sdist' commands will replace it with a copy that has just the
+ calculated version string.
+
+* `versionfile_build`:
+
+ Like `versionfile_source`, but relative to the build directory instead of
+ the source directory. These will differ when your setup.py uses
+ 'package_dir='. If you have `package_dir={'myproject': 'src/myproject'}`,
+ then you will probably have `versionfile_build='myproject/_version.py'` and
+ `versionfile_source='src/myproject/_version.py'`.
+
+* `tag_prefix`:
+
+ a string, like 'PROJECTNAME-', which appears at the start of all VCS tags.
+ If your tags look like 'myproject-1.2.0', then you should use
+ tag_prefix='myproject-'. If you use unprefixed tags like '1.2.0', this
+ should be an empty string.
+
+* `parentdir_prefix`:
+
+ a string, frequently the same as tag_prefix, which appears at the start of
+ all unpacked tarball filenames. If your tarball unpacks into
+ 'myproject-1.2.0', this should be 'myproject-'.
+
+This tool provides one script, named `versioneer-installer`. That script does
+one thing: write a copy of `versioneer.py` into the current directory.
+
+To versioneer-enable your project:
+
+* 1: Run `versioneer-installer` to copy `versioneer.py` into the top of your
+ source tree.
+
+* 2: add the following lines to the top of your `setup.py`, with the
+ configuration values you decided earlier:
+
+ import versioneer
+ versioneer.versionfile_source = 'src/myproject/_version.py'
+ versioneer.versionfile_build = 'myproject/_version.py'
+ versioneer.tag_prefix = '' # tags are like 1.2.0
+ versioneer.parentdir_prefix = 'myproject-' # dirname like
'myproject-1.2.0'
+
+* 3: add the following arguments to the setup() call in your setup.py:
+
+ version=versioneer.get_version(),
+ cmdclass=versioneer.get_cmdclass(),
+
+* 4: now run `setup.py versioneer`, which will create `_version.py`, and
+ will modify your `__init__.py` to define `__version__` (by calling a
+ function from `_version.py`). It will also modify your `MANIFEST.in` to
+ include both `versioneer.py` and the generated `_version.py` in sdist
+ tarballs.
+
+* 5: commit these changes to your VCS. To make sure you won't forget,
+ `setup.py versioneer` will mark everything it touched for addition.
+
+## Post-Installation Usage
+
+Once established, all uses of your tree from a VCS checkout should get the
+current version string. All generated tarballs should include an embedded
+version string (so users who unpack them will not need a VCS tool installed).
+
+If you distribute your project through PyPI, then the release process should
+boil down to two steps:
+
+* 1: git tag 1.0
+* 2: python setup.py register sdist upload
+
+If you distribute it through github (i.e. users use github to generate
+tarballs with `git archive`), the process is:
+
+* 1: git tag 1.0
+* 2: git push; git push --tags
+
+Currently, all version strings must be based upon a tag. Versioneer will
+report "unknown" until your tree has at least one tag in its history. This
+restriction will be fixed eventually (see issue #12).
+
+## Version-String Flavors
+
+Code which uses Versioneer can learn about its version string at runtime by
+importing `_version` from your main `__init__.py` file and running the
+`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can
+import the top-level `versioneer.py` and run `get_versions()`.
+
+Both functions return a dictionary with different keys for different flavors
+of the version string:
+
+* `['version']`: condensed tag+distance+shortid+dirty identifier. For git,
+ this uses the output of `git describe --tags --dirty --always` but strips
+ the tag_prefix. For example "0.11-2-g1076c97-dirty" indicates that the tree
+ is like the "1076c97" commit but has uncommitted changes ("-dirty"), and
+ that this commit is two revisions ("-2-") beyond the "0.11" tag. For
+ released software (exactly equal to a known tag), the identifier will only
+ contain the stripped tag, e.g. "0.11".
+
+* `['full']`: detailed revision identifier. For Git, this is the full SHA1
+ commit id, followed by "-dirty" if the tree contains uncommitted changes,
+ e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac-dirty".
+
+Some variants are more useful than others. Including `full` in a bug report
+should allow developers to reconstruct the exact code being tested (or
+indicate the presence of local changes that should be shared with the
+developers). `version` is suitable for display in an "about" box or a CLI
+`--version` output: it can be easily compared against release notes and lists
+of bugs fixed in various releases.
+
+In the future, this will also include a
+[PEP-0440](http://legacy.python.org/dev/peps/pep-0440/) -compatible flavor
+(e.g. `1.2.post0.dev123`). This loses a lot of information (and has no room
+for a hash-based revision id), but is safe to use in a `setup.py`
+"`version=`" argument. It also enables tools like *pip* to compare version
+strings and evaluate compatibility constraint declarations.
+
+The `setup.py versioneer` command adds the following text to your
+`__init__.py` to place a basic version in `YOURPROJECT.__version__`:
+
+ from ._version import get_versions
+ __version = get_versions()['version']
+ del get_versions
+
+## Updating Versioneer
+
+To upgrade your project to a new release of Versioneer, do the following:
+
+* install the new Versioneer (`pip install -U versioneer` or equivalent)
+* re-run `versioneer-installer` in your source tree to replace `versioneer.py`
+* edit `setup.py`, if necessary, to include any new configuration settings
indicated by the release notes
+* re-run `setup.py versioneer` to replace `SRC/_version.py`
+* commit any changed files
+
+## Future Directions
+
+This tool is designed to make it easily extended to other version-control
+systems: all VCS-specific components are in separate directories like
+src/git/ . The top-level `versioneer.py` script is assembled from these
+components by running make-versioneer.py . In the future, make-versioneer.py
+will take a VCS name as an argument, and will construct a version of
+`versioneer.py` that is specific to the given VCS. It might also take the
+configuration arguments that are currently provided manually during
+installation by editing setup.py . Alternatively, it might go the other
+direction and include code from all supported VCS systems, reducing the
+number of intermediate scripts.
+
+
+## License
+
+To make Versioneer easier to embed, all its code is hereby released into the
+public domain. The `_version.py` that it creates is also in the public
+domain.
+
+"""
+
+import os, sys, re
+from distutils.core import Command
+from distutils.command.sdist import sdist as _sdist
+from distutils.command.build import build as _build
+
+versionfile_source = None
+versionfile_build = None
+tag_prefix = None
+parentdir_prefix = None
+
+VCS = "git"
+
+
+LONG_VERSION_PY = '''
+# This file helps to compute a version number in source trees obtained from
+# git-archive tarball (such as those provided by githubs download-from-tag
+# feature). Distribution tarballs (build by setup.py sdist) and build
+# directories (produced by setup.py build) will contain a much shorter file
+# that just contains the computed version number.
+
+# This file is released into the public domain. Generated by
+# versioneer-0.10 (https://github.com/warner/python-versioneer)
+
+# these strings will be replaced by git during git-archive
+git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s"
+git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s"
+
+
+import subprocess
+import sys
+import errno
+
+
+def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False):
+ assert isinstance(commands, list)
+ p = None
+ for c in commands:
+ try:
+ # remember shell=False, so use git.cmd on windows, not just git
+ p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE,
+ stderr=(subprocess.PIPE if hide_stderr
+ else None))
+ break
+ except EnvironmentError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.ENOENT:
+ continue
+ if verbose:
+ print("unable to run %%s" %% args[0])
+ print(e)
+ return None
+ else:
+ if verbose:
+ print("unable to find command, tried %%s" %% (commands,))
+ return None
+ stdout = p.communicate()[0].strip()
+ if sys.version >= '3':
+ stdout = stdout.decode()
+ if p.returncode != 0:
+ if verbose:
+ print("unable to run %%s (error)" %% args[0])
+ return None
+ return stdout
+
+
+import sys
+import re
+import os.path
+
+def get_expanded_variables(versionfile_abs):
+ # the code embedded in _version.py can just fetch the value of these
+ # variables. When used from setup.py, we don't want to import
+ # _version.py, so we do it with a regexp instead. This function is not
+ # used from _version.py.
+ variables = {}
+ try:
+ f = open(versionfile_abs,"r")
+ for line in f.readlines():
+ if line.strip().startswith("git_refnames ="):
+ mo = re.search(r'=\s*"(.*)"', line)
+ if mo:
+ variables["refnames"] = mo.group(1)
+ if line.strip().startswith("git_full ="):
+ mo = re.search(r'=\s*"(.*)"', line)
+ if mo:
+ variables["full"] = mo.group(1)
+ f.close()
+ except EnvironmentError:
+ pass
+ return variables
+
+def versions_from_expanded_variables(variables, tag_prefix, verbose=False):
+ refnames = variables["refnames"].strip()
+ if refnames.startswith("$Format"):
+ if verbose:
+ print("variables are unexpanded, not using")
+ return {} # unexpanded, so not in an unpacked git-archive tarball
+ refs = set([r.strip() for r in refnames.strip("()").split(",")])
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+ tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %%d
+ # expansion behaves like git log --decorate=short and strips out the
+ # refs/heads/ and refs/tags/ prefixes that would let us distinguish
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+ tags = set([r for r in refs if re.search(r'\d', r)])
+ if verbose:
+ print("discarding '%%s', no digits" %% ",".join(refs-tags))
+ if verbose:
+ print("likely tags: %%s" %% ",".join(sorted(tags)))
+ for ref in sorted(tags):
+ # sorting will prefer e.g. "2.0" over "2.0rc1"
+ if ref.startswith(tag_prefix):
+ r = ref[len(tag_prefix):]
+ if verbose:
+ print("picking %%s" %% r)
+ return { "version": r,
+ "full": variables["full"].strip() }
+ # no suitable tags, so we use the full revision id
+ if verbose:
+ print("no suitable tags, using full revision id")
+ return { "version": variables["full"].strip(),
+ "full": variables["full"].strip() }
+
+def versions_from_vcs(tag_prefix, root, verbose=False):
+ # this runs 'git' from the root of the source tree. This only gets called
+ # if the git-archive 'subst' variables were *not* expanded, and
+ # _version.py hasn't already been rewritten with a short version string,
+ # meaning we're inside a checked out source tree.
+
+ if not os.path.exists(os.path.join(root, ".git")):
+ if verbose:
+ print("no .git in %%s" %% root)
+ return {}
+
+ GITS = ["git"]
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+ stdout = run_command(GITS, ["describe", "--tags", "--dirty", "--always"],
+ cwd=root)
+ if stdout is None:
+ return {}
+ if not stdout.startswith(tag_prefix):
+ if verbose:
+ print("tag '%%s' doesn't start with prefix '%%s'" %% (stdout,
tag_prefix))
+ return {}
+ tag = stdout[len(tag_prefix):]
+ stdout = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
+ if stdout is None:
+ return {}
+ full = stdout.strip()
+ if tag.endswith("-dirty"):
+ full += "-dirty"
+ return {"version": tag, "full": full}
+
+
+def versions_from_parentdir(parentdir_prefix, root, verbose=False):
+ # Source tarballs conventionally unpack into a directory that includes
+ # both the project name and a version string.
+ dirname = os.path.basename(root)
+ if not dirname.startswith(parentdir_prefix):
+ if verbose:
+ print("guessing rootdir is '%%s', but '%%s' doesn't start with
prefix '%%s'" %%
+ (root, dirname, parentdir_prefix))
+ return None
+ return {"version": dirname[len(parentdir_prefix):], "full": ""}
+
+tag_prefix = "%(TAG_PREFIX)s"
+parentdir_prefix = "%(PARENTDIR_PREFIX)s"
+versionfile_source = "%(VERSIONFILE_SOURCE)s"
+
+def get_versions(default={"version": "unknown", "full": ""}, verbose=False):
+ # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
+ # __file__, we can work backwards from there to the root. Some
+ # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which
+ # case we can only use expanded variables.
+
+ variables = { "refnames": git_refnames, "full": git_full }
+ ver = versions_from_expanded_variables(variables, tag_prefix, verbose)
+ if ver:
+ return ver
+
+ try:
+ root = os.path.abspath(__file__)
+ # versionfile_source is the relative path from the top of the source
+ # tree (where the .git directory might live) to this file. Invert
+ # this to find the root from __file__.
+ for i in range(len(versionfile_source.split("/"))):
+ root = os.path.dirname(root)
+ except NameError:
+ return default
+
+ return (versions_from_vcs(tag_prefix, root, verbose)
+ or versions_from_parentdir(parentdir_prefix, root, verbose)
+ or default)
+
+'''
+
+
+import subprocess
+import sys
+import errno
+
+
+def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False):
+ assert isinstance(commands, list)
+ p = None
+ for c in commands:
+ try:
+ # remember shell=False, so use git.cmd on windows, not just git
+ p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE,
+ stderr=(subprocess.PIPE if hide_stderr
+ else None))
+ break
+ except EnvironmentError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.ENOENT:
+ continue
+ if verbose:
+ print("unable to run %s" % args[0])
+ print(e)
+ return None
+ else:
+ if verbose:
+ print("unable to find command, tried %s" % (commands,))
+ return None
+ stdout = p.communicate()[0].strip()
+ if sys.version >= '3':
+ stdout = stdout.decode()
+ if p.returncode != 0:
+ if verbose:
+ print("unable to run %s (error)" % args[0])
+ return None
+ return stdout
+
+
+import sys
+import re
+import os.path
+
+def get_expanded_variables(versionfile_abs):
+ # the code embedded in _version.py can just fetch the value of these
+ # variables. When used from setup.py, we don't want to import
+ # _version.py, so we do it with a regexp instead. This function is not
+ # used from _version.py.
+ variables = {}
+ try:
+ f = open(versionfile_abs,"r")
+ for line in f.readlines():
+ if line.strip().startswith("git_refnames ="):
+ mo = re.search(r'=\s*"(.*)"', line)
+ if mo:
+ variables["refnames"] = mo.group(1)
+ if line.strip().startswith("git_full ="):
+ mo = re.search(r'=\s*"(.*)"', line)
+ if mo:
+ variables["full"] = mo.group(1)
+ f.close()
+ except EnvironmentError:
+ pass
+ return variables
+
+def versions_from_expanded_variables(variables, tag_prefix, verbose=False):
+ refnames = variables["refnames"].strip()
+ if refnames.startswith("$Format"):
+ if verbose:
+ print("variables are unexpanded, not using")
+ return {} # unexpanded, so not in an unpacked git-archive tarball
+ refs = set([r.strip() for r in refnames.strip("()").split(",")])
+ # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
+ # just "foo-1.0". If we see a "tag: " prefix, prefer those.
+ TAG = "tag: "
+ tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
+ if not tags:
+ # Either we're using git < 1.8.3, or there really are no tags. We use
+ # a heuristic: assume all version tags have a digit. The old git %d
+ # expansion behaves like git log --decorate=short and strips out the
+ # refs/heads/ and refs/tags/ prefixes that would let us distinguish
+ # between branches and tags. By ignoring refnames without digits, we
+ # filter out many common branch names like "release" and
+ # "stabilization", as well as "HEAD" and "master".
+ tags = set([r for r in refs if re.search(r'\d', r)])
+ if verbose:
+ print("discarding '%s', no digits" % ",".join(refs-tags))
+ if verbose:
+ print("likely tags: %s" % ",".join(sorted(tags)))
+ for ref in sorted(tags):
+ # sorting will prefer e.g. "2.0" over "2.0rc1"
+ if ref.startswith(tag_prefix):
+ r = ref[len(tag_prefix):]
+ if verbose:
+ print("picking %s" % r)
+ return { "version": r,
+ "full": variables["full"].strip() }
+ # no suitable tags, so we use the full revision id
+ if verbose:
+ print("no suitable tags, using full revision id")
+ return { "version": variables["full"].strip(),
+ "full": variables["full"].strip() }
+
+def versions_from_vcs(tag_prefix, root, verbose=False):
+ # this runs 'git' from the root of the source tree. This only gets called
+ # if the git-archive 'subst' variables were *not* expanded, and
+ # _version.py hasn't already been rewritten with a short version string,
+ # meaning we're inside a checked out source tree.
+
+ if not os.path.exists(os.path.join(root, ".git")):
+ if verbose:
+ print("no .git in %s" % root)
+ return {}
+
+ GITS = ["git"]
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+ stdout = run_command(GITS, ["describe", "--tags", "--dirty", "--always"],
+ cwd=root)
+ if stdout is None:
+ return {}
+ if not stdout.startswith(tag_prefix):
+ if verbose:
+ print("tag '%s' doesn't start with prefix '%s'" % (stdout,
tag_prefix))
+ return {}
+ tag = stdout[len(tag_prefix):]
+ stdout = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
+ if stdout is None:
+ return {}
+ full = stdout.strip()
+ if tag.endswith("-dirty"):
+ full += "-dirty"
+ return {"version": tag, "full": full}
+
+
+def versions_from_parentdir(parentdir_prefix, root, verbose=False):
+ # Source tarballs conventionally unpack into a directory that includes
+ # both the project name and a version string.
+ dirname = os.path.basename(root)
+ if not dirname.startswith(parentdir_prefix):
+ if verbose:
+ print("guessing rootdir is '%s', but '%s' doesn't start with
prefix '%s'" %
+ (root, dirname, parentdir_prefix))
+ return None
+ return {"version": dirname[len(parentdir_prefix):], "full": ""}
+import os.path
+import sys
+
+# os.path.relpath only appeared in Python-2.6 . Define it here for 2.5.
+def os_path_relpath(path, start=os.path.curdir):
+ """Return a relative version of a path"""
+
+ if not path:
+ raise ValueError("no path specified")
+
+ start_list = [x for x in os.path.abspath(start).split(os.path.sep) if x]
+ path_list = [x for x in os.path.abspath(path).split(os.path.sep) if x]
+
+ # Work out how much of the filepath is shared by start and path.
+ i = len(os.path.commonprefix([start_list, path_list]))
+
+ rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:]
+ if not rel_list:
+ return os.path.curdir
+ return os.path.join(*rel_list)
+
+def do_vcs_install(manifest_in, versionfile_source, ipy):
+ GITS = ["git"]
+ if sys.platform == "win32":
+ GITS = ["git.cmd", "git.exe"]
+ files = [manifest_in, versionfile_source, ipy]
+ try:
+ me = __file__
+ if me.endswith(".pyc") or me.endswith(".pyo"):
+ me = os.path.splitext(me)[0] + ".py"
+ versioneer_file = os_path_relpath(me)
+ except NameError:
+ versioneer_file = "versioneer.py"
+ files.append(versioneer_file)
+ present = False
+ try:
+ f = open(".gitattributes", "r")
+ for line in f.readlines():
+ if line.strip().startswith(versionfile_source):
+ if "export-subst" in line.strip().split()[1:]:
+ present = True
+ f.close()
+ except EnvironmentError:
+ pass
+ if not present:
+ f = open(".gitattributes", "a+")
+ f.write("%s export-subst\n" % versionfile_source)
+ f.close()
+ files.append(".gitattributes")
+ run_command(GITS, ["add", "--"] + files)
+
+SHORT_VERSION_PY = """
+# This file was generated by 'versioneer.py' (0.10) from
+# revision-control system data, or from the parent directory name of an
+# unpacked source archive. Distribution tarballs contain a pre-generated copy
+# of this file.
+
+version_version = '%(version)s'
+version_full = '%(full)s'
+def get_versions(default={}, verbose=False):
+ return {'version': version_version, 'full': version_full}
+
+"""
+
+DEFAULT = {"version": "unknown", "full": "unknown"}
+
+def versions_from_file(filename):
+ versions = {}
+ try:
+ f = open(filename)
+ except EnvironmentError:
+ return versions
+ for line in f.readlines():
+ mo = re.match("version_version = '([^']+)'", line)
+ if mo:
+ versions["version"] = mo.group(1)
+ mo = re.match("version_full = '([^']+)'", line)
+ if mo:
+ versions["full"] = mo.group(1)
+ f.close()
+ return versions
+
+def write_to_version_file(filename, versions):
+ f = open(filename, "w")
+ f.write(SHORT_VERSION_PY % versions)
+ f.close()
+ print("set %s to '%s'" % (filename, versions["version"]))
+
+def get_root():
+ try:
+ return os.path.dirname(os.path.abspath(__file__))
+ except NameError:
+ return os.path.dirname(os.path.abspath(sys.argv[0]))
+
+def get_versions(default=DEFAULT, verbose=False):
+ # returns dict with two keys: 'version' and 'full'
+ assert versionfile_source is not None, "please set
versioneer.versionfile_source"
+ assert tag_prefix is not None, "please set versioneer.tag_prefix"
+ assert parentdir_prefix is not None, "please set
versioneer.parentdir_prefix"
+ # I am in versioneer.py, which must live at the top of the source tree,
+ # which we use to compute the root directory. py2exe/bbfreeze/non-CPython
+ # don't have __file__, in which case we fall back to sys.argv[0] (which
+ # ought to be the setup.py script). We prefer __file__ since that's more
+ # robust in cases where setup.py was invoked in some weird way (e.g. pip)
+ root = get_root()
+ versionfile_abs = os.path.join(root, versionfile_source)
+
+ # extract version from first of _version.py, 'git describe', parentdir.
+ # This is meant to work for developers using a source checkout, for users
+ # of a tarball created by 'setup.py sdist', and for users of a
+ # tarball/zipball created by 'git archive' or github's download-from-tag
+ # feature.
+
+ variables = get_expanded_variables(versionfile_abs)
+ if variables:
+ ver = versions_from_expanded_variables(variables, tag_prefix)
+ if ver:
+ if verbose: print("got version from expanded variable %s" % ver)
+ return ver
+
+ ver = versions_from_file(versionfile_abs)
+ if ver:
+ if verbose: print("got version from file %s %s" %
(versionfile_abs,ver))
+ return ver
+
+ ver = versions_from_vcs(tag_prefix, root, verbose)
+ if ver:
+ if verbose: print("got version from git %s" % ver)
+ return ver
+
+ ver = versions_from_parentdir(parentdir_prefix, root, verbose)
+ if ver:
+ if verbose: print("got version from parentdir %s" % ver)
+ return ver
+
+ if verbose: print("got version from default %s" % ver)
+ return default
+
+def get_version(verbose=False):
+ return get_versions(verbose=verbose)["version"]
+
+class cmd_version(Command):
+ description = "report generated version string"
+ user_options = []
+ boolean_options = []
+ def initialize_options(self):
+ pass
+ def finalize_options(self):
+ pass
+ def run(self):
+ ver = get_version(verbose=True)
+ print("Version is currently: %s" % ver)
+
+
+class cmd_build(_build):
+ def run(self):
+ versions = get_versions(verbose=True)
+ _build.run(self)
+ # now locate _version.py in the new build/ directory and replace it
+ # with an updated value
+ target_versionfile = os.path.join(self.build_lib, versionfile_build)
+ print("UPDATING %s" % target_versionfile)
+ os.unlink(target_versionfile)
+ f = open(target_versionfile, "w")
+ f.write(SHORT_VERSION_PY % versions)
+ f.close()
+
+if 'cx_Freeze' in sys.modules: # cx_freeze enabled?
+ from cx_Freeze.dist import build_exe as _build_exe
+
+ class cmd_build_exe(_build_exe):
+ def run(self):
+ versions = get_versions(verbose=True)
+ target_versionfile = versionfile_source
+ print("UPDATING %s" % target_versionfile)
+ os.unlink(target_versionfile)
+ f = open(target_versionfile, "w")
+ f.write(SHORT_VERSION_PY % versions)
+ f.close()
+ _build_exe.run(self)
+ os.unlink(target_versionfile)
+ f = open(versionfile_source, "w")
+ f.write(LONG_VERSION_PY % {"DOLLAR": "$",
+ "TAG_PREFIX": tag_prefix,
+ "PARENTDIR_PREFIX": parentdir_prefix,
+ "VERSIONFILE_SOURCE":
versionfile_source,
+ })
+ f.close()
+
+class cmd_sdist(_sdist):
+ def run(self):
+ versions = get_versions(verbose=True)
+ self._versioneer_generated_versions = versions
+ # unless we update this, the command will keep using the old version
+ self.distribution.metadata.version = versions["version"]
+ return _sdist.run(self)
+
+ def make_release_tree(self, base_dir, files):
+ _sdist.make_release_tree(self, base_dir, files)
+ # now locate _version.py in the new base_dir directory (remembering
+ # that it may be a hardlink) and replace it with an updated value
+ target_versionfile = os.path.join(base_dir, versionfile_source)
+ print("UPDATING %s" % target_versionfile)
+ os.unlink(target_versionfile)
+ f = open(target_versionfile, "w")
+ f.write(SHORT_VERSION_PY % self._versioneer_generated_versions)
+ f.close()
+
+INIT_PY_SNIPPET = """
+from ._version import get_versions
+__version__ = get_versions()['version']
+del get_versions
+"""
+
+class cmd_update_files(Command):
+ description = "install/upgrade Versioneer files: __init__.py
SRC/_version.py"
+ user_options = []
+ boolean_options = []
+ def initialize_options(self):
+ pass
+ def finalize_options(self):
+ pass
+ def run(self):
+ print(" creating %s" % versionfile_source)
+ f = open(versionfile_source, "w")
+ f.write(LONG_VERSION_PY % {"DOLLAR": "$",
+ "TAG_PREFIX": tag_prefix,
+ "PARENTDIR_PREFIX": parentdir_prefix,
+ "VERSIONFILE_SOURCE": versionfile_source,
+ })
+ f.close()
+
+ ipy = os.path.join(os.path.dirname(versionfile_source), "__init__.py")
+ try:
+ old = open(ipy, "r").read()
+ except EnvironmentError:
+ old = ""
+ if INIT_PY_SNIPPET not in old:
+ print(" appending to %s" % ipy)
+ f = open(ipy, "a")
+ f.write(INIT_PY_SNIPPET)
+ f.close()
+ else:
+ print(" %s unmodified" % ipy)
+
+ # Make sure both the top-level "versioneer.py" and versionfile_source
+ # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so
+ # they'll be copied into source distributions. Pip won't be able to
+ # install the package without this.
+ manifest_in = os.path.join(get_root(), "MANIFEST.in")
+ simple_includes = set()
+ try:
+ for line in open(manifest_in, "r").readlines():
+ if line.startswith("include "):
+ for include in line.split()[1:]:
+ simple_includes.add(include)
+ except EnvironmentError:
+ pass
+ # That doesn't cover everything MANIFEST.in can do
+ # (http://docs.python.org/2/distutils/sourcedist.html#commands), so
+ # it might give some false negatives. Appending redundant 'include'
+ # lines is safe, though.
+ if "versioneer.py" not in simple_includes:
+ print(" appending 'versioneer.py' to MANIFEST.in")
+ f = open(manifest_in, "a")
+ f.write("include versioneer.py\n")
+ f.close()
+ else:
+ print(" 'versioneer.py' already in MANIFEST.in")
+ if versionfile_source not in simple_includes:
+ print(" appending versionfile_source ('%s') to MANIFEST.in" %
+ versionfile_source)
+ f = open(manifest_in, "a")
+ f.write("include %s\n" % versionfile_source)
+ f.close()
+ else:
+ print(" versionfile_source already in MANIFEST.in")
+
+ # Make VCS-specific changes. For git, this means creating/changing
+ # .gitattributes to mark _version.py for export-time keyword
+ # substitution.
+ do_vcs_install(manifest_in, versionfile_source, ipy)
+
+def get_cmdclass():
+ cmds = {'version': cmd_version,
+ 'versioneer': cmd_update_files,
+ 'build': cmd_build,
+ 'sdist': cmd_sdist,
+ }
+ if 'cx_Freeze' in sys.modules: # cx_freeze enabled?
+ cmds['build_exe'] = cmd_build_exe
+ del cmds['build']
+
+ return cmds
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]