Alexandre Ferrieux wrote:
Now, I'm witnessing similar problems with "orphaned" files (entire
subtrees).
I have a very superficial understanding of VSS's semantics, and this
notion of
orphan file is a mystery for me.
I'll step in and give a partial answer since I've been dealing with a
similar situation...
For one case of what I'm referring to as a "true orphan" for a file, you
can see this yourself in SourceSafe...
When you select "Properties..." on one of the files that has been
branched, and go to the Links tab, you can see the branching structure
for that file, and each branch will show where one of the shared copies
of that file is (you can use the Links button to find any other shared
copies). Branches that show as "** Deleted **" are not contained within
any project, but unless you got an error like 'File
"......\SourceSafe\data\r\ryoaaaaa" not found' when opening the dialog,
these branches still exist in the underlying storage for the file.
Another case is if a file was created originally in (for example)
$/Branch1/Project/MyFile.cpp
then shared to
$/Project/MyFile.cpp
... and later Branch1 was destroyed/archived/ etc...
In this case the conversion will initially create the file as "orphaned"
and then share (copy) it to the main project.
As a test-run, I want to migrate to svn just the "trunk". To this
effect, I
use vssadmin to select just its subtree and Dump it to a .ssa file.
Then I
create an empty VSS base, and Restore the .ssa in it. I thus get a
standalone
VSS base with just my trunk. So far so good.
This tool (vss2svn) is designed to work from an empty repository, and
build it up one revision at a time, replicating all the actions you've
done. By exporting only a single branch (when you work across branches a
lot) you're making it a lot harder for it to track the history of
various changes it can't "see" any more.
Also the way you've done this is possibly creating the problem you
see... when you "restore" a project, then as I understand it all of the
files and subprojects within that project are "created" before the
project itself according to the timestamps, so vss2svn has nowhere to
put them up to the date of the Restore action, apart from the "orphaned"
folder... and this would be in addition to other sources of orphans.
Check the history on your converted database - you may find that your
main project is 'created' only during the final few revisions and then
populated by copying various items from the "orphaned" folder.
Instead you probably want to take a complete copy of the entire
sourcesafe database, possibly destroy some superfluous projects from
this copy (especially if they don't have any shared files with the
projects of interest) and then try converting it (it doesn't burn much
extra of *your* time to leave something running overnight, or in the
background while you get on with other stuff)
Now looking for the criterion deciding which files are thus handled,
the best
I can imagine is the fact that they were Branched by one of the users
in my
original, multibranch VSS base !!!
This will be the case for (most of) the files that are in individual
subfolders of 'orphaned'. Where there is a project tree hanging off an
orphaned folder this means the entire project is orphaned (perhaps due
to an archive/restore, or perhaps because the conversion script got
confused by a number of renaming and moving of the project earlier in
its history.
Does this make sense ?
Is there a way to "cut off" files from their former Shared/Branched
status in
VSS ?
I am not aware of a method. I think the file only actually disappears
from the underlying database if all shares of all branches of the file
are destroyed.
You might get this effect from other vss to svn conversion programs that
work backwards from the current project structure (and call vss itself
to get each older version of the files) rather than forwards from an
empty database though. You just need to evaluate which is most
appropriate for your needs.
The vss2svn tool would be most appropriate if you want to take the trunk
and all existing branches across to svn, as it should properly preserve
the branching structure, in which case you'd be best evaluating it in
that context... if you need a smaller database for initial tests,
perhaps destroy all but a few subprojects (in all branches) rather than
destroying all non-trunk branches.
If you do decide to attempt to take forward what I did with my
filterorphan tool (which is, in effect, just a complicated way of doing
a multiple search/replace in the dumpfile), note that you only need to
do the vss2svn part once - ideally on the entire database. You can keep
reprocessing the dumpfile in as many different ways as you like afterwards.
In my case, although I have a defined pipeline of operations that I know
works, I have still yet to do the final "live" conversion. My SourceSafe
database uses the file sharing mechanism to distribute some header files
between over a dozen subprojects for individual dlls. It would be
unrealistic to expect these changes to be manually merged across to
other copies of the files every time they changed, so I will be
adjusting the layout so that all subprojects pick up the header files
from a central "include" folder. I expect that for the initial fix of
this I will simply check in a final revision of the widely shared file
consisting of a single line #include-ing the file's new central location.
I will also be watching out for an updated vss2svn.exe to evaluate
whether it does a better job for my remaining issues that I currently
plan to manually fix-up, which are:
a) PIN -> UNPIN -> PIN sequence being interpreted as just PIN -> UNPIN
(or perhaps PIN -> PIN -> UNPIN, or possibly just UNPIN cancelling out
all PINs....?).
b) One subproject that got completely trashed during the conversion (and
which I will have to perform surgery on manually afterwards - I finally
decided to give up attempting to get the filterorphan.cpp to fix it up
for me, as some of the updated revisions needed simply didn't exist at
the right point in time in the dumpfile).
Perversely, if the updated .exe does a better job with the false orphans
without fixing one or both of the above (I will at least report back if
one comes out in time), it will be of less use due to already having the
filter in place to fix the current version's mistakes!
--
Stephen Lee <[EMAIL PROTECTED]>
Software Engineer, Vision Group - Pro-Measure Leader
Wilcox Associates Inc. (U.K.)
_______________________________________________
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