[Top][All Lists]

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

Re: [Monotone-devel] fatal: std::logic_error: invar

From: Markus Schiltknecht
Subject: Re: [Monotone-devel] fatal: std::logic_error: invariant 'I(left_name == right_name)' violated
Date: Thu, 27 Mar 2008 23:33:24 +0100
User-agent: Mozilla-Thunderbird (X11/20080109)


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"

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.



reply via email to

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