def handle_file(pbxfilename, parsertype='normal'):
    try:
        with open(bytestr(pbxfilename), 'rb') as f:
            xcodeproj = f.read()
            t0 = time.time()
            root, parseinfo = xcodeprojer.parse(xcodeproj,
                                                dictionarytype=dict,
                                                parsertype=parsertype)
            buf = StringIO()
            xcodeprojer.report_parse_status(root,
                                            parseinfo,
                                            filename=pbxfilename,
                                            fp=buf)
            if root is None:
                return LintResult(pbxfilename, False, buf.getvalue(), 0, 0,
                                  len(xcodeproj))
            t1 = time.time()
            projname = xcodeprojer.projectname_for_path(pbxfilename)
            text = xcodeprojer.unparse(root,
                                       format='xcode',
                                       projectname=projname,
                                       parseinfo=parseinfo)
            t2 = time.time()
            return LintResult(pbxfilename, True, text, t1 - t0, t2 - t1,
                              len(xcodeproj))
    except Exception as e:
        e.traceback = traceback.format_exc()
        raise
def handle_file(pbxfilename, parsertype='normal'):
    try:
        with open(bytestr(pbxfilename), 'rb') as f:
            xcodeproj = f.read()
            t0 = time.time()
            root, parseinfo = xcodeprojer.parse(xcodeproj, dictionarytype=dict, parsertype=parsertype)
            buf = StringIO()
            xcodeprojer.report_parse_status(root, parseinfo, filename=pbxfilename, fp=buf)
            if root is None:
                return LintResult(pbxfilename, False, buf.getvalue(), 0, 0, len(xcodeproj))
            t1 = time.time()
            projname = xcodeprojer.projectname_for_path(pbxfilename)
            text = xcodeprojer.unparse(root, format='xcode', projectname=projname, parseinfo=parseinfo)
            t2 = time.time()
            return LintResult(pbxfilename, True, text, t1-t0, t2-t1, len(xcodeproj))
    except Exception as e:
        e.traceback = traceback.format_exc()
        raise
示例#3
0
def main():
    filename = rel(INTL_PROJECT_FILENAME)
    with open(filename, 'rb') as f:
        xcodeproj = f.read()

    root, parseinfo = xcodeprojer.parse(xcodeproj, format='xcode')
    xcodeprojer.report_parse_status(root, parseinfo, filename=filename)
    if root is None:
        return PARSING_FAILED

    gen = xcodeprojer.UniqueXcodeIDGenerator()

    pbxproject = find_first(root, 'PBXProject')
    firsttarget = getobj(root, pbxproject['targets'][0])

    # Construct a new buildphase as any other JSON object
    newbuildphase = {'isa': 'PBXShellScriptBuildPhase',
                     'buildActionMask': '2147483647',
                     'files': [],
                     'inputPaths': [],
                     'outputPaths': [],
                     'runOnlyForDeploymentPostprocessing': '0',
                     'shellPath': '/bin/sh',
                     'shellScript': "echo 'A new buildphase says hi!'"}
    id_newbuildphase = gen.generate()
    root['objects'][id_newbuildphase] = newbuildphase
    firsttarget['buildPhases'].insert(0, id_newbuildphase)

    projectname = xcodeprojer.projectname_for_path(filename)
    proj = xcodeprojer.unparse(root,
                               format='xcode',
                               projectname=projectname,
                               parseinfo=parseinfo)

    with open(filename, 'wb') as f:
        f.write(proj)

    xcodeprojer.print_diff(xcodeproj, proj, filename=filename)
    return OK
示例#4
0
def check_all_parsers(pbxdata, expected, desc, a, b):
    pbxfilename, data = pbxdata
    ret = parsable_variation(pbxdata, expected, desc, a, b)

    moddata = safe_replace(data, a, b)
    for parsertype in 'fast', 'classic':
        root, parseinfo = xcodeprojer.parse(moddata,
                                            format='xcode',
                                            parsertype=parsertype)
        if ret == 0:
            # Xcode parsed this. So if our parsers have anything to report, now is the time.
            xcodeprojer.report_parse_status(root,
                                            parseinfo,
                                            filename=pbxfilename)
            if root is None:
                print(
                    "Error: parsertype %s failed where Xcode succeeded:\n %s: %r %r"
                    % (parsertype, desc, a, b))
        else:
            if root is not None:
                print(
                    "Warning: parsertype %s succeeded where Xcode failed:\n  %s: %r %r"
                    % (parsertype, desc, a, b))
        flush()
示例#5
0
def parse(prj, report=True, fp=None, **kwargs):
    root, parseinfo = xcodeprojer.parse(prj, **kwargs)
    if report:
        xcodeprojer.report_parse_status(root, parseinfo, filename=None, fp=fp)
    return root, parseinfo
示例#6
0
def parse(prj, report=True, fp=None, **kwargs):
    root, parseinfo = xcodeprojer.parse(prj, **kwargs)
    if report:
        xcodeprojer.report_parse_status(root, parseinfo, filename=None, fp=fp)
    return root, parseinfo