Skip to main content

Generate build order graph from directory of debian packaging repositories

Project description

controlgraph

PyPI version Build status

controlgraph is a directed graph which can be traversed to enable parallelized Debian package builds.

From the available directories with valid Debian packaging, a graph with directories (representing source packages) for nodes and build dependencies for edges is produced. The reverse of this graph can traversed with a breadth-first search to build in dependency order.

controlgraph is a program which returns the controlgraph for a directory to build, in linear or dot format.

Installation

pip3 install controlgraph

Library Usage

import sys

from pathlib import Path

import controlgraph
import networkx as nx

# get all directories
dirs = [p for p in Path.cwd().iterdir() if p.is_dir()]

# get map of local binary packages to locally-available source build dependencies
pkgs = controlgraph.parse_all_controlfiles(dirs)

# generate build dependency graph from map
dep_graph = controlgraph.graph(pkgs)

# print full dot graph
nx.nx_pydot.write_dot(dep_graph, sys.stdout)

# print linear order from depth-first search
print(" ".join(list(nx.dfs_postorder_nodes(dep_graph))))

Output

strict digraph  {
"opx-nas-daemon";
"opx-common-utils";
"opx-cps";
"opx-logging";
"opx-nas-acl";
"opx-sdi-sys";
"opx-nas-daemon" -> "opx-common-utils";
"opx-nas-daemon" -> "opx-cps";
"opx-nas-daemon" -> "opx-logging";
"opx-nas-daemon" -> "opx-nas-acl";
"opx-common-utils" -> "opx-logging";
"opx-cps" -> "opx-common-utils";
"opx-cps" -> "opx-logging";
"opx-nas-acl" -> "opx-common-utils";
"opx-nas-acl" -> "opx-cps";
"opx-nas-acl" -> "opx-logging";
"opx-sdi-sys" -> "opx-common-utils";
"opx-sdi-sys" -> "opx-logging";
}

opx-logging opx-common-utils opx-cps opx-nas-acl opx-nas-daemon opx-sdi-sys

CLI Usage

With one or more directories present, run controlgraph.

$ for r in opx-nas-acl opx-nas-daemon opx-alarm opx-logging opx-common-utils; do
    git clone "https://github.com/open-switch/$r"
  done

$ controlgraph
opx-alarm opx-logging opx-common-utils opx-nas-acl opx-nas-daemon

$ controlgraph --graph
strict digraph  {
"opx-alarm";
"opx-nas-daemon";
"opx-common-utils";
"opx-logging";
"opx-nas-acl";
"opx-nas-daemon" -> "opx-common-utils";
"opx-nas-daemon" -> "opx-logging";
"opx-nas-daemon" -> "opx-nas-acl";
"opx-common-utils" -> "opx-logging";
"opx-nas-acl" -> "opx-common-utils";
"opx-nas-acl" -> "opx-logging";
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

controlgraph-0.7.1.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

controlgraph-0.7.1-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file controlgraph-0.7.1.tar.gz.

File metadata

  • Download URL: controlgraph-0.7.1.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.19.1

File hashes

Hashes for controlgraph-0.7.1.tar.gz
Algorithm Hash digest
SHA256 bcf4e9f2a55f8cc08a38b6805cef63269da6630c821bdc1ca44c167a9aeff100
MD5 88b8dbe9f9e5be18c7e5e4d090889257
BLAKE2b-256 2079c8bee133b097f48ad1d90e18bb72adb948106e23d8f72538ab748248b0bf

See more details on using hashes here.

File details

Details for the file controlgraph-0.7.1-py3-none-any.whl.

File metadata

File hashes

Hashes for controlgraph-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a1bc6b587321b93d6170cfeeedfbb2ab02d877287b77754b4c292d47454cb3b6
MD5 77ff3dec0b7344557e9a291cf4d3bffb
BLAKE2b-256 d1b11396cfdc5c331cb2d95abca5caf0bca827e924090693409bb76e92bf4eb0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page