)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"db687002bb0b55f1b05dcc0baaf266b691ed004f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"objects)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I334dba243de45bf11ccb5ab55e2aa8390fe9d8c2"},{"line_number":16,"context_line":"Depends-On: I40e63793c2f353fe3369be5dacfdf7268b196610"},{"line_number":17,"context_line":"Depends-On: I7ac03717e17cd7229abfeef6d9c7d9d8ec9be27a"},{"line_number":18,"context_line":"Closes-Bug: #1470154"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3a50d1a3_52488b2d","line":16,"updated":"2015-07-24 20:07:58.000000000","message":"This dependency in stable/kilo is conflicting with the latter dependency in stable/kilo, so you\u0027ll have to stack those I guess.","commit_id":"2b1b8eff9a1b013e16d2a1ae955786c96a3595aa"}],"nova/objects/base.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c806322dc8b99d31aff2e4852d4f4db0a4c575","unresolved":false,"context_lines":[{"line_number":617,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":618,"context_line":"        primitives \u003d primitive[\u0027objects\u0027]"},{"line_number":619,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":620,"context_line":"        if self.child_versions:"},{"line_number":621,"context_line":"            child_target_version \u003d self.child_versions.get(target_version,"},{"line_number":622,"context_line":"                                                           \u00271.0\u0027)"},{"line_number":623,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_e282bb51","line":620,"updated":"2015-07-08 17:36:47.000000000","message":"Why isn\u0027t this hasattr(self, \u0027child_versions\u0027)?","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01376e25b7f8b29454873da01438b3be926bdf20","unresolved":false,"context_lines":[{"line_number":617,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":618,"context_line":"        primitives \u003d primitive[\u0027objects\u0027]"},{"line_number":619,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":620,"context_line":"        if self.child_versions:"},{"line_number":621,"context_line":"            child_target_version \u003d self.child_versions.get(target_version,"},{"line_number":622,"context_line":"                                                           \u00271.0\u0027)"},{"line_number":623,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_bd36144f","line":620,"in_reply_to":"ba3cc151_9d531016","updated":"2015-07-08 18:07:09.000000000","message":"Yeah, but in this change he\u0027s removing the child_versions attribute completely, so I\u0027m not sure how this works, unless it\u0027s defined in the base class somewhere - which I guess it is:\n\nhttp://git.openstack.org/cgit/openstack/oslo.versionedobjects/tree/oslo_versionedobjects/base.py#n728\n\nNevermind then.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4fdb5cd75b33707c9ccb8bd1ca21bfd31507f100","unresolved":false,"context_lines":[{"line_number":617,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":618,"context_line":"        primitives \u003d primitive[\u0027objects\u0027]"},{"line_number":619,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":620,"context_line":"        if self.child_versions:"},{"line_number":621,"context_line":"            child_target_version \u003d self.child_versions.get(target_version,"},{"line_number":622,"context_line":"                                                           \u00271.0\u0027)"},{"line_number":623,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_9d531016","line":620,"in_reply_to":"ba3cc151_e282bb51","updated":"2015-07-08 18:02:23.000000000","message":"because hasattr won\u0027t give us what we want. We need to know if they have any entries in child_versions, not just if it\u0027s defined on the object.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c806322dc8b99d31aff2e4852d4f4db0a4c575","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                                                           \u00271.0\u0027)"},{"line_number":623,"context_line":"        else:"},{"line_number":624,"context_line":"            child_target_version \u003d \u00271.0\u0027"},{"line_number":625,"context_line":"            rel_versions \u003d self.obj_relationships[\u0027objects\u0027]"},{"line_number":626,"context_line":"            for index, versions in enumerate(rel_versions):"},{"line_number":627,"context_line":"                my_version, child_version \u003d versions"},{"line_number":628,"context_line":"                my_version \u003d utils.convert_version_to_tuple(my_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_a23d938f","line":625,"updated":"2015-07-08 17:36:47.000000000","message":"Can we just re-use self.obj_calculate_child_version here?  I see that\u0027s in NovaObject, but I\u0027d rather not duplicate all of this code - could we pull the meat out into a static utility method or a mixin so both NovaObject and ObjectListBase can re-use this since fixing a bug in one means needing to fix a bug in both.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01376e25b7f8b29454873da01438b3be926bdf20","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                                                           \u00271.0\u0027)"},{"line_number":623,"context_line":"        else:"},{"line_number":624,"context_line":"            child_target_version \u003d \u00271.0\u0027"},{"line_number":625,"context_line":"            rel_versions \u003d self.obj_relationships[\u0027objects\u0027]"},{"line_number":626,"context_line":"            for index, versions in enumerate(rel_versions):"},{"line_number":627,"context_line":"                my_version, child_version \u003d versions"},{"line_number":628,"context_line":"                my_version \u003d utils.convert_version_to_tuple(my_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_1d9060ec","line":625,"in_reply_to":"ba3cc151_1dee20ed","updated":"2015-07-08 18:07:09.000000000","message":"OK, sounds like a lot of this duplication will exist when it\u0027s moved into o.vo also, but then it\u0027s more out of sight / out of mind in my case, still seems like a bad idea but I\u0027m more meh in that case.  I could also just not be appreciating what the end product is going to look like in o.vo when that is done.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4fdb5cd75b33707c9ccb8bd1ca21bfd31507f100","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                                                           \u00271.0\u0027)"},{"line_number":623,"context_line":"        else:"},{"line_number":624,"context_line":"            child_target_version \u003d \u00271.0\u0027"},{"line_number":625,"context_line":"            rel_versions \u003d self.obj_relationships[\u0027objects\u0027]"},{"line_number":626,"context_line":"            for index, versions in enumerate(rel_versions):"},{"line_number":627,"context_line":"                my_version, child_version \u003d versions"},{"line_number":628,"context_line":"                my_version \u003d utils.convert_version_to_tuple(my_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_1dee20ed","line":625,"in_reply_to":"ba3cc151_a23d938f","updated":"2015-07-08 18:02:23.000000000","message":"This is a mixin that doesn\u0027t inherit from the base object. So, plonking this down here is just temporary while we move the guts in o.vo underneath and then this goes away.\n\nThis duplication is how I asked him to do it.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c806322dc8b99d31aff2e4852d4f4db0a4c575","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":639,"context_line":"                    child_target_version \u003d child_version"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        for index, item in enumerate(self.objects):"},{"line_number":642,"context_line":"            self.objects[index].obj_make_compatible("},{"line_number":643,"context_line":"                self._obj_primitive_field(primitives[index], \u0027data\u0027),"},{"line_number":644,"context_line":"                child_target_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_a20b53d4","line":641,"updated":"2015-07-08 17:36:47.000000000","message":"Some comments in the code as to wtf this is doing would be helpful.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b6abe1a1fe9ae8076c697fae579b02a82f9e490","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":639,"context_line":"                    child_target_version \u003d child_version"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        for index, item in enumerate(self.objects):"},{"line_number":642,"context_line":"            self.objects[index].obj_make_compatible("},{"line_number":643,"context_line":"                self._obj_primitive_field(primitives[index], \u0027data\u0027),"},{"line_number":644,"context_line":"                child_target_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_9d1c7067","line":641,"in_reply_to":"ba3cc151_a20b53d4","updated":"2015-07-08 17:54:35.000000000","message":"OK I see this part is coming from here:\n\nhttp://git.openstack.org/cgit/openstack/oslo.versionedobjects/tree/oslo_versionedobjects/base.py#n770","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4fdb5cd75b33707c9ccb8bd1ca21bfd31507f100","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":639,"context_line":"                    child_target_version \u003d child_version"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        for index, item in enumerate(self.objects):"},{"line_number":642,"context_line":"            self.objects[index].obj_make_compatible("},{"line_number":643,"context_line":"                self._obj_primitive_field(primitives[index], \u0027data\u0027),"},{"line_number":644,"context_line":"                child_target_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_1d73804f","line":641,"in_reply_to":"ba3cc151_a20b53d4","updated":"2015-07-08 18:02:23.000000000","message":"This is just o.vo\u0027s implementation of this method, with the above switching in front. See the comment on this method where he says this is a compatibility thing that will be removed when we port to o.vo.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e681aa0fefa7d9cf8a51ad378fc9bfab420b45d1","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                    if index \u003d\u003d 0:"},{"line_number":631,"context_line":"                        # if the target is before we existed, we\u0027ll just"},{"line_number":632,"context_line":"                        # do 1.0"},{"line_number":633,"context_line":"                        break"},{"line_number":634,"context_line":"                    else:"},{"line_number":635,"context_line":"                        # We still don\u0027t match, but we\u0027ll grab the latest"},{"line_number":636,"context_line":"                        # child version up to this point"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_05df9f3a","line":633,"updated":"2015-07-08 21:54:02.000000000","message":"This should remove the subobject from the primitive, right?\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/base.py#L308-310","commit_id":"4af28b173d5d00118c3d6f586275315a49db6704"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb46b2ad813360d04565eeafbf1067637ebbd8cb","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                    if index \u003d\u003d 0:"},{"line_number":631,"context_line":"                        # if the target is before we existed, we\u0027ll just"},{"line_number":632,"context_line":"                        # do 1.0"},{"line_number":633,"context_line":"                        break"},{"line_number":634,"context_line":"                    else:"},{"line_number":635,"context_line":"                        # We still don\u0027t match, but we\u0027ll grab the latest"},{"line_number":636,"context_line":"                        # child version up to this point"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_45a7e7bc","line":633,"in_reply_to":"ba3cc151_05df9f3a","updated":"2015-07-08 21:55:45.000000000","message":"If this is the issue, I TOLD YOU SO!","commit_id":"4af28b173d5d00118c3d6f586275315a49db6704"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"13e83c9b5e96fefe220dbc758fc377346f4362f7","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                    if index \u003d\u003d 0:"},{"line_number":631,"context_line":"                        # if the target is before we existed, we\u0027ll just"},{"line_number":632,"context_line":"                        # do 1.0"},{"line_number":633,"context_line":"                        break"},{"line_number":634,"context_line":"                    else:"},{"line_number":635,"context_line":"                        # We still don\u0027t match, but we\u0027ll grab the latest"},{"line_number":636,"context_line":"                        # child version up to this point"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_278ac01b","line":633,"in_reply_to":"ba3cc151_45a7e7bc","updated":"2015-07-09 13:26:27.000000000","message":"Because this is an ObjectList, if we delete the subobject, the List object will have nothing in it anymore. We will never have a situation in which we will be backporting to a version in which we did not have a subobject (or at least I hope so).","commit_id":"4af28b173d5d00118c3d6f586275315a49db6704"},{"author":{"_account_id":16839,"name":"Cale Rath","email":"ctrath@us.ibm.com","username":"ctrath"},"change_message_id":"d83b25b6968458edcc8ffe24565ec3cda327713d","unresolved":false,"context_lines":[{"line_number":634,"context_line":"                    else:"},{"line_number":635,"context_line":"                        # We still don\u0027t match, but we\u0027ll grab the latest"},{"line_number":636,"context_line":"                        # child version up to this point"},{"line_number":637,"context_line":"                        child_target_version \u003d rel_versions[index - 1][1]"},{"line_number":638,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":639,"context_line":"                    child_target_version \u003d child_version"},{"line_number":640,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_2d2c0f01","line":637,"updated":"2015-07-08 20:50:57.000000000","message":"I am wondering if something should be logged at this point.  It seems to me that if we reach this point that the developer forgot to update the targeted version.","commit_id":"4af28b173d5d00118c3d6f586275315a49db6704"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"0b4be2b2e7aaeaab0e5d2c3957e9eb0f07423965","unresolved":false,"context_lines":[{"line_number":634,"context_line":"                    else:"},{"line_number":635,"context_line":"                        # We still don\u0027t match, but we\u0027ll grab the latest"},{"line_number":636,"context_line":"                        # child version up to this point"},{"line_number":637,"context_line":"                        child_target_version \u003d rel_versions[index - 1][1]"},{"line_number":638,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":639,"context_line":"                    child_target_version \u003d child_version"},{"line_number":640,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_b8c5bb8e","line":637,"in_reply_to":"ba3cc151_2d2c0f01","updated":"2015-07-08 21:09:31.000000000","message":"This needs to be there for version gaps. If we have the versions in obj_relationships that go 1.1, 1.2, and then didn\u0027t need to update a field for 4 versions, the next time it needs to be updated is 1.7. We don\u0027t necessarily need to update 1.3-6 to have the same version as 1.2 (I think that\u0027s a little too strict). Then when we want to backport from 1.7 to say 1.5, we would need this line, and IMHO, doesn\u0027t really need a warning to say we\u0027re going back to something that wasn\u0027t explicitly filled in. While I agree not filling in all intermediate versions has the possibility to bite us later, I don\u0027t think the developer burden to update everything when they bump a version needs to happen.","commit_id":"4af28b173d5d00118c3d6f586275315a49db6704"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dec195c94ac305e0ac422ebd9872cf080fb280a5","unresolved":false,"context_lines":[{"line_number":661,"context_line":"            from nova import conductor"},{"line_number":662,"context_line":"            self._conductor \u003d conductor.API()"},{"line_number":663,"context_line":"        return self._conductor"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"    def _process_object(self, context, objprim):"},{"line_number":666,"context_line":"        try:"},{"line_number":667,"context_line":"            objinst \u003d NovaObject.obj_from_primitive(objprim, context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_cdc77543","line":664,"updated":"2015-07-09 13:59:49.000000000","message":"Would be nice if we had some logging in here somewhere to give us a hint as to what we\u0027re processing when hitting the infinite recursion.","commit_id":"4af28b173d5d00118c3d6f586275315a49db6704"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8c33db7914b50a7756519e867d66d62eb780c52f","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                        # from the primitive"},{"line_number":633,"context_line":"                        # (we should never get here, because lists should"},{"line_number":634,"context_line":"                        # always have an \u0027objects\u0027 field)"},{"line_number":635,"context_line":"                        del primitive[\u0027objects\u0027]"},{"line_number":636,"context_line":"                    else:"},{"line_number":637,"context_line":"                        # We still don\u0027t match, but we\u0027ll grab the latest"},{"line_number":638,"context_line":"                        # child version up to this point"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_f0bd5a68","line":635,"updated":"2015-07-09 19:36:45.000000000","message":"I think this fixed your infinite recursion, but we should have a unit test that detects the terrible horrible thing that was in patch set 5 since unit tests didn\u0027t hit that, grenade did (thank god for grenade).","commit_id":"8804723f7c7aeed759d32108066d2f04895942df"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"68f493c206756cb42e775bad167c8e58d67f9d76","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                        # child version up to this point"},{"line_number":639,"context_line":"                        child_target_version \u003d rel_versions[index - 1][1]"},{"line_number":640,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":641,"context_line":"                    child_target_version \u003d child_version"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        for index, item in enumerate(self.objects):"},{"line_number":644,"context_line":"            self.objects[index].obj_make_compatible("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_1fa011f3","line":641,"updated":"2015-07-09 18:27:27.000000000","message":"Should we add a \u0027break\u0027 here? Any remaining loops will be no-ops.","commit_id":"8804723f7c7aeed759d32108066d2f04895942df"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f7d129e7ea0a8d444c9434dadf805440a5957b6","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    # NOTE(rlrossit): This can get removed after ovo uses both child_versions"},{"line_number":616,"context_line":"    # and obj_relationships when making the internal objects compatible"},{"line_number":617,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":618,"context_line":"        LOG.info(_LI(\"Attempting to convert %(obj)s to %(ver)s\"),"},{"line_number":619,"context_line":"                 dict(obj\u003dself.obj_name(), ver\u003dtarget_version))"},{"line_number":620,"context_line":"        primitives \u003d primitive[\u0027objects\u0027]"},{"line_number":621,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_2d1bb6cb","line":618,"updated":"2015-07-22 14:29:42.000000000","message":"Let\u0027s make this debug level.","commit_id":"a6697ac292568332c62af4f2dd0d271460815edf"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"93f05118c96b99529ca4e5e1aff431015616c7a5","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    # NOTE(rlrossit): This can get removed after ovo uses both child_versions"},{"line_number":616,"context_line":"    # and obj_relationships when making the internal objects compatible"},{"line_number":617,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":618,"context_line":"        LOG.info(_LI(\"Attempting to convert %(obj)s to %(ver)s\"),"},{"line_number":619,"context_line":"                 dict(obj\u003dself.obj_name(), ver\u003dtarget_version))"},{"line_number":620,"context_line":"        primitives \u003d primitive[\u0027objects\u0027]"},{"line_number":621,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_0619f7d6","line":618,"updated":"2015-07-22 15:07:33.000000000","message":"The plan is to pull the logging out into a separate change. I\u0027m planning on moving it to the serializer and dropping the log level to debug.","commit_id":"07b15d698635c7ccef2ff57758bea3ee844a594d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7f07f7297ca4f058be4321e72b361f153db91134","unresolved":false,"context_lines":[{"line_number":641,"context_line":"                        child_target_version \u003d rel_versions[index - 1][1]"},{"line_number":642,"context_line":"                elif target_version \u003d\u003d my_version:"},{"line_number":643,"context_line":"                    child_target_version \u003d child_version"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        for index, item in enumerate(self.objects):"},{"line_number":646,"context_line":"            self.objects[index].obj_make_compatible("},{"line_number":647,"context_line":"                self._obj_primitive_field(primitives[index], \u0027data\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_ebe1e4d0","line":644,"updated":"2015-07-29 21:52:04.000000000","message":"break here. Else you keep running through the list, and deciding the later versions look good until you get to the latest.","commit_id":"9884cfa176b62f1e331332651c4b683738f7c0c4"}],"nova/objects/instance.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"b822def765bff5c0cd74d666465957cd12818e3a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    obj_relationships \u003d {"},{"line_number":225,"context_line":"        \u0027fault\u0027: [(\u00271.0\u0027, \u00271.0\u0027), (\u00271.13\u0027, \u00271.2\u0027)],"},{"line_number":226,"context_line":"        \u0027info_cache\u0027: [(\u00271.1\u0027, \u00271.0\u0027), (\u00271.9\u0027, \u00271.4\u0027), (\u00271.10\u0027, \u00271.5\u0027)],"},{"line_number":227,"context_line":"        \u0027security_groups\u0027: [(\u00271.2\u0027, \u00271.0\u0027)],"},{"line_number":228,"context_line":"        \u0027pci_devices\u0027: [(\u00271.6\u0027, \u00271.0\u0027), (\u00271.15\u0027, \u00271.1\u0027)],"},{"line_number":229,"context_line":"        \u0027numa_topology\u0027: [(\u00271.14\u0027, \u00271.0\u0027), (\u00271.16\u0027, \u00271.1\u0027)],"},{"line_number":230,"context_line":"        \u0027pci_requests\u0027: [(\u00271.16\u0027, \u00271.1\u0027)],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_39b1f1e1","line":227,"updated":"2015-07-14 10:03:08.000000000","message":"This is no longer correct now that you bumped it - it\u0027s really better to rebase on top of https://review.openstack.org/#/c/201280/ and only worry about your bit of change","commit_id":"8804723f7c7aeed759d32108066d2f04895942df"}],"nova/objects/pci_device.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd2e07835d8c611fd061bc273618a55d97398a2f","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    # Version 1.0: Initial version"},{"line_number":207,"context_line":"    #              PciDevice \u003c\u003d 1.1"},{"line_number":208,"context_line":"    # Version 1.1: PciDevice 1.2"},{"line_number":209,"context_line":"    # Version 1.2: PciDevice 1.3"},{"line_number":210,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_f894aa37","line":209,"updated":"2015-07-08 18:18:17.000000000","message":"Heh, oops.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"b822def765bff5c0cd74d666465957cd12818e3a","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    #              PciDevice \u003c\u003d 1.1"},{"line_number":208,"context_line":"    # Version 1.1: PciDevice 1.2"},{"line_number":209,"context_line":"    # Version 1.2: PciDevice 1.3"},{"line_number":210,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    fields \u003d {"},{"line_number":213,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027PciDevice\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_998cbd36","line":210,"updated":"2015-07-14 10:03:08.000000000","message":"As discussed on IRC - you may want to rebase this change on https://review.openstack.org/#/c/201280/","commit_id":"8804723f7c7aeed759d32108066d2f04895942df"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"352bf77aea809407d11d49f6e9abce62de033dc1","unresolved":false,"context_lines":[{"line_number":1230,"context_line":"        # and their types, or the signatures of any remotable methods."},{"line_number":1231,"context_line":"        # Of course, these are just the mechanical changes we can detect,"},{"line_number":1232,"context_line":"        # but many other things may require a version bump (method behavior"},{"line_number":1233,"context_line":"        # and return value changes, for example)."},{"line_number":1234,"context_line":"        if hasattr(obj_class, \u0027child_versions\u0027):"},{"line_number":1235,"context_line":"            relevant_data \u003d (fields, methods,"},{"line_number":1236,"context_line":"                             OrderedDict("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_22c5035b","line":1233,"updated":"2015-07-08 17:40:46.000000000","message":"Shouldn\u0027t this go away?","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"60b2520d67e1bf9242e783f5bd2abb79a005607a","unresolved":false,"context_lines":[{"line_number":1230,"context_line":"        # and their types, or the signatures of any remotable methods."},{"line_number":1231,"context_line":"        # Of course, these are just the mechanical changes we can detect,"},{"line_number":1232,"context_line":"        # but many other things may require a version bump (method behavior"},{"line_number":1233,"context_line":"        # and return value changes, for example)."},{"line_number":1234,"context_line":"        if hasattr(obj_class, \u0027child_versions\u0027):"},{"line_number":1235,"context_line":"            relevant_data \u003d (fields, methods,"},{"line_number":1236,"context_line":"                             OrderedDict("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_b8d29bfe","line":1233,"in_reply_to":"ba3cc151_184b8eb2","updated":"2015-07-08 21:16:50.000000000","message":"ack","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a6cc429e4758a4c857497ca9c271214b410e8450","unresolved":false,"context_lines":[{"line_number":1230,"context_line":"        # and their types, or the signatures of any remotable methods."},{"line_number":1231,"context_line":"        # Of course, these are just the mechanical changes we can detect,"},{"line_number":1232,"context_line":"        # but many other things may require a version bump (method behavior"},{"line_number":1233,"context_line":"        # and return value changes, for example)."},{"line_number":1234,"context_line":"        if hasattr(obj_class, \u0027child_versions\u0027):"},{"line_number":1235,"context_line":"            relevant_data \u003d (fields, methods,"},{"line_number":1236,"context_line":"                             OrderedDict("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_184b8eb2","line":1233,"in_reply_to":"ba3cc151_22c5035b","updated":"2015-07-08 18:23:04.000000000","message":"Could, but this whole test goes away when we use the fixtures from o.vo, which will still do this because of the backwards compatibility they have to maintain. So if we leave this, we\u0027re more likely to be able to switch to the fixture without any hash changes, which will be a good sign that we\u0027re not changing anything functional.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"352bf77aea809407d11d49f6e9abce62de033dc1","unresolved":false,"context_lines":[{"line_number":1413,"context_line":"                    last_my_version \u003d _my_version"},{"line_number":1414,"context_line":"                    last_child_version \u003d _ch_version"},{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"    def test_objects_use_obj_relationships(self):"},{"line_number":1417,"context_line":"        obj_classes \u003d base.NovaObjectRegistry.obj_classes()"},{"line_number":1418,"context_line":"        for obj_name in obj_classes:"},{"line_number":1419,"context_line":"            obj_class \u003d obj_classes[obj_name][0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_4214c7e7","line":1416,"updated":"2015-07-08 17:40:46.000000000","message":"The bug report says we should \"remove the list-specific test in test_objects.py\" - which test is that?","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a6cc429e4758a4c857497ca9c271214b410e8450","unresolved":false,"context_lines":[{"line_number":1413,"context_line":"                    last_my_version \u003d _my_version"},{"line_number":1414,"context_line":"                    last_child_version \u003d _ch_version"},{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"    def test_objects_use_obj_relationships(self):"},{"line_number":1417,"context_line":"        obj_classes \u003d base.NovaObjectRegistry.obj_classes()"},{"line_number":1418,"context_line":"        for obj_name in obj_classes:"},{"line_number":1419,"context_line":"            obj_class \u003d obj_classes[obj_name][0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_9856be5c","line":1416,"in_reply_to":"ba3cc151_4214c7e7","updated":"2015-07-08 18:23:04.000000000","message":"It\u0027s complicated. We used to have one, which got mangled or dropped at some point. His patch before this was: I62057e2bc1690566d2fa10b41a19fd541d6e42c3 which included the lists in the regular test, and this (and the following) test is getting things properly set up so that we\u0027re testing all the relationships together. The first patch (already merged) removed the list-specific exclusion.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"60b2520d67e1bf9242e783f5bd2abb79a005607a","unresolved":false,"context_lines":[{"line_number":1413,"context_line":"                    last_my_version \u003d _my_version"},{"line_number":1414,"context_line":"                    last_child_version \u003d _ch_version"},{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"    def test_objects_use_obj_relationships(self):"},{"line_number":1417,"context_line":"        obj_classes \u003d base.NovaObjectRegistry.obj_classes()"},{"line_number":1418,"context_line":"        for obj_name in obj_classes:"},{"line_number":1419,"context_line":"            obj_class \u003d obj_classes[obj_name][0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_382c4b01","line":1416,"in_reply_to":"ba3cc151_9856be5c","updated":"2015-07-08 21:16:50.000000000","message":"I figured https://review.openstack.org/#/c/197176/ had something to do with it.  Works for me.","commit_id":"8f8984677237a7460249000e125cc3afd898d106"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"68f493c206756cb42e775bad167c8e58d67f9d76","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"            self.assertTrue((not hasattr(obj_class, \u0027child_versions\u0027)"},{"line_number":1441,"context_line":"                             or not obj_class.child_versions),"},{"line_number":1442,"context_line":"                            \u0027Object %s should be using obj_relationships, \u0027"},{"line_number":1443,"context_line":"                            \u0027not child_versions.\u0027 % obj_name)"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"class TestObjEqualPrims(_BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_1f09f194","line":1443,"updated":"2015-07-09 18:27:27.000000000","message":"The multiple \"not\"s are confusing to read. How about:\n\n    self.assertFalse(hasattr(obj_class, \u0027child_versions\u0027)\n        and obj_class.child_versions, [message])","commit_id":"8804723f7c7aeed759d32108066d2f04895942df"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5bee805a6fb25211480c4fa9751ecb8872a93217","unresolved":false,"context_lines":[{"line_number":1406,"context_line":"                                    \u00271.2\u0027)"},{"line_number":1407,"context_line":""},{"line_number":1408,"context_line":"    def test_list_obj_make_compatible_when_no_objects(self):"},{"line_number":1409,"context_line":"        \"\"\"Test to make sure obj_make_compatible works with no \u0027objects\u0027"},{"line_number":1410,"context_line":""},{"line_number":1411,"context_line":"        If a List object ever has a version that did not contain the \u0027objects\u0027"},{"line_number":1412,"context_line":"        key, we need to make sure converting back to that version doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_db2a5d2f","line":1409,"updated":"2015-07-31 14:08:53.000000000","message":"nit: we should only add comments to tests, not docstrings, since it makes the test output funky in certain scenarios.","commit_id":"70c71ea3bb0116d9f9bba86a061e3ce861f24e4c"}]}
