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

Reply via email to