Skip to content
Snippets Groups Projects
Commit 181ca3354d65 authored by Jean-Francois Pieronne's avatar Jean-Francois Pieronne
Browse files

Add cms2hg.py, tool to convert a CMS repository into a Mercurial one.

parent a1dc4b163a20
Branches
No related tags found
No related merge requests found
import argparse
import os
import sys
#sys.path.append('/mercurial_root')
#from mercurial import commands
from ctypes import *
from vms.descrip import Descriptor_s, DSC_K_DTYPE_T, DSC_K_CLASS_D, bydesc, get_string_buffer
import vms.crtl
myshr_name = "CMSSHR"
myshr = CDLL(myshr_name)
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", action="count", default=0,
help="increase output verbosity")
#parser.add_argument("-c", "--create", action="store_true", default=False,
# help="create the mercurial repository")
parser.add_argument("cmslib",
help="cms library")
parser.add_argument("hgrepo",
help="hg repository")
args = parser.parse_args()
cmslib = args.cmslib
cmsdir = vms.crtl.from_vms(cmslib)
hgrepo = args.hgrepo
hgrepo = vms.crtl.from_vms(hgrepo)
repodir = os.path.join(hgrepo, os.path.basename(cmsdir))
# os.chdir(repodir)
# print cmsdir, hgrepo, repodir
fo = open('cms2hg.com', 'w')
vrepodir = vms.crtl.to_vms(repodir, 2)
#print >>fo, '$ set directory/version=1 %s' % (vrepodir,)
#print >>fo, '$ set directory/version=1 %s' % (vrepodir[:-1] + '...]',)
print >>fo, '$ crea/dir/vers=1 %s' % (vms.crtl.to_vms(repodir, 2),)
print >>fo, '$ set default %s' % (vms.crtl.to_vms(repodir, 2),)
print >>fo, '$ cms set library %s' % (cmslib,)
ldb = (c_int * 50)()
set_library = getattr(myshr,"CMS$SET_LIBRARY")
show_history = getattr(myshr,"CMS$SHOW_HISTORY")
show_element = getattr(myshr,"CMS$SHOW_ELEMENT")
Elts = set()
SHOWHISFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int * 50),
POINTER(c_int), POINTER(c_int),
POINTER(POINTER(Descriptor_s)),
POINTER(POINTER(Descriptor_s)),
POINTER(POINTER(Descriptor_s)),
POINTER(POINTER(Descriptor_s)),
POINTER(c_int))
SHOWELTFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int * 50),
POINTER(c_int),
POINTER(POINTER(Descriptor_s)),
POINTER(POINTER(Descriptor_s)),
POINTER(POINTER(Descriptor_s)),
POINTER(POINTER(Descriptor_s)),
POINTER(c_int), POINTER(c_int), POINTER(c_int),
POINTER(POINTER(Descriptor_s)), POINTER(c_int))
def getstr(ptr, offset=None):
if offset is None:
return get_string_buffer(ptr.contents.contents).value
else:
return get_string_buffer(ptr.contents.contents).value[:offset]
def fngen(v):
fn, g = v.split('(')
return fn, int(g[:-1])
def print_str(ptr, offset=None):
print repr(getstr(ptr, offset))
def show_element_routine(first_call, library_data_block, user_param,
element_id, remark_id, history_string_id,
notes_string_id, position,
concurrent, reference_copy,
group_list_id, review):
global Elts, args
if args.verbosity >= 1:
print_str(element_id)
print_str(remark_id)
print_str(history_string_id)
print_str(notes_string_id)
# print_str(group_list_id)
print
Elts.add(getstr(element_id))
return 1
def show_history_routine(first_call, library_data_block, user_param,
time, user_id, command_id, object_id, remark_id,
unusual):
global Elts, args
if args.verbosity >= 2:
print first_call.contents
print_str(user_id, -1)
print_str(command_id, -1)
print_str(object_id, -1)
print_str(remark_id, -1)
print
cmd = getstr(command_id, -1)
if cmd == 'CREATE ELEMENT':
fn = getstr(object_id, -1)
if fn not in Elts:
return 1
remark = getstr(remark_id, -1)
if remark == '': remark = 'cms2hg'
cmd = '$ cms fetch %s/generation=1 "cms2hg"' % (fn,)
print >>fo, cmd
cmd = '$ pystmlf ./ -c'
print >>fo, cmd
cmd = '$ hg add %s' % (fn,)
print >>fo, cmd
cmd = '$ hg commit -m "%s"' % (remark,)
print >>fo, cmd
if cmd == 'DELETE ELEMENT':
fn = getstr(object_id, -1)
if fn not in Elts:
return 1
remark = getstr(remark_id, -1)
if remark == '': remark = 'cms2hg'
cmd = '$ delete %s;*' % (fn,)
print >>fo, cmd
cmd = '$ hg delete %s' % (fn,)
print >>fo, cmd
cmd = '$ hg commit -m "%s"' % (remark,)
print >>fo, cmd
elif cmd == 'REPLACE':
fn, gen = fngen(getstr(object_id, -1))
if fn not in Elts:
return 1
remark = getstr(remark_id, -1)
if remark == '': remark = 'cms2hg'
cmd = '$ cms fetch %s/generation=%d "cms2hg"' % (fn, gen)
print >>fo, cmd
cmd = '$ pystmlf ./ -c'
print >>fo, cmd
cmd = '$ hg commit -m "%s"' % (remark,)
print >>fo, cmd
return 1
shhist_func = SHOWHISFUNC(show_history_routine)
shelt_func = SHOWELTFUNC(show_element_routine)
s = set_library(byref(ldb), bydesc(cmslib))
# print s
s = show_element(byref(ldb), shelt_func)
# print s
print Elts
s = show_history(byref(ldb), shhist_func)
# print s
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment