I should have been a bit clearer. Here is the basic order:
$Source 05/04/01 12:44pm Renamed $Project to $Source
$Project 05/04/01 1:08pm Added
[ Shared files in $Source to $Project ]
$Source 05/04/01 2:06pm Deleted
$Source 06/06/01 3:00pm Destroyed
I did understand it this way. And my explanations cover exact this
situation, but I think I have to be more precise on the reasons:
VSS will store all structure related activities within the "project"
items and all content related changes within "file" items. Both types of
files are managed the same way in a physical file with a specific binary
layout. For "file" items, the physical file will record all changes and
the corresponding .A or .B file will contain the tip version of the
file. For "project" items again the physical file records all changes,
and the .A or .B file records the layout of the last state of the
project. E.g. it will record, that the project contained two files and 3
deleted ones.
If you destroy an item, the physical file and the .A/.B file are wiped
away from your hard disc. There is now chance to reconstruct any history
of this item any more. If you destroy a project, there is no chance to
know how the project was structured at a specific time.
Since the project must have been added to another project, there is
still the information, that there was a project of the specific name,
but no chance to get to the layout anymore.
Since the history of an item is stored in one physical file and a share
operation is more or less only increasing the refcount to this file
(together with the bookkeeping information) you are still capable of
getting to the history of the file before the main parent was destroyed.
This is due to the fact, that VSS is item based. This is also the
reason, why the ssphys program can reconstruct each version of an item
only based on the two files. All files are glued together to form an
archive by the information recorded in the file. But the history of each
item is recorded only with the item.
During the conversion we extract the "glue" between the items and try to
reconstruct the history. From the parent of $Project we know that there
was a project of the name $Project, but due to the fact, that the
$Project project was destroyed, we do not know how the project looked like.
Later we will see creations and modifications on files but we don't know
that these files belong to the $Project, since the glue between the
$Project and the file item is missing. So we can't convert these actions.
Now you rename $Project to $Source. No problem here, but the project is
still empty, since we don't know what happened in the mean time.
You create a new project $Project. This time we will have the glue,
since this project is still alive
You share files from $Source to $Project. The glue will tell us, the the
files were shared from the destroyed project $Source, but since we
couldn't track the addition to the destroyed project, we can't copy from
the destroyed project. We must fallback to an add with the content at
the time of the share.
The only way to solve this is a lost+found directory, where we save all
modifications that doesn't have a parent anymore at the time of the
modifications.
You can try yourself extracting your state of the $Project directory
prior to the mystic date 05/04/01, e.g. with a recursive checkout at a
specific a date. You will see, that you can't checkout the project
$Project, since it doesn't exists anymore. VSS will fail to give you
your files.
You can go to each file and extract prior versions of the file on a per
file basis, but not as a whole of the complete archive.
subversion is different. The versioning is done on the complete
repository and not on each file separately. In complete contrast to VSS,
each revision is stored in a unique file. This will give you features,
like atomic commits and per repository revision numbers, but you will
loose the ability to extract a version of a file prior to the date the
parent project existed.
Again, since you destroyed the project, you destroyed the glue between
your projects and items in your archive. You didn't destroyed the
history of the items. Only the glue between them. And since the glue is
missing between 1997 and 05/04/01 we can not track the modifications of
the files.
I hope this made it a little clearer.
_______________________________________________
vss2svn-users mailing list
Project homepage:
http://www.pumacode.org/projects/vss2svn/
Subscribe/Unsubscribe/Admin:
http://lists.pumacode.org/mailman/listinfo/vss2svn-users-lists.pumacode.org
Mailing list web interface (with searchable archives):
http://dir.gmane.org/gmane.comp.version-control.subversion.vss2svn.user