diff --git a/taiga/base/utils/diff.py b/taiga/base/utils/diff.py index e8d07e67..603c9b85 100644 --- a/taiga/base/utils/diff.py +++ b/taiga/base/utils/diff.py @@ -17,12 +17,12 @@ # along with this program. If not, see . -def make_diff(first:dict, second:dict, not_found_value=None, excluded_keys:tuple=()) -> dict: +def make_diff(first: dict, second: dict, not_found_value=None, + excluded_keys: tuple = ()) -> dict: """ Compute a diff between two dicts. """ diff = {} - # Check all keys in first dict for key in first: if key not in second: diff --git a/taiga/projects/history/freeze_impl.py b/taiga/projects/history/freeze_impl.py index 706667ee..ae7eec7c 100644 --- a/taiga/projects/history/freeze_impl.py +++ b/taiga/projects/history/freeze_impl.py @@ -347,6 +347,7 @@ def userstory_freezer(us) -> dict: "subject": us.subject, "description": us.description, "description_html": mdrender(us.project, us.description), + "assigned_to": us.assigned_to_id, "assigned_users": [u.id for u in us.assigned_users.all()], "milestone": us.milestone_id, "client_requirement": us.client_requirement, diff --git a/taiga/projects/history/services.py b/taiga/projects/history/services.py index 27be7cae..ebd1bf60 100644 --- a/taiga/projects/history/services.py +++ b/taiga/projects/history/services.py @@ -85,6 +85,10 @@ _not_important_fields = { "tasks.task": frozenset(["us_order", "taskboard_order"]), } +_deprecated_fields = { + "userstories.userstory": frozenset(["assigned_to"]), +} + log = logging.getLogger("taiga.history") @@ -216,7 +220,15 @@ def is_hidden_snapshot(obj: FrozenDiff) -> bool: return False -def make_diff(oldobj: FrozenObj, newobj: FrozenObj) -> FrozenDiff: +def get_excluded_fields(typename: str) -> tuple: + """ + Get excluded and deprected fields to avoid in the diff + """ + return _deprecated_fields.get(typename) + + +def make_diff(oldobj: FrozenObj, newobj: FrozenObj, + excluded_keys: tuple = ()) -> FrozenDiff: """ Compute a diff between two frozen objects. """ @@ -229,7 +241,7 @@ def make_diff(oldobj: FrozenObj, newobj: FrozenObj) -> FrozenDiff: first = oldobj.snapshot second = newobj.snapshot - diff = make_diff_from_dicts(first, second) + diff = make_diff_from_dicts(first, second, None, excluded_keys) return FrozenDiff(newobj.key, diff, newobj.snapshot) @@ -338,7 +350,8 @@ def take_snapshot(obj: object, *, comment: str="", user=None, delete: bool=False else: raise RuntimeError("Unexpected condition") - fdiff = make_diff(old_fobj, new_fobj) + excluded_fields = get_excluded_fields(typename) + fdiff = make_diff(old_fobj, new_fobj, excluded_fields) # If diff and comment are empty, do # not create empty history entry