[#7894] Fix issue where can_merge updated mod_date
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index f812e2e..b00d7c1 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -620,6 +620,22 @@
@contextmanager
def skip_mod_date(model_cls):
+ """ Avoids updating 'mod_date'
+
+ Useful for saving cache on a model and things like that.
+
+ .. note:: This only works when the changes made to the model are flushed.
+
+ :Example:
+
+ from allura import model as M
+ key = self.can_merge_cache_key()
+ with utils.skip_mod_date(M.MergeRequest):
+ self.can_merge_cache[key] = val
+ session(self).flush(self)
+
+ :param model_cls: The model *class* being updated.
+ """
skip_mod_date = getattr(session(model_cls)._get(), 'skip_mod_date', False)
session(model_cls)._get().skip_mod_date = True
try:
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 3f4799a..b3c60b7 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -832,9 +832,6 @@
return False
if self.app.config.options.get('merge_disabled'):
return False
-
- _session = artifact_orm_session._get()
- _session.skip_mod_date = True
return True
def can_merge_cache_key(self):
@@ -853,8 +850,11 @@
return self.can_merge_cache.get(key)
def set_can_merge_cache(self, val):
+ from allura import model as M
key = self.can_merge_cache_key()
- self.can_merge_cache[key] = val
+ with utils.skip_mod_date(M.MergeRequest):
+ self.can_merge_cache[key] = val
+ session(self).flush(self)
def can_merge(self):
"""
diff --git a/Allura/allura/tasks/repo_tasks.py b/Allura/allura/tasks/repo_tasks.py
index e44ea94..9ea9fd0 100644
--- a/Allura/allura/tasks/repo_tasks.py
+++ b/Allura/allura/tasks/repo_tasks.py
@@ -24,6 +24,7 @@
from allura.lib.decorators import task
from allura.lib.repository import RepositoryApp
+from allura.lib.utils import skip_mod_date
@task