)]}'
{".testr.conf":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"test_command\u003dOS_STDOUT_CAPTURE\u003d0 OS_STDERR_CAPTURE\u003d0 OS_TEST_TIMEOUT\u003d60 ${PYTHON:-python} -m subunit.run discover -t ./ ./nova/tests $LISTOPT $IDOPTION"},{"line_number":3,"context_line":"test_id_option\u003d--load-list $IDFILE"},{"line_number":4,"context_line":"test_list_option\u003d--list"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAM3%2F%2FhGc%3D","line":2,"updated":"2013-01-17 17:38:28.000000000","message":"This is left-over from your debug. Please don\u0027t enable massive stdout/stderr interleaved output for everyone :D","commit_id":"aed7f1b63c94b41eae2473f3aa4335b986ed489c"}],"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added test case and support functions for CI opportunistic testing using"},{"line_number":8,"context_line":"a PostgreSQL database, as part of our postgresql as a first class citizen"},{"line_number":9,"context_line":"effort."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Fixes:"},{"line_number":12,"context_line":"bug 1084567"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2FhGk%3D","line":9,"updated":"2013-01-17 17:38:28.000000000","message":"You need a short first line, then a space, then the longer description. That\u0027s git/gerrit convention, and definitely openstack convention.","commit_id":"aed7f1b63c94b41eae2473f3aa4335b986ed489c"}],"nova/tests/test_migrations.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        backend \u003d \"postgresql+psycopg2\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    return (\"%(backend)s://%(user)s:%(passwd)s@localhost/%(database)s\""},{"line_number":57,"context_line":"            % locals())"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def _is_backend_avail(backend,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhGY%3D","side":"PARENT","line":57,"updated":"2013-01-17 17:38:28.000000000","message":"Wasn\u0027t this fine as it was?","commit_id":"52fe25a5281a50a5e4c1ff093ce9ed966241a3d7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        connection \u003d engine.connect()"},{"line_number":73,"context_line":"    except Exception:"},{"line_number":74,"context_line":"        # intentionally catch all to handle exceptions even if we don\u0027t"},{"line_number":75,"context_line":"        # have any backend code loaded."},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":"    else:"},{"line_number":78,"context_line":"        connection.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhGQ%3D","side":"PARENT","line":75,"updated":"2013-01-17 17:38:28.000000000","message":"This too. Doesn\u0027t this work for postgres as-is?","commit_id":"52fe25a5281a50a5e4c1ff093ce9ed966241a3d7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        for key, engine in self.engines.items():"},{"line_number":153,"context_line":"            conn_string \u003d self.test_databases[key]"},{"line_number":154,"context_line":"            conn_pieces \u003d urlparse.urlparse(conn_string)"},{"line_number":155,"context_line":"            engine.dispose()"},{"line_number":156,"context_line":"            if conn_string.startswith(\u0027sqlite\u0027):"},{"line_number":157,"context_line":"                # We can just delete the SQLite database, which is"},{"line_number":158,"context_line":"                # the easiest and cleanest solution"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhFw%3D","side":"PARENT","line":155,"updated":"2013-01-17 17:38:28.000000000","message":"This affects all of the engines. Did you really want to do this?","commit_id":"52fe25a5281a50a5e4c1ff093ce9ed966241a3d7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                database \u003d conn_pieces.path.strip(\u0027/\u0027)"},{"line_number":184,"context_line":"                loc_pieces \u003d conn_pieces.netloc.split(\u0027@\u0027)"},{"line_number":185,"context_line":"                host \u003d loc_pieces[1]"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"                auth_pieces \u003d loc_pieces[0].split(\u0027:\u0027)"},{"line_number":188,"context_line":"                user \u003d auth_pieces[0]"},{"line_number":189,"context_line":"                password \u003d \"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhF0%3D","side":"PARENT","line":186,"updated":"2013-01-17 17:38:28.000000000","message":"Please don\u0027t change random whitespace.","commit_id":"52fe25a5281a50a5e4c1ff093ce9ed966241a3d7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                \"SELECT column_type FROM INFORMATION_SCHEMA.COLUMNS \""},{"line_number":346,"context_line":"                \"WHERE table_name\u003d\u0027provider_fw_rules\u0027 \""},{"line_number":347,"context_line":"                \"AND table_schema\u003d\u0027openstack_citest\u0027 \""},{"line_number":348,"context_line":"                \"AND column_name\u003d\u0027cidr\u0027\").scalar())"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def _walk_versions(self, engine\u003dNone, snake_walk\u003dFalse, downgrade\u003dTrue):"},{"line_number":351,"context_line":"        # Determine latest version script from the repo, then"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhFc%3D","side":"PARENT","line":348,"updated":"2013-01-17 17:38:28.000000000","message":"Already talked to you privately about this merge issue.","commit_id":"52fe25a5281a50a5e4c1ff093ce9ed966241a3d7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        return _is_mysql_avail()"},{"line_number":104,"context_line":"    return present.lower() in (\u0027\u0027, \u0027true\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  "},{"line_number":107,"context_line":"def _have_postgresql():"},{"line_number":108,"context_line":"    present \u003d os.environ.get(\u0027NOVA_TEST_POSTGRESQL_PRESENT\u0027)"},{"line_number":109,"context_line":"    if present is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhGE%3D","line":106,"updated":"2013-01-17 17:38:28.000000000","message":"Whitespace. Please run all the tests before submitting.","commit_id":"aed7f1b63c94b41eae2473f3aa4335b986ed489c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self._reset_databases()"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def tearDown(self):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # We destroy the test data store between each test case,"},{"line_number":161,"context_line":"        # and recreate it, which ensures that we have no side-effects"},{"line_number":162,"context_line":"        # from the tests"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhGA%3D","line":159,"updated":"2013-01-17 17:38:28.000000000","message":"Please don\u0027t change random whitespace.","commit_id":"aed7f1b63c94b41eae2473f3aa4335b986ed489c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                # venv using .pgpass authentication, changed to "},{"line_number":221,"context_line":"                # PGPASSWORD environment variable which is no longer "},{"line_number":222,"context_line":"                # planned to be deprecated "},{"line_number":223,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"                # note(boris-42): We must create and drop database, we can\u0027t"},{"line_number":226,"context_line":"                # drop database wich we have connected to, so for such"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhFo%3D","line":223,"updated":"2013-01-17 17:38:28.000000000","message":"I\u0027d like to get Boris\u0027 read on why it wasn\u0027t working, since I think he added this just a month or so ago.","commit_id":"aed7f1b63c94b41eae2473f3aa4335b986ed489c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                sql \u003d (\"select pg_terminate_backend(procpid) from \""},{"line_number":237,"context_line":"                       \"pg_stat_activity where procpid \u003c\u003e pg_backend_pid();\")"},{"line_number":238,"context_line":"                dropconnections \u003d sqlcmd % locals()"},{"line_number":239,"context_line":"                execute_cmd(dropconnections)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_walk_versions(self):"},{"line_number":242,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FhFk%3D","line":239,"updated":"2013-01-17 17:38:28.000000000","message":"Is this necessary? I assume this means you\u0027re kicking out any existing connections. Doesn\u0027t the need for this (if it\u0027s necessary) indicate a connection leak somewhere?","commit_id":"aed7f1b63c94b41eae2473f3aa4335b986ed489c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c11a414afc1590dd3b9ac18c6218089f36d1fe69","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                #sql \u003d (\"select pg_terminate_backend(procpid) from \""},{"line_number":223,"context_line":"                #       \"pg_stat_activity where procpid \u003c\u003e pg_backend_pid();\")"},{"line_number":224,"context_line":"                #dropconnections \u003d sqlcmd % locals()"},{"line_number":225,"context_line":"                #execute_cmd(dropconnections)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_walk_versions(self):"},{"line_number":228,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fgyc%3D","line":225,"updated":"2013-01-17 20:26:45.000000000","message":"It\u0027s bad practice to include commented-out code. Either it\u0027s useful, conditionally-used, or a comment about why it might be used for debugging or something.","commit_id":"cdd543021d1a14262d2d80afc5e767321545f99c"},{"author":{"_account_id":5660,"name":"Kurt Taylor","email":"kurt.r.taylor@gmail.com","username":"krtaylor"},"change_message_id":"e92777454878cfa7dc4b1371e1ea3cd7a970e3c7","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                # venv using .pgpass authentication, changed to"},{"line_number":203,"context_line":"                # PGPASSWORD environment variable which is no longer"},{"line_number":204,"context_line":"                # planned to be deprecated"},{"line_number":205,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"},{"line_number":206,"context_line":"                # note(boris-42): We must create and drop database, we can\u0027t"},{"line_number":207,"context_line":"                # drop database wich we have connected to, so for such"},{"line_number":208,"context_line":"                # operations there is a special database template1."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fgs0%3D","line":205,"updated":"2013-01-17 21:25:21.000000000","message":"Creating .pgpass never worked for me running the test in a virtual environment. Boris, do you know why?\n\nInitially, I tired to make the .pgpass method work, because I saw in the docs that the env var was deprecated. But, the env var is now removed from being deprecated. It works great and doesn\u0027t have any possible security problems given that this is a test environment.","commit_id":"d1e4b5551e4a61fac9221e107d9af7f34f2cf5dc"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b8ff4c188d316818b152a540c0f37baac0eacc40","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                # venv using .pgpass authentication, changed to"},{"line_number":203,"context_line":"                # PGPASSWORD environment variable which is no longer"},{"line_number":204,"context_line":"                # planned to be deprecated"},{"line_number":205,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"},{"line_number":206,"context_line":"                # note(boris-42): We must create and drop database, we can\u0027t"},{"line_number":207,"context_line":"                # drop database wich we have connected to, so for such"},{"line_number":208,"context_line":"                # operations there is a special database template1."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FgrI%3D","line":205,"in_reply_to":"AAAAM3%2F%2Fgs0%3D","updated":"2013-01-17 21:38:00.000000000","message":"I haven\u0027t any problem with .pgpass\n\nThis solution looks little bit cleaner and you\u0027re right there is no need to think about security in this case.\n\nBut I think if you chose this solution  you should  unset \u0027PGPASSWORD\u0027 after all tests.","commit_id":"d1e4b5551e4a61fac9221e107d9af7f34f2cf5dc"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d7de1983a52bc6b8e34206b982c381ce7c01ce99","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # venv using .pgpass authentication, changed to"},{"line_number":201,"context_line":"                # PGPASSWORD environment variable which is no longer"},{"line_number":202,"context_line":"                # planned to be deprecated"},{"line_number":203,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"},{"line_number":204,"context_line":"                # note(boris-42): We must create and drop database, we can\u0027t"},{"line_number":205,"context_line":"                # drop database which we have connected to, so for such"},{"line_number":206,"context_line":"                # operations there is a special database template1."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FNtk%3D","line":203,"updated":"2013-02-01 21:50:56.000000000","message":"probably you should added to env PGUSER also?","commit_id":"7ff51df9322ff8a49f42e5ce992f7e001be4346f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2c2f243bcc33b29c0a743873a3670bb798b8c7a1","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # venv using .pgpass authentication, changed to"},{"line_number":201,"context_line":"                # PGPASSWORD environment variable which is no longer"},{"line_number":202,"context_line":"                # planned to be deprecated"},{"line_number":203,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"},{"line_number":204,"context_line":"                # note(boris-42): We must create and drop database, we can\u0027t"},{"line_number":205,"context_line":"                # drop database which we have connected to, so for such"},{"line_number":206,"context_line":"                # operations there is a special database template1."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FNtU%3D","line":203,"in_reply_to":"AAAAM3%2F%2FNtk%3D","updated":"2013-02-01 21:51:37.000000000","message":"typo: add*","commit_id":"7ff51df9322ff8a49f42e5ce992f7e001be4346f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c091ead45981a6bbea8046af5d0dde084619c747","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        connection.close()"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def test_postgresql_opportunistically(self):"},{"line_number":265,"context_line":"        # Test postgresql database migration walk"},{"line_number":266,"context_line":"        if not _is_backend_avail(\u0027postgres\u0027):"},{"line_number":267,"context_line":"            self.skipTest(\"postgresql not available\")"},{"line_number":268,"context_line":"        # add this to the global lists to make reset work with it, it\u0027s removed"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FNsw%3D","line":265,"updated":"2013-02-01 21:55:41.000000000","message":"Also I think that the env[\u0027PGPASSWORD\u0027] is empty here. (215 line)","commit_id":"7ff51df9322ff8a49f42e5ce992f7e001be4346f"}],"tools/pip-requires":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"920009f69aaceeb61ec412687cac8fc32f390e6c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"python-glanceclient\u003e\u003d0.5.0,\u003c2"},{"line_number":26,"context_line":"python-keystoneclient\u003e\u003d0.2.0"},{"line_number":27,"context_line":"stevedore\u003e\u003d0.7"},{"line_number":28,"context_line":"websockify"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAM3%2F%2FhFM%3D","side":"PARENT","line":28,"updated":"2013-01-17 17:38:28.000000000","message":"Same here, you copied in an old version of a file and nuked this.","commit_id":"52fe25a5281a50a5e4c1ff093ce9ed966241a3d7"}]}
