•  
      epic #26757 Move artifacts from one tracker to another (complete)
    Summary
    Move artifacts from one tracker to another (complete)
    Trackers

    Move has been scaffold in art #9563, the goal of this epic is to make it complete (as complete as possible).

    Strategy

    The strategy for a complete move of artifact is slightly different of the original one. It's "duck-type" based, it means that a field value will be moved if:

    • both source and target field have the same name (eg title)
    • both source and target field have the same or compatible type. Compatible types means:
      • string -> text
      • date -> date/time
      • integer -> float
      • source list fields values (for static binding) must exist in target
      • everything that is based on user groups (user & group list binding, permission on artifact) will be moved using user group name matching. However when there is a user involved the user must exist in the target user group otherwise to be moved.

    This strategy allows to move all fields but comes with a down side (regression) that it's no longer possible to move artifacts with incompatible names. For instance moving a User Story, whose Title semantic is bound to i_want_to field, to a Task, whose Title semantic is bound to summary field.

    However we think that this use case, if it exist, should be rather marginal and the full move feature has more value.

    The move still behaves as originally designed: when something cannot be moved because incompatible structure, the user gets a warning about it but can decide to force move (and loose the information)

    Limitations & edge cases

    • Artifacts in trackers that use encrypted_field cannot be moved.
    • Artifacts with _mirrored_milestone links (forward or reverse) cannot be moved (it's Milestones in Program Management)
    • Artifact links:
      • when the link type is a system one (_is_child, covered_by)
        • the type is removed at move.
        • in the "move" changeset, there is an indication that type has been cleared (with source type)
      • when the link type is a custom one (defined by site admin), the type is moved.

    In order to get a better grasp of the problem of moving artifact links, let's take an example. Given that we want to move User Story B that is in a hierarchy:

    Epic A
    `-- User Story B
            |-- Task 2
           `-- Task 1
    

    When we move User Story B in another project we need to:

    • Update Epic A to remove _is_child type between Epic A and User Story B because all the features that rely on parent/child relationship (agile dashboard, etc) assume that the hierarchy is in only one project.
    • At move of User Story B, remove _is_child on links to Task 2 and Task 1 for the same reasons.

    We keep the links so we can also move the Task (and possibly the epic) and after move of everything it's possible to set hierarchy again.

    Progress
    2023-05-25
    2023-07-19 (39 working days)
    Closed
    Details
    #26757
    Manuel Vacelet (vaceletm)
    2023-09-21 17:08
    2022-05-04 15:22
    Attachments
    Empty
    References

    Follow-ups

    User avatar
    • Description
      Something went wrong, the follow up content couldn't be loaded
      Only formatting have been changed, you should switch to markup to see the changes
    User avatar
    • Description
      Something went wrong, the follow up content couldn't be loaded
      Only formatting have been changed, you should switch to markup to see the changes
    • Permissions set to