)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"5ca377ad490e46f61c801bc736542b55c6ddd74a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     JUN JIE NAN \u003cnanjj@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-12 22:08:04 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix stack_get_by_name does not list embedded stack issue"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Embedded stack owner_id is not None, when query result filtered with"},{"line_number":10,"context_line":"owner_id\u003dNone, embedded stacks will not be listed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F9Vkw%3D","line":7,"updated":"2013-12-12 14:37:15.000000000","message":"s/embedded/nested/g","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"e31fcc7ef3b5e5f83f4485d8ec2c258785b11443","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     JUN JIE NAN \u003cnanjj@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-12 22:08:04 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix stack_get_by_name does not list embedded stack issue"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Embedded stack owner_id is not None, when query result filtered with"},{"line_number":10,"context_line":"owner_id\u003dNone, embedded stacks will not be listed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F9TCM%3D","line":7,"in_reply_to":"AAAATn%2F9Vkw%3D","updated":"2013-12-12 22:18:49.000000000","message":"Done","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"82985d1a0770f68b240425e52afacf1e9403359e","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The fix make stack_get_by_name filtered by stack name only, and a new"},{"line_number":13,"context_line":"api stack_get_by_name_and_owner_id is added to filter via stack name"},{"line_number":14,"context_line":"and owner id."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I659104f4936b567222108c211f77473ef35638c6"},{"line_number":17,"context_line":"Closes-Bug: #1240892"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F9VHA%3D","line":14,"updated":"2013-12-12 15:57:52.000000000","message":"The wording sounds a little off.  How about this?\n\n\"If the nested stack owner_id is not None when querying a result filtered with owner_id\u003dNone, then nested stacks will not be listed.  The fix is to filter stack_get_by_name by stack name only and add a new API stack_get_by_name_and_owner_id to filter via stack name and owner id.\"","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"e31fcc7ef3b5e5f83f4485d8ec2c258785b11443","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The fix make stack_get_by_name filtered by stack name only, and a new"},{"line_number":13,"context_line":"api stack_get_by_name_and_owner_id is added to filter via stack name"},{"line_number":14,"context_line":"and owner id."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I659104f4936b567222108c211f77473ef35638c6"},{"line_number":17,"context_line":"Closes-Bug: #1240892"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F9TCI%3D","line":14,"in_reply_to":"AAAATn%2F9VHA%3D","updated":"2013-12-12 22:18:49.000000000","message":"Done, Thank you so much!","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"}],"heat/db/api.py":[{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"5ca377ad490e46f61c801bc736542b55c6ddd74a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                          tenant_safe\u003dtenant_safe)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):"},{"line_number":115,"context_line":"    return IMPL.stack_get_by_name_and_owner_id(context, stack_name,"},{"line_number":116,"context_line":"                                               owner_id\u003downer_id)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9Vmg%3D","line":114,"updated":"2013-12-12 14:37:15.000000000","message":"why having a default value of None for owner_id?","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"e31fcc7ef3b5e5f83f4485d8ec2c258785b11443","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                          tenant_safe\u003dtenant_safe)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):"},{"line_number":115,"context_line":"    return IMPL.stack_get_by_name_and_owner_id(context, stack_name,"},{"line_number":116,"context_line":"                                               owner_id\u003downer_id)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9TBc%3D","line":114,"in_reply_to":"AAAATn%2F9Vmg%3D","updated":"2013-12-12 22:18:49.000000000","message":"Done","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"}],"heat/db/sqlalchemy/api.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"9406ea494a72777f9c66ce263e20907bea1c0f99","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    query \u003d soft_delete_aware_query(context, models.Stack).\\"},{"line_number":242,"context_line":"        filter_by(tenant\u003dcontext.tenant_id).\\"},{"line_number":243,"context_line":"        filter_by(name\u003dstack_name)"},{"line_number":244,"context_line":"    if owner_id is not \u0027\u0027:"},{"line_number":245,"context_line":"        query \u003d query.filter_by(owner_id\u003downer_id)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    return query.first()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9Wfc%3D","line":244,"updated":"2013-12-12 11:44:59.000000000","message":"This seems like a really non-obvious interface change to me.\n\nAFAICS owner_id is only used in one place (parser.Stack._backup_stack), so I would prefer to add a new stack_get_by_name_and_owner API call, and leave this one just getting by name.  This would avoid the behavior where passing owner_id\u003dNone modifies what is returned, which is not desirable in any situation IMO.\n\nThe other problem I see is now every API call could potentially return data about a backup stack if a user makes a single-character typo to their stack name (ref parser.Stack._backup_name), so I think we need to discuss with Zane to figure out how we can make the backup stack name more unique, or otherwise hide the backup stacks from user lookup.","commit_id":"23a487db83f10969d6ba66f64cd1d5417128f411"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"82985d1a0770f68b240425e52afacf1e9403359e","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    return results"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):"},{"line_number":241,"context_line":"    query \u003d soft_delete_aware_query(context, models.Stack).\\"},{"line_number":242,"context_line":"        filter_by(tenant\u003dcontext.tenant_id).\\"},{"line_number":243,"context_line":"        filter_by(name\u003dstack_name).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9VE0%3D","line":240,"updated":"2013-12-12 15:57:52.000000000","message":"Based on the commit message, I would\u0027ve expected this to do something like:\n\n def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):\n     if owner_id is None:\n         return stack_get_by_name(context, stack_name)\n [...]","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":6794,"name":"Simon Pasquier","email":"pasquier.simon@gmail.com","username":"simon-pasquier"},"change_message_id":"5ca377ad490e46f61c801bc736542b55c6ddd74a","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    return results"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):"},{"line_number":241,"context_line":"    query \u003d soft_delete_aware_query(context, models.Stack).\\"},{"line_number":242,"context_line":"        filter_by(tenant\u003dcontext.tenant_id).\\"},{"line_number":243,"context_line":"        filter_by(name\u003dstack_name).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9Vmc%3D","line":240,"updated":"2013-12-12 14:37:15.000000000","message":"why having a default value of None for owner_id?","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"e31fcc7ef3b5e5f83f4485d8ec2c258785b11443","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    return results"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):"},{"line_number":241,"context_line":"    query \u003d soft_delete_aware_query(context, models.Stack).\\"},{"line_number":242,"context_line":"        filter_by(tenant\u003dcontext.tenant_id).\\"},{"line_number":243,"context_line":"        filter_by(name\u003dstack_name).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9TA4%3D","line":240,"in_reply_to":"AAAATn%2F9VE0%3D","updated":"2013-12-12 22:18:49.000000000","message":"I will modify according Simon\u0027s comment. owner_id should not default as None since it\u0027s a filter.","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"},{"author":{"_account_id":7761,"name":"Jun Jie Nan","email":"nanjunjie@gmail.com","username":"nanjj"},"change_message_id":"e31fcc7ef3b5e5f83f4485d8ec2c258785b11443","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    return results"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def stack_get_by_name_and_owner_id(context, stack_name, owner_id\u003dNone):"},{"line_number":241,"context_line":"    query \u003d soft_delete_aware_query(context, models.Stack).\\"},{"line_number":242,"context_line":"        filter_by(tenant\u003dcontext.tenant_id).\\"},{"line_number":243,"context_line":"        filter_by(name\u003dstack_name).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9TBQ%3D","line":240,"in_reply_to":"AAAATn%2F9Vmc%3D","updated":"2013-12-12 22:18:49.000000000","message":"Done","commit_id":"86a2bcfcc1d16a0950f3c3327bb36dfa63f667ea"}],"heat/tests/test_sqlalchemy_api.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"9406ea494a72777f9c66ce263e20907bea1c0f99","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        st \u003d db_api.stack_get_by_name(self.ctx, \u0027stack\u0027)"},{"line_number":178,"context_line":"        self.assertIsNone(st)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_embeded_stack_get_by_name(self):"},{"line_number":181,"context_line":"        stack1 \u003d self._setup_test_stack(\u0027stack1\u0027, UUID1)[1]"},{"line_number":182,"context_line":"        stack2 \u003d self._setup_test_stack(\u0027stack2\u0027, UUID2,"},{"line_number":183,"context_line":"                                        owner_id\u003dstack1.id)[1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9WeM%3D","line":180,"updated":"2013-12-12 11:44:59.000000000","message":"Typo s/embeded/embedded\n\nI think using \"nested\" here might be clearer, since that\u0027s the terminology we use everywhere else.","commit_id":"23a487db83f10969d6ba66f64cd1d5417128f411"}]}
