)]}'
{"heatclient/tests/test_shell.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"f6566178e2e40f84d985295801e2212c44322740","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        resp_dict \u003d {\"stack\": {"},{"line_number":475,"context_line":"            \"id\": \"1\","},{"line_number":476,"context_line":"            \"stack_name\": \"teststack\","},{"line_number":477,"context_line":"            \"stack_status\": \u0027CREATE_COMPLETE\u0027,"},{"line_number":478,"context_line":"            \"creation_time\": \"2012-10-25T01:58:47Z\""},{"line_number":479,"context_line":"        }}"},{"line_number":480,"context_line":"        resp \u003d fakes.FakeHTTPResponse("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FUtw%3D","line":477,"updated":"2014-01-15 02:06:47.000000000","message":"Why does the state is CREATE_COMPLETE?\n\nAlso I think that you can use fake stacks from fakes.script_heat_list() but no need to create your own resp_dict here.","commit_id":"d919d08c588a7b0e94c696a06d452db47a8f9352"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"d942d626b9cf8286b72c5c77653429c3eae538ba","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        resp_dict \u003d {\"stack\": {"},{"line_number":475,"context_line":"            \"id\": \"1\","},{"line_number":476,"context_line":"            \"stack_name\": \"teststack\","},{"line_number":477,"context_line":"            \"stack_status\": \u0027CREATE_COMPLETE\u0027,"},{"line_number":478,"context_line":"            \"creation_time\": \"2012-10-25T01:58:47Z\""},{"line_number":479,"context_line":"        }}"},{"line_number":480,"context_line":"        resp \u003d fakes.FakeHTTPResponse("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FPqw%3D","line":477,"in_reply_to":"AAAAUH%2F%2FRZo%3D","updated":"2014-01-15 23:28:43.000000000","message":"Can you get some idea from line 686 in this file?","commit_id":"d919d08c588a7b0e94c696a06d452db47a8f9352"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"d0913f0a3ac6c1fc19ba9ac1a44a89ad67356043","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        resp_dict \u003d {\"stack\": {"},{"line_number":475,"context_line":"            \"id\": \"1\","},{"line_number":476,"context_line":"            \"stack_name\": \"teststack\","},{"line_number":477,"context_line":"            \"stack_status\": \u0027CREATE_COMPLETE\u0027,"},{"line_number":478,"context_line":"            \"creation_time\": \"2012-10-25T01:58:47Z\""},{"line_number":479,"context_line":"        }}"},{"line_number":480,"context_line":"        resp \u003d fakes.FakeHTTPResponse("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FRZo%3D","line":477,"in_reply_to":"AAAAUH%2F%2FUtw%3D","updated":"2014-01-15 17:13:05.000000000","message":"this need not be CREATE_COMPLETE and can be any state.\nI cannot use script_heat_list() here, because I am abandoning only one stack.","commit_id":"d919d08c588a7b0e94c696a06d452db47a8f9352"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"f6566178e2e40f84d985295801e2212c44322740","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        self.m.ReplayAll()"},{"line_number":492,"context_line":"        abandoned_stack \u003d self.shell(\u0027stack-abandon teststack/1\u0027)"},{"line_number":493,"context_line":"        self.assertEqual(resp_dict, jsonutils.loads(abandoned_stack))"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def test_template_show_cfn(self):"},{"line_number":496,"context_line":"        self._script_keystone_client()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FUtU%3D","line":493,"updated":"2014-01-15 02:06:47.000000000","message":"If you use fakes.script_heat_list(), then here it is better use self.assertRegexpMatches()","commit_id":"d919d08c588a7b0e94c696a06d452db47a8f9352"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"d0913f0a3ac6c1fc19ba9ac1a44a89ad67356043","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        self.m.ReplayAll()"},{"line_number":492,"context_line":"        abandoned_stack \u003d self.shell(\u0027stack-abandon teststack/1\u0027)"},{"line_number":493,"context_line":"        self.assertEqual(resp_dict, jsonutils.loads(abandoned_stack))"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def test_template_show_cfn(self):"},{"line_number":496,"context_line":"        self._script_keystone_client()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FRGg%3D","line":493,"in_reply_to":"AAAAUH%2F%2FUtU%3D","updated":"2014-01-15 17:13:05.000000000","message":"changing this test a little.","commit_id":"d919d08c588a7b0e94c696a06d452db47a8f9352"}],"heatclient/v1/shell.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"193658d6cbadc2b21257351ec4cf834ecf4084a5","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cNAME or ID\u003e\u0027,"},{"line_number":207,"context_line":"           help\u003d\u0027Name or ID of stack to abandon.\u0027)"},{"line_number":208,"context_line":"def do_stack_abandon(hc, args):"},{"line_number":209,"context_line":"    \u0027\u0027\u0027Abandon the stack.\u0027\u0027\u0027"},{"line_number":210,"context_line":"    fields \u003d {\u0027stack_id\u0027: args.id}"},{"line_number":211,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F%2Fu4%3D","line":208,"updated":"2014-01-04 09:37:03.000000000","message":"How about add abandon multiple stacks in one request? Please refer to https://review.openstack.org/#/c/60664/\n\nIf you do not want to add this in your patch, then we can handle it in another patch.","commit_id":"1c7fcaaffae886fbe1eb4bfb0d8793c9a06e831f"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"edffc0f27ef440f3eaff3d7bc2bbe4c00508efa9","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cNAME or ID\u003e\u0027,"},{"line_number":207,"context_line":"           help\u003d\u0027Name or ID of stack to abandon.\u0027)"},{"line_number":208,"context_line":"def do_stack_abandon(hc, args):"},{"line_number":209,"context_line":"    \u0027\u0027\u0027Abandon the stack.\u0027\u0027\u0027"},{"line_number":210,"context_line":"    fields \u003d {\u0027stack_id\u0027: args.id}"},{"line_number":211,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2F7yc%3D","line":208,"in_reply_to":"AAAAUH%2F%2F%2Fu4%3D","updated":"2014-01-06 15:41:12.000000000","message":"I will do a separate patch for multiple stacks abandon operation.","commit_id":"1c7fcaaffae886fbe1eb4bfb0d8793c9a06e831f"}],"heatclient/v1/stacks.py":[{"author":{"_account_id":7714,"name":"Tim Schnell","email":"tim.schnell@rackspace.com","username":"timductive"},"change_message_id":"4f9c89a522ee2a89d47ce9d111277d5e86bb0080","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def abandon(self, stack_id):"},{"line_number":131,"context_line":"        \"\"\"Abandon a stack.\"\"\""},{"line_number":132,"context_line":"        stack \u003d self.get(stack_id)"},{"line_number":133,"context_line":"        resp, body \u003d self.api.json_request("},{"line_number":134,"context_line":"            \u0027DELETE\u0027,"},{"line_number":135,"context_line":"            \u0027/stacks/%s/abandon\u0027 % stack.identifier)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8vBU%3D","line":132,"updated":"2013-12-20 22:00:06.000000000","message":"I don\u0027t think you need this line. You are passing stack_id as an argument so couldn\u0027t you do \"% stack_id\" below in the substitution?","commit_id":"3b92e7cdd5b84638632ce31f916d852ff349a7d6"},{"author":{"_account_id":7714,"name":"Tim Schnell","email":"tim.schnell@rackspace.com","username":"timductive"},"change_message_id":"6e83127a266024167a8e33346645b12c3249a844","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def abandon(self, stack_id):"},{"line_number":131,"context_line":"        \"\"\"Abandon a stack.\"\"\""},{"line_number":132,"context_line":"        stack \u003d self.get(stack_id)"},{"line_number":133,"context_line":"        resp, body \u003d self.api.json_request("},{"line_number":134,"context_line":"            \u0027DELETE\u0027,"},{"line_number":135,"context_line":"            \u0027/stacks/%s/abandon\u0027 % stack.identifier)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8u9Y%3D","line":132,"in_reply_to":"AAAATn%2F8u%2Bo%3D","updated":"2013-12-20 22:11:07.000000000","message":"ok thanks.","commit_id":"3b92e7cdd5b84638632ce31f916d852ff349a7d6"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"e4c9a60d45111e9377e3d70d30e18dc2041c772a","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def abandon(self, stack_id):"},{"line_number":131,"context_line":"        \"\"\"Abandon a stack.\"\"\""},{"line_number":132,"context_line":"        stack \u003d self.get(stack_id)"},{"line_number":133,"context_line":"        resp, body \u003d self.api.json_request("},{"line_number":134,"context_line":"            \u0027DELETE\u0027,"},{"line_number":135,"context_line":"            \u0027/stacks/%s/abandon\u0027 % stack.identifier)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8u%2Bo%3D","line":132,"in_reply_to":"AAAATn%2F8vBU%3D","updated":"2013-12-20 22:08:11.000000000","message":"No. it cannot be substituted directly. Here stack.identifier returns \"stack_id/stack_uuid\"","commit_id":"3b92e7cdd5b84638632ce31f916d852ff349a7d6"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"aa3693972e9592b4bf6ab51f8d0c626c16fa8b62","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        return self.manager.delete(self.identifier)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def abandon(self):"},{"line_number":35,"context_line":"        return self.manager.abandon(\"%s/abandon\" % self.identifier)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get(self):"},{"line_number":38,"context_line":"        # set_loaded() first ... so if we have to bail, we know we tried."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BvxE%3D","line":35,"updated":"2014-01-22 15:19:21.000000000","message":"is \u0027%s/abandon\u0027 a stack id? seemly it should be just:\n\nreturn self.manager.abandon(self.identifier)","commit_id":"d6eba557fc7306d78380373af887ab09dd3ea493"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"268de32457a6be050bb6217a5cac87376a20222a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        return self.manager.delete(self.identifier)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def abandon(self):"},{"line_number":35,"context_line":"        return self.manager.abandon(\"%s/abandon\" % self.identifier)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get(self):"},{"line_number":38,"context_line":"        # set_loaded() first ... so if we have to bail, we know we tried."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BBbg%3D","line":35,"in_reply_to":"AAAAUH%2F%2BvxE%3D","updated":"2014-01-30 22:08:30.000000000","message":"I think Jun Jie is right, and he should have -1ed this change ;)","commit_id":"d6eba557fc7306d78380373af887ab09dd3ea493"}]}
