#!/usr/bin/env ruby require 'builder/builder.rb' module Prick::SubCommand def self.build(database, username, schema, builddir: "schema", timer: nil, dump: nil) Timer.on! if timer time "Prick::Command#build" do begin super_conn = PgConn.new conn = nil builder = nil time "Load build object" do if super_conn.rdbms.exist? database conn = PgConn.new(database, username) super_conn.rdbms.empty!(database) else super_conn.rdbms.create database, owner: username conn = PgConn.new(database, username) end builder = Prick::Build::Builder.new(conn, builddir) builder.pool.delete_schema(builder.pool.after_schema(schema)) if schema end case dump when :nodes; builder.nodes.reject { |node| node.is_a?(Build::BuildNode) }.map &:dump when :allnodes; builder.nodes.map &:dump when :batches; builder.dump when nil; else raise Prick::Error, "Illegal dump type: #{dump.inspect}" end && exit time "Execute build object" do builder.execute conn end rescue Prick::Error => ex $stderr.puts ex.message exit 1 rescue ::Command::Error => ex $stderr.puts ex.message exit 1 ensure super_conn&.terminate conn&.terminate end end end end