commit python-requirements-detector for openSUSE:Factory
Hello community, here is the log from the commit of package python-requirements-detector for openSUSE:Factory checked in at 2019-05-22 11:17:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-requirements-detector (Old) and /work/SRC/openSUSE:Factory/.python-requirements-detector.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-requirements-detector" Wed May 22 11:17:52 2019 rev:4 rq:704548 version:0.6 Changes: -------- --- /work/SRC/openSUSE:Factory/python-requirements-detector/python-requirements-detector.changes 2015-05-16 19:01:50.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-requirements-detector.new.5148/python-requirements-detector.changes 2019-05-22 11:18:10.414453471 +0200 @@ -1,0 +2,14 @@ +Tue May 21 20:07:52 UTC 2019 - Todd R <toddrme2178@gmail.com> + +- Fix conflicts with old python2-only version +- Fix description formatting. + +------------------------------------------------------------------- +Mon May 20 12:56:43 UTC 2019 - pgajdos@suse.com + +- version update to 0.6 + * no changelog available +- run tests +- convert to singlespec + +------------------------------------------------------------------- Old: ---- requirements-detector-0.4.tar.gz New: ---- 0.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-requirements-detector.spec ++++++ --- /var/tmp/diff_new_pack.g43M5A/_old 2019-05-22 11:18:11.238453167 +0200 +++ /var/tmp/diff_new_pack.g43M5A/_new 2019-05-22 11:18:11.250453162 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-requirements-detector # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,45 +12,70 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # +%{?!python_module:%define python_module() python-%{**} python3-%{**}} +%define oldpython python Name: python-requirements-detector -Version: 0.4 +Version: 0.6 Release: 0 Summary: Python tool to find and list requirements of a Python project License: MIT Group: Development/Languages/Python Url: https://github.com/landscapeio/requirements-detector -Source: https://pypi.python.org/packages/source/r/requirements-detector/requirements-detector-%{version}.tar.gz -BuildRequires: python-devel -BuildRequires: python-setuptools +# https://github.com/landscapeio/requirements-detector/issues/25 +Source: https://github.com/landscapeio/requirements-detector/archive/%{version}.tar.gz +BuildRequires: %{python_module setuptools} +BuildRequires: python-rpm-macros +# SECTION test requirements +BuildRequires: %{python_module astroid} +BuildRequires: %{python_module nose} +# /SECTION Requires: python-astroid >= 1.0.0 -BuildRoot: %{_tmppath}/%{name}-%{version}-build -%if 0%{?suse_version} && 0%{?suse_version} <= 1110 -%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} -%else +BuildRequires: fdupes BuildArch: noarch +%ifpython3 +Conflicts: %{oldpython}-requirements-detector < 0.6 %endif +Requires(post): update-alternatives +Requires(postun): update-alternatives + +%python_subpackages %description -requirements-detector is a simple Python tool which attempts to find and list the requirements of a Python project. +Requirements-detector is a Python tool which attempts to find and list +the requirements of a Python project. -When run from the root of a Python project, it will try to ascertain which libraries and the versions of those libraries that the project depends on. +When run from the root of a Python project, it will try to ascertain +which libraries and the versions of those libraries that the project +depends on. %prep %setup -q -n requirements-detector-%{version} %build -python setup.py build +%python_build %install -python setup.py install --prefix=%{_prefix} --root=%{buildroot} - -%files -%defattr(-,root,root,-) -%{_bindir}/detect-requirements +%python_install +%python_clone -a %{buildroot}%{_bindir}/detect-requirements +%python_expand %fdupes %{buildroot}%{$python_sitelib} + +%check +%python_expand PYTHONPATH=%{buildroot}%{$pthon_sitelib} nosetests-%{$python_bin_suffix} + +%post +%python_install_alternative detect-requirements + +%postun +%python_uninstall_alternative detect-requirements + +%files %{python_files} +%doc README.md +%license LICENSE %{python_sitelib}/* +%python_alternative %{_bindir}/detect-requirements %changelog ++++++ requirements-detector-0.4.tar.gz -> 0.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/.coveragerc new/requirements-detector-0.6/.coveragerc --- old/requirements-detector-0.4/.coveragerc 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/.coveragerc 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,3 @@ + +[run] +source=requirements_detector diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/.gitignore new/requirements-detector-0.6/.gitignore --- old/requirements-detector-0.4/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/.gitignore 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,35 @@ +*.py[cod] + +# C extensions +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg +lib +lib64 + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox +nosetests.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/.landscape.yaml new/requirements-detector-0.6/.landscape.yaml --- old/requirements-detector-0.4/.landscape.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/.landscape.yaml 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,4 @@ +doc-warnings: no +strictness: veryhigh +max-line-length: 120 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/.travis.yml new/requirements-detector-0.6/.travis.yml --- old/requirements-detector-0.4/.travis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/.travis.yml 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,16 @@ +sudo: false +language: python +python: + - "2.6" + - "2.7" + - "3.4" + - "3.5" + - "3.6" + - "3.7-dev" +install: + - "pip install nose coverage coveralls" + - "pip install --editable ." +script: + nosetests -s --with-coverage --cover-package requirements_detector --cover-inclusive +after_success: + coveralls diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/LICENSE new/requirements-detector-0.6/LICENSE --- old/requirements-detector-0.4/LICENSE 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/LICENSE 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,19 @@ +The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/MANIFEST.in new/requirements-detector-0.6/MANIFEST.in --- old/requirements-detector-0.4/MANIFEST.in 2014-08-21 19:28:36.000000000 +0200 +++ new/requirements-detector-0.6/MANIFEST.in 2018-07-22 10:24:34.000000000 +0200 @@ -1 +1,2 @@ -include bin/detect-requirements \ No newline at end of file +include bin/detect-requirements +include LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/PKG-INFO new/requirements-detector-0.6/PKG-INFO --- old/requirements-detector-0.4/PKG-INFO 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,20 +0,0 @@ -Metadata-Version: 1.1 -Name: requirements-detector -Version: 0.4 -Summary: Python tool to find and list requirements of a Python project -Home-page: https://github.com/landscapeio/requirements-detector -Author: landscape.io -Author-email: code@landscape.io -License: MIT -Description: UNKNOWN -Keywords: python requirements detector -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Operating System :: Unix -Classifier: Topic :: Software Development :: Quality Assurance -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3.3 -Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/README.md new/requirements-detector-0.6/README.md --- old/requirements-detector-0.4/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/README.md 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,49 @@ +# Requirements Detector + +## Status + +[![Latest Version](https://img.shields.io/pypi/v/requirements-detector.svg?label=version&style=flat)](https://pypi.python.org/pypi/requirements-detector) +[![Build Status](https://travis-ci.org/landscapeio/requirements-detector.png?branch=master)](https://travis-ci.org/landscapeio/requirements-detector) +[![Health](https://landscape.io/github/landscapeio/requirements-detector/master/landscape.svg?style=flat)](https://landscape.io/github/landscapeio/requirements-detector/master) +[![Coverage Status](https://img.shields.io/coveralls/landscapeio/requirements-detector.svg?style=flat)](https://coveralls.io/r/landscapeio/requirements-detector) +[![Documentation](https://readthedocs.org/projects/requirements-detector/badge/?version=master)](https://readthedocs.org/projects/requirements-detector/) + +## About + +`requirements-detector` is a simple Python tool which attempts to find and list the requirements of a Python project. + +When run from the root of a Python project, it will try to ascertain which libraries and the versions of those libraries that the project depends on. + +It uses the following methods in order, in the root of the project: + +1. Parse `setup.py` (if this is successful, the remaining steps are skipped) +2. Parse `requirements.txt` or `requirements.pip` +3. Parse all `*.txt` and `*.pip` files inside a folder called `requirements` +4. Parse all files in the root folder matching `*requirements*.txt` or `reqs.txt` (so for example, `pip_requirements.txt` would match, as would `requirements_common.txt`) + +### Usage + +``` +detect-requirements [path] +``` +If `path` is not specified, the current working directory will be used. + +### Output + +The output will be plaintext, and match that of a [pip requirements file](http://www.pip-installer.org/en/latest/logic.html), for example: + +``` +Django==1.5.2 +South>=0.8 +anyjson +celery>=2.2,<3 +``` + +### Usage From Python + +``` +>>> import os +>>> from requirements_detector import find_requirements +>>> find_requirements(os.getcwd()) +[DetectedRequirement:Django==1.5.2, DetectedRequirement:South>=0.8, ...] +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/requirements_detector/__compat__.py new/requirements-detector-0.6/requirements_detector/__compat__.py --- old/requirements-detector-0.4/requirements_detector/__compat__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector/__compat__.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,16 @@ +# Various shims to deal with node renames between astroid versions - astroid 2.0 renamed +# some of the nodes used by this library so for backwards compatibility, old names are +# translated to new. + +try: + from astroid import Call +except ImportError: + from astroid import CallFunc as Call + + +try: + from astroid import AssignName +except ImportError: + from astroid import AssName as AssignName + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/requirements_detector/detect.py new/requirements-detector-0.6/requirements_detector/detect.py --- old/requirements-detector-0.4/requirements_detector/detect.py 2015-03-23 23:06:42.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector/detect.py 2018-07-22 10:24:34.000000000 +0200 @@ -2,7 +2,8 @@ import os import sys from astroid.builder import AstroidBuilder -from astroid import MANAGER, CallFunc, Name, Assign, Keyword, List, Tuple, Const, AssName +from astroid import MANAGER, Name, Assign, Keyword, List, Tuple, Const +from requirements_detector.__compat__ import Call, AssignName from requirements_detector.requirement import DetectedRequirement @@ -54,11 +55,11 @@ for line in encoding_lines: match = _ENCODING_REGEXP.search(line) if match is None: - result.append(line) + result.append(line.strip()) else: encoding = match.group(1) - result += contents[2:] + result += [line.rstrip() for line in contents[2:]] result = '\n'.join(result) return result.decode(encoding) @@ -130,7 +131,7 @@ node = node or self._ast # test to see if this is a call to setup() - if isinstance(node, CallFunc): + if isinstance(node, Call): for child_node in node.get_children(): if isinstance(child_node, Name) and child_node.name == 'setup': # TODO: what if this isn't actually the distutils setup? @@ -139,7 +140,7 @@ for child_node in node.get_children(): if top and isinstance(child_node, Assign): for target in child_node.targets: - if isinstance(target, AssName): + if isinstance(target, AssignName): self._top_level_assigns[target.name] = child_node.value self.walk(child_node) @@ -197,9 +198,16 @@ def from_setup_py(setup_file): try: + from astroid import AstroidBuildingException + except ImportError: + syntax_exceptions = (SyntaxError,) + else: + syntax_exceptions = (SyntaxError, AstroidBuildingException) + + try: contents = _load_file_contents(setup_file) ast = AstroidBuilder(MANAGER).string_build(contents) - except SyntaxError: + except syntax_exceptions: # if the setup file is broken, we can't do much about that... raise CouldNotParseRequirements @@ -209,7 +217,7 @@ for req in walker.get_requires(): requirements.append(DetectedRequirement.parse(req, setup_file)) - return requirements + return [requirement for requirement in requirements if requirement is not None] def from_requirements_txt(requirements_file): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/requirements_detector.egg-info/PKG-INFO new/requirements-detector-0.6/requirements_detector.egg-info/PKG-INFO --- old/requirements-detector-0.4/requirements_detector.egg-info/PKG-INFO 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,20 +0,0 @@ -Metadata-Version: 1.1 -Name: requirements-detector -Version: 0.4 -Summary: Python tool to find and list requirements of a Python project -Home-page: https://github.com/landscapeio/requirements-detector -Author: landscape.io -Author-email: code@landscape.io -License: MIT -Description: UNKNOWN -Keywords: python requirements detector -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Operating System :: Unix -Classifier: Topic :: Software Development :: Quality Assurance -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3.3 -Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/requirements_detector.egg-info/SOURCES.txt new/requirements-detector-0.6/requirements_detector.egg-info/SOURCES.txt --- old/requirements-detector-0.4/requirements_detector.egg-info/SOURCES.txt 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector.egg-info/SOURCES.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -MANIFEST.in -setup.py -bin/detect-requirements -requirements_detector/__init__.py -requirements_detector/detect.py -requirements_detector/formatters.py -requirements_detector/requirement.py -requirements_detector/run.py -requirements_detector.egg-info/PKG-INFO -requirements_detector.egg-info/SOURCES.txt -requirements_detector.egg-info/dependency_links.txt -requirements_detector.egg-info/requires.txt -requirements_detector.egg-info/top_level.txt \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/requirements_detector.egg-info/dependency_links.txt new/requirements-detector-0.6/requirements_detector.egg-info/dependency_links.txt --- old/requirements-detector-0.4/requirements_detector.egg-info/dependency_links.txt 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector.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/requirements-detector-0.4/requirements_detector.egg-info/requires.txt new/requirements-detector-0.6/requirements_detector.egg-info/requires.txt --- old/requirements-detector-0.4/requirements_detector.egg-info/requires.txt 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -astroid>=1.0.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/requirements_detector.egg-info/top_level.txt new/requirements-detector-0.6/requirements_detector.egg-info/top_level.txt --- old/requirements-detector-0.4/requirements_detector.egg-info/top_level.txt 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/requirements_detector.egg-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -requirements_detector diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/setup.cfg new/requirements-detector-0.6/setup.cfg --- old/requirements-detector-0.4/setup.cfg 2015-03-24 07:41:47.000000000 +0100 +++ new/requirements-detector-0.6/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/requirements-detector-0.4/setup.py new/requirements-detector-0.6/setup.py --- old/requirements-detector-0.4/setup.py 2015-03-23 23:11:11.000000000 +0100 +++ new/requirements-detector-0.6/setup.py 2018-07-22 10:24:34.000000000 +0200 @@ -1,14 +1,15 @@ # -*- coding: UTF-8 -*- from distutils.core import setup from setuptools import find_packages +import sys -_version = "0.4" +_version = "0.6" _packages = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]) _short_description = "Python tool to find and list requirements of a Python project" -_CLASSIFIERS = ( +_CLASSIFIERS = [ 'Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Intended Audience :: Developers', @@ -16,11 +17,23 @@ 'Topic :: Software Development :: Quality Assurance', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.3', - 'License :: OSI Approved :: ' - 'GNU General Public License v2 or later (GPLv2+)', -) - + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'License :: OSI Approved :: MIT License', +] + + +if sys.version_info < (2, 7): + # pylint 1.4 dropped support for Python 2.6 + _install_requires = [ + 'astroid>=1.0,<1.3.0', + ] +else: + _install_requires = [ + 'astroid>=1.4', + ] setup( name='requirements-detector', @@ -30,7 +43,7 @@ description=_short_description, version=_version, scripts=['bin/detect-requirements'], - install_requires=['astroid>=1.0.0'], + install_requires=_install_requires, packages=_packages, license='MIT', keywords='python requirements detector', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/syntax_error/regular_indentation.py new/requirements-detector-0.6/tests/detection/syntax_error/regular_indentation.py --- old/requirements-detector-0.4/tests/detection/syntax_error/regular_indentation.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/syntax_error/regular_indentation.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,15 @@ +# -*- coding: UTF-8 -*- +from distutils.core import setup + +if foo: + # just for a test with indentation + bar() + +setup( + name=u'prospector-test-4-üéø', + version='0.0.1', + install_requires=[ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/syntax_error/setup.py new/requirements-detector-0.6/tests/detection/syntax_error/setup.py --- old/requirements-detector-0.4/tests/detection/syntax_error/setup.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/syntax_error/setup.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,10 @@ +from distutils.core import setup + +setup( + name='prospector-test-1', + version='0.0.1', + install_requires=[ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] narm narm narm +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/syntax_error/setup_multiline_string.py new/requirements-detector-0.6/tests/detection/syntax_error/setup_multiline_string.py --- old/requirements-detector-0.4/tests/detection/syntax_error/setup_multiline_string.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/syntax_error/setup_multiline_string.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,13 @@ +from distutils.core import setup + +comment = 'this is a long comment ' \ + 'on two lines' + +setup( + name='prospector-test-1', + version='0.0.1', + install_requires=[ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test1/requirements.txt new/requirements-detector-0.6/tests/detection/test1/requirements.txt --- old/requirements-detector-0.4/tests/detection/test1/requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test1/requirements.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,6 @@ +-i https://example.com/custom/pypi +Django>=1.5.0 +South==0.8.2 +amqp!=1.0.13 +# we want six too +six<1.4,>=1.3.0 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test2/requirements/base.txt new/requirements-detector-0.6/tests/detection/test2/requirements/base.txt --- old/requirements-detector-0.4/tests/detection/test2/requirements/base.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test2/requirements/base.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,2 @@ +amqp==1.0.13 +anyjson==0.3.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test2/requirements/webui.pip new/requirements-detector-0.6/tests/detection/test2/requirements/webui.pip --- old/requirements-detector-0.4/tests/detection/test2/requirements/webui.pip 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test2/requirements/webui.pip 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,2 @@ +Django==1.5.2 +South==0.8.2 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test3/pip_requirements.txt new/requirements-detector-0.6/tests/detection/test3/pip_requirements.txt --- old/requirements-detector-0.4/tests/detection/test3/pip_requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test3/pip_requirements.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1 @@ +anyjson==0.3.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test3/reqs.txt new/requirements-detector-0.6/tests/detection/test3/reqs.txt --- old/requirements-detector-0.4/tests/detection/test3/reqs.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test3/reqs.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1 @@ +django-gubbins==1.1.2 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test3/requirements_base.txt new/requirements-detector-0.6/tests/detection/test3/requirements_base.txt --- old/requirements-detector-0.4/tests/detection/test3/requirements_base.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test3/requirements_base.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1 @@ +amqp==1.0.13 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test3/requirements_test.txt new/requirements-detector-0.6/tests/detection/test3/requirements_test.txt --- old/requirements-detector-0.4/tests/detection/test3/requirements_test.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test3/requirements_test.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1 @@ +South==0.8.2 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test3/test_requirements.txt new/requirements-detector-0.6/tests/detection/test3/test_requirements.txt --- old/requirements-detector-0.4/tests/detection/test3/test_requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test3/test_requirements.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1 @@ +Django==1.5.2 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/callable.py new/requirements-detector-0.6/tests/detection/test4/callable.py --- old/requirements-detector-0.4/tests/detection/test4/callable.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/callable.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,13 @@ +from distutils.core import setup + +def _install_requires(): + return [ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] + +setup( + name='prospector-test-2', + version='0.0.1', + install_requires=_install_requires() +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/in_file.py new/requirements-detector-0.6/tests/detection/test4/in_file.py --- old/requirements-detector-0.4/tests/detection/test4/in_file.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/in_file.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,12 @@ +from distutils.core import setup + +_install_requires = [ + 'Django==1.5.0', + 'django-gubbins==1.1.2' +] + +setup( + name='prospector-test-2', + version='0.0.1', + install_requires=_install_requires +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/simple.py new/requirements-detector-0.6/tests/detection/test4/simple.py --- old/requirements-detector-0.4/tests/detection/test4/simple.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/simple.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,10 @@ +from distutils.core import setup + +setup( + name='prospector-test-1', + version='0.0.1', + install_requires=[ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/subscript_assign.py new/requirements-detector-0.6/tests/detection/test4/subscript_assign.py --- old/requirements-detector-0.4/tests/detection/test4/subscript_assign.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/subscript_assign.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,19 @@ +""" +This test is to verify that top level subscript assigns (x[y]) don't break the +parser. For version <=0.1, a subscript assign would break the setup.py AST walker +completely. +""" + +from distutils.core import setup + +something = dict() +something['fish'] = ['a', 'b', 'c'] + +setup( + name='prospector-test-1', + version='0.0.1', + install_requires=( + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ) +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/tuple.py new/requirements-detector-0.6/tests/detection/test4/tuple.py --- old/requirements-detector-0.4/tests/detection/test4/tuple.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/tuple.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,10 @@ +from distutils.core import setup + +setup( + name='prospector-test-1', + version='0.0.1', + install_requires=( + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ) +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/uses_requires.py new/requirements-detector-0.6/tests/detection/test4/uses_requires.py --- old/requirements-detector-0.4/tests/detection/test4/uses_requires.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/uses_requires.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,10 @@ +from distutils.core import setup + +setup( + name='prospector-test-1', + version='0.0.1', + requires=[ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/uses_requires_and_install_requires.py new/requirements-detector-0.6/tests/detection/test4/uses_requires_and_install_requires.py --- old/requirements-detector-0.4/tests/detection/test4/uses_requires_and_install_requires.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/uses_requires_and_install_requires.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,12 @@ +from distutils.core import setup + +setup( + name='prospector-test-1', + version='0.0.1', + requires=[ + 'Django==1.5.0', + ], + install_requires=[ + 'django-gubbins==1.1.2' + ] +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test4/utf8.py new/requirements-detector-0.6/tests/detection/test4/utf8.py --- old/requirements-detector-0.4/tests/detection/test4/utf8.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test4/utf8.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,11 @@ +# -*- coding: UTF-8 -*- +from distutils.core import setup + +setup( + name=u'prospector-test-4-üéø', + version='0.0.1', + install_requires=[ + 'Django==1.5.0', + 'django-gubbins==1.1.2' + ] +) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test5/invalid_requirements.txt new/requirements-detector-0.6/tests/detection/test5/invalid_requirements.txt --- old/requirements-detector-0.4/tests/detection/test5/invalid_requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test5/invalid_requirements.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,5 @@ +<<<<<<< HEAD +django<1.6 +======= +django +>>>>>>> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/detection/test6/requirements.txt new/requirements-detector-0.6/tests/detection/test6/requirements.txt --- old/requirements-detector-0.4/tests/detection/test6/requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/detection/test6/requirements.txt 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,82 @@ +# core framework +uwsgi +flask + +# flask extensions +flask-mail +flask-migrate +flask-oauthlib +flask-script +flask-scrypt +flask-weasyprint +flask-sqlalchemy +#flask-testing +git+git://github.com/jarus/flask-testing.git +flask-jwt +flask-bouncer +flask-restful +flask-marshmallow +flask-assets +flask-collect +awesome-slugify + +# testing +#fake-factory +https://github.com/traumtopf/faker/tarball/master +surrealism +freezegun +selenium +testtools + +# maybe extensions +#restless +#flash-babel +#flask-restless +#flask-assets +#flask-cache +#flask-classy +#flask-debugtoolbar +#flask-googlemaps +#flask-gravatar +#flask-jinjahelpers +#flask-lesscss +#flask-markdown +#flask-moment +#flask-principal +#flask-restdoc +#flask-runner +#flask-user + +# other extensions +#wtforms-alchemy +#sqlalchemy-defaults +#wtforms-components +#wtforms-json + +# testing +#coverage + +# correctness +#pyflakes +#pep8 +#flake8 +#pylint +prospector + +# other stuff +paypalrestsdk +#outputty +pycountry +#certifi +psycopg2 +#raven[flask] # client for sentry (a web application error logger) +git+https://github.com/lazzrek/raven-python.git#egg=raven[flask] +sadisplay==0.3.8dev +isodate +colour-runner +requests +pygeoip + +# webassets filters +rjsmin +cssmin \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/test_detection.py new/requirements-detector-0.6/tests/test_detection.py --- old/requirements-detector-0.4/tests/test_detection.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/test_detection.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,93 @@ +import os +from unittest import TestCase +from requirements_detector.detect import from_requirements_txt, from_requirements_dir, \ + from_requirements_blob, from_setup_py, CouldNotParseRequirements +from requirements_detector.requirement import DetectedRequirement + + +class DependencyDetectionTest(TestCase): + + def _expected(self, *requirements): + return [DetectedRequirement.parse(req) for req in requirements] + + def test_requirements_txt_parsing(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test1/requirements.txt') + dependencies = from_requirements_txt(filepath) + + expected = self._expected( + 'amqp!=1.0.13', + 'Django>=1.5.0', + 'six<1.4,>=1.3.0', + 'South==0.8.2', + ) + + self.assertEqual(expected, sorted(dependencies)) + + def test_requirements_dir_parsing(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test2/requirements') + dependencies = from_requirements_dir(filepath) + + expected = self._expected( + 'amqp==1.0.13', + 'anyjson==0.3.3', + 'Django==1.5.2', + 'South==0.8.2', + ) + + self.assertEqual(expected, sorted(dependencies)) + + def test_requirements_blob_parsing(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test3') + dependencies = from_requirements_blob(filepath) + + expected = self._expected( + 'amqp==1.0.13', + 'anyjson==0.3.3', + 'django-gubbins==1.1.2', + ) + + self.assertEqual(expected, sorted(dependencies)) + + def test_invalid_requirements_txt(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test5/invalid_requirements.txt') + dependencies = from_requirements_txt(filepath) + expected = self._expected('django<1.6', 'django') + self.assertEqual(expected, sorted(dependencies)) + + def test_invalid_requirements_txt(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test6/requirements.txt') + from_requirements_txt(filepath) + + def _test_setup_py(self, setup_py_file, *expected): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test4', setup_py_file) + dependencies = from_setup_py(filepath) + expected = self._expected(*expected) + self.assertEqual(expected, sorted(dependencies)) + + def _test_setup_py_not_parseable(self, setup_py_file): + filepath = os.path.join(os.path.dirname(__file__), 'detection/test4', setup_py_file) + self.assertRaises(CouldNotParseRequirements, from_setup_py, filepath) + + def test_simple_setup_py_parsing(self): + self._test_setup_py('simple.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_setup_py_reqs_defined_in_file_parsing(self): + self._test_setup_py('in_file.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_setup_py_tuple(self): + self._test_setup_py('tuple.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_subscript_assign(self): + self._test_setup_py('subscript_assign.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_utf8_setup_py(self): + self._test_setup_py('utf8.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_requires_setup_py(self): + self._test_setup_py('uses_requires.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_requires_and_install_requires_setup_py(self): + self._test_setup_py('uses_requires_and_install_requires.py', 'Django==1.5.0', 'django-gubbins==1.1.2') + + def test_callable_install_requires(self): + self._test_setup_py_not_parseable('callable.py') \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/test_failure_cases.py new/requirements-detector-0.6/tests/test_failure_cases.py --- old/requirements-detector-0.4/tests/test_failure_cases.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/test_failure_cases.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,18 @@ +import os +from unittest import TestCase +from requirements_detector.detect import from_setup_py, CouldNotParseRequirements + + +class SyntaxErrorTest(TestCase): + + def test_setup_py_syntax_error(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/syntax_error/setup.py') + self.assertRaises(CouldNotParseRequirements, from_setup_py, filepath) + + def test_setup_py_multiline_string(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/syntax_error/setup_multiline_string.py') + from_setup_py(filepath) + + def test_regular_indentation(self): + filepath = os.path.join(os.path.dirname(__file__), 'detection/syntax_error/regular_indentation.py') + from_setup_py(filepath) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tests/test_parsing.py new/requirements-detector-0.6/tests/test_parsing.py --- old/requirements-detector-0.4/tests/test_parsing.py 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tests/test_parsing.py 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,80 @@ + +try: + import urlparse +except ImportError: + # python3 + from urllib import parse as urlparse + +from unittest import TestCase +from requirements_detector.requirement import DetectedRequirement, _parse_egg_name, _strip_fragment + + +class TestRequirementParsing(TestCase): + + def _test(self, requirement, name=None, version_specs=None, url=None): + req = DetectedRequirement.parse(requirement) + self.assertEqual(name, req.name) + if version_specs is None: + self.assertEqual([], req.version_specs) + else: + for spec in version_specs: + self.assertTrue(spec in req.version_specs) + self.assertEqual(url, req.url) + + def test_basic_requirement(self): + self._test('Django', 'django') + self._test('celery', 'celery') + + def test_requirement_with_versions(self): + self._test('Django==1.5.2', 'django', [('==', '1.5.2')]) + self._test('South>0.8', 'south', [('>', '0.8')]) + self._test('django-gubbins!=1.1.1,>1.1', 'django-gubbins', [('!=', '1.1.1'), ('>', '1.1')]) + + def test_relative_file_path(self): + self._test('../somelib', url='../somelib') + + def test_vcs_url(self): + self._test('git+ssh://git@github.com/something/somelib.git', + url='git+ssh://git@github.com/something/somelib.git') + self._test('git+ssh://git@github.com/something/somelib.git#egg=somelib', + name='somelib', url='git+ssh://git@github.com/something/somelib.git') + self._test('git://github.com/peeb/django-mollie-ideal.git#egg=mollie', + name='mollie', url='git+git://github.com/peeb/django-mollie-ideal.git') + + def test_archive_url(self): + self._test('http://example.com/somelib.tar.gz', url='http://example.com/somelib.tar.gz') + self._test('http://example.com/somelib.tar.gz#egg=somelib', name='somelib', + url='http://example.com/somelib.tar.gz') + + def test_editable_relative_path(self): + self._test('-e ../somelib', url='../somelib') + + def test_editable_vcs_url(self): + self._test('--editable git+ssh://git@github.com/something/somelib.git#egg=somelib', + name='somelib', url='git+ssh://git@github.com/something/somelib.git') + + +class TestEggFragmentParsing(TestCase): + + def test_simple(self): + self.assertEqual('somelib', _parse_egg_name('egg=somelib')) + + def test_no_egg_value(self): + self.assertTrue(_parse_egg_name('a=b&c=2') is None) + + def test_no_pairs(self): + self.assertTrue(_parse_egg_name('somelib') is None) + + def test_first_egg_val(self): + self.assertEqual('somelib', _parse_egg_name('egg=somelib&egg=anotherlib')) + + def test_multiple_fragment_values(self): + self.assertEqual('somelib', _parse_egg_name('a=1&egg=somelib&b=2')) + + +class TestFragmentStripping(TestCase): + + def test_stripping(self): + url = 'http://example.com/index.html?a=b&c=2#some_fragment' + parts = urlparse.urlparse(url) + self.assertEqual('http://example.com/index.html?a=b&c=2', _strip_fragment(parts)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/requirements-detector-0.4/tox.ini new/requirements-detector-0.6/tox.ini --- old/requirements-detector-0.4/tox.ini 1970-01-01 01:00:00.000000000 +0100 +++ new/requirements-detector-0.6/tox.ini 2018-07-22 10:24:34.000000000 +0200 @@ -0,0 +1,6 @@ +[tox] +envlist = py26,py27,py33,py34,py35 + +[testenv] +deps=nose +commands=nosetests -s
participants (1)
-
root