[ On Thursday, February 17, 2000 at 18:53:05 (-0800), |}avid (opeland wrote: ]
> Subject: Re: Why does CVS treat removed files so specially?
>
> The difference I have is subtle.
>
> Most everyone on the list defines tagging a file as indicating which files you
> want to group into a release.
No, you're not exactly right and what you're missing is perhaps a
critical facet that will help your understanding of this issue. "We"
(i.e. CVS) define tagging to mean which revisions of which files are to
be grouped together (perhaps for a release, or to mark a milestone,
etc.). I.e. the two go together: revisions + files.
> I define tagging a file as indicating which revisions of files you want to
> group into a release. By tagging a dead revision, I am saying "Include the
> removal of this file into the next release".
Since the file's already been removed you *don't* want to tag it. The
omission of the tag is what implies that it will not be part of the
release you just created with the tag.
There is no way to "cvs export" a release and somehow indicate which
files were removed -- they simply won't show up if they don't have the
tag you specify for the export, i.e. they will be removed implicitly.
I.e. you don't have to tag a "dead" revision to indicate that it should
be removed from the release -- the fact that it is dead and *not* tagged
does that for you.
> Since my files are HTML pages and
> images, this makes sense. For source code, it doesn't so much, and I think
> that is everyone's problem with it.
That's totally irrelevant. CVS doesn't really care what's inside your
files (despite the fact that it'll work best with text files).
> Using branches makes no sense for this.
It sounded like you were trying to maintain several lines of development
at the same time. Branches would help you separate your different lines
of development. Did you not read the document I referred you to?
> CVS is an excellent tool for
> maintaining ANY file, not just source.
Assuming you mean "text files" in general then I'm glad you think so, I
think, but it's not really. Some very important features in CVS don't
work worth a hoot if the files aren't textual in nature. This is
because despite attempts to fool you into thinking otherwise all of the
algorithms implementing the underlying change storage facility
(i.e. RCS, with the algorithms being commonly known as "diff", "diff3"
and "patch") operate best only on textual files.
> I find it hard to believe that the
> implementors INTENDED to have cvs commits not affect removed files.
Now I'm really confused. A moment ago you were talking about tags. Now
you you say "commits".
"cvs commit" will make a removal permanent.
Obviously you cannot commit a change to an already removed file -- it no
longer exists so how do you propose to even change it never mind tell
CVS to commit that change?!?!?!?
> It
> obviously simplifies some implementation issues, but there's nothing inherently
> wrong with tagging a dead revision, as the file in question WON'T get checked
> out/updated, and there is nothing harmful in including removed files in the
> output of cvs stat or cvs log.
Actually if there is a tag then yes the removed file might be checked
out or exported at the wrong time. You definitely do not want to ever
tag "dead" revisions -- doing so puts the repository into an undefined
state and no guarantees can be made about what might happen as a result.
Once upon a time, before files could be added and removed on individual
branches and before file resurrection was really possible, CVS simply
moved "removed" files into a special sub-directory (the "Attic") in the
repository so that it would be known that they were removed and were not
to be ever changed again, but so that they could still be referenced
when historical views were examined. In that earlier version of CVS
files could obviously never be changed in any way once they were put in
the "Attic" -- they couldn't be tagged and they couldn't be committed
to, etc. (and new files couldn't be added with the same name).
I think your understanding of the temporal structure of the repository
is not quite up to speed yet. Once/if you understand how CVS works across
time perhaps you'll understand why "dead" revisions can never be tagged.
--
Greg A. Woods
+1 416 218-0098 VE3TCP <[EMAIL PROTECTED]> <robohack!woods>
Planix, Inc. <[EMAIL PROTECTED]>; Secrets of the Weird <[EMAIL PROTECTED]>