diff --git a/.python-virtualenv.metadata b/.python-virtualenv.metadata index dbe103b..cb9bc0d 100644 --- a/.python-virtualenv.metadata +++ b/.python-virtualenv.metadata @@ -1 +1 @@ -995ce0fa007210ac2f10258999d06813ecdd6eeb SOURCES/virtualenv-15.1.0.tar.gz +3052925621f507a334dc357ddffda03bba3e729c SOURCES/virtualenv-20.26.6.tar.gz diff --git a/SOURCES/rpm-wheels.patch b/SOURCES/rpm-wheels.patch new file mode 100644 index 0000000..fd257fe --- /dev/null +++ b/SOURCES/rpm-wheels.patch @@ -0,0 +1,169 @@ +From da9ce1c9d7d422e310d79d58a8b7ed07cbc781d1 Mon Sep 17 00:00:00 2001 +From: Lumir Balhar +Date: Thu, 9 Feb 2023 15:13:36 +0100 +Subject: [PATCH] RPM wheels +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-Authored-By: Miro Hrončok +--- + src/virtualenv/run/__init__.py | 5 +++-- + src/virtualenv/seed/embed/base_embed.py | 16 +++++++++++++- + src/virtualenv/seed/embed/pip_invoke.py | 1 + + .../seed/embed/via_app_data/via_app_data.py | 1 + + src/virtualenv/seed/wheels/acquire.py | 3 ++- + src/virtualenv/seed/wheels/embed/__init__.py | 4 ++++ + src/virtualenv/util/path/_system_wheels.py | 22 +++++++++++++++++++ + 7 files changed, 48 insertions(+), 4 deletions(-) + create mode 100644 src/virtualenv/util/path/_system_wheels.py + +diff --git a/src/virtualenv/run/__init__.py b/src/virtualenv/run/__init__.py +index 48647ec..80c9d4a 100644 +--- a/src/virtualenv/run/__init__.py ++++ b/src/virtualenv/run/__init__.py +@@ -97,8 +97,9 @@ def build_parser_only(args=None): + + def handle_extra_commands(options): + if options.upgrade_embed_wheels: +- result = manual_upgrade(options.app_data, options.env) +- raise SystemExit(result) ++ # result = manual_upgrade(options.app_data, options.env) ++ logging.warning("virtualenv installed from the RPM package uses wheels from RPM packages as well. Updating them via virtualenv is not possible. The RPM packaged wheels are updated together with other RPM packages of the system.") ++ raise SystemExit(1) + + + def load_app_data(args, parser, options): +diff --git a/src/virtualenv/seed/embed/base_embed.py b/src/virtualenv/seed/embed/base_embed.py +index 864cc49..4586f40 100644 +--- a/src/virtualenv/seed/embed/base_embed.py ++++ b/src/virtualenv/seed/embed/base_embed.py +@@ -5,8 +5,9 @@ from pathlib import Path + + from virtualenv.seed.seeder import Seeder + from virtualenv.seed.wheels import Version ++from virtualenv.util.path._system_wheels import get_system_wheels_paths + +-PERIODIC_UPDATE_ON_BY_DEFAULT = True ++PERIODIC_UPDATE_ON_BY_DEFAULT = False + + + class BaseEmbed(Seeder, ABC): +@@ -28,6 +29,15 @@ class BaseEmbed(Seeder, ABC): + + if not self.distribution_to_versions(): + self.enabled = False ++ ++ if "embed" in (self.pip_version, self.setuptools_version, self.wheel_version): ++ raise RuntimeError( ++ "Embedded wheels are not available if virtualenv " ++ "is installed from the RPM package.\nEither install " ++ "virtualenv from PyPI (via pip) or use 'bundle' " ++ "version which uses the system-wide pip, setuptools " ++ "and wheel wheels provided also by RPM packages." ++ ) + + @classmethod + def distributions(cls) -> dict[str, Version]: +@@ -112,6 +122,10 @@ class BaseEmbed(Seeder, ABC): + result += f" {distribution}{ver}," + return result[:-1] + ")" + ++ def insert_system_wheels_paths(self, creator): ++ system_wheels_paths = get_system_wheels_paths(creator.interpreter) ++ self.extra_search_dir = list(system_wheels_paths) + self.extra_search_dir ++ + + __all__ = [ + "BaseEmbed", +diff --git a/src/virtualenv/seed/embed/pip_invoke.py b/src/virtualenv/seed/embed/pip_invoke.py +index 815753c..5423c9f 100644 +--- a/src/virtualenv/seed/embed/pip_invoke.py ++++ b/src/virtualenv/seed/embed/pip_invoke.py +@@ -16,6 +16,7 @@ class PipInvoke(BaseEmbed): + def run(self, creator): + if not self.enabled: + return ++ self.insert_system_wheels_paths(creator) + for_py_version = creator.interpreter.version_release_str + with self.get_pip_install_cmd(creator.exe, for_py_version) as cmd: + env = pip_wheel_env_run(self.extra_search_dir, self.app_data, self.env) +diff --git a/src/virtualenv/seed/embed/via_app_data/via_app_data.py b/src/virtualenv/seed/embed/via_app_data/via_app_data.py +index 7e58bfc..e236319 100644 +--- a/src/virtualenv/seed/embed/via_app_data/via_app_data.py ++++ b/src/virtualenv/seed/embed/via_app_data/via_app_data.py +@@ -39,6 +39,7 @@ class FromAppData(BaseEmbed): + def run(self, creator): + if not self.enabled: + return ++ self.insert_system_wheels_paths(creator) + with self._get_seed_wheels(creator) as name_to_whl: + pip_version = name_to_whl["pip"].version_tuple if "pip" in name_to_whl else None + installer_class = self.installer_class(pip_version) +diff --git a/src/virtualenv/seed/wheels/acquire.py b/src/virtualenv/seed/wheels/acquire.py +index 8b3ddd8..7a2a4e5 100644 +--- a/src/virtualenv/seed/wheels/acquire.py ++++ b/src/virtualenv/seed/wheels/acquire.py +@@ -106,13 +106,14 @@ def find_compatible_in_house(distribution, version_spec, for_py_version, in_fold + + + def pip_wheel_env_run(search_dirs, app_data, env): ++ from virtualenv.util.path._system_wheels import get_system_wheels_paths + env = env.copy() + env.update({"PIP_USE_WHEEL": "1", "PIP_USER": "0", "PIP_NO_INPUT": "1"}) + wheel = get_wheel( + distribution="pip", + version=None, + for_py_version=f"{sys.version_info.major}.{sys.version_info.minor}", +- search_dirs=search_dirs, ++ search_dirs=get_system_wheels_paths(sys), + download=False, + app_data=app_data, + do_periodic_update=False, +diff --git a/src/virtualenv/seed/wheels/embed/__init__.py b/src/virtualenv/seed/wheels/embed/__init__.py +index f068efc..fc044f1 100644 +--- a/src/virtualenv/seed/wheels/embed/__init__.py ++++ b/src/virtualenv/seed/wheels/embed/__init__.py +@@ -50,7 +50,11 @@ BUNDLE_SUPPORT = { + MAX = "3.7" + + ++# Redefined here because bundled wheels are removed in RPM build ++BUNDLE_SUPPORT = None ++ + def get_embed_wheel(distribution, for_py_version): ++ return None # BUNDLE_SUPPORT == None anyway + path = BUNDLE_FOLDER / (BUNDLE_SUPPORT.get(for_py_version, {}) or BUNDLE_SUPPORT[MAX]).get(distribution) + return Wheel.from_path(path) + +diff --git a/src/virtualenv/util/path/_system_wheels.py b/src/virtualenv/util/path/_system_wheels.py +new file mode 100644 +index 0000000..f3fd9b1 +--- /dev/null ++++ b/src/virtualenv/util/path/_system_wheels.py +@@ -0,0 +1,22 @@ ++from pathlib import Path ++from subprocess import check_output, CalledProcessError ++ ++ ++def get_system_wheels_paths(interpreter): ++ # ensurepip wheels ++ # We need subprocess here to check ensurepip with the Python we are creating ++ # a new virtual environment for ++ executable = interpreter.executable ++ try: ++ ensurepip_path = check_output((executable, "-u", "-c", 'import ensurepip; print(ensurepip.__path__[0])'), universal_newlines=True) ++ ensurepip_path = Path(ensurepip_path.strip()) / "_bundled" ++ except CalledProcessError: ++ pass ++ else: ++ if ensurepip_path.is_dir(): ++ yield ensurepip_path ++ ++ # Standard wheels path ++ wheels_dir = Path("/usr/share/python-wheels") ++ if wheels_dir.exists(): ++ yield wheels_dir +-- +2.46.2 + diff --git a/SPECS/python-virtualenv.spec b/SPECS/python-virtualenv.spec index deec25f..1d10126 100644 --- a/SPECS/python-virtualenv.spec +++ b/SPECS/python-virtualenv.spec @@ -1,296 +1,131 @@ +%bcond bootstrap 0 +%bcond tests %{without bootstrap} + Name: python-virtualenv -Version: 15.1.0 -Release: 7%{?dist} +Version: 20.26.6 +Release: %autorelease Summary: Tool to create isolated Python environments -Group: Development/Languages License: MIT -URL: https://pypi.python.org/pypi/virtualenv -Source0: https://files.pythonhosted.org/packages/source/v/virtualenv/virtualenv-%{version}.tar.gz - -# Disable downloading pip, wheel and setuptools from pypi -# automatically when creating a new venv. -# Upstream commit that was reverted: -# https://github.com/pypa/virtualenv/commit/3d7361ff2e31472cb69d00150fbdf5a3c9af2a0d -Patch0: disable-pypi-downloads-on-venv-creation.patch +URL: http://pypi.python.org/pypi/virtualenv +Source: %{pypi_source virtualenv} -# Patch for CVE in the bundled urllib3 -# CVE-2018-20060 Cross-host redirect does not remove Authorization header allow for credential exposure -# https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2018-20060 -Patch1: CVE-2018-20060.patch +# Add /usr/share/python-wheels to extra_search_dir +Patch: rpm-wheels.patch -# Patch for CVE in the bundled urllib3 -# CVE-2019-11236 CRLF injection due to not encoding the '\r\n' sequence leading to possible attack on internal service -# https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2019-11236 -Patch2: CVE-2019-11236.patch - -# Patch for CVE in the bundled requests -# CVE-2018-18074 Redirect from HTTPS to HTTP does not remove Authorization header -# This patch fixes both the CVE -# https://bugzilla.redhat.com/show_bug.cgi?id=1643829 -# and the subsequent regression -# https://github.com/psf/requests/pull/4851 -Patch3: CVE-2018-18074.patch +BuildArch: noarch -# Use the system level root certificate instead of the one bundled in requests -# for the bundled pip -# https://bugzilla.redhat.com/show_bug.cgi?id=1826520 -Patch4: dummy-certifi.patch +BuildRequires: python3-devel + +%if %{with tests} +BuildRequires: fish +BuildRequires: tcsh +BuildRequires: gcc +# from the [test] extra, but manually filtered, version bounds removed +BuildRequires: python3-flaky +BuildRequires: python3-packaging +BuildRequires: python3-pytest +BuildRequires: python3-pytest-env +#BuildRequires: python3-pytest-freezer -- not available, tests skipped +BuildRequires: python3-pytest-mock +BuildRequires: python3-pytest-randomly +BuildRequires: python3-pytest-timeout +BuildRequires: python3-setuptools +BuildRequires: python3-time-machine +%endif -# Don't fail on missing requests cert -# https://github.com/pypa/virtualenv/pull/1252 -Patch5: dont-fail-on-missing-requests-cert.patch +# RPM installed wheels +BuildRequires: %{python_wheel_pkg_prefix}-pip-wheel +BuildRequires: %{python_wheel_pkg_prefix}-setuptools-wheel +BuildRequires: %{python_wheel_pkg_prefix}-wheel-wheel -# Fix CVE-2019-20916: directory traversal in _download_http_url() function within the bundled pip wheel -# Backported from upstream: https://github.com/pypa/pip/pull/6418 -Patch6: CVE-2019-20916.patch +%global _description %{expand: +virtualenv is a tool to create isolated Python environments. +A subset of it has been integrated into the Python standard library under +the venv module. The venv module does not offer all features of this library, +to name just a few more prominent: -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +- is slower (by not having the app-data seed method), +- is not as extendable, +- cannot create virtual environments for arbitrarily installed Python versions + (and automatically discover these), +- does not have as rich programmatic API (describe virtual environments + without creating them).} -BuildArch: noarch -BuildRequires: python2-devel -Requires: python-setuptools, python2-devel +%description %_description -BuildRequires: ca-certificates -Requires: ca-certificates -Provides: python2-virtualenv = %{version}-%{release} +%package -n python3-virtualenv +Summary: Tool to create isolated Python environments -%if 0%{?fedora} -BuildRequires: python-sphinx -%endif +# Provide "virtualenv" for convenience +Provides: virtualenv = %{version}-%{release} +# RPM installed wheels +Requires: %{python_wheel_pkg_prefix}-pip-wheel +# Python 3.12 virtualenvs are created without setuptools/wheel, +# but the users can still do --wheel=bundle --setuptools=bundle to force them: +Requires: %{python_wheel_pkg_prefix}-setuptools-wheel +Requires: %{python_wheel_pkg_prefix}-wheel-wheel +# This was a requirement for Python 3.6+2.7 virtual environments +Obsoletes: %{python_wheel_pkg_prefix}-wheel0.37-wheel < 0.37.1-20 -%description -virtualenv is a tool to create isolated Python environments. virtualenv -is a successor to workingenv, and an extension of virtual-python. It is -written by Ian Bicking, and sponsored by the Open Planning Project. It is -licensed under an MIT-style permissive license. +%description -n python3-virtualenv %_description %prep -%setup -q -n virtualenv-%{version} -%patch0 -p1 -%{__sed} -i -e "1s|#!/usr/bin/env python||" virtualenv.py +%autosetup -p1 -n virtualenv-%{version} -# Patching of bundled libraries -pushd virtualenv_support/ -# Extract wheel content -unzip pip-9.0.1-py2.py3-none-any.whl -pushd pip/_vendor/requests/packages/urllib3/ -%patch1 -p1 -%patch2 -p1 -popd # out of wheel -pushd pip/_vendor/requests/ -%patch3 -p1 -%patch4 -p1 -popd # out of wheel -pushd pip -%patch6 -p1 -popd -sed -i '/\.pem/d' pip-9.0.1.dist-info/RECORD -# Replace the pip folder in the zip archive (.whl) -zip -r pip-9.0.1-py2.py3-none-any.whl pip pip-9.0.1.dist-info -# Removal of the bundled request certificate -zip -d pip-9.0.1-py2.py3-none-any.whl pip/_vendor/requests/cacert.pem -# Remove unzipped folders -rm -rf pip/ pip-9.0.1.dist-info/ -popd # out of virtualenv_support -%patch5 -p1 - -%build -# Build code -%{__python2} setup.py build - -# Build docs on Fedora -%if 0%{?fedora} > 0 -%{__python2} setup.py build_sphinx -%endif - - -%install -rm -rf $RPM_BUILD_ROOT -%{__python2} setup.py install --skip-build --root $RPM_BUILD_ROOT -rm -f build/sphinx/html/.buildinfo +# Remove the wheels provided by RPM packages +rm src/virtualenv/seed/wheels/embed/pip-* +rm src/virtualenv/seed/wheels/embed/setuptools-* +rm src/virtualenv/seed/wheels/embed/wheel-* -# The versioned 2.x script was removed from upstream. Add it back. -cp %{buildroot}/%{_bindir}/virtualenv %{buildroot}/%{_bindir}/virtualenv-%{python2_version} -cp %{buildroot}/%{_bindir}/virtualenv %{buildroot}/%{_bindir}/virtualenv-2 +test ! -f src/virtualenv/seed/embed/wheels/*.whl +# Replace hardcoded path from rpm-wheels.patch by %%{python_wheel_dir} +# On Fedora, this should change nothing, but when building for RHEL9+, it will +sed -i "s|/usr/share/python-wheels|%{python_wheel_dir}|" src/virtualenv/util/path/_system_wheels.py -%clean -rm -rf $RPM_BUILD_ROOT +%generate_buildrequires +%pyproject_buildrequires +%build +%pyproject_wheel -%files -%defattr(-,root,root,-) -%doc docs/*rst PKG-INFO AUTHORS.txt LICENSE.txt -# Include sphinx docs on Fedora -%if 0%{?fedora} > 0 -%doc build/sphinx/* +%install +%pyproject_install +%pyproject_save_files -l virtualenv + +%check +%pyproject_check_import -e '*activate_this' -e '*windows*' +%if %{with tests} +# Skip tests which requires internet or some extra dependencies +# Requires internet: +# - test_download_* +# - test_can_build_c_extensions +# Uses disabled functionalities around bundled wheels: +# - test_wheel_* +# - test_seed_link_via_app_data +# - test_base_bootstrap_via_pip_invoke +# - test_acquire.py (whole file) +# - test_bundle.py (whole file) +# Uses disabled functionalities around automatic updates: +# - test_periodic_update.py (whole file) +PIP_CERT=/etc/pki/tls/certs/ca-bundle.crt \ +%pytest -vv -k "not test_bundle and \ + not test_acquire and \ + not test_periodic_update and \ + not test_wheel_ and \ + not test_download_ and \ + not test_can_build_c_extensions and \ + not test_base_bootstrap_via_pip_invoke and \ + not test_seed_link_via_app_data" %endif -# For noarch packages: sitelib -%{python2_sitelib}/* -%attr(755,root,root) %{_bindir}/virtualenv* +%files -n python3-virtualenv -f %{pyproject_files} +%doc README.md +%{_bindir}/virtualenv %changelog -* Tue May 17 2022 Lumír Balhar - 15.1.0-7 -- Security fix for CVE-2019-20916 for the bundled pip wheel -Resolves: rhbz#1868135 - -* Wed Feb 23 2022 Charalampos Stratakis - 15.1.0-6 -- Require again python-setuptools instead of python2-setuptools -Resolves: rhbz#2054827 - -* Mon Nov 22 2021 Charalampos Stratakis - 15.1.0-5 -- Use the system certs for the bundled pip -Resolves: rhbz#2015326 - -* Thu Feb 13 2020 Lumír Balhar - 15.1.0-4 -- Bump -Resolves: rhbz#1649153 -Resolves: rhbz#1700824 -Resolves: rhbz#1643829 - -* Tue Jan 14 2020 Lumír Balhar - 15.1.0-3 -- Add three new patches for CVEs in bundled urllib3 and requests -CVE-2018-20060, CVE-2019-11236, CVE-2018-18074 -Resolves: rhbz#1649153 -Resolves: rhbz#1700824 -Resolves: rhbz#1643829 - -* Wed Sep 13 2017 Charalampos Stratakis - 15.1.0-2 -- Add back the versioned virtualenv script -Resolves: rhbz#1461154 - -* Wed Sep 13 2017 Charalampos Stratakis - 15.1.0-1 -- Rebase to version 15.1.0 -- Disable automatic downloads from pypi on new venv creation -Resolves: rhbz#1461154 - -* Wed Feb 08 2017 Charalampos Stratakis - 1.10.1-4 -- Fix Python 3.4 compatibility -Resolves: rhbz#1411685 - -* Mon May 09 2016 Tomas Orsava - 1.10.1-3 -- Added a patch that shows a custom error message when a FILE passed to - virtualenv to be used as 'home dir' already exists and is NOT a directory. -Resolves: rhbz#1306513 - -* Fri Dec 27 2013 Daniel Mach - 1.10.1-2 -- Mass rebuild 2013-12-27 - -* Tue Aug 20 2013 Robert Kuska - 1.10.1-1 -- Update to v1.10.1 to deal with different securiy issue -Resolves: CVE-2013-1633 - -* Wed Jul 17 2013 Robert Kuska - 1.9.1-2 -- Delete bundled libraries of pip and setuptools - -* Tue May 14 2013 Toshio Kuratomi - 1.9.1-1 -- Update to upstream 1.9.1 because of security issues with the bundled - python-pip in older releases. This is just a quick fix until a - python-virtualenv maintainer can unbundle the python-pip package - see: https://bugzilla.redhat.com/show_bug.cgi?id=749378 - -* Thu Feb 14 2013 Fedora Release Engineering - 1.7.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Tue Aug 14 2012 Steve Milner - 1.7.2-1 -- Update for upstream bug fixes. -- Added path for versioned binary. -- Patch no longer required. - -* Sat Jul 21 2012 Fedora Release Engineering - 1.7.1.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Wed Mar 14 2012 Steve 'Ashcrow' Milner - 1.7.1.2-1 -- Update for upstream bug fixes. -- Added patch for sphinx building - -* Sat Jan 14 2012 Fedora Release Engineering - 1.7-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 20 2011 Steve 'Ashcrow' Milner - 1.7-1 -- Update for https://bugzilla.redhat.com/show_bug.cgi?id=769067 - -* Wed Feb 09 2011 Fedora Release Engineering - 1.5.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Sat Oct 16 2010 Steve 'Ashcrow' Milner - 1.5.1-1 -- Added _weakrefset requirement for Python 2.7.1. -- Add support for PyPy. -- Uses a proper temporary dir when installing environment requirements. -- Add --prompt option to be able to override the default prompt prefix. -- Add fish and csh activate scripts. - -* Thu Jul 22 2010 David Malcolm - 1.4.8-4 -- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild - -* Tue Jul 7 2010 Steve 'Ashcrow' Milner - 1.4.8-3 -- Fixed EPEL installation issue from BZ#611536 - -* Tue Jun 8 2010 Steve 'Ashcrow' Milner - 1.4.8-2 -- Only replace the python shebang on the first line (Robert Buchholz) - -* Fri Apr 28 2010 Steve 'Ashcrow' Milner - 1.4.8-1 -- update pip to 0.7 -- move regen-docs into bin/ -- Fix #31, make activate_this.py work on Windows (use Lib/site-packages) -unset PYTHONHOME envioronment variable -- first step towards fixing the PYTHONHOME issue; see e.g. https://bugs.launchpad.net/virtualenv/+bug/290844 -- unset PYTHONHOME in the (Unix) activate script (and reset it in deactivate()) -- use the activate.sh in virtualenv.py via running bin/rebuild-script.py -- add warning message if PYTHONHOME is set - -* Fri Apr 2 2010 Steve 'Ashcrow' Milner - 1.4.6-1 -- allow script creation without setuptools -- fix problem with --relocate when bin/ has subdirs (fixes #12) -- Allow more flexible .pth file fixup -- make nt a required module, along with posix. it may not be a builtin module on jython -- don't mess with PEP 302-supplied __file__, from CPython, and merge in a small startup optimization for Jython, from Jython - -* Tue Dec 22 2009 Steve 'Ashcrow' Milner - 1.4.3-1 -- Updated for upstream release. - -* Thu Nov 12 2009 Steve 'Ashcrow' Milner - 1.4.2-1 -- Updated for upstream release. - -* Sun Jul 26 2009 Fedora Release Engineering - 1.3.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Tue Apr 28 2009 Steve 'Ashcrow' Milner - 1.3.3-1 -- Updated for upstream release. - -* Thu Feb 26 2009 Fedora Release Engineering - 1.3.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Thu Dec 25 2008 Steve 'Ashcrow' Milner - 1.3.2-1 -- Updated for upstream release. - -* Thu Dec 04 2008 Ignacio Vazquez-Abrams - 1.3.1-4 -- Rebuild for Python 2.6 - -* Mon Dec 1 2008 Steve 'Ashcrow' Milner - 1.3.1-3 -- Added missing dependencies. - -* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 1.3.1-2 -- Rebuild for Python 2.6 - -* Fri Nov 28 2008 Steve 'Ashcrow' Milner - 1.3.1-1 -- Updated for upstream release - -* Sun Sep 28 2008 Steve 'Ashcrow' Milner - 1.3-1 -- Updated for upstream release - -* Sat Aug 30 2008 Steve 'Ashcrow' Milner - 1.2-1 -- Updated for upstream release - -* Fri Aug 29 2008 Steve 'Ashcrow' Milner - 1.1-3 -- Updated from review notes - -* Thu Aug 28 2008 Steve 'Ashcrow' Milner - 1.1-2 -- Updated from review notes - -* Tue Aug 26 2008 Steve 'Ashcrow' Milner - 1.1-1 -- Initial Version +%autochangelog