We are getting rid of our DEC Alpha Workstations and have a lot of historical software under OpenVMS Code Management System (CMS) that we would like to import to GIT running on Linux. Currently we have to do this by hand and it will take a long time to do. Does anyone know of a script that would automate this process?
问题:
回答1:
Just had to deal with CMS-Git migration, needed to find ready solutions, which
led me here. Surprisingly not many choices for this task. Kept digging and also found one more migration utility exportcms-git
:
https://github.com/nomadbyte/cms-export
Tried that utility, thought to report it here to add up more to the subject in case someone else faces such task.
It's a DCL batch, didn't look much into it but documentation is useful. Reads CMS, creates Git import file which you transfer and create a destination Git repo. Ran it to convert an old CMS lib (we have five!) It worked with a little hick-up, needed to ftp the exported file as binary, apparently we had some binary elements in the lib.
It exports by generations, basically each one becomes a Git commit. Also it creates branches for variants and classes. I didn't know we even had variants in our CMS. Anyway, the Git repo is usable, we plan to rearrange it for a new build process but we retained all the revisions.
回答2:
I have something like:
$ ./git-cmsimport.pl
usage: ./git-cmsimport.pl [OPTION]... LIBRARY URL
Import the latest generation of all elements from the CMS LIBRARY
(in VMS syntax) located by the URL.
Results in files in the master.
-c CLASS, import only the members of the CMS class CLASS.
Results in files in the branch CLASS.
-f FILE, local file containing the CMS history (for -h)
or CMS generation information.
-h, import the full CMS LIBRARY according to its history.
Results in files in the master and branches for classes.
-l, lowercase all VMS names: library, user and files
-t OFFSET, time zone, 4 digit offset from UTC (rfc2822)
example: ./git-cmsimport.pl -f hist.txt -h -l -t -0600 [.cmsdemo] http://eisner.encompasserve.org
$
That is, on the local Linux system I run a perl script, on the remote VMS system, from my account, I run an own http server
$ ./git-cmsimport.pl -t -0600 [.cmsdemo] http://eisner.encompasserve.org:8081
LIBRARY EISNER$DRA3:[DECUSERVE_USER.BECKER_H.CMSDEMO]
%CMS-S-FETCHED, generation 5 of element EISNER$DRA3:[DECUSERVE_USER.BECKER_H.CMSDEMO]BAR.C fetched
%CMS-S-FETCHED, generation 2 of element EISNER$DRA3:[DECUSERVE_USER.BECKER_H.CMSDEMO]FOO.C fetched
%CMS-S-FETCHED, generation 2 of element EISNER$DRA3:[DECUSERVE_USER.BECKER_H.CMSDEMO]MAIN.C fetched
$ ls -a CMSDEMO/
. .. BAR.C .cms-elements FOO.C .git MAIN.C
$
As you can see, it is tried to map CMS classes to git branches. At the moment this is a proof of concept, only. But if there is interest ...