)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"d7ab35446624c3b65ad4573f24355db92f27c12a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     ali \u003cali.abdelal@nokia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-09-25 11:21:54 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Task publish is ignored silently:-"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"bug-fix, on-success, on complete published variables are not merged with regular published variables"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_d6574226","line":7,"range":{"start_line":7,"start_character":32,"end_line":7,"end_character":34},"updated":"2019-10-02 09:00:34.000000000","message":"What\u0027s it for? )","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"d7ab35446624c3b65ad4573f24355db92f27c12a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Task publish is ignored silently:-"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"bug-fix, on-success, on complete published variables are not merged with regular published variables"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iba05b9acbfea06214a3ab93911d2eaaa4729278f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_962f8aa6","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":100},"updated":"2019-10-02 09:00:34.000000000","message":"Please keep it within 80 characters.","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"}],"mistral/lang/v2/publish.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b4a91ae24e6179b960282ad0a5d79f6b685f8467","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            if spec_to_merge.get_branch():"},{"line_number":67,"context_line":"                utils.merge_dicts(self._branch, spec_to_merge.get_branch())"},{"line_number":68,"context_line":"            if spec_to_merge.get_global():"},{"line_number":69,"context_line":"                utils.merge_dicts(self._branch, spec_to_merge.get_global())"},{"line_number":70,"context_line":"            if spec_to_merge.get_atomic():"},{"line_number":71,"context_line":"                utils.merge_dicts(self._branch, spec_to_merge.get_atomic())"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_a1a7e950","line":69,"range":{"start_line":69,"start_character":39,"end_line":69,"end_character":46},"updated":"2019-11-06 05:51:46.000000000","message":"-\u003e _global","commit_id":"0e4bf2940e00b170fff8ce2bd684bf6d9710a144"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b4a91ae24e6179b960282ad0a5d79f6b685f8467","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            if spec_to_merge.get_global():"},{"line_number":69,"context_line":"                utils.merge_dicts(self._branch, spec_to_merge.get_global())"},{"line_number":70,"context_line":"            if spec_to_merge.get_atomic():"},{"line_number":71,"context_line":"                utils.merge_dicts(self._branch, spec_to_merge.get_atomic())"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_615fb14d","line":71,"range":{"start_line":71,"start_character":39,"end_line":71,"end_character":46},"updated":"2019-11-06 05:51:46.000000000","message":"-\u003e _atomic","commit_id":"0e4bf2940e00b170fff8ce2bd684bf6d9710a144"}],"mistral/lang/v2/tasks.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"d7ab35446624c3b65ad4573f24355db92f27c12a","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                {\u0027branch\u0027: self._publish_on_error},"},{"line_number":249,"context_line":"                validate\u003dself._validate"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":"        if self._on_complete and self._on_complete.get_publish():"},{"line_number":252,"context_line":"            if spec:"},{"line_number":253,"context_line":"                self._merge_publishes("},{"line_number":254,"context_line":"                    spec.get_branch(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_1972ed7d","line":251,"updated":"2019-10-02 09:00:34.000000000","message":"Put a blank line before this \"if\" because otherwise it\u0027s easy to confuse it with another \"elif\" that doesn\u0027t make sense because in this case spec would always to None.","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":30755,"name":"ali","email":"ali.abdelal@nokia.com","username":"abdelal"},"change_message_id":"1c3e3419190e1a0dd6ee44530dd4de982cab7942","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                {\u0027branch\u0027: self._publish_on_error},"},{"line_number":249,"context_line":"                validate\u003dself._validate"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":"        if self._on_complete and self._on_complete.get_publish():"},{"line_number":252,"context_line":"            if spec:"},{"line_number":253,"context_line":"                self._merge_publishes("},{"line_number":254,"context_line":"                    spec.get_branch(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9f9f9d64","line":251,"in_reply_to":"3fa7e38b_1972ed7d","updated":"2019-10-02 11:17:05.000000000","message":"Done","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"d7ab35446624c3b65ad4573f24355db92f27c12a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                validate\u003dself._validate"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":"        if self._on_complete and self._on_complete.get_publish():"},{"line_number":252,"context_line":"            if spec:"},{"line_number":253,"context_line":"                self._merge_publishes("},{"line_number":254,"context_line":"                    spec.get_branch(),"},{"line_number":255,"context_line":"                    self._on_complete.get_publish().get_branch()"},{"line_number":256,"context_line":"                )"},{"line_number":257,"context_line":"            else:"},{"line_number":258,"context_line":"                return self._on_complete.get_publish()"},{"line_number":259,"context_line":"        return spec"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _merge_publishes(self, merged_to, merge_with):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f9991179","line":258,"range":{"start_line":252,"start_character":12,"end_line":258,"end_character":54},"updated":"2019-10-02 09:00:34.000000000","message":"I would make this whole logic a part of the publish spec. Here you just need to do something like:\n\nspec \u003d spec.merge(self._on_complete.get_publish())\n\nSo basically in the PublishSpec class you need to have a method that merges the instance of PublishSpec with another instance. The method will take care of things like \"branch\" \"global\" etc. That way the logic will be better encapsulated within the class.","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":30755,"name":"ali","email":"ali.abdelal@nokia.com","username":"abdelal"},"change_message_id":"1c3e3419190e1a0dd6ee44530dd4de982cab7942","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                validate\u003dself._validate"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":"        if self._on_complete and self._on_complete.get_publish():"},{"line_number":252,"context_line":"            if spec:"},{"line_number":253,"context_line":"                self._merge_publishes("},{"line_number":254,"context_line":"                    spec.get_branch(),"},{"line_number":255,"context_line":"                    self._on_complete.get_publish().get_branch()"},{"line_number":256,"context_line":"                )"},{"line_number":257,"context_line":"            else:"},{"line_number":258,"context_line":"                return self._on_complete.get_publish()"},{"line_number":259,"context_line":"        return spec"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _merge_publishes(self, merged_to, merge_with):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_bfa4d9ba","line":258,"range":{"start_line":252,"start_character":12,"end_line":258,"end_character":54},"in_reply_to":"3fa7e38b_f9991179","updated":"2019-10-02 11:17:05.000000000","message":"Done","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"d7ab35446624c3b65ad4573f24355db92f27c12a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                return self._on_complete.get_publish()"},{"line_number":259,"context_line":"        return spec"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _merge_publishes(self, merged_to, merge_with):"},{"line_number":262,"context_line":"        utils.merge_dicts(merged_to, merge_with)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def get_keep_result(self):"},{"line_number":265,"context_line":"        return self._keep_result"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_39d8097e","line":262,"range":{"start_line":261,"start_character":4,"end_line":262,"end_character":48},"updated":"2019-10-02 09:00:34.000000000","message":"I don\u0027t see a point in having this method that just merges two dicts.","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":30755,"name":"ali","email":"ali.abdelal@nokia.com","username":"abdelal"},"change_message_id":"1c3e3419190e1a0dd6ee44530dd4de982cab7942","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                return self._on_complete.get_publish()"},{"line_number":259,"context_line":"        return spec"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _merge_publishes(self, merged_to, merge_with):"},{"line_number":262,"context_line":"        utils.merge_dicts(merged_to, merge_with)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def get_keep_result(self):"},{"line_number":265,"context_line":"        return self._keep_result"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_7fae6199","line":262,"range":{"start_line":261,"start_character":4,"end_line":262,"end_character":48},"in_reply_to":"3fa7e38b_39d8097e","updated":"2019-10-02 11:17:05.000000000","message":"Done","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"d7ab35446624c3b65ad4573f24355db92f27c12a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            on_clause \u003d self._on_error"},{"line_number":344,"context_line":"        if on_clause and on_clause.get_publish():"},{"line_number":345,"context_line":"            if spec:"},{"line_number":346,"context_line":"                utils.merge_dicts(on_clause.get_publish().get_branch(),"},{"line_number":347,"context_line":"                                  spec.get_branch())"},{"line_number":348,"context_line":"            return on_clause.get_publish()"},{"line_number":349,"context_line":"        return spec"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b98dd932","line":347,"range":{"start_line":346,"start_character":16,"end_line":347,"end_character":52},"updated":"2019-10-02 09:00:34.000000000","message":"Same here.","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":30755,"name":"ali","email":"ali.abdelal@nokia.com","username":"abdelal"},"change_message_id":"1c3e3419190e1a0dd6ee44530dd4de982cab7942","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            on_clause \u003d self._on_error"},{"line_number":344,"context_line":"        if on_clause and on_clause.get_publish():"},{"line_number":345,"context_line":"            if spec:"},{"line_number":346,"context_line":"                utils.merge_dicts(on_clause.get_publish().get_branch(),"},{"line_number":347,"context_line":"                                  spec.get_branch())"},{"line_number":348,"context_line":"            return on_clause.get_publish()"},{"line_number":349,"context_line":"        return spec"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_1f93ad5e","line":347,"range":{"start_line":346,"start_character":16,"end_line":347,"end_character":52},"in_reply_to":"3fa7e38b_b98dd932","updated":"2019-10-02 11:17:05.000000000","message":"Done","commit_id":"1c72ff952c0ced4789b79c8524a9dd2fd9f90cb6"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b4a91ae24e6179b960282ad0a5d79f6b685f8467","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                validate\u003dself._validate"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        # \u0027ReverseWorkflowTaskSpec\u0027 has no \u0027_on_complete\u0027"},{"line_number":253,"context_line":"        if hasattr(self, \u0027_on_complete\u0027) and self._on_complete \\"},{"line_number":254,"context_line":"           and self._on_complete.get_publish():"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"            if spec:"},{"line_number":257,"context_line":"                spec.merge(self._on_complete.get_publish())"},{"line_number":258,"context_line":"            else:"},{"line_number":259,"context_line":"                return self._on_complete.get_publish()"},{"line_number":260,"context_line":"        return spec"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def get_keep_result(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_2142196a","line":259,"range":{"start_line":252,"start_character":8,"end_line":259,"end_character":54},"updated":"2019-11-06 05:51:46.000000000","message":"No need to have all these conditions here. All \"on-xxx\" clauses only make sense for direct workflows. So this entire change has nothing to do with reverse workflows. Please move it to the child class w/o the enclosing \"if\".","commit_id":"0e4bf2940e00b170fff8ce2bd684bf6d9710a144"},{"author":{"_account_id":30755,"name":"ali","email":"ali.abdelal@nokia.com","username":"abdelal"},"change_message_id":"d082f5fec83c156700d31741ef311b768511610e","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                validate\u003dself._validate"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        # \u0027ReverseWorkflowTaskSpec\u0027 has no \u0027_on_complete\u0027"},{"line_number":253,"context_line":"        if hasattr(self, \u0027_on_complete\u0027) and self._on_complete \\"},{"line_number":254,"context_line":"           and self._on_complete.get_publish():"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"            if spec:"},{"line_number":257,"context_line":"                spec.merge(self._on_complete.get_publish())"},{"line_number":258,"context_line":"            else:"},{"line_number":259,"context_line":"                return self._on_complete.get_publish()"},{"line_number":260,"context_line":"        return spec"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def get_keep_result(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_04101da8","line":259,"range":{"start_line":252,"start_character":8,"end_line":259,"end_character":54},"in_reply_to":"3fa7e38b_2142196a","updated":"2019-11-11 09:41:51.000000000","message":"there will be no need for `hasattr(self, \u0027_on_complete\u0027)`, as for the rest of the conditions, not every direct workflow will have an on_complete, and not every on-complete will have a publish.","commit_id":"0e4bf2940e00b170fff8ce2bd684bf6d9710a144"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b4a91ae24e6179b960282ad0a5d79f6b685f8467","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        if on_clause and on_clause.get_publish():"},{"line_number":340,"context_line":"            if spec:"},{"line_number":341,"context_line":"                on_clause.get_publish().merge(spec)"},{"line_number":342,"context_line":"            return on_clause.get_publish()"},{"line_number":343,"context_line":"        return spec"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def get_join(self):"},{"line_number":346,"context_line":"        return self._join"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_01591d5a","line":343,"range":{"start_line":342,"start_character":12,"end_line":343,"end_character":19},"updated":"2019-11-06 05:51:46.000000000","message":"Soft: Please put a blank line before each \"return\". It\u0027d read a bit better.","commit_id":"0e4bf2940e00b170fff8ce2bd684bf6d9710a144"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"7e6efd45f396a9b48c951d625f77c88cc69278b6","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    def get_publish(self, state):"},{"line_number":323,"context_line":"        spec \u003d super(DirectWorkflowTaskSpec, self).get_publish(state)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        if self._on_complete and self._on_complete.get_publish():"},{"line_number":326,"context_line":"            if spec:"},{"line_number":327,"context_line":"                spec.merge(self._on_complete.get_publish())"},{"line_number":328,"context_line":"            else:"},{"line_number":329,"context_line":"                spec \u003d self._on_complete.get_publish()"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        if state \u003d\u003d states.SUCCESS:"},{"line_number":332,"context_line":"            on_clause \u003d self._on_success"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_b505aac3","line":329,"range":{"start_line":325,"start_character":8,"end_line":329,"end_character":54},"updated":"2019-11-12 07:18:52.000000000","message":"Yes, that\u0027s what I meant in the first place. Thanks!","commit_id":"c7a54d22df990795141dc990300ab76704aa5d30"}],"mistral/tests/unit/engine/test_dataflow.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"521f7979bff2f695982949a6f7feeb29f8e8f784","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            wf_output[\u0027result\u0027]"},{"line_number":617,"context_line":"        )"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def _find_task(self, task_name, tasks):"},{"line_number":620,"context_line":"        for task in tasks:"},{"line_number":621,"context_line":"            if task.get(\u0027name\u0027) \u003d\u003d task_name:"},{"line_number":622,"context_line":"                return task"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def test_publish_with_all(self):"},{"line_number":625,"context_line":"        wf_text \u003d \"\"\"---"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_98721aad","line":622,"range":{"start_line":619,"start_character":4,"end_line":622,"end_character":27},"updated":"2019-10-06 10:23:50.000000000","message":"I implemented this method here https://github.com/openstack/mistral/blob/master/mistral/tests/unit/api/v2/test_global_publish.py#L44-L51\n\nmaybe we should reuse it and move it utils ?","commit_id":"9d55253e7959dd83f2b3be8939f49e47c9430ecb"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"0f50c263ffc6f8b5887556a79b8b92a6e97611ec","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            wf_output[\u0027result\u0027]"},{"line_number":617,"context_line":"        )"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def _find_task(self, task_name, tasks):"},{"line_number":620,"context_line":"        for task in tasks:"},{"line_number":621,"context_line":"            if task.get(\u0027name\u0027) \u003d\u003d task_name:"},{"line_number":622,"context_line":"                return task"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def test_publish_with_all(self):"},{"line_number":625,"context_line":"        wf_text \u003d \"\"\"---"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_55cdb263","line":622,"range":{"start_line":619,"start_character":4,"end_line":622,"end_character":27},"in_reply_to":"3fa7e38b_98721aad","updated":"2019-10-16 05:32:13.000000000","message":"Please use this: https://github.com/openstack/mistral/blob/master/mistral/tests/unit/engine/test_direct_workflow.py#L86\n\nNo need to reinvent the wheel.","commit_id":"9d55253e7959dd83f2b3be8939f49e47c9430ecb"}]}
