)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"10bed0cf219c89916ec3aeb574f7781433d806c0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lars Kellogg-Stedman \u003clars@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-06 16:58:38 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add stack-list-ouputs and stack-get-output"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the \"output-list\" and \"output-get\" commands to heat."},{"line_number":10,"context_line":"The first outputs a list of output_keys on stdout, and the second prints"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F9s2s%3D","line":7,"updated":"2013-12-07 00:09:35.000000000","message":"Typo \"ouputs\" but even more I think it should be output-list and output-get (not stack-list-output or stack-get-output)  as you have in the detail commit message below and what actually is getting added with the patch.","commit_id":"4b1f3a79a0ea08fa05e7bd50be1d96ff8ee56944"}],"doc/source/man/heat.rst":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"7922c8f6d6b4e64c12978f73b2f6d5618b3f8525","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Get the value of a single output::"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    heat output-get \u003cstack name\u003e \u003coutput key\u003e"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Delete a stack::"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAATn%2F9gq0%3D","line":74,"updated":"2013-12-10 19:35:37.000000000","message":"this should probably be output-show just to use a consistent verb with other commands","commit_id":"77c6de567d872a04faa3fdd3f3bf2ebdebe6c492"}],"heatclient/tests/test_shell.py":[{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"4b56e771165b304528ed32fd5a552fa87cb0d976","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        v1client.Client.json_request("},{"line_number":507,"context_line":"            \u0027GET\u0027, \u0027/stacks/teststack/1\u0027).AndReturn((resp, resp_dict))"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        self.m.ReplayAll()"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        list_text \u003d self.shell(\u0027output-list teststack/1\u0027)"},{"line_number":512,"context_line":"        for r in [\u0027output1\u0027, \u0027output2\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9npA%3D","line":509,"updated":"2013-12-09 16:01:44.000000000","message":"resp_dict (and actually line 482 to 509) repeats in all three test functions, which is unnecessary IMO. Can you please make a generic function with as much as possible code there and use it? thanks!","commit_id":"f5cc2eea09eb3fd65d43afbe2530bc6e73afa789"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"7922c8f6d6b4e64c12978f73b2f6d5618b3f8525","unresolved":false,"context_lines":[{"line_number":522,"context_line":"    def test_output_get_json(self):"},{"line_number":523,"context_line":"        self._output_fake_response()"},{"line_number":524,"context_line":"        list_text \u003d self.shell(\u0027output-get teststack/1 output2\u0027)"},{"line_number":525,"context_line":"        assert(isinstance(json.loads(list_text), list))"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def test_template_show_cfn(self):"},{"line_number":528,"context_line":"        self._script_keystone_client()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9gog%3D","line":525,"updated":"2013-12-10 19:35:37.000000000","message":"You could do an assertEqual with actual list contents here:\n\nself.assertEqual(json.loads(list_text), resp_dict[\u0027stack\u0027][\u0027outputs\u0027])","commit_id":"77c6de567d872a04faa3fdd3f3bf2ebdebe6c492"}],"heatclient/v1/shell.py":[{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"10bed0cf219c89916ec3aeb574f7781433d806c0","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    try:"},{"line_number":198,"context_line":"        stack \u003d hc.stacks.get(**fields)"},{"line_number":199,"context_line":"    except exc.HTTPNotFound:"},{"line_number":200,"context_line":"        raise exc.CommandError(\u0027Stack not found: %s\u0027 % args.id)"},{"line_number":201,"context_line":"    else:"},{"line_number":202,"context_line":"        print \u0027\\n\u0027.join([output[\u0027output_key\u0027]"},{"line_number":203,"context_line":"                        for output in stack.to_dict()[\u0027outputs\u0027]])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9s2Q%3D","line":200,"updated":"2013-12-07 00:09:35.000000000","message":"Here and error messages above, suggest to enable message translation using _(","commit_id":"4b1f3a79a0ea08fa05e7bd50be1d96ff8ee56944"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"7922c8f6d6b4e64c12978f73b2f6d5618b3f8525","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        for output in outputs:"},{"line_number":177,"context_line":"            if output[\u0027output_key\u0027] \u003d\u003d args.output:"},{"line_number":178,"context_line":"                val \u003d output[\u0027output_value\u0027]"},{"line_number":179,"context_line":"                if isinstance(val, basestring):"},{"line_number":180,"context_line":"                    print val"},{"line_number":181,"context_line":"                else:"},{"line_number":182,"context_line":"                    print utils.json_formatter(val)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9gpU%3D","line":179,"updated":"2013-12-10 19:35:37.000000000","message":"Just to help our python 3 porting efforts this should be six.string_types instead of basestring","commit_id":"77c6de567d872a04faa3fdd3f3bf2ebdebe6c492"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"7922c8f6d6b4e64c12978f73b2f6d5618b3f8525","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    except exc.HTTPNotFound:"},{"line_number":200,"context_line":"        raise exc.CommandError(\u0027Stack not found: %s\u0027 % args.id)"},{"line_number":201,"context_line":"    else:"},{"line_number":202,"context_line":"        print \u0027\\n\u0027.join([output[\u0027output_key\u0027]"},{"line_number":203,"context_line":"                        for output in stack.to_dict()[\u0027outputs\u0027]])"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9gqM%3D","line":202,"updated":"2013-12-10 19:35:37.000000000","message":"This should be formatted as a pretty table until we have a command option to write in some parsable format","commit_id":"77c6de567d872a04faa3fdd3f3bf2ebdebe6c492"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"e4734aa87b9fb0c0e060e0fffa51a550d6be3c14","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        fields \u003d [\u0027output_key\u0027, \u0027description\u0027]"},{"line_number":284,"context_line":"        formatters \u003d {"},{"line_number":285,"context_line":"            \u0027output_key\u0027: lambda x: x[\u0027output_key\u0027],"},{"line_number":286,"context_line":"            \u0027description\u0027: lambda x: x[\u0027description\u0027],"},{"line_number":287,"context_line":"        }"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        utils.print_list(outputs, fields, formatters\u003dformatters)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2B5tQ%3D","line":286,"updated":"2014-02-18 10:04:52.000000000","message":"Hmm, all the lambdas make me think maybe we need a better interface to print_list, but I guess we can clean that up in a future patch.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":8745,"name":"Lars Kellogg-Stedman","email":"lars@redhat.com","username":"lars"},"change_message_id":"1900e316b43529812697f453fb98f93166a3b0f8","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        fields \u003d [\u0027output_key\u0027, \u0027description\u0027]"},{"line_number":284,"context_line":"        formatters \u003d {"},{"line_number":285,"context_line":"            \u0027output_key\u0027: lambda x: x[\u0027output_key\u0027],"},{"line_number":286,"context_line":"            \u0027description\u0027: lambda x: x[\u0027description\u0027],"},{"line_number":287,"context_line":"        }"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        utils.print_list(outputs, fields, formatters\u003dformatters)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Bjhc%3D","line":286,"in_reply_to":"AAAAUX%2F%2B5tQ%3D","updated":"2014-02-20 15:01:48.000000000","message":"Output formatting is kind of ugly right now, yeah.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e02c30589d1c46dcc61494a40ec5be0973a80db1","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        formatters \u003d {"},{"line_number":285,"context_line":"            \u0027output_key\u0027: lambda x: x[\u0027output_key\u0027],"},{"line_number":286,"context_line":"            \u0027description\u0027: lambda x: x[\u0027description\u0027],"},{"line_number":287,"context_line":"        }"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        utils.print_list(outputs, fields, formatters\u003dformatters)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Byug%3D","line":287,"updated":"2014-02-19 01:33:37.000000000","message":"shouldn\u0027t an output list also print the output_value?","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":8745,"name":"Lars Kellogg-Stedman","email":"lars@redhat.com","username":"lars"},"change_message_id":"1900e316b43529812697f453fb98f93166a3b0f8","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        formatters \u003d {"},{"line_number":285,"context_line":"            \u0027output_key\u0027: lambda x: x[\u0027output_key\u0027],"},{"line_number":286,"context_line":"            \u0027description\u0027: lambda x: x[\u0027description\u0027],"},{"line_number":287,"context_line":"        }"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        utils.print_list(outputs, fields, formatters\u003dformatters)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Bjis%3D","line":287,"in_reply_to":"AAAAUX%2F%2Byug%3D","updated":"2014-02-20 15:01:48.000000000","message":"Honestly, I waffled on that.  Introducing output_value into this list makes it substantially harder to parse -- even for human eyes.  My preference is to leave output_value exclusively to output_show.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e02c30589d1c46dcc61494a40ec5be0973a80db1","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cNAME or ID\u003e\u0027,"},{"line_number":293,"context_line":"           help\u003d\u0027Name or ID of stack to update.\u0027)"},{"line_number":294,"context_line":"@utils.arg(\u0027output\u0027, metavar\u003d\u0027\u003cOUTPUT NAME\u003e\u0027,"},{"line_number":295,"context_line":"           help\u003d\u0027Name of an output to display.\u0027)"},{"line_number":296,"context_line":"def do_output_show(hc, args):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Byuc%3D","line":293,"updated":"2014-02-19 01:33:37.000000000","message":"This help is incorrect.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":8745,"name":"Lars Kellogg-Stedman","email":"lars@redhat.com","username":"lars"},"change_message_id":"1900e316b43529812697f453fb98f93166a3b0f8","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cNAME or ID\u003e\u0027,"},{"line_number":293,"context_line":"           help\u003d\u0027Name or ID of stack to update.\u0027)"},{"line_number":294,"context_line":"@utils.arg(\u0027output\u0027, metavar\u003d\u0027\u003cOUTPUT NAME\u003e\u0027,"},{"line_number":295,"context_line":"           help\u003d\u0027Name of an output to display.\u0027)"},{"line_number":296,"context_line":"def do_output_show(hc, args):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2BjtI%3D","line":293,"in_reply_to":"AAAAUX%2F%2Byuc%3D","updated":"2014-02-20 15:01:48.000000000","message":"Good catch.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e02c30589d1c46dcc61494a40ec5be0973a80db1","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                }"},{"line_number":308,"context_line":"                fields \u003d [args.output]"},{"line_number":309,"context_line":"                values \u003d [output[\u0027output_value\u0027]]"},{"line_number":310,"context_line":"                utils.print_list(values, fields, formatters\u003dformatters)"},{"line_number":311,"context_line":"                break"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Byuo%3D","line":310,"updated":"2014-02-19 01:33:37.000000000","message":"I think there is a good case for printing only the raw output_value without any adornment, since the whole point of this call would be to pipe an output_value into some other command.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"},{"author":{"_account_id":8745,"name":"Lars Kellogg-Stedman","email":"lars@redhat.com","username":"lars"},"change_message_id":"1900e316b43529812697f453fb98f93166a3b0f8","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                }"},{"line_number":308,"context_line":"                fields \u003d [args.output]"},{"line_number":309,"context_line":"                values \u003d [output[\u0027output_value\u0027]]"},{"line_number":310,"context_line":"                utils.print_list(values, fields, formatters\u003dformatters)"},{"line_number":311,"context_line":"                break"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2Bjq8%3D","line":310,"in_reply_to":"AAAAUX%2F%2Byuo%3D","updated":"2014-02-20 15:01:48.000000000","message":"Earlier versions of the patch did produce raw output values, but you argued that because everything else was returning tables -- and that parsing prettytable output for values was ugly but common -- this should too.\n\nI\u0027m happy to change it back; it makes more sense to me that way.","commit_id":"8a32d88d83e2ea9f5cefc6ed6e4b1a73abcdeaec"}]}
