info-cvs
[Top][All Lists]
Advanced

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

Re: Win<->Linux symbol case conflict


From: Kaz Kylheku
Subject: Re: Win<->Linux symbol case conflict
Date: Mon, 8 Mar 2004 13:31:29 -0800 (PST)

On Fri, 5 Mar 2004, Iakov Glubokiy wrote:

> Date: Fri, 5 Mar 2004 09:26:22 +0300
> From: Iakov Glubokiy <address@hidden>
> To: address@hidden
> Subject: Win<->Linux symbol case conflict
> 
> Hello all,
> 
> I met a problem tying to replace file AAA.EXT by aaa.ext. My
> client is NT while server is Linux.
> So when I do the following:
> 
> D:\main\cvs rm -f AAA.EXT
> [...]
> D:\main\cvs ci -m"Changing symbol case" AAA.EXT
> [...]
> D:\main\cvs add aaa.ext

Meta-CVS, has proper renaming.

   mcvs mv AAA.EXT aaa.ext
   mcvs ci -m "Case-changing rename"

Meta-CVS can also deal with the case of names that do not conflict on
UNIX, but do conflict on Windows.

Suppose that the project contains "FOO.C" and a UNIX user renames
an existing "blorg.c" to "foo.c" and commits. On his machine, there is
no conflict, because "FOO.C" and "foo.c" are distinct names. 
But you are on Cygwin/NTFS and do a ``mcvs up''.

When reshaping the tree, Meta-CVS will try to create "FOO.C" and
get an error from the filesystem. 

This is turned into a condition about a local file being in the way.
Although this is not quite accurate because it's not really a local
file, if you choose to terminate, the behavior is fail safe.

    $ mcvs up
    cvs update: Updating .
    M MAP

    The following error has occured:

        some moves or adds want to overwrite local files or directories.

    You have these alternatives:

        ?) Re-print this menu.
        I) (Info) Print list of adds or moves which want to overwrite.
        C) (Continue) Go ahead and overwrite the target files.
        A) Auto-continue all continuable errors.
        T) Recover, clean-up and terminate.

    >I
    move blorg.c -> FOO.C
    >T
    restoring blorg.c

    $

The filesystem reshaping is rolled back, and so now you have an
inconsistent tree; there are outstanding changes in the MAP which are
not reflected in the tree structure. You now have an opportunity to fix
the MAP to eliminate the inconsistencies, either by hand or using the
command interface.

Check this out. You rename your file out of the way, and now that there
are no problems, the tree restructuring completes itself. Two files
are in fact moved, because after your local move request, there are two
outstanding moves, which can now complete without conflict:

    $ mcvs mv foo.c out-of-the-way.c
    * moving foo.c -> out-of-the-way.c
    * moving blorg.c -> FOO.C

The tree reshaping is done and everything is now consistent and cool
as far as version control is concerned. 

We need is a more accurate diagnostic in Meta-CVS, since this is not a
case of a local file being in the way, but a case conflict.  Choosing C)
in the menu would be a pretty bad idea (overwrite the file). That choice
must not be available when it's a case-insensitivity conflict between
two versioned files.

-- 
Meta-CVS: the working replacement for CVS that has been stable for two
years.  It versions the directory structure, symbolic links and execute
permissions. It figures out renaming on import. Plus it babysits the kids
and does light housekeeping! http://freshmeat.net/projects/mcvs





reply via email to

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