File: plugin_depends.rb

package info (click to toggle)
mikutter 5.0.4%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 9,700 kB
  • sloc: ruby: 21,307; sh: 181; makefile: 19
file content (56 lines) | stat: -rw-r--r-- 1,451 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*- coding: utf-8 -*-

require 'boot/delayer'
require 'miquire_plugin'

using Miquire::ToSpec

Environment::PLUGIN_PATH.each do |path|
  Miquire::Plugin.loadpath << path
end
Miquire::Plugin.loadpath << File.join(Environment::CONFROOT, 'plugin')

escape = -> (v) do
  if /[^\w]/.match?(v)
    '"%{v}"' % { v: v.gsub('"', '\"') }
  else
    v
  end
end

writer = -> (node, graph, spec) do
  depends = Miquire::Plugin.depended_plugins(spec)
  if (depends || []).empty?
    graph.puts "  #{escape.(spec[:slug])};"
  else
    depends.zip(Array(spec.dig(:depends, :plugin))).each do |depend, src|
      if depend
        graph.puts "  #{escape.(spec[:slug])} -> #{escape.(depend[:slug])};"
      else
        id = src.hash
        node.puts "  #{id} [label = #{escape.(src.inspect)}, shape = box, fillcolor = \"#FFCCCC\", style = \"solid,filled\"];"
        graph.puts "  #{escape.(spec[:slug])} -> #{id};"
      end
    end
  end
end

puts 'digraph mikutter_plugin {'

graph_buf = StringIO.new('', 'r+')

if Array(Mopt.plugin).empty?
  Miquire::Plugin.each_spec(&writer.curry.(STDOUT, graph_buf))
else
  available = Array(Mopt.plugin).inject(Set.new(Array(Mopt.plugin))) do |depends, depend_slug|
    Miquire::Plugin.depended_plugins(depend_slug, recursive: true).each do |spec|
      depends << spec[:slug]
    end
  end
  available.map{|x| x.to_spec }.each(&writer.curry.(STDOUT, graph_buf))
end

graph_buf.rewind
STDOUT.write graph_buf.read

puts '}'