monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] Re: resolving name conflicts; implementation issues


From: Koen Kooi
Subject: [Monotone-devel] Re: resolving name conflicts; implementation issues
Date: Sun, 11 May 2008 16:42:47 +0200
User-agent: Thunderbird 3.0a1pre (Macintosh/2008042803)

Stephen Leake wrote:
Stephen Leake<address@hidden>  writes:

The next step is to add the "suture" resolution. I'll call it
"resolve_suture" instead of "resolve_content_ws". I suspect most
people have a vague idea of what "suture" means in English, but will
be motivated to check the manual to see what mtn means by it.

"resolve_suture" will require a file name for the new content;  I
don't want to require a workspace for this.

For the first implementation, I'll simply drop both old node ids, and
add a new one. This is clearly not enough, but does seem to be the
consensus as a minimum requirement for "suture". Then we'll have a
concrete example for further discussions on how to store the extra
information required for history, future merging, etc.

This is implemented; see tests/resolve_duplicate_name_conflict in
726aaf7152d47e625f3217a587744bd5622e8590. That implements both the
"checkout.sh" and "thermostat.c" use cases. 'merge
--resolve-conflicts-file' succeeds with the following messages:

mtn: 2 heads on branch 'testbranch'
mtn: [left]  1337cb1059c4bc3e376b14381b43e9383c654da1
mtn: [right] d5f1dd136c86b5bbd5e71b0c3365667e328af492
mtn: suturing checkout.sh, checkout.sh into checkout.sh
mtn: renaming thermostat.c to thermostat-westinghouse.c
mtn: renaming thermostat.c to thermostat-honeywell.c
mtn: [merged] 76536a3d05eb605277e96523c51697be4803abff
mtn: note: your workspaces have not been updated

The lua test is a bit hard to read for me, could you give an example of a session where you perform this actions?

regards,

Koen


However, a subsequent 'update' drops checkout.sh:

mtn: updating along branch 'testbranch'
mtn: selected update target 76536a3d05eb605277e96523c51697be4803abff
mtn: [left]  084affdd52bf9d8dbb2ff94a848bc0c577a9dcc6
mtn: [right] 76536a3d05eb605277e96523c51697be4803abff
mtn: warning: Content changes to the file 'checkout.sh'
mtn: warning: will be ignored during this merge as the file has been
mtn: warning: removed on one side of the merge.  Affected revisions include:
mtn: warning: Revision: 084affdd52bf9d8dbb2ff94a848bc0c577a9dcc6
mtn: adding checkout.sh
mtn: renaming thermostat.c to thermostat-honeywell.c
mtn: adding thermostat-westinghouse.c
mtn: dropping checkout.sh
mtn: updated to base revision 76536a3d05eb605277e96523c51697be4803abff

The warning and 'dropping checkout.sh' are not what we want. This is
due to diediedie.

Note that if I had sutured to a different name, the sutured file would
have survived, and could be renamed back later. But that's messy.

I have not looked at fixing it in detail yet. It may be that we should
merge this branch with nvm.mark-merge-existence; that looks promising.

I don't have any other tests for consistency, and I haven't run the
rest of the test suite.


One problem I had: an invariant failure in roster.cc
roster_t::drop_detached_node. The rationale for it is in a comment
starting at line 257 in roster.hh. In short, the current design says
you cannot drop a node that has never been attached. But roster_merge
puts conflict nodes in that state.

I think the simplest fix is to simply relax that requirement; allow
dropping nodes that have never been attached. That means the following
change in drop_detached_node:

-  safe_erase(old_locations, nid);
+  old_locations.erase(nid);

This breaks no existing functionality; it just means one invariant
check is removed, so some new bugs may be harder to find.

Another solution is to have roster_merge _not_ put conflict nodes in
the merged roster. But that seems like overkill.

I have a question; when are temporary node ids converted to true node
ids? I can't find that in the code.


I'll add the resolution parsing functions as well.

This is done. I changed the format of the 'automate show_conflicts'
output slightly, to make it easier to read back in. I'll make the same
changes in main before the next release.

--
-- Stephe






reply via email to

[Prev in Thread] Current Thread [Next in Thread]