#! /usr/bin/env python ################################################################ # Name: # # rcp_init_writable.py # # Abstract: # # Initialize the writable rcp database. # # Input: # # RCP_DB_NAMES_FILE # # Name of the rcp database mapping file. # # RCP_FILESYSTEMDB_WRITABLE_DIR # # Root directory of writable rcp databse. # # RCP_DATABASE_PATH # # Last database in path is the writable one. # ################################################################ import os import re import sys # capture and verify RCP_DB_NAMES_FILE environment variable if not os.environ.has_key ("RCP_DB_NAMES_FILE"): print >>sys.stderr, "ERROR: RCP_DB_NAMES_FILE is not set!" sys.exit (1) rcp_db_names_file = os.environ["RCP_DB_NAMES_FILE"].strip () if rcp_db_names_file == "": print >>sys.stderr, "ERROR: RCP_DB_NAMES_FILE is the empty string!" sys.exit (1) if not os.path.isfile (rcp_db_names_file): print >>sys.stderr, "ERROR: RCP_DB_NAMES_FILE does not exist!" sys.exit (1) # print >>sys.stderr, "rcp_db_names_file:", rcp_db_names_file # capture and verify RCP_FILESYSTEMDB_WRITABLE_DIR environment variable if not os.environ.has_key ("RCP_FILESYSTEMDB_WRITABLE_DIR"): print >>sys.stderr, "ERROR: RCP_FILESYSTEMDB_WRITABLE_DIR is not set!" sys.exit (1) rcp_filesystemdb_writable_dir = os.environ["RCP_FILESYSTEMDB_WRITABLE_DIR"].strip () if rcp_filesystemdb_writable_dir == "": print >>sys.stderr, "ERROR: RCP_FILESYSTEMDB_WRITABLE_DIR is the empty string!" sys.exit (1) if not os.path.isdir (rcp_filesystemdb_writable_dir): print >>sys.stderr, "ERROR: RCP_FILESYSTEMDB_WRITABLE_DIR does not exist!" sys.exit (1) # print >>sys.stderr, "rcp_filesystemdb_writable_dir:", rcp_filesystemdb_writable_dir # capture and verify RCP_DATABASE_PATH environment variable if not os.environ.has_key ("RCP_DATABASE_PATH"): print >>sys.stderr, "ERROR: RCP_DATABASE_PATH is not set!" sys.exit (1) rcp_database_path = os.environ["RCP_DATABASE_PATH"].strip () if rcp_database_path == "": print >>sys.stderr, "ERROR: RCP_DATABASE_PATH is the empty string!" sys.exit (1) # print >>sys.stderr, "rcp_database_path:", rcp_database_path # make sure we have a writable database specified if rcp_database_path[-1] == "/": print >>sys.stderr, "ERROR: No writable database in RCP_DATABASE_PATH!" sys.exit (1) # get the name of the writable database pat_filesystemdb = re.compile ("^(.*)/FileSystemDB$") wrdbname = "" for e in rcp_database_path.split (":"): m = pat_filesystemdb.search (e) if m: wrdbname = m.group (1) if wrdbname == "": print >>sys.stderr, "ERROR: No writable FileSystemDB database specified!" sys.exit (1) # print >>sys.stderr, "wrdbname:", wrdbname # get the dbid for the writable database dbid = "" f = open (rcp_db_names_file, "r") for line in f.xreadlines(): if line and (line[-1] == "\n"): line = line[:-1] if not line: continue # print >>sys.stderr, "line:", line try: (in_dbname, in_dbid, in_slop) = line.split (None, 2) except: continue # print >>sys.stderr, "in_dbname:", in_dbname, "in_dbid:", in_dbid, "in_slop:", in_slop if in_dbname == wrdbname: dbid = in_dbid # print >>sys.stderr, "found id %s for %s" % (dbid, wrdbname) f.close () if dbid == "": print >>sys.stderr, "ERROR: Could not find database id for %s!" % (wrdbname,) sys.exit (1) # print >>sys.stderr, "dbid:", dbid # get the name of our output directory and the two control files to make there dbdir = os.path.join (rcp_filesystemdb_writable_dir, wrdbname) ctr = os.path.join (dbdir, "control.dat") ctrv2 = os.path.join (dbdir, "control_v2.dat") # print >>sys.stderr, "dbdir:", dbdir # print >>sys.stderr, "ctr:", ctr # print >>sys.stderr, "ctrv2:", ctrv2 # make the output directory if not os.path.isdir (dbdir): # print >>sys.stderr, "%s is not a directory! Trying to create it ..." % (dbdir,) os.makedirs (dbdir) # print >>sys.stderr, "Succeeded." # make the v1 control file if not os.path.isfile (ctr): # print >>sys.stderr, "%s is not a file! Trying to create it ..." % (ctr,) f = open (ctr, "w") print >>f, "RCPIDSequenceGenerator: 0 %s 1" % (dbid,) print >>f, "NumberOfNames\t0" print >>f, "NumberOfIDs\t0" f.close () # print >>sys.stderr, "Succeeded." # make the v2 control file if not os.path.isfile (ctrv2): # print >>sys.stderr, "%s is not a file! Trying to create it ..." % (ctrv2,) f = open (ctrv2, "w") print >>f, "RCPIDSequenceGenerator: 0 %s 1" % (dbid,) print >>f, "NumberOfRCPDBNames 0" print >>f, "NumberOfRCPPkgs 0" print >>f, "NumberOfRCPSNames 0" print >>f, "NumberOfRCPVers 0" print >>f, "NumberOfNames\t0" print >>f, "NumberOfIDs\t0" f.close () # print >>sys.stderr, "Succeeded." # all done, exit with success sys.exit (0)