)]}'
{"pbr/tests/test_integration.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"53eea06f2d3e0705d3b8cc608ecb1f6aaa10e9aa","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        (\u0027pip-6.0\u0027, {\u0027version\u0027: \u0027pip\u003e\u003d6.0,\u003c6.1\u0027}),"},{"line_number":237,"context_line":"        (\u0027pip-6.1\u0027, {\u0027version\u0027: \u0027pip\u003e\u003d6.1,\u003c6.2\u0027}),"},{"line_number":238,"context_line":"        (\u0027pip-7.0\u0027, {\u0027version\u0027: \u0027pip\u003e\u003d7.0,\u003c7.1\u0027}),"},{"line_number":239,"context_line":"        (\u0027pip-7.1\u0027, {\u0027version\u0027: \u0027pip\u003e\u003d7.1,\u003c7.2\u0027}),"},{"line_number":240,"context_line":"    ]"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    scenarios \u003d testscenarios.multiply_scenarios(["}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_aa30389f","line":239,"updated":"2015-12-08 03:11:25.000000000","message":"lets test 1.5, 6, latest","commit_id":"c12b64b81b70610428ca4599dee3c445e2951b02"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"53eea06f2d3e0705d3b8cc608ecb1f6aaa10e9aa","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            \u0027setup_args\u0027: [\u0027setup.py\u0027, \u0027bdist_wheel\u0027, \u0027sdist\u0027], \u0027warn\u0027: True,"},{"line_number":255,"context_line":"            \u0027markers_edited\u0027: False})"},{"line_number":256,"context_line":"    ], ["},{"line_number":257,"context_line":"        (\u0027setup\u0027, {\u0027setup\u0027: True})])"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def make_pkg(self, rootdir\u003dNone):"},{"line_number":260,"context_line":"        pkg_dir \u003d self.useFixture(fixtures.TempDir(rootdir\u003drootdir)).path"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_6aeb30b1","line":257,"updated":"2015-12-08 03:11:25.000000000","message":"The matrix I think we need:\npip 1.5x/1.6/latest is one dimension\n\noperation is a second dimension: one of develop / install-sdist / install-wheel - which we can test either by *doing* via pip, or by calling setup.py ourselves.\n\nIf we don\u0027t test via pip, we depend on having correctly understood where pip changes its behaviour.\n\ne.g.:\nthree packages, a, b, c, a depends on b with python_version \u003d\u003d \u00271.2\u0027 and a on c with python_version !\u003d \u00271.2\u0027.\n\nsdist them all and put them in a dir.\n\nThen for each of the pip versions we install a -f thatdir --no-index, and check we got a + c.\n\nThen we build wheels of all three, put them in the same dir, and repeat for the same pip versions.\n\nEfficiency wise - testresources + fixture + secenarios (one per pip version), and two test cases (one sdists, one wheels) should be fine, but I have to fix testresources first, since its not optimising properly on unittest2.","commit_id":"c12b64b81b70610428ca4599dee3c445e2951b02"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"class CreatePackages(fixtures.Fixture):"},{"line_number":94,"context_line":"    \"\"\"Creates packages from dict with defaults"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        :param packages: a dict where the keys are the package name and a"},{"line_number":97,"context_line":"        value that is a second dict that may be empty, containing keys of"},{"line_number":98,"context_line":"        filenames and a string value of the contents."},{"line_number":99,"context_line":"        {\u0027package-a\u0027: {\u0027requirements.txt\u0027: \u0027string\u0027, \u0027setup.cfg\u0027: \u0027string\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_0d13f40e","line":96,"updated":"2015-12-09 20:48:38.000000000","message":"This should be on __init__.","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \u0027setup.cfg\u0027: textwrap.dedent(six.u(\"\"\"\\"},{"line_number":112,"context_line":"            [metadata]"},{"line_number":113,"context_line":"            name \u003d {pkg_name}"},{"line_number":114,"context_line":"        \"\"\"))"},{"line_number":115,"context_line":"    }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, packages):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_4dbedcd5","line":114,"updated":"2015-12-09 20:48:38.000000000","message":"I don\u0027t think you need the six.u here, since it will work on 2.x and 3.x with just plain strings","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        path_dir, _ \u003d os.path.split(path)"},{"line_number":123,"context_line":"        if not os.path.exists(path_dir):"},{"line_number":124,"context_line":"            if path_dir.startswith(directory):"},{"line_number":125,"context_line":"                os.mkdirs(path_dir)"},{"line_number":126,"context_line":"            else:"},{"line_number":127,"context_line":"                raise ValueError"},{"line_number":128,"context_line":"        with open(path, \u0027wt\u0027) as f:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_085be22f","line":125,"updated":"2015-12-09 20:48:38.000000000","message":"os.makedirs surely? - if passing locally this is either dead or speculative code; if its not exercised perhaps remove it.","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6036bab728b0ce34b71295645f1c3ef336fa1e1b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            file path to aid diagnostics in the case of failures."},{"line_number":68,"context_line":"        :param install_pbr: By default pbr is installed inside the"},{"line_number":69,"context_line":"            venv. Setting this to false will disable that."},{"line_number":70,"context_line":"        :param integration: By defualt False, tries to configure a"},{"line_number":71,"context_line":"            create venv in a manner resonable for non-integraiton"},{"line_number":72,"context_line":"            tests.  If true uses environment variables to configure."},{"line_number":73,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_54fe1d6c","line":70,"updated":"2015-12-10 23:27:12.000000000","message":"If you have to respin anyways there is a minor typo in spelling of \"default\". Not a -1.","commit_id":"f648d91acefcf4b635c5355757415fe656342f7d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"fed8dfbbaec52f690e4a7e65bfb6d3296eeb8802","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        python \u003d os.path.join(path, \u0027bin\u0027, \u0027python\u0027)"},{"line_number":82,"context_line":"        command \u003d [python] + PIP_CMD + [\u0027-U\u0027]"},{"line_number":83,"context_line":"        modules \u003d []"},{"line_number":84,"context_line":"        if self.integration:"},{"line_number":85,"context_line":"            modules.extend([PIPVERSION, \u0027wheel\u0027])"},{"line_number":86,"context_line":"        if self.integration:"},{"line_number":87,"context_line":"            pbr_version \u003d PBRVERSION"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_2aca086f","line":84,"updated":"2015-12-10 23:43:54.000000000","message":"so integration means specifically \n - install PIPVERSION\n - install wheel\n - install PBRVERSION\n\nand for the new test you need\n - PBRROOT\n\non its own.\n\nRather than having things at a distance, lets do this:\n\n def ... modules\u003d()\n\n ...\n command.extend(modules)\n\nAnd then just pass the right modules when you use it.","commit_id":"f648d91acefcf4b635c5355757415fe656342f7d"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6036bab728b0ce34b71295645f1c3ef336fa1e1b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        modules \u003d []"},{"line_number":84,"context_line":"        if self.integration:"},{"line_number":85,"context_line":"            modules.extend([PIPVERSION, \u0027wheel\u0027])"},{"line_number":86,"context_line":"        if self.integration:"},{"line_number":87,"context_line":"            pbr_version \u003d PBRVERSION"},{"line_number":88,"context_line":"        else:"},{"line_number":89,"context_line":"            pbr_version \u003d PBR_ROOT"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_343b513a","line":86,"updated":"2015-12-10 23:27:12.000000000","message":"These two if self.integrations can be collapsed. Not a -1.","commit_id":"f648d91acefcf4b635c5355757415fe656342f7d"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"fed8dfbbaec52f690e4a7e65bfb6d3296eeb8802","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        if self.integration:"},{"line_number":87,"context_line":"            pbr_version \u003d PBRVERSION"},{"line_number":88,"context_line":"        else:"},{"line_number":89,"context_line":"            pbr_version \u003d PBR_ROOT"},{"line_number":90,"context_line":"        if self._install_pbr:"},{"line_number":91,"context_line":"            modules.append(pbr_version)"},{"line_number":92,"context_line":"        if len(modules) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_2a47681e","line":89,"updated":"2015-12-10 23:43:54.000000000","message":"Because https://github.com/pypa/pip/issues/3118 - this should be\n file:// + PBR_ROOT + #egg_name\u003dpbr, or however thats spelt.","commit_id":"f648d91acefcf4b635c5355757415fe656342f7d"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6036bab728b0ce34b71295645f1c3ef336fa1e1b","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        pkg_dirs \u003d self.useFixture(CreatePackages(pkgs)).package_dirs"},{"line_number":246,"context_line":"        temp_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":247,"context_line":"        repo_dir \u003d os.path.join(temp_dir, \u0027repo\u0027)"},{"line_number":248,"context_line":"        venv \u003d self.useFixture(Venv(\u0027markers\u0027))"},{"line_number":249,"context_line":"        bin_python \u003d venv.python"},{"line_number":250,"context_line":"        os.mkdir(repo_dir)"},{"line_number":251,"context_line":"        for pkg in pkg_dirs:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_5444dd72","line":248,"updated":"2015-12-10 23:27:12.000000000","message":"This is an integration test case based on the skip but we don\u0027t pass the integration flag to Venv here because we manage the pip installs directly based on the scenario. Might be worth a comment on that.\n\nNot a -1.","commit_id":"f648d91acefcf4b635c5355757415fe656342f7d"}],"pbr/tests/test_packaging.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"304b800f9ba00434fe41926578c2aeb995abe117","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        }"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        self._run_cmd(sys.executable, (\u0027setup.py\u0027, \u0027egg_info\u0027),"},{"line_number":560,"context_line":"                      allow_fail\u003dFalse, cwd\u003dpkg_dir)"},{"line_number":561,"context_line":"        egg_info \u003d os.path.join(pkg_dir, \u0027test_reqparse.egg-info\u0027)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        requires_txt \u003d os.path.join(egg_info, \u0027requires.txt\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_7b71c4a7","line":560,"updated":"2015-12-11 01:07:43.000000000","message":"So this probably wants to run in a venv with wheel installed, and use bdist_wheel to trigger bypassing the new evaluation code - then we will be able to preserve the intent of the original test.","commit_id":"f648d91acefcf4b635c5355757415fe656342f7d"}],"pbr/util.py":[{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"03273b36d768dfaa1a7ff559bea115c686e26174","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            else:"},{"line_number":424,"context_line":"                extras_key \u003d req_group"},{"line_number":425,"context_line":"            extras_require.setdefault(extras_key, []).append(requirement)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    script_args \u003d [arg for arg in script_args if not arg.startswith(\u0027--\u0027)]"},{"line_number":428,"context_line":"    if \u0027bdist_wheel\u0027 not in script_args:"},{"line_number":429,"context_line":"        for req in list(extras_require.keys()):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_e702f90a","line":426,"updated":"2015-12-06 22:41:33.000000000","message":"Extras with markers need handling too","commit_id":"c12b64b81b70610428ca4599dee3c445e2951b02"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    return ret"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def cfg_to_args(path\u003d\u0027setup.cfg\u0027, script_args\u003d[]):"},{"line_number":192,"context_line":"    \"\"\" Distutils2 to distutils1 compatibility util."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        This method uses an existing setup.cfg to generate a dictionary of"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_ad4ae025","line":191,"updated":"2015-12-09 20:48:38.000000000","message":"This should be either None or () - an immutable data type. Because Python.","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    return kwargs"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"def setup_cfg_to_setup_kwargs(config, script_args\u003d[]):"},{"line_number":278,"context_line":"    \"\"\"Processes the setup.cfg options and converts them to arguments accepted"},{"line_number":279,"context_line":"    by setuptools\u0027 setup() function."},{"line_number":280,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_6d54f8c9","line":277,"updated":"2015-12-09 20:48:38.000000000","message":"Ditto.","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        for requirement, env_marker in all_requirements[req_group]:"},{"line_number":421,"context_line":"            if env_marker:"},{"line_number":422,"context_line":"                extras_key \u003d \u0027%s:(%s)\u0027 % (req_group, env_marker)"},{"line_number":423,"context_line":"                if \u0027bdist_wheel\u0027 not in script_args:"},{"line_number":424,"context_line":"                    try:"},{"line_number":425,"context_line":"                        if pkg_resources.evaluate_marker(\u0027(%s)\u0027 % env_marker):"},{"line_number":426,"context_line":"                            extras_key \u003d req_group"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_0d5c54ec","line":423,"updated":"2015-12-09 20:48:38.000000000","message":"Please and some commentary on why :)","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f5b5394245b29cc02c760d6910219b57c8f132c3","unresolved":false,"context_lines":[{"line_number":424,"context_line":"                    try:"},{"line_number":425,"context_line":"                        if pkg_resources.evaluate_marker(\u0027(%s)\u0027 % env_marker):"},{"line_number":426,"context_line":"                            extras_key \u003d req_group"},{"line_number":427,"context_line":"                    except SyntaxError:"},{"line_number":428,"context_line":"                        pass"},{"line_number":429,"context_line":"            else:"},{"line_number":430,"context_line":"                extras_key \u003d req_group"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_cd6e4c96","line":427,"updated":"2015-12-09 20:48:38.000000000","message":"wait, what?","commit_id":"c9771f71580f8a3fddd11f77137c905553946133"}]}
