コード例 #1
0
def main():
    import hkcToDom
    import headerToDom
    
    master = headerToDom.headerToDom( r'E:\DEV\serialize\havok\source\hkbase\class\hkClass.h' )
    edited = hkcToDom.hkcToDom( "edited.hkclass" )

    print >>open("master.hkclass","w"), bindingToXml.bindingToXml("file",master.file)
    rejectFileName = "masterXml.rej"
    print >>open(rejectFileName,"w"), '\n'.join(mergeBind(master.file, edited.file, master.name))
    print >>open("merged.hkclass","w"), bindingToXml.bindingToXml("file",master.file)
コード例 #2
0
def headerToClass(headerfile, options):
    if options.verbose:
        print "Processing '%s'" % headerfile
    classfile = headerfile.replace(".h", ".hkclass")
    master = headerToDom.headerToDom(headerfile)
    if options.verbose:
        print "Found:", ", ".join([c.name for c in master.file._class])

    if os.path.exists(classfile):
        edited = hkcToDom.hkcToDom(classfile)
        rejects = mergeBind.mergeBind(master.file, edited.file, master.name)
        if len(rejects):
            rejfile = "%s.rej" % classfile
            open(rejfile, "a").write("\n".join(rejects) + "\n")
            print "%s:1:Conflicts found" % headerfile

    pch_file = options.pch_file
    cppfile = master.file.destinationFilename(
        master.origfilename, "Class%s.cpp" % options.version_suffix)
    if master.file.overridedestination:
        pch_file = hkcToDom.Document(cppfile).pchfile
    try:
        cpptext = domToClass.domToClass(master,
                                        collectAll=False,
                                        pchfile=pch_file)
    except:
        print "Error in: " + headerfile
        raise
    try:
        writeIfDifferent(cpptext, cppfile, options.force_output)
    except IOError:
        print "Error in: %(headerfile)s\n\nDestination class file path is wrong:\n%(cppfile)s.\n" % locals(
        )
        raise
    if options.dump_xml:
        xmltext = bindingToXml.bindingToXml("document", master)
        try:
            xmlfile = genPathToFile(
                headerfile.replace(".h",
                                   "Class%s.xml" % options.version_suffix),
                destSpecifier)
            writeIfDifferent(xmltext, xmlfile, options.force_output)
        except IOError:
            print "Error in: %(headerfile)s\n\nDestination class file path is wrong:\n%(xmlfile)s.\n" % locals(
            )
            raise
    if options.cvsignore:
        removeFromCvsignore(headerfile)
        addToCvsignore(cppfile)
        addToCvsignore(classfile)
コード例 #3
0
def headerToClass(headerfile, options):
    if options.verbose:
        print "Processing '%s'" % headerfile
    classfile = headerfile.replace(".h", ".hkclass")
    master = headerToDom.headerToDom(headerfile)
    if options.verbose:
        print "Found:", ", ".join( [c.name for c in master.file._class] )

    if os.path.exists(classfile):
        edited = hkcToDom.hkcToDom(classfile)
        rejects = mergeBind.mergeBind(master.file, edited.file, master.name)
        if len(rejects):
            rejfile = "%s.rej" % classfile
            open(rejfile,"a").write( "\n".join(rejects)+"\n" )
            print "%s:1:Conflicts found" % headerfile

    pch_file = options.pch_file
    cppfile = master.file.destinationFilename(master.origfilename, "Class%s.cpp" % options.version_suffix )
    if master.file.overridedestination:
        pch_file = hkcToDom.Document(cppfile).pchfile
    try:
        cpptext = domToClass.domToClass(master, collectAll=False, pchfile=pch_file)
    except:
        print "Error in: " + headerfile
        raise
    try:
        writeIfDifferent( cpptext, cppfile, options.force_output )
    except IOError:
        print "Error in: %(headerfile)s\n\nDestination class file path is wrong:\n%(cppfile)s.\n" % locals()
        raise
    if options.dump_xml:
        xmltext = bindingToXml.bindingToXml("document",master)
        try:
            xmlfile = genPathToFile(headerfile.replace(".h", "Class%s.xml" % options.version_suffix ), destSpecifier)
            writeIfDifferent( xmltext, xmlfile, options.force_output )
        except IOError:
            print "Error in: %(headerfile)s\n\nDestination class file path is wrong:\n%(xmlfile)s.\n" % locals()
            raise
    if options.cvsignore:
        removeFromCvsignore(headerfile)
        addToCvsignore(cppfile)
        addToCvsignore(classfile)
コード例 #4
0
def mergeBind(master, edited, context):
    """Merge changes from "edited" into "master"
    """
    rejects = []
    for slot in master.__slots__:
        mitem = getattr(master, slot)
        eitem = getattr(edited, slot)
        if type(mitem) in (type(""), type(u"")):
            if not mitem:
                setattr(master, slot, eitem)
            elif mitem != eitem:
                rejects.append("<!-- +++CONFLICT+++\t(%s.%s)\n%s\n%s\n-->" %
                               (context, slot, mitem, eitem))
        elif type(mitem) in (type(0), type(0.0)):
            if mitem != eitem:
                rejects.append("<!-- +++CONFLICT+++\t(%s.%s)\n%s\n%s\n-->" %
                               (context, slot, mitem, eitem))
        elif type(mitem) == type([]):
            edict = {}
            for e in eitem:
                edict[e.name] = e
            for m in mitem:
                #print '\n\n\n slot:%s\n e: %s\n eitem: %s\n m: %s\n mitem: %s' % (slot, e,eitem,m,mitem)
                e = edict.get(m.name, None)
                if e:
                    eitem.remove(e)
                    rejects += mergeBind(m, e, '%s.%s' % (context, m.name))
            for e in eitem:
                rejects.append(
                    "<!-- +++UNUSED+++\t(%s.%s)\n%s\n-->" %
                    (context, slot, bindingToXml.bindingToXml(slot, e)))
        elif mitem:
            rejects += mergeBind(mitem, eitem, '%s.%s' % (context, mitem.name))
        elif eitem:
            setattr(master, slot, eitem)
    return rejects
コード例 #5
0
ファイル: mergeBind.py プロジェクト: venkatarajasekhar/viper
def mergeBind(master, edited, context):
    """Merge changes from "edited" into "master"
    """
    rejects = []
    for slot in master.__slots__:
        mitem = getattr(master,slot)
        eitem = getattr(edited,slot)
        if type(mitem) in (type(""), type(u"")):
            if not mitem:
                setattr(master, slot, eitem)               
            elif mitem != eitem:
                rejects.append("<!-- +++CONFLICT+++\t(%s.%s)\n%s\n%s\n-->" % (context, slot, mitem, eitem))
        elif type(mitem) in (type(0), type(0.0)):
            if mitem != eitem:
                rejects.append("<!-- +++CONFLICT+++\t(%s.%s)\n%s\n%s\n-->" % (context, slot, mitem, eitem))
        elif type(mitem) == type([]):
            edict = {}
            for e in eitem:
                edict[e.name] = e
            for m in mitem:
                #print '\n\n\n slot:%s\n e: %s\n eitem: %s\n m: %s\n mitem: %s' % (slot, e,eitem,m,mitem)
                e = edict.get(m.name, None)
                if e:
                    eitem.remove(e)
                    rejects += mergeBind(m,e,'%s.%s' % (context, m.name))
            for e in eitem:
                rejects.append("<!-- +++UNUSED+++\t(%s.%s)\n%s\n-->" % (context, slot, bindingToXml.bindingToXml(slot,e)))
        elif mitem:
            rejects += mergeBind(mitem, eitem,'%s.%s' % (context, mitem.name))
        elif eitem:
            setattr(master, slot, eitem)
    return rejects