usr/src/cmd/auto-install/xslt/old-to-new.py
author Sue Sohn <Susan.Sohn@Oracle.COM>
Fri, 20 Aug 2010 11:31:18 -0600
changeset 862 e9f31f2f2f2d
child 1151 95413393ef67
permissions -rwxr-xr-x
16423 Updates to AI schema should be made 15449 installadm add validates combined manifest against image-specific schema as well as schema in /usr/share/auto_install/ 6975043 separate criteria and ai manifest 6975686 installadm list shows value rather than range if lower bound is 0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
862
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     1
#!/usr/bin/python2.6
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     2
#
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     3
# CDDL HEADER START
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     4
#
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     8
#
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    12
# and limitations under the License.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    13
#
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    19
#
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    20
# CDDL HEADER END
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    21
#
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    22
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    23
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    24
import sys
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    25
import os
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    26
import getopt
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    27
from subprocess import Popen, PIPE
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    28
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    29
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    30
XSLT_PROC="/usr/bin/xsltproc"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    31
XSLT_FILE="old-to-new.xslt"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    32
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    33
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    34
def usage(exitcode=1):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    35
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    36
        Print help page and exit script.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    37
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    38
        Default exit code is 1, which indicates an error.  To exit
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    39
        normally, set keyword param exitcode to 0.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    40
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    41
    this_script = os.path.basename(sys.argv[0])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    42
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    43
    print ""
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    44
    print "%s - Convert old-style XML AI Manifests to the new schema." % this_script
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    45
    print ""
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    46
    print "For convenience, the command-line interface has similar semantics to cp(1)."
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    47
    print ""
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    48
    print "Usage:"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    49
    print "\t%s [options] infile outfile" % this_script
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    50
    print "\t%s [options] infile... outdir" % this_script
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    51
    print "\t%s -r [options] indir... outdir" % this_script
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    52
    print "\nOptions:"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    53
    print "\t-f        : force overwrite if output already exists"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    54
    print "\t-r        : recursively transform .xml files in named sub-directory"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    55
    print "\t-h --help : print this help page and exit"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    56
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    57
    sys.exit(exitcode)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    58
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    59
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    60
def run_cmd(cmd):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    61
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    62
        Execute the given command in a subprocess.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    63
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    64
        On success, returns the stdout from running the command.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    65
        On failure, raises one of:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    66
            OSError
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    67
            ValueError
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    68
            Exception
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    69
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    70
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    71
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    72
        cmd_popen = Popen(cmd, shell=True, stdout=PIPE)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    73
        (cmd_stdout, cmd_stderr) = cmd_popen.communicate()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    74
    except OSError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    75
        print "ERROR running [%s] : [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    76
            (cmd, str(err))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    77
        raise
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    78
    except ValueError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    79
        print "ERROR running [%s] : [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    80
            (cmd, str(err))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    81
        raise
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    82
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    83
    if cmd_popen.returncode != 0:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    84
        errstr = "ERROR: command [%s] returned [%d] : [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    85
            (cmd, cmd_popen.returncode, str(cmd_stderr))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    86
        print errstr
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    87
        raise Exception, (errstr)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    88
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    89
    if cmd_stderr is not None:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    90
        print "WARNING: command [%s] produced stderr output: [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    91
            (cmd, cmd_stderr)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    92
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    93
    return cmd_stdout
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    94
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    95
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    96
def do_transform(xsltfile, infile, outfile, mkdirs=False, overwrite=False):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    97
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    98
        Create the output directory, if appropriate, and run the xsltproc
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
    99
        command to transform infile to oufile.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   100
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   101
        On success, returns True.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   102
        On failure, returns False.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   103
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   104
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   105
    # Normalize the paths so we can check if they are really the same file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   106
    # (doesn't always work, eg for paths beginning with "..")
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   107
    infile = os.path.normpath(infile)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   108
    outfile = os.path.normpath(outfile)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   109
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   110
    if infile == outfile:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   111
        print "ERROR: source [%s] and target [%s] are the same" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   112
            (infile, outfile)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   113
        return False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   114
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   115
    outdir = os.path.dirname(outfile)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   116
    if (len(outdir)) and (not os.path.isdir(outdir)):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   117
        if os.path.exists(outdir):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   118
            print "ERROR: target dir [%s] is not a directory" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   119
                outdir
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   120
            return False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   121
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   122
        if not mkdirs:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   123
            print "ERROR: target dir [%s] doesn't exist" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   124
                outdir
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   125
            return False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   126
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   127
        try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   128
            os.makedirs(outdir)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   129
        except OSError, err:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   130
            print "ERROR: failed to make dir [%s] : [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   131
                (outdir, str(err))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   132
            return False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   133
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   134
    if (os.path.exists(outfile)) and (not overwrite):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   135
        print "ERROR: target file [%s] already exists. Use -f." % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   136
            outfile
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   137
        return False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   138
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   139
    # Construct command
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   140
    cmd = "%s -o %s %s %s" % (XSLT_PROC, outfile, xsltfile, infile)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   141
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   142
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   143
        output = run_cmd(cmd)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   144
    except:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   145
        return False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   146
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   147
    return True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   148
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   149
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   150
def do_main():
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   151
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   152
        Process command line options and call do_transform() for
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   153
        each file to be processed.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   154
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   155
        Returns: nothing.
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   156
    '''
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   157
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   158
    sources = []
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   159
    target = None
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   160
    force_overwrite = False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   161
    recursive = False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   162
    target_exists = False
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   163
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   164
    # Check xsltproc is installed
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   165
    if not os.access(XSLT_PROC, os.X_OK):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   166
        print "ERROR: Cannot find %s" % XSLT_PROC
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   167
        print "You may be able to install it with:"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   168
        print "\tpfexec pkg install pkg:/library/libxslt"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   169
        sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   170
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   171
    # Check xsl transform file is available in same dir this
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   172
    # script was run from
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   173
    xsltdir = os.path.dirname(sys.argv[0])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   174
    xsltfile = "%s/%s" % (xsltdir, XSLT_FILE)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   175
    if (not os.path.exists(xsltfile)):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   176
        print "XSLT file [%s] is missing from directory [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   177
            (XSLT_FILE, xsltdir)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   178
        sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   179
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   180
    # Fetch and process command line params and options
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   181
    try:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   182
        optlist, args = getopt.getopt(sys.argv[1:], "frh", ["help"])
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   183
    except getopt.GetoptError:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   184
        usage()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   185
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   186
    for opt, arg in optlist:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   187
        if (opt == "-f"):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   188
            force_overwrite = True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   189
        if (opt == "-r"):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   190
            recursive = True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   191
        if (opt == "-h") or (opt == "--help"):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   192
            usage(exitcode=0)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   193
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   194
    # There must be at least 2 params.  The last param is the
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   195
    # target; all the other params are the source(s).
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   196
    if len(args) < 2:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   197
        usage()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   198
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   199
    sources = args[:len(args) - 1]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   200
    target = args[len(args) - 1]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   201
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   202
    # note whether the target existed before we started
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   203
    if os.path.exists(target):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   204
        target_exists = True
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   205
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   206
    # Check for invalid paramaters (pt. 1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   207
    if ((len(sources) > 1) and
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   208
        (not os.path.isdir(target))):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   209
        # if there are multiple sources (files or dirs), then
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   210
        # target must be an existing directory
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   211
        print "ERROR: [%s] is not a directory" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   212
            target
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   213
        sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   214
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   215
    for source in sources:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   216
        # normalize source path
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   217
        source = os.path.normpath(source)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   218
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   219
        # Check for invalid paramaters (pt. 2)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   220
        if source == "/":
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   221
            print "ERROR: '/' not allowed"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   222
            sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   223
        if not os.path.exists(source):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   224
            print "ERROR: no such file or directory: [%s]" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   225
                source
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   226
            sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   227
        if (os.path.isdir(source)) and (not recursive):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   228
            print "ERROR: [%s] is a directory, but '-r' not specified" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   229
                source
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   230
            sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   231
        if (not os.path.isdir(source)) and (recursive):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   232
            print "ERROR: [%s] is not a directory, but '-r' was specified" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   233
                source
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   234
            sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   235
        if ((os.path.isdir(source)) and
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   236
            (os.path.exists(target)) and
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   237
            (not os.path.isdir(target))):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   238
            print "ERROR: [%s] is not a directory" % \
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   239
                target
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   240
            sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   241
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   242
        if os.path.isdir(source):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   243
            # recursively iterate through source dir, processing each file
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   244
            for dirpath, dirnames, filenames in os.walk(source):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   245
                # alter dirnames in-place to skip .*
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   246
                dirnames[:] = [d for d in dirnames if not d.startswith('.')]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   247
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   248
                for name in filenames:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   249
                    srcfile = os.path.join(dirpath, name)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   250
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   251
                    partial_dstfile = os.path.join(dirpath, name)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   252
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   253
                    # replicate how cp -r treats sub-dirs:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   254
                    # 1. if source contains multiple sub-dirs, eg "a/b/c"
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   255
                    # then only create rightmost one, eg "c", under target
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   256
                    index = source.rfind("/", 1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   257
                    if index != -1:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   258
                        # ensure partial_dstfile begins with source
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   259
                        if partial_dstfile.find(source) == 0:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   260
                            partial_dstfile = partial_dstfile[index+1:]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   261
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   262
                    # replicate how cp -r treats sub-dirs:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   263
                    # 2. if target already existed then chop off leftmost
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   264
                    # dir of source from target
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   265
                    if not target_exists:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   266
                        index = partial_dstfile.find("/", 1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   267
                        if index != -1:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   268
                            partial_dstfile = partial_dstfile[index+1:]
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   269
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   270
                    dstfile = os.path.join(target, partial_dstfile)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   271
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   272
                    if not do_transform(xsltfile, srcfile, dstfile,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   273
                        mkdirs=True, overwrite=force_overwrite):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   274
                        print "ERROR: Transform failed."
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   275
                        sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   276
        elif os.path.isdir(target):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   277
            dstfile = os.path.join(target, os.path.basename(source))
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   278
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   279
            if not do_transform(xsltfile, source, dstfile,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   280
                mkdirs=False, overwrite=force_overwrite):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   281
                print "ERROR: Transform failed."
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   282
                sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   283
        else:
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   284
            # this must be a simple "single infile" -> "single outfile" job
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   285
            if not do_transform(xsltfile, source, target,
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   286
                mkdirs=False, overwrite=force_overwrite):
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   287
                print "ERROR: Transform failed."
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   288
                sys.exit(1)
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   289
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   290
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   291
if __name__ == "__main__":
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   292
    do_main()
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   293
e9f31f2f2f2d 16423 Updates to AI schema should be made
Sue Sohn <Susan.Sohn@Oracle.COM>
parents:
diff changeset
   294
    sys.exit(0)