diff --git a/elasticgit/models.py b/elasticgit/models.py index b055685..92c05bd 100644 --- a/elasticgit/models.py +++ b/elasticgit/models.py @@ -175,13 +175,18 @@ class ModelVersionField(DictField): } } + def compatible_version(self, own_version, check_version): + own = map(int, own_version.split('.')) + check = map(int, check_version.split('.')) + return own >= check + def validate(self, config): config._config_data.setdefault( self.name, elasticgit.version_info.copy()) value = self.get_value(config) current_version = elasticgit.version_info['package_version'] package_version = value['package_version'] - if (current_version < package_version): + if not self.compatible_version(current_version, package_version): raise ConfigError( 'Got a version from the future, expecting: %r got %r' % ( current_version, package_version)) diff --git a/elasticgit/tests/test_models.py b/elasticgit/tests/test_models.py index e1bd49c..7834a90 100644 --- a/elasticgit/tests/test_models.py +++ b/elasticgit/tests/test_models.py @@ -1,5 +1,6 @@ from elasticgit.tests.base import ModelBaseTest -from elasticgit.models import ConfigError, IntegerField, TextField +from elasticgit.models import ( + ConfigError, IntegerField, TextField, ModelVersionField) import elasticgit @@ -79,3 +80,9 @@ def test_update(self): self.assertEqual(new_model.name, model.name) self.assertTrue(model.is_read_only()) self.assertFalse(new_model.is_read_only()) + + def test_version_check(self): + field = ModelVersionField('ModelVersionField') + self.assertTrue(field.compatible_version('0.2.10', '0.2.9')) + self.assertTrue(field.compatible_version('0.2.10', '0.2.10')) + self.assertFalse(field.compatible_version('0.2.9', '0.2.10'))