>--- Forwarded mail from [EMAIL PROTECTED] >[ On , October 10, 2001 at 17:31:23 (-0400), Sam Steingold wrote: ] >> Subject: Re: [[EMAIL PROTECTED]: Re: rename in cvs] >> >> if you rename FOO to BAR "the right way", i.e., >> >> $ mv FOO BAR >> $ cvs rm FOO >> $ cvs add BAR >> $ cvs ci BAR >> >> then you lose in many ways:
>No, you lose absolutely nothing -- in fact you _gain_ the information >about the rename! This is only true if the user performing the steps above remembers to include a comment. The other thing is that because the rename isn't atomic, it can be only partially completed and cause problems for other developers caught up in the race condition. A usable rename would have the following user model and store the fact of the rename automatically: cvs mv FOO BAR cvs ci BAR The mv would move the working copy and update the CVS sandbox state as needed, ideally recording the fact of the move there to be stored at commit time. It would also have to be robust enough to be repeatable (i.e. cvs mv FOO BAR; cvs mv BAR BAZ; cvs commit BAZ) and reversible (i.e. cvs mv FOO BAR; cvs mv BAR FOO; cvs commit FOO) before the commit. The commit would (in a single transaction) deaden the appropriate version of FOO, create BAR (or resurrect it), create the appropriate tags (if the sandbox is on a branch), and commit local changes. But again, there are the fragmented history and ambiguous history problems. >> * 'cvs log BAR' does not list changes in file FOO >Of course not!!!! You do not want it to! That would be illogical. It's totally logical if BAR and FOO are the same file, BAR having been renamed to FOO. Remember, the version histories of BAR and FOO are only fragments of the file's entire version history. >> * there is no way to compare BAR 1.123 with FOO 1.321 >> [yeah, they are separated by over a hundred revisions, so what? >> there are still situations when this makes sense.] >Bull. It's trivial to do. Not with the "cvs diff" command, it isn't (assuming BAR was renamed to FOO). You must have both files checked out somewhere (and one usually isn't) before the standard diff program will work. >> --> etc - CVS does not know that FOO is the old name for BAR. >> >> * also, this operation cannot be undone gracefully: when I do the above >> renaming backwards, CVS moves BAR,v into the attic and there is no >> way to get the revisions of BAR into the FOO,v file >> (or is there - how do I concat two *,v files?!) >It's trivial to "undo" too -- the same way you "undo" any commit. The first point was: ----> etc - CVS does not know that FOO is the old name for BAR. That's the important part. Fragmented version histories are a royal pain. >--- End of forwarded message from [EMAIL PROTECTED] _______________________________________________ Info-cvs mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/info-cvs