)]}'
{"trove/guestagent/common/configuration.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"3b499be2f65688cb8603538295796d9e30bfb1ab","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    DEFAULT_OVERRIDES_DIR \u003d \u0027overrides\u0027"},{"line_number":42,"context_line":"    DEFAULT_CHANGE_ID \u003d \u0027common\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, base_config_path, owner, group, codec,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_b62bbf93","line":41,"updated":"2015-07-21 21:51:08.000000000","message":"-1: I don\u0027t see how this is a default overrides dir.  Where can this value be changed?","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"342fd92f4d1738e9fe48509b9f6e4b5cd569fb28","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    DEFAULT_OVERRIDES_DIR \u003d \u0027overrides\u0027"},{"line_number":42,"context_line":"    DEFAULT_CHANGE_ID \u003d \u0027common\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, base_config_path, owner, group, codec,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_46ae4699","line":41,"in_reply_to":"3a50d1a3_b62bbf93","updated":"2015-07-22 00:59:17.000000000","message":"If there is no override strategy provided by the user we create one in the __init__() below. This is subdirectory where we store the override files. It can be \u0027changed\u0027 by providing a custom strategy to the __init__().","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"3b499be2f65688cb8603538295796d9e30bfb1ab","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self._codec \u003d codec"},{"line_number":72,"context_line":"        self._requires_root \u003d requires_root"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if override_strategy is None:"},{"line_number":75,"context_line":"            # Use OneFile strategy by default. Store the revisions in a"},{"line_number":76,"context_line":"            # sub-directory at the location of the configuration file."},{"line_number":77,"context_line":"            revision_dir \u003d guestagent_utils.build_file_path("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d6552b50","line":74,"updated":"2015-07-21 21:51:08.000000000","message":"0: \"if not override_strategy\" is more pythonic.  It would be perfectly pythonic to specify \"override_strategy\u003dFalse\", but your check would fail.","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"342fd92f4d1738e9fe48509b9f6e4b5cd569fb28","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self._codec \u003d codec"},{"line_number":72,"context_line":"        self._requires_root \u003d requires_root"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if override_strategy is None:"},{"line_number":75,"context_line":"            # Use OneFile strategy by default. Store the revisions in a"},{"line_number":76,"context_line":"            # sub-directory at the location of the configuration file."},{"line_number":77,"context_line":"            revision_dir \u003d guestagent_utils.build_file_path("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_e6975246","line":74,"in_reply_to":"3a50d1a3_d6552b50","updated":"2015-07-22 00:59:17.000000000","message":"Done","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"3b499be2f65688cb8603538295796d9e30bfb1ab","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if override_strategy is None:"},{"line_number":75,"context_line":"            # Use OneFile strategy by default. Store the revisions in a"},{"line_number":76,"context_line":"            # sub-directory at the location of the configuration file."},{"line_number":77,"context_line":"            revision_dir \u003d guestagent_utils.build_file_path("},{"line_number":78,"context_line":"                os.path.dirname(base_config_path),"},{"line_number":79,"context_line":"                self.DEFAULT_OVERRIDES_DIR)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_b64adfaa","line":76,"updated":"2015-07-21 21:51:08.000000000","message":"0: Should we really be creating directories in the config directory?  Some databases could trip over this.  Is there any reason we couldn\u0027t do this in some trove directory?","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"342fd92f4d1738e9fe48509b9f6e4b5cd569fb28","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if override_strategy is None:"},{"line_number":75,"context_line":"            # Use OneFile strategy by default. Store the revisions in a"},{"line_number":76,"context_line":"            # sub-directory at the location of the configuration file."},{"line_number":77,"context_line":"            revision_dir \u003d guestagent_utils.build_file_path("},{"line_number":78,"context_line":"                os.path.dirname(base_config_path),"},{"line_number":79,"context_line":"                self.DEFAULT_OVERRIDES_DIR)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_e6d3d202","line":76,"in_reply_to":"3a50d1a3_b64adfaa","updated":"2015-07-22 00:59:17.000000000","message":"Well, if a database supports configuration imports natively (like MySQL) it should probably be using the ImportOverrideStrategy. But I see what you mean. Keep in mind this is just the default strategy we build if None is given (we need at least some strategy to support system overrides even if the guest agent itself does not implement support for configuration groups). Normally the user would provide a custom strategy with a proper location for these files.\nWe could certainly put these somewhere else, but the question is where. We currently don\u0027t really have a default location for Trove resources. I am open for suggestions.","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"3b499be2f65688cb8603538295796d9e30bfb1ab","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":175,"context_line":"class ConfigurationOverrideStrategy(object):"},{"line_number":176,"context_line":"    \"\"\"ConfigurationOverrideStrategy handles configuration files."},{"line_number":177,"context_line":"    The strategy provides functionality to enumerate, apply and remove"},{"line_number":178,"context_line":"    configuration overrides."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4c974fec","line":175,"updated":"2015-07-21 21:51:08.000000000","message":"0: Is this class really adding anything?  It would make sense in Java, but I don\u0027t think this usage is Pythonic.","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"342fd92f4d1738e9fe48509b9f6e4b5cd569fb28","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":175,"context_line":"class ConfigurationOverrideStrategy(object):"},{"line_number":176,"context_line":"    \"\"\"ConfigurationOverrideStrategy handles configuration files."},{"line_number":177,"context_line":"    The strategy provides functionality to enumerate, apply and remove"},{"line_number":178,"context_line":"    configuration overrides."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_667b42f6","line":175,"in_reply_to":"3a50d1a3_4c974fec","updated":"2015-07-22 00:59:17.000000000","message":"This defines the interface used and required from a strategy by the configuration manager. It is not going to work if these methods are not implemented. Although the currently implemented strategies are very close to each other, that may not be the case for any other strategies possibly required by future datastores. I would therefore rather avoid stuffing this into a base class implementation.","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"3b499be2f65688cb8603538295796d9e30bfb1ab","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        self._revision_dir \u003d revision_dir"},{"line_number":384,"context_line":"        self._import_strategy \u003d ImportOverrideStrategy(revision_dir,"},{"line_number":385,"context_line":"                                                       self.REVISION_EXT)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def configure(self, base_config_path, owner, group, codec, requires_root):"},{"line_number":388,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ccdd9fe1","line":385,"updated":"2015-07-21 21:51:08.000000000","message":"-1: Why are you \"using\" ImportOverrideStrategy?  It seems like you are extending it.","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"342fd92f4d1738e9fe48509b9f6e4b5cd569fb28","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        self._revision_dir \u003d revision_dir"},{"line_number":384,"context_line":"        self._import_strategy \u003d ImportOverrideStrategy(revision_dir,"},{"line_number":385,"context_line":"                                                       self.REVISION_EXT)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def configure(self, base_config_path, owner, group, codec, requires_root):"},{"line_number":388,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_a6914af3","line":385,"in_reply_to":"3a50d1a3_ccdd9fe1","updated":"2015-07-22 00:59:17.000000000","message":"A believe that \u0027encapsulation\u0027 represents this case better than \u0027inheritance\u0027. This is not really an import strategy - the it is used by datastores that do not support importable configurations. In fact it operates quite differently. It rather uses the ImportStrategy internally to keep track of the changes. That\u0027s why I store it as an internal \u0027strategy\u0027.","commit_id":"48e1b997aafe7de4a6cef0c9fc267f82eba4a648"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"7839ecf14e07d8d25649d9609c75dacc487a8c5e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    # Configuration group names. The names determine the order in which the"},{"line_number":37,"context_line":"    # groups get applied. System group should get applied over the user group."},{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_9e648b22","line":37,"updated":"2015-07-29 04:51:18.000000000","message":"side note: I\u0027ve not been able to determine that the conf.d files are loaded in alpha order or not.","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"025334772051508f53f6470bf09195a8a74f26db","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    # Configuration group names. The names determine the order in which the"},{"line_number":37,"context_line":"    # groups get applied. System group should get applied over the user group."},{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_94c64d98","line":37,"in_reply_to":"3a50d1a3_9e648b22","updated":"2015-07-29 16:50:30.000000000","message":"Yes. Unfortunately, according to the MySQL doc ( https://dev.mysql.com/doc/refman/5.6/en/option-files.html ), the order DOES matter but is NOT guaranteed. It is however already been relied on in the current code (e.g. mysql replication).\n\n- I think that given this information the cleanest thing to do would be to switch MySQL to the OneFileImportStrategy which does the sorting itself and hence guarantees the order. It would however create some issues with potential upgrades of existing GA (We would have to detect the \u0027includedir\u0027 directive in the base CNF file and re-render it using new strategy. The existing GA would otherwise lose any override settings. The rest should just work.).\n\n- Another way would be to inject (and maintain) explicit \u0027include\u0027 directives for each file into the base CNF in order. But it would not provide any benefit over the existing OneFile strategy (except of being more involved)...","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"7839ecf14e07d8d25649d9609c75dacc487a8c5e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # Configuration group names. The names determine the order in which the"},{"line_number":37,"context_line":"    # groups get applied. System group should get applied over the user group."},{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    DEFAULT_STRATEGY_OVERRIDES_SUB_DIR \u003d \u0027overrides\u0027"},{"line_number":42,"context_line":"    DEFAULT_CHANGE_ID \u003d \u0027common\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_1e607b00","line":39,"updated":"2015-07-29 04:51:18.000000000","message":"I think it would be best to separate these if they are in fact loaded in alpha order.\n\nBecause i could see in the future we may need to load something between these. \n\nSo making the USER_GROUP like a 20-user and system a 50-system. This would give us or other deployers the ability to make other customization that they determine fit the system best.","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"8ebe3e57134f11891fb7ac898ade03f7c69900b3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # Configuration group names. The names determine the order in which the"},{"line_number":37,"context_line":"    # groups get applied. System group should get applied over the user group."},{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    DEFAULT_STRATEGY_OVERRIDES_SUB_DIR \u003d \u0027overrides\u0027"},{"line_number":42,"context_line":"    DEFAULT_CHANGE_ID \u003d \u0027common\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_e4ea790e","line":39,"in_reply_to":"3a50d1a3_1e607b00","updated":"2015-07-29 20:08:44.000000000","message":"Done","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"8277df688b2a194ed9544bbdb0138ac8f073e4f9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # Configuration group names. The names determine the order in which the"},{"line_number":37,"context_line":"    # groups get applied. System group should get applied over the user group."},{"line_number":38,"context_line":"    USER_GROUP \u003d \u00270-user\u0027"},{"line_number":39,"context_line":"    SYSTEM_GROUP \u003d \u00271-system\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    DEFAULT_STRATEGY_OVERRIDES_SUB_DIR \u003d \u0027overrides\u0027"},{"line_number":42,"context_line":"    DEFAULT_CHANGE_ID \u003d \u0027common\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_1e149e9d","line":39,"in_reply_to":"3a50d1a3_1e607b00","updated":"2015-07-29 16:29:27.000000000","message":"Good point.  We may need to insert something in between in the future.  (BTW, they are loaded in alpha order.)","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"7839ecf14e07d8d25649d9609c75dacc487a8c5e","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        :param override_strategy    Strategy used to manage configuration"},{"line_number":65,"context_line":"                                    overrides."},{"line_number":66,"context_line":"        :type override_strategy     ConfigurationOverrideStrategy"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        self._base_config_path \u003d base_config_path"},{"line_number":69,"context_line":"        self._owner \u003d owner"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_616b22ba","line":66,"updated":"2015-07-29 04:51:18.000000000","message":"could you add an example of this or what the default is set to? this doc string is good except what i would put here.","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"8ebe3e57134f11891fb7ac898ade03f7c69900b3","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        :param override_strategy    Strategy used to manage configuration"},{"line_number":65,"context_line":"                                    overrides."},{"line_number":66,"context_line":"        :type override_strategy     ConfigurationOverrideStrategy"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        self._base_config_path \u003d base_config_path"},{"line_number":69,"context_line":"        self._owner \u003d owner"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_e496f9ee","line":66,"in_reply_to":"3a50d1a3_616b22ba","updated":"2015-07-29 20:08:44.000000000","message":"Done","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"7839ecf14e07d8d25649d9609c75dacc487a8c5e","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        Return an empty dict if the base file is always the most current"},{"line_number":218,"context_line":"        version of configuration."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        :returns:        Updates to the base revision s as a Python dict."},{"line_number":221,"context_line":"        \"\"\""},{"line_number":222,"context_line":"        return {}"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_c169d6fa","line":220,"updated":"2015-07-29 04:51:18.000000000","message":"theres a stray \u0027s\u0027 in that s sentence.","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"8ebe3e57134f11891fb7ac898ade03f7c69900b3","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        Return an empty dict if the base file is always the most current"},{"line_number":218,"context_line":"        version of configuration."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        :returns:        Updates to the base revision s as a Python dict."},{"line_number":221,"context_line":"        \"\"\""},{"line_number":222,"context_line":"        return {}"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_812287b7","line":220,"in_reply_to":"3a50d1a3_c169d6fa","updated":"2015-07-29 20:08:44.000000000","message":"Done","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"8277df688b2a194ed9544bbdb0138ac8f073e4f9","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            last_revision_index \u003d self._get_last_file_index(group_name)"},{"line_number":287,"context_line":"            revision_file \u003d guestagent_utils.build_file_path("},{"line_number":288,"context_line":"                self._revision_dir,"},{"line_number":289,"context_line":"                \u0027%s-%d-%s\u0027 % (group_name, last_revision_index + 1, change_id),"},{"line_number":290,"context_line":"                self._revision_ext)"},{"line_number":291,"context_line":"        else:"},{"line_number":292,"context_line":"            # Update the existing file."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_19283885","line":289,"updated":"2015-07-29 16:29:27.000000000","message":"Since this is going to be read in alpha order, it should probably be:\n\n  \u0027%s-%3d-%s\u0027\n\nThen it would support up to 999 files - probably enough for all practical purposes.  Otherwise \u002710\u0027 would be read before \u00272\u0027","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"8ebe3e57134f11891fb7ac898ade03f7c69900b3","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            last_revision_index \u003d self._get_last_file_index(group_name)"},{"line_number":287,"context_line":"            revision_file \u003d guestagent_utils.build_file_path("},{"line_number":288,"context_line":"                self._revision_dir,"},{"line_number":289,"context_line":"                \u0027%s-%d-%s\u0027 % (group_name, last_revision_index + 1, change_id),"},{"line_number":290,"context_line":"                self._revision_ext)"},{"line_number":291,"context_line":"        else:"},{"line_number":292,"context_line":"            # Update the existing file."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_24e5c136","line":289,"in_reply_to":"3a50d1a3_19283885","updated":"2015-07-29 20:08:44.000000000","message":"Done","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"7839ecf14e07d8d25649d9609c75dacc487a8c5e","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        return parsed_options"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def has_revisions(self):"},{"line_number":330,"context_line":"        \"\"\"Return True if there currently are any revision files."},{"line_number":331,"context_line":"        \"\"\""},{"line_number":332,"context_line":"        return len(self._collect_revision_files()) \u003e 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_616a42ef","line":329,"updated":"2015-07-29 04:51:18.000000000","message":"this looks like it could be a property.","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"8ebe3e57134f11891fb7ac898ade03f7c69900b3","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        return parsed_options"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def has_revisions(self):"},{"line_number":330,"context_line":"        \"\"\"Return True if there currently are any revision files."},{"line_number":331,"context_line":"        \"\"\""},{"line_number":332,"context_line":"        return len(self._collect_revision_files()) \u003e 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_44656dac","line":329,"in_reply_to":"3a50d1a3_616a42ef","updated":"2015-07-29 20:08:44.000000000","message":"Done","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"1499d5802ae0b2e502a72c8b3ef9bf09ef84d031","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def get_value(self, key, default\u003dNone):"},{"line_number":99,"context_line":"        \"\"\"Return the current value at a given key or \u0027default\u0027."},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if self._value_cache is None:"},{"line_number":102,"context_line":"            self._refresh_cache()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return self._value_cache.get(key, default)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_6053586d","line":101,"updated":"2015-07-31 14:00:12.000000000","message":"I think it\u0027d be nice to have a flag passed in (refresh_cache\u003dFalse) that could be used to force a refresh, but we can implement that when it\u0027s deemed necessary.","commit_id":"6ac3afe45128559b04cffbef94a76789b907902a"}],"trove/tests/unittests/guestagent/test_redis_manager.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"8277df688b2a194ed9544bbdb0138ac8f073e4f9","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @patch.multiple(redis_service.RedisApp,"},{"line_number":32,"context_line":"                    _build_admin_client\u003dDEFAULT, _init_overrides_dir\u003dDEFAULT)"},{"line_number":33,"context_line":"    def setUp(self, *args, **kwargs):"},{"line_number":34,"context_line":"        super(RedisGuestAgentManagerTest, self).setUp()"},{"line_number":35,"context_line":"        self.context \u003d TroveContext()"},{"line_number":36,"context_line":"        self.manager \u003d RedisManager()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_d955f0c1","line":33,"range":{"start_line":33,"start_character":25,"end_line":33,"end_character":35},"updated":"2015-07-29 16:29:27.000000000","message":"not sure why this is here ...","commit_id":"e291fed425d9188fbcdbd9960a3affd9358cc4b8"}]}
