Build dependency generator and iterator for perl6
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
t
.gitignore
META6.json
README.md

README.md

Uxmal

Analyses the an array of META6.json-ish hashes to determine the required build order and also provides a control mechanism for building as efficiently as possible.

depends-tree(@meta)

Really only needs an array of { :name, :depends([]) } of all of the dependencies required

depends-channel(%tree, $concurrency = 3)

Returns a Channel you can use for flow control for whatever you're doing.

Example:

my %tree = depends-tree(@list-of-metas);
my $flow = depends-channel(%tree);

loop {
  if $flow.poll -> $key {
    # do something with %tree{$k}
    %tree{$k}<promise>.keep; # this is important so the controller
                             # knows it can send the next item to be
                             # built
  }
  if $flow.closed { last }
  sleep .5;
};

Check out t/build-order.t:32 for a more complex example.

generate-dot(%tree)

Returns a very simply graphviz dot format string that you can use to write to a file and generate a chart.

attempt-full-dot-gen(%tree, :$force = False)

Will die if $force ~~ False or if which dot does not return the path to graphviz's dot.

This method attempts to generate the dot file, runs dot -T png -o <tmp-file.png> <tmp-file.dot> and returns the string path to the png file.