Robert Hayes writes:
Basically, consider what happens if you:
- add a file "foo" to directory "bar" at, say, 11:00
- check it out to two locations, "a" and "b" at 11:01
- do a cvs remove of foo from location "a" at 11:02
Do you commit the remove? I assume so, otherwise you wouldn't get the
up-to-date check failure.
Now, this is where things happen that I don't understand.
- if I check out "bar" at 11:06 (not specifying any
revision/tag/branch/time details), the file "foo" is not there.
- if I check out "bar" at 11:06 (specifying a time such as "2 seconds
ago"), the file "foo" is still not there.
- however, if I check out "bar" at 11:06 (setting the time to be,
e.g. what the time was a short time ago (say 11:05)), the file "foo"
_is_ there.
Is that not bizarre?
If you do a log on the file, all should be clear. When you checked in
the changes from b, you effectively resurrected the dead file but CVS
didn't notice and left it in the Attic rather than moving it back into
the main directory. On a normal checkout with no tag or date, CVS
doesn't look in the Attic, so you don't get the file even though it's
alive. When you use an explicit date/time that's during the time the
file was dead, CVS looks in the Attic but you don't get the file because
it's dead. When you use an explicit date/time that's during the time
the file is alive, you get that revision.