)]}'
{"integration/scripts/files/elements/ubuntu-couchbase/install.d/10-couchbase":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9a57fde8_db36c9b3","updated":"2017-01-12 15:36:59.000000000","message":"Can you rename this file to be 30-couchbase?  That seems to be the standard and avoids race conditions with other package installs.  Thx!","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9a57fde8_0a9b9cca","in_reply_to":"9a57fde8_db36c9b3","updated":"2017-01-12 15:54:07.000000000","message":"Done","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"}],"integration/scripts/files/elements/ubuntu-couchbase/install.d/30-couchbase":[{"author":{"_account_id":22818,"name":"Manoj Kumar","email":"manoj@linux.vnet.ibm.com","username":"manojnkumar"},"change_message_id":"c4524e47c1ae4eb864c6035147aa55f71970ed1b","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Install deb package"},{"line_number":32,"context_line":"# Do not start instance when installation is complete"},{"line_number":33,"context_line":"COUCHBASE_PACKAGE\u003d\"/tmp/in_target.d/couchbase-server-community_3.0.1-ubuntu12.04_amd64.deb\""},{"line_number":34,"context_line":"INSTALL_DONT_START_SERVER\u003d1 dpkg -i \"$COUCHBASE_PACKAGE\""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"7f96bb07_380d6fe7","line":33,"updated":"2018-01-18 19:04:42.000000000","message":"This seems to be only for amd64. \n\nAlso the latest community package for xenial seems to be 5.0.1.","commit_id":"4d83c5740cf514d98ffcd9b497eb84b908ebb9b1"}],"trove/common/cfg.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[{"line_number":997,"context_line":"               help\u003d\u0027Per node RAM quota in for the Data service expressed as a\u0027"},{"line_number":998,"context_line":"               \u0027 percentage of the available memory.\u0027"},{"line_number":999,"context_line":"               \u0027 Minimum of 256MB will be used if the given percentage amounts\u0027"},{"line_number":1000,"context_line":"               \u0027 for less.\u0027),"},{"line_number":1001,"context_line":"]"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"# MongoDB"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_fb4e2d95","line":1000,"range":{"start_line":1000,"start_character":17,"end_line":1000,"end_character":20},"updated":"2017-01-12 15:36:59.000000000","message":"\u0027to\u0027 would probably be clearer here","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[{"line_number":997,"context_line":"               help\u003d\u0027Per node RAM quota in for the Data service expressed as a\u0027"},{"line_number":998,"context_line":"               \u0027 percentage of the available memory.\u0027"},{"line_number":999,"context_line":"               \u0027 Minimum of 256MB will be used if the given percentage amounts\u0027"},{"line_number":1000,"context_line":"               \u0027 for less.\u0027),"},{"line_number":1001,"context_line":"]"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"# MongoDB"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_6aaa68d6","line":1000,"range":{"start_line":1000,"start_character":17,"end_line":1000,"end_character":20},"in_reply_to":"9a57fde8_fb4e2d95","updated":"2017-01-12 15:54:07.000000000","message":"Done","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"}],"trove/guestagent/datastore/experimental/couchbase/service.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"f1ae914b792ca2e1483f869d7cf2f21b1cbc3b53","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    MIN_RAMSIZE_QUOTA_MB \u003d 256"},{"line_number":53,"context_line":"    _ADMIN_USER \u003d \u0027root\u0027  # TODO(pmalik): Should be \u0027os_admin\u0027."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    COUCHBASE_KILL_CMD \u003d \u0027pkill -u couchbaso tee -a\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    SECRET_KEY_FILE \u003d \u0027secret_key\u0027"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_b0b57cd1","line":55,"range":{"start_line":55,"start_character":35,"end_line":55,"end_character":44},"updated":"2016-12-20 08:59:00.000000000","message":"little typo here, should be couchbase","commit_id":"006878b72cfd3017027aee68020d691e337995c5"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            LOG.debug(\u0027Installing Couchbase.\u0027)"},{"line_number":100,"context_line":"            self._install_couchbase(packages)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def initialize_node(self):"},{"line_number":103,"context_line":"        ip_address \u003d netutils.get_my_ipv4()"},{"line_number":104,"context_line":"        mount_point \u003d CONF.couchbase.mount_point"},{"line_number":105,"context_line":"        self.build_admin().run_node_init(mount_point, mount_point, ip_address)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def apply_post_restore_updates(self, backup_info):"},{"line_number":108,"context_line":"        self.status \u003d CouchbaseAppStatus(self.build_admin())"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def initialize_cluster(self, node_info\u003dNone):"},{"line_number":111,"context_line":"        \"\"\"Initialize this node as cluster."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        self.build_admin().run_cluster_init(node_info, self.ramsize_quota_mb)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_cluster_admin(self):"},{"line_number":116,"context_line":"        cluster_password \u003d self.get_password()"},{"line_number":117,"context_line":"        return models.CouchbaseUser(self._ADMIN_USER, cluster_password)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def secure(self, password\u003dNone, initialize\u003dTrue):"},{"line_number":120,"context_line":"        self.store_admin_credentials(password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_7665f4df","line":117,"range":{"start_line":102,"start_character":0,"end_line":117,"end_character":71},"updated":"2017-01-12 15:36:59.000000000","message":"looks like these should be in https://review.openstack.org/#/c/408236/ instead ... always a risk when changereqs are laid on top of each other :/","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            LOG.debug(\u0027Installing Couchbase.\u0027)"},{"line_number":100,"context_line":"            self._install_couchbase(packages)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def initialize_node(self):"},{"line_number":103,"context_line":"        ip_address \u003d netutils.get_my_ipv4()"},{"line_number":104,"context_line":"        mount_point \u003d CONF.couchbase.mount_point"},{"line_number":105,"context_line":"        self.build_admin().run_node_init(mount_point, mount_point, ip_address)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def apply_post_restore_updates(self, backup_info):"},{"line_number":108,"context_line":"        self.status \u003d CouchbaseAppStatus(self.build_admin())"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def initialize_cluster(self, node_info\u003dNone):"},{"line_number":111,"context_line":"        \"\"\"Initialize this node as cluster."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        self.build_admin().run_cluster_init(node_info, self.ramsize_quota_mb)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_cluster_admin(self):"},{"line_number":116,"context_line":"        cluster_password \u003d self.get_password()"},{"line_number":117,"context_line":"        return models.CouchbaseUser(self._ADMIN_USER, cluster_password)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def secure(self, password\u003dNone, initialize\u003dTrue):"},{"line_number":120,"context_line":"        self.store_admin_credentials(password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_aa6ff090","line":117,"range":{"start_line":102,"start_character":0,"end_line":117,"end_character":71},"in_reply_to":"9a57fde8_7665f4df","updated":"2017-01-12 15:54:07.000000000","message":"These commands are actually required for Couchbase provisioning (even a single Couchbase instance is cluster). They have been moved from system.py","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bcba6490a7a89cb8ad7390a1378184c8faa9ca1f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            LOG.debug(\u0027Installing Couchbase.\u0027)"},{"line_number":100,"context_line":"            self._install_couchbase(packages)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def initialize_node(self):"},{"line_number":103,"context_line":"        ip_address \u003d netutils.get_my_ipv4()"},{"line_number":104,"context_line":"        mount_point \u003d CONF.couchbase.mount_point"},{"line_number":105,"context_line":"        self.build_admin().run_node_init(mount_point, mount_point, ip_address)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def apply_post_restore_updates(self, backup_info):"},{"line_number":108,"context_line":"        self.status \u003d CouchbaseAppStatus(self.build_admin())"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def initialize_cluster(self, node_info\u003dNone):"},{"line_number":111,"context_line":"        \"\"\"Initialize this node as cluster."},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        self.build_admin().run_cluster_init(node_info, self.ramsize_quota_mb)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_cluster_admin(self):"},{"line_number":116,"context_line":"        cluster_password \u003d self.get_password()"},{"line_number":117,"context_line":"        return models.CouchbaseUser(self._ADMIN_USER, cluster_password)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def secure(self, password\u003dNone, initialize\u003dTrue):"},{"line_number":120,"context_line":"        self.store_admin_credentials(password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_aad8d0f0","line":117,"range":{"start_line":102,"start_character":0,"end_line":117,"end_character":71},"in_reply_to":"9a57fde8_aa6ff090","updated":"2017-01-12 16:02:20.000000000","message":"Ah, right, thx!","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"35fcccbd44707a3df16752edf00fdcd831ffde5d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    MIN_RAMSIZE_QUOTA_MB \u003d 256"},{"line_number":53,"context_line":"    _ADMIN_USER \u003d \u0027root\u0027  # TODO(pmalik): Should be \u0027os_admin\u0027."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    COUCHBASE_KILL_CMD \u003d \u0027pkill -u couchbaso tee -a\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    SECRET_KEY_FILE \u003d \u0027secret_key\u0027"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_ebc8f622","line":55,"range":{"start_line":55,"start_character":35,"end_line":55,"end_character":44},"updated":"2018-01-16 08:51:33.000000000","message":"this type has not been corrected yet, should be:\npkill -u couchbase tee -a","commit_id":"0a0280b11a490aaa298262442d199c4fd920c664"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"fb8a09487f7863878b2a7fb829a787dade3cf22f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        operating_system.create_directory(self.couchbase_conf_dir,"},{"line_number":148,"context_line":"                                          as_root\u003dTrue)"},{"line_number":149,"context_line":"        pkg_opts \u003d {}"},{"line_number":150,"context_line":"        packager.pkg_install(packages, pkg_opts, 1200)"},{"line_number":151,"context_line":"        self.start_db()"},{"line_number":152,"context_line":"        LOG.debug(\u0027Finished installing Couchbase Server.\u0027)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f96bb07_7ef4b4cf","line":150,"range":{"start_line":150,"start_character":49,"end_line":150,"end_character":53},"updated":"2018-01-16 01:09:16.000000000","message":"No other usage except here, so maybe just a constant is fine. Consider other future usage, a static variable is better.","commit_id":"0a0280b11a490aaa298262442d199c4fd920c664"}],"trove/guestagent/strategies/backup/experimental/couchbase_impl.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                operating_system.copy(self.app.couchbase_pwd_file,"},{"line_number":99,"context_line":"                                      system.COUCHBASE_DUMP_DIR,"},{"line_number":100,"context_line":"                                      preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":101,"context_line":"        except exception.ProcessExecutionError as p:"},{"line_number":102,"context_line":"            LOG.error(p)"},{"line_number":103,"context_line":"            raise p"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _run_post_backup(self):"},{"line_number":106,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_76da547a","line":103,"range":{"start_line":101,"start_character":46,"end_line":103,"end_character":19},"updated":"2017-01-12 15:36:59.000000000","message":"This was better before ...","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                operating_system.copy(self.app.couchbase_pwd_file,"},{"line_number":99,"context_line":"                                      system.COUCHBASE_DUMP_DIR,"},{"line_number":100,"context_line":"                                      preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":101,"context_line":"        except exception.ProcessExecutionError as p:"},{"line_number":102,"context_line":"            LOG.error(p)"},{"line_number":103,"context_line":"            raise p"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _run_post_backup(self):"},{"line_number":106,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_6a81884a","line":103,"range":{"start_line":101,"start_character":46,"end_line":103,"end_character":19},"in_reply_to":"9a57fde8_76da547a","updated":"2017-01-12 15:54:07.000000000","message":"Done","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            for cmd in self.post_backup_commands:"},{"line_number":108,"context_line":"                utils.execute_with_timeout(*cmd)"},{"line_number":109,"context_line":"        except exception.ProcessExecutionError as p:"},{"line_number":110,"context_line":"            LOG.error(p)"},{"line_number":111,"context_line":"            raise p"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_56c47091","line":111,"range":{"start_line":109,"start_character":46,"end_line":111,"end_character":19},"updated":"2017-01-12 15:36:59.000000000","message":"ditto","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            for cmd in self.post_backup_commands:"},{"line_number":108,"context_line":"                utils.execute_with_timeout(*cmd)"},{"line_number":109,"context_line":"        except exception.ProcessExecutionError as p:"},{"line_number":110,"context_line":"            LOG.error(p)"},{"line_number":111,"context_line":"            raise p"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_aa9370a2","line":111,"range":{"start_line":109,"start_character":46,"end_line":111,"end_character":19},"in_reply_to":"9a57fde8_56c47091","updated":"2017-01-12 15:54:07.000000000","message":"Done","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"}],"trove/guestagent/strategies/restore/experimental/couchbase_impl.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def pre_restore(self):"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            operating_system.remove(system.COUCHBASE_DUMP_DIR, force\u003dTrue)"},{"line_number":49,"context_line":"        except exception.ProcessExecutionError as p:"},{"line_number":50,"context_line":"            LOG.error(p)"},{"line_number":51,"context_line":"            raise p"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def post_restore(self):"},{"line_number":54,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_7648942e","line":51,"range":{"start_line":49,"start_character":46,"end_line":51,"end_character":19},"updated":"2017-01-12 15:36:59.000000000","message":"not sure why all these were changed ...","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def pre_restore(self):"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            operating_system.remove(system.COUCHBASE_DUMP_DIR, force\u003dTrue)"},{"line_number":49,"context_line":"        except exception.ProcessExecutionError as p:"},{"line_number":50,"context_line":"            LOG.error(p)"},{"line_number":51,"context_line":"            raise p"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def post_restore(self):"},{"line_number":54,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_6af8a8e6","line":51,"range":{"start_line":49,"start_character":46,"end_line":51,"end_character":19},"in_reply_to":"9a57fde8_7648942e","updated":"2017-01-12 15:54:07.000000000","message":"Done","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"81659faf6358a84c4fa506feb5030d42531fe0d8","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                        # cbrestore fails or hangs at times:"},{"line_number":192,"context_line":"                        # http://www.couchbase.com/issues/browse/MB-10832"},{"line_number":193,"context_line":"                        # Retrying typically works"},{"line_number":194,"context_line":"                        LOG.error(p)"},{"line_number":195,"context_line":"                        LOG.error(_(\"cbrestore failed. Retrying...\"))"},{"line_number":196,"context_line":"                        utils.execute_with_timeout(restore_cmd,"},{"line_number":197,"context_line":"                                                   shell\u003dTrue,"},{"line_number":198,"context_line":"                                                   timeout\u003d300)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_b6691c8e","line":195,"range":{"start_line":194,"start_character":29,"end_line":195,"end_character":33},"updated":"2017-01-12 15:36:59.000000000","message":"again, better before","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"81df5e587ea43bcc07443bcd58b1e9369ff51bcf","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                        # cbrestore fails or hangs at times:"},{"line_number":192,"context_line":"                        # http://www.couchbase.com/issues/browse/MB-10832"},{"line_number":193,"context_line":"                        # Retrying typically works"},{"line_number":194,"context_line":"                        LOG.error(p)"},{"line_number":195,"context_line":"                        LOG.error(_(\"cbrestore failed. Retrying...\"))"},{"line_number":196,"context_line":"                        utils.execute_with_timeout(restore_cmd,"},{"line_number":197,"context_line":"                                                   shell\u003dTrue,"},{"line_number":198,"context_line":"                                                   timeout\u003d300)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_8addcc72","line":195,"range":{"start_line":194,"start_character":29,"end_line":195,"end_character":33},"in_reply_to":"9a57fde8_b6691c8e","updated":"2017-01-12 15:54:07.000000000","message":"Done","commit_id":"a90034b88f7bae9990a8e45f7aca1aed2fcb2850"}]}
