)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"f2a856ef358d6e95d00988c0e84d56bb18bfae7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"71d53fb1_c2255baa","updated":"2025-07-08 22:27:24.000000000","message":"Just some questions, observations, and nits inline. I don\u0027t think any one of them deserve a new patchset on their own.","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"}],"pbr/tests/__init__.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"f2a856ef358d6e95d00988c0e84d56bb18bfae7d","unresolved":true,"context_lines":[{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from __future__ import absolute_import"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"54b7e963_ac8c1a03","line":14,"updated":"2025-07-08 22:27:24.000000000","message":"We import os and testscenarios below. Both of which I doubt import pbr related things. Is this necessary for test loading instead?","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fbf19fab831cff454ce7bf22e029481d6f0145a0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from __future__ import absolute_import"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"823c7aff_5c823fe2","line":14,"in_reply_to":"54b7e963_ac8c1a03","updated":"2025-07-09 12:15:31.000000000","message":"I\u0027ve done this for every file rather than trying to figure out where it\u0027s useful and where it\u0027s not. The non-absolute import behavior is a serious footgun.\n\nI\u0027ll call it out in the commit message.","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"}],"pbr/tests/fixtures.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"f2a856ef358d6e95d00988c0e84d56bb18bfae7d","unresolved":true,"context_lines":[{"line_number":54,"context_line":"PBR_ROOT \u003d os.path.abspath(os.path.join(__file__, \u0027..\u0027, \u0027..\u0027, \u0027..\u0027))"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class Chdir(fixtures.Fixture):"},{"line_number":58,"context_line":"    \"\"\"Dive into given directory and return back on cleanup."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    :ivar path: The target directory."}],"source_content_type":"text/x-python","patch_set":5,"id":"c545f901_d5e383fb","line":57,"updated":"2025-07-08 22:27:24.000000000","message":"For other reviewers DiveDir was renamed to Chdir.","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"410c221472e12259f47c6679bd253be002e20b9a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"PBR_ROOT \u003d os.path.abspath(os.path.join(__file__, \u0027..\u0027, \u0027..\u0027, \u0027..\u0027))"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class Chdir(fixtures.Fixture):"},{"line_number":58,"context_line":"    \"\"\"Dive into given directory and return back on cleanup."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    :ivar path: The target directory."}],"source_content_type":"text/x-python","patch_set":5,"id":"e729f132_e942ac6a","line":57,"in_reply_to":"c545f901_d5e383fb","updated":"2025-07-09 14:01:06.000000000","message":"Acknowledged","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"f2a856ef358d6e95d00988c0e84d56bb18bfae7d","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    :attr returncode: The return code of the process."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    Note that stdout and stderr are decoded from the bytestrings subprocess"},{"line_number":80,"context_line":"    returns using error\u003dreplace."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def __init__(self, label, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"20ce1bf1_e437c548","line":80,"updated":"2025-07-08 22:27:24.000000000","message":"Another note (and this is not new behavior so I don\u0027t think we actually need to change this now) is that we only capture the stdout/stderr/returncode data if the process returns non zero. Otherwise we attache cleanups that remove the attributes. I think cleaning the data up is generally a good thing as it keeps noise in the test framework down. We may just want to call out the behavior in this docstring.","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"410c221472e12259f47c6679bd253be002e20b9a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    :attr returncode: The return code of the process."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    Note that stdout and stderr are decoded from the bytestrings subprocess"},{"line_number":80,"context_line":"    returns using error\u003dreplace."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def __init__(self, label, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1c488d2c_be3fc642","line":80,"in_reply_to":"20ce1bf1_e437c548","updated":"2025-07-09 14:01:06.000000000","message":"Done","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"}],"pbr/tests/test_integration.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"f2a856ef358d6e95d00988c0e84d56bb18bfae7d","unresolved":true,"context_lines":[{"line_number":37,"context_line":"WHEELHOUSE \u003d os.environ.get(\u0027WHEELHOUSE\u0027, \u0027\u0027)"},{"line_number":38,"context_line":"PIP_CMD \u003d [\u0027-m\u0027, \u0027pip\u0027] + PIPFLAGS + [\u0027install\u0027, \u0027-f\u0027, WHEELHOUSE]"},{"line_number":39,"context_line":"PROJECTS \u003d shlex.split(os.environ.get(\u0027PROJECTS\u0027, \u0027\u0027))"},{"line_number":40,"context_line":"PBR_ROOT \u003d os.path.abspath(os.path.join(__file__, \u0027..\u0027, \u0027..\u0027, \u0027..\u0027))"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def all_projects():"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff2e31de_2f0aec9f","line":40,"updated":"2025-07-08 22:27:24.000000000","message":"Nit PBR_ROOT was cleaned up in another file and moved into fixtures. Not sure if we want to drop the definition here and use a consistent definition defined in fixtures.","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"410c221472e12259f47c6679bd253be002e20b9a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"WHEELHOUSE \u003d os.environ.get(\u0027WHEELHOUSE\u0027, \u0027\u0027)"},{"line_number":38,"context_line":"PIP_CMD \u003d [\u0027-m\u0027, \u0027pip\u0027] + PIPFLAGS + [\u0027install\u0027, \u0027-f\u0027, WHEELHOUSE]"},{"line_number":39,"context_line":"PROJECTS \u003d shlex.split(os.environ.get(\u0027PROJECTS\u0027, \u0027\u0027))"},{"line_number":40,"context_line":"PBR_ROOT \u003d os.path.abspath(os.path.join(__file__, \u0027..\u0027, \u0027..\u0027, \u0027..\u0027))"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def all_projects():"}],"source_content_type":"text/x-python","patch_set":5,"id":"d382d0ce_2a63a9ea","line":40,"in_reply_to":"ff2e31de_2f0aec9f","updated":"2025-07-09 14:01:06.000000000","message":"Done","commit_id":"4812b63b3d9fec7d68c8298af06e5c180e20873f"}]}
