|
From: | Markus Schiltknecht |
Subject: | Re: [Monotone-devel] fatal: std::logic_error: roster_merge.cc:528: invariant 'I(left_name == right_name)' violated |
Date: | Thu, 27 Mar 2008 23:33:24 +0100 |
User-agent: | Mozilla-Thunderbird 2.0.0.9 (X11/20080109) |
Hi, Brian May wrote:
I don't understand this; I thought Monotone only considered two file/dir to be the same if they shared a common ancestor. In this case, it would appear both files have different ancestors, and the filenames are different at the time of merge, so I don't see why they should conflict.
Well, the full file_path is different, yes. But the parent directory, to which the file should be added is the same. It only got renamed in between.
Condider this: base_rev o containing dir "foo/" / \ / \ rename add file "foo" to "foo/x" "bar"The left revision contains no directory named "foo", although the right revision adds a file "foo/x". Now, because monotone tracks renames, it known directory "foo" had been renamed to "bar", and thus the merged revision contains a file "bar/x".
With me so far?Now, if the left revision adds a file "bar/x", monotone has a problem. It knows the directory "foo" has been renamed to "bar" on the left. It's the same directory. But both revisions want to add a file "x" to that directory. Now it exits with:
conflict: duplicate name 'x' for the directory named 'bar' on the left and named 'foo' on the right.I know this is somewhat confusing. But the *same* directory can have different names, if you decide to track renames.
Regards Markus
[Prev in Thread] | Current Thread | [Next in Thread] |