[LLVMdev] Moving CVS Files

John Criswell criswell at cs.uiuc.edu
Tue Nov 15 13:18:24 PST 2005


Dear All,

For those of you who have write access to the LLVM CVS repository, I 
need to ask you to take more care when moving or renaming files.  If 
done improperly, moving files can cause headaches when doing updates 
from the repository or merging revisions between branches (which is 
becoming more common with the vector_llvm branch).

There are two ways that you can move a CVS file:

1) Use the CVS commands:

a) cd into your working directory.  Move the file from the old location 
to the new location.

b) Use cvs rm to remove the file from its old location.

c) Use cvs add to add the file to its new location.

d) Use cvs ci to commit the remove and addition of the file.  In the 
logs, note the old and new locations of the file.

This approach is simple and it allows files to be added and removed 
properly when using cvs up to update a working directory or merge 
revisions in different branches.  It also maintains all of the CVS tags 
on the files correctly.

The problem with this approach is that it does not copy over all of the 
revision history from the old location to the new location.

2) Manipulate the CVS Repository directly:

This method will allow you to copy the revision history of a file into a 
new location.  However, you have to perform this operation carefully; 
failure to do it right will make merging to/from branches and cvs 
updates difficult.

Even if you follow these directions, I can't guarantee that cvs up is 
going to work correctly in all cases.  But if you're going to copy the 
revision history, following the directions below should help alleviate 
some of the problems.

a) cd into the CVS repository and *copy* the RCS file (the file ending 
with a ,v) from the old location to the new location inside the repository.

Please do NOT remove the old RCS file from the repository.

Please do NOT move it using the mv command.

b) cd into your working copy.  Use rm and cvs rm to remove the file from 
its old location.  Then use cvs ci to commit the change.  Make a note in 
the commit log that you've moved the file, and please indicate its new 
location.

c) Use cvs up in your working directory to get a copy of the file in its 
new location.

d) The file in its new location will have all of the CVS tags that it 
had in its old location (the revision history also contains all of the 
tag information).  Use cvs tag -d to remove all of the tags from the new 
file.

Doing this should ensure that the file does not show up in its new 
location when checking out older versions of the source code, nor will 
the file magically appear in a branch that it didn't exist in before.

e) It may also be good to send email to llvmdev detailing what has been 
moved.

My recommendation is to use approach #1 as it is less error prone. 
Approach #2 may still cause problems when merging to/from branches, but 
it should be easier to track where a file has gone if the old version 
has been cvs rm'ed.

Improvements and corrections to the directions above are welcome.  Any 
input on how to use Approach #2 and still get cvs up to move files 
correctly when merging to/from branches would be great.

Thanks everybody.

-- John T.

-- 
John T. Criswell
Research Programmer
University of Illinois at Urbana-Champaign
"It's today!" said Piglet. "My favorite day," said Pooh.




More information about the llvm-dev mailing list