Exemple #1
0
def dump_gv_depgraph(root, workdir, tpaths=_TEMPLATE_PATHS, engine=_GV_ENGINE, html=True):
    """
    Generate dependency graph with graphviz.

    TODO: Utilize graph, DAG and trees generated w/ ``dump_graphs``.

    :param root: Root dir where 'var/lib/rpm' exists
    :param workdir: Working dir to dump the result
    :param tpaths: Template path list
    :param engine: Graphviz rendering engine to choose, e.g. neato
    :param html: Generate HTML graph files if True
    """
    reqs = RU.make_requires_dict(root)

    # Set virtual root for root rpms:
    for p, rs in reqs.iteritems():
        if not rs:  # This is a root RPM:
            reqs[p] = ["<rpmlibs>"]  # Set virtual root for this root rpm.

    # Remove self dependency refs:
    ctx = dict(dependencies=[(r, [p for p in ps if p != r]) for r, ps in reqs.iteritems()])

    depgraph_s = RT.render("rpmdep_graph_gv.j2", ctx, tpaths, ask=True)
    src = os.path.join(workdir, "rpmdep_graph.dot")
    U.copen(src, "w").write(depgraph_s)

    output = src + ".svg"
    SH.run("%s -Tsvg -o %s %s" % (engine, output, src), workdir=workdir)

    if html:
        logging.info("Generate HTML files for graphviz outputs")
        for t in ("js/graphviz-svg.js.j2", "js/jquery.js.j2", "rpmdep_graph_gv.html.j2"):
            _renderfile(workdir, t, ctx={}, tpaths=tpaths)
Exemple #2
0
def _renderfile(workdir, tmpl, ctx={}, tpaths=_TEMPLATE_PATHS):
    if os.path.sep in tmpl:
        subdir = os.path.dirname(tmpl)
        d = os.path.join(workdir, subdir)
        tpaths = [os.path.join(t, subdir) for t in tpaths]

        if not os.path.exists(d):
            os.makedirs(d)

    s = RT.render(tmpl, ctx, tpaths, ask=True)
    U.copen(os.path.join(workdir, tmpl[:-3]), 'w').write(s)
Exemple #3
0
def _renderfile(workdir, tmpl, ctx={}, tpaths=_TEMPLATE_PATHS):
    if os.path.sep in tmpl:
        subdir = os.path.dirname(tmpl)
        d = os.path.join(workdir, subdir)
        tpaths = [os.path.join(t, subdir) for t in tpaths]

        if not os.path.exists(d):
            os.makedirs(d)

    s = RT.render(tmpl, ctx, tpaths, ask=True)
    U.copen(os.path.join(workdir, tmpl[:-3]), "w").write(s)
Exemple #4
0
def renderfile(tmpl, workdir, ctx={}, subdir=None, tpaths=_TEMPLATE_PATHS):
    if subdir:
        subdir = os.path.join(workdir, subdir)
        if not os.path.exists(subdir):
            os.makedirs(subdir)

        dst = os.path.join(subdir, tmpl[:-3])
    else:
        dst = os.path.join(workdir, tmpl[:-3])

    s = RT.render(tmpl, ctx, tpaths, ask=True)
    copen(dst, "w").write(s)
Exemple #5
0
def renderfile(tmpl, workdir, ctx={}, subdir=None, tpaths=_TEMPLATE_PATHS):
    if subdir:
        subdir = os.path.join(workdir, subdir)
        if not os.path.exists(subdir):
            os.makedirs(subdir)

        dst = os.path.join(subdir, tmpl[:-3])
    else:
        dst = os.path.join(workdir, tmpl[:-3])

    s = RT.render(tmpl, ctx, tpaths, ask=True)
    copen(dst, "w").write(s)
Exemple #6
0
def gen_depgraph_gv(root,
                    workdir,
                    template_paths=_TEMPLATE_PATHS,
                    engine=_GV_ENGINE):
    """
    Generate dependency graph with using graphviz.

    :param root: Root dir where 'var/lib/rpm' exists
    :param workdir: Working dir to dump the result
    :param template_paths: Template path list
    :param engine: Graphviz rendering engine to choose, e.g. neato
    """
    reqs = RU.make_requires_dict(root)

    # Set virtual root for root rpms:
    for p, rs in reqs.iteritems():
        if not rs:  # This is a root RPM:
            reqs[p] = ["<rpmlibs>"]

    ctx = dict(dependencies=[(r, ps) for r, ps in reqs.iteritems()])

    renderfile("rpm_dependencies.html.j2", workdir, ctx, tpaths=template_paths)

    depgraph_s = RT.render("rpm_dependencies.graphviz.j2",
                           ctx,
                           template_paths,
                           ask=True)
    src = os.path.join(workdir, "rpm_dependencies.graphviz")

    copen(src, 'w').write(depgraph_s)

    output = src + ".svg"
    (outlog, errlog) = (os.path.join(workdir, "graphviz_out.log"),
                        os.path.join(workdir, "graphviz_err.log"))

    cmd = "%s -Tsvg -o %s %s" % (engine, output, src)
    proc = subprocess.Popen(cmd.split(),
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)
    (out, err) = proc.communicate()
    if proc.returncode != 0:
        logging.warn(
            "Failed to generate graphviz data: "
            "engine=%s, out=%s, src=%s", engine, out, src)

    copen(outlog, 'w').write(out)
    copen(errlog, 'w').write(err)
Exemple #7
0
def gen_depgraph_gv(root, workdir, template_paths=_TEMPLATE_PATHS,
                    engine=_GV_ENGINE):
    """
    Generate dependency graph with using graphviz.

    :param root: Root dir where 'var/lib/rpm' exists
    :param workdir: Working dir to dump the result
    :param template_paths: Template path list
    :param engine: Graphviz rendering engine to choose, e.g. neato
    """
    reqs = RU.make_requires_dict(root)

    # Set virtual root for root rpms:
    for p, rs in reqs.iteritems():
        if not rs:  # This is a root RPM:
            reqs[p] = ["<rpmlibs>"]

    ctx = dict(dependencies=[(r, ps) for r, ps in reqs.iteritems()])

    renderfile("rpm_dependencies.html.j2", workdir, ctx, tpaths=template_paths)

    depgraph_s = RT.render("rpm_dependencies.graphviz.j2", ctx,
                           template_paths, ask=True)
    src = os.path.join(workdir, "rpm_dependencies.graphviz")

    copen(src, 'w').write(depgraph_s)

    output = src + ".svg"
    (outlog, errlog) = (os.path.join(workdir, "graphviz_out.log"),
                        os.path.join(workdir, "graphviz_err.log"))

    cmd = "%s -Tsvg -o %s %s" % (engine, output, src)
    proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)
    (out, err) = proc.communicate()
    if proc.returncode != 0:
        logging.warn("Failed to generate graphviz data: "
                     "engine=%s, out=%s, src=%s",
                     engine, out, src)

    copen(outlog, 'w').write(out)
    copen(errlog, 'w').write(err)
Exemple #8
0
def dump_gv_depgraph(root,
                     workdir,
                     tpaths=_TEMPLATE_PATHS,
                     engine=_GV_ENGINE,
                     html=True):
    """
    Generate dependency graph with graphviz.

    TODO: Utilize graph, DAG and trees generated w/ ``dump_graphs``.

    :param root: Root dir where 'var/lib/rpm' exists
    :param workdir: Working dir to dump the result
    :param tpaths: Template path list
    :param engine: Graphviz rendering engine to choose, e.g. neato
    :param html: Generate HTML graph files if True
    """
    reqs = RU.make_requires_dict(root)

    # Set virtual root for root rpms:
    for p, rs in reqs.iteritems():
        if not rs:  # This is a root RPM:
            reqs[p] = ["<rpmlibs>"]  # Set virtual root for this root rpm.

    # Remove self dependency refs:
    ctx = dict(dependencies=[(r, [p for p in ps if p != r])
                             for r, ps in reqs.iteritems()])

    depgraph_s = RT.render("rpmdep_graph_gv.j2", ctx, tpaths, ask=True)
    src = os.path.join(workdir, "rpmdep_graph.dot")
    U.copen(src, 'w').write(depgraph_s)

    output = src + ".svg"
    SH.run("%s -Tsvg -o %s %s" % (engine, output, src), workdir=workdir)

    if html:
        logging.info("Generate HTML files for graphviz outputs")
        for t in ("js/graphviz-svg.js.j2", "js/jquery.js.j2",
                  "rpmdep_graph_gv.html.j2"):
            _renderfile(workdir, t, ctx={}, tpaths=tpaths)