Hi,

I was thinking about which options should be offered by the tree conflict
resolver in a common case with a catch-up merge when a file is moved
away in trunk and edited on the branch.  (Limiting the scope to a case
when we can detect the move.)

Currently, the resolver offers the "move local file and merge" option, but
also offers to ignore or accept the incoming deletion:
[[[

  File merged from
  '^/serf/trunk/serf.h@33'
  to
  '^/serf/trunk/serf.h@36'
  was moved to '^/serf/trunk/serf_deprecated.h' by evgeny.kotkov in r35.
  A file which differs from the corresponding file on the merge source branch
  was found in the working copy.

    (p)  - skip this conflict and leave it unresolved  [postpone]
    (r)  - accept current working copy state  [working]
    (i)  - ignore the deletion of '^/serf/trunk/serf.h@36'
    (a)  - accept the deletion of 'serf.h'
    (m)  - move 'serf.h' to 'serf_deprecated.h' and merge
    (h)  - show this help (also '?')
    (q)  - postpone all remaining conflicts

  Select: (p) postpone, (r) accept current working copy state,
          (i) ignore incoming deletion, (a) accept incoming deletion,
          (m) move 'serf.h' to 'serf_deprecated.h' and merge,
          (h) help, (q) quit resolution:

]]]

The resolver says that it has detected a move, so options "(i) ignore
incoming deletion" and "(a) accept incoming deletion" can confuse the
users (what's deleted?).  And, if we know that it's actually a move, I
cannot think of a case where ignoring or accepting the deletion would
prove useful.

Perhaps, for cases when we know that a move happened, it would be better
to just say:

  Select: (p) postpone, (r) accept current working copy state,
          (m) move 'serf.h' to 'serf_deprecated.h' and merge,
          (h) help, (q) quit resolution:

I could implement this behavior.  How does it sound?


Regards,
Evgeny Kotkov

Reply via email to