Ejemplo n.º 1
0
def write_report(directory, report):
    io.write(report) # write to screen for convenience?

    pathname = os.path.basename(os.path.abspath(directory))
    fp = io.get_tmpfile('%s.explore_codebase' % pathname, noclobber=True)
    open(fp, 'w').write(report)
    io.write_result("Wrote file %s ." % fp)
Ejemplo n.º 2
0
def compute_prune_list(executable, guidlistfile):
    guidlist = open(guidlistfile).read()

    rx_guid = '[0-9a-z]{8}[-][0-9a-z]{4}[-][0-9a-z]{4}[-][0-9a-z]{4}[-][0-9a-z]{12}'
    rx = '(?m)^(%s)\s+(.*)\n  (.*)\n' % rx_guid
    guiddct = {}
    filelist = []
    for (guid, filepath, funcname) in re.findall(rx, guidlist):
        filelist.append(filepath)
        guiddct[guid] = (filepath, funcname)

    data = open(executable).read()
    exeguids = re.findall(rx_guid, data)
    if not exeguids:
        io.write_result("No guids found in executable", error=True)
        sys.exit()
    for exeguid in exeguids:
        try:
            del(guiddct[exeguid])
        except KeyError: pass

    dct = {}
    for (fp, funcname) in guiddct.values():
        if fp not in dct:
            dct[fp] = []
        dct[fp].append(funcname)

    filelist = util.uniq(filelist)
    return filelist, dct
Ejemplo n.º 3
0
 def check(cls):
     result = True
     for (src, trg) in sorted(cls.tree.items()):
         trg = cls.pathmerge(cls.get_basepath(cls.basepath_dcc_rel), trg, strict=True)
         if not os.path.exists(trg):
             result = False
             io.write_result("Missing: %s" % trg, error=True)
     return result
Ejemplo n.º 4
0
    def parse_to_xml(cls, filepath, verbose_error=False):
        success, lab, out, err = cls.exec_gracefully(filepath, args=["-xml"])

        if not success:
            io.write_result("Failed to parse %s" % filepath, error=True)
            if verbose_error:
                io.output(err)
        else:
            xml = out + "\n"
            return xml
Ejemplo n.º 5
0
    def to_file(self, noclobber=None):
        filename = self.get_serialized_name()
        filepath = io.get_tmpfile('%s%s' % (filename,
                                            self.serialize_extension),
                                 noclobber=noclobber)

        flatobj = self.get_serialized_obj()

        # XXX use older pickle format for mixing with different python versions
#        pickle.dump(flatobj, open(filepath, 'wb'), pickle.HIGHEST_PROTOCOL)
        # open to write as binary to preempt win/lin portability bug
        pickle.dump(flatobj, open(filepath, 'wb'))

        io.write_result("Wrote file %s ." % filepath)
        return filepath
Ejemplo n.º 6
0
def find_forms(graph):
    # first try to do a wide sweep finding all forms in codebase
    # this is to find forms that are pulled in from dcus which cannot be
    # traced
    projfile = os.path.join(graph.abspath, graph.rootnode.path, graph.rootnode.filename)
    if projroot:
        io.write_next_action("Finding all forms in %s" % projroot)
        forms = io.ifind(projroot, "*.dfm")
        io.write_result("Found [%s]" % ", ".join(forms))
        if forms:
            return forms

    # otherwise just return all the forms in the graph
    forms = graph.rootnode.collect_nodes(lambda n: n.filetype == FileTypes.Form)
    forms = map(lambda n: os.path.join(graph.abspath, n.path, n.filename), forms)
    return forms
Ejemplo n.º 7
0
def main(args):
    prog = args.pop(0)
    # try to locate prog on same path as sys.argv[0]
    if not os.path.exists(prog):
        path = os.path.dirname(os.path.abspath(sys.argv[0]))
        prog = os.path.join(path, prog)
        if not os.path.exists(prog):
            io.write_result('Not found: %s' % os.path.basename(prog),
                            error=True)
            return

    fp = io.get_tmpfile(os.path.basename(prog) + '.profile')

    args = ['python', '-m', 'cProfile', '-o', fp, prog] + args
    io.invoke(args)

    strip_dirs(fp)
    output(fp)
Ejemplo n.º 8
0
        def trace_deps(filepath, searchpath, stdlibpath, unitaliases,
                       depth=0, maxdepth=None):
            # don't prevent calls on filepaths already in index so as to resolve
            # cycles properly, but catch these here to return a valid object
            # for a filepath already known
            if self.index_has(filepath):
                return self.index_get(filepath)

            io.write_next_action("Tracing %s" % os.path.basename(filepath),
                                                                 indent=depth)

            filepath, exists, filetype = classify_file(filepath, searchpath,
                                                       stdlibpath)
            delphifile = self.new_delphifile(filepath,
                                             (filepath, exists, filetype))
            if exists:
                searchpath = collect_searchpath(searchpath, delphifile,
                                                filepath)
                unitaliases = collect_unitaliases(unitaliases, delphifile,
                                                  filepath)
                finder_function = finder_dispatch.get(filetype)
                if finder_function:
                    fps = finder_function(open(filepath).read(),
                                          parent=delphifile)
                    io.write_result('Found [%s]' % ', '.join(fps), indent=depth)
                    fps = process_filepaths(delphifile.path, unitaliases, fps)
                    if not maxdepth or maxdepth >= depth+1:
                        for fp in fps:
                            delphifile.add_node(trace_deps(fp,
                                                           searchpath,
                                                           stdlibpath,
                                                           unitaliases,
                                                           depth=depth+1,
                                                           maxdepth=maxdepth))

            return delphifile