prick 0.29.2 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/TODO +2 -0
- data/exe/prick +290 -518
- data/lib/prick/builder/batch.rb +1 -4
- data/lib/prick/builder/builder.rb +15 -9
- data/lib/prick/builder/node.rb +3 -2
- data/lib/prick/builder/node_pool.rb +3 -1
- data/lib/prick/builder/parser.rb +2 -1
- data/lib/prick/constants.rb +12 -12
- data/lib/prick/diff.rb +2 -2
- data/lib/prick/environment.rb +23 -10
- data/lib/prick/local/command.rb +8 -2
- data/lib/prick/local/fmt.rb +56 -0
- data/lib/prick/prick_version.rb +1 -1
- data/lib/prick/share/init/{.gitignore → dot.gitignore} +1 -1
- data/lib/prick/share/init/prick.environment.yml +16 -0
- data/lib/prick/share/init/prick.yml +3 -3
- data/lib/prick/share/init/schema/prick/build.yml +11 -2
- data/lib/prick/share/init/schema/prick/tables.sql +30 -9
- data/lib/prick/share/init/schema/prick/views.sql +6 -0
- data/lib/prick/state.rb +297 -95
- data/lib/prick/subcommand/prick-build.rb +26 -20
- data/lib/prick/subcommand/prick-clean.rb +5 -5
- data/lib/prick/subcommand/prick-create.rb +41 -6
- data/lib/prick/subcommand/prick-drop.rb +57 -14
- data/lib/prick/subcommand/prick-fox.rb +1 -1
- data/lib/prick/subcommand/prick-init.rb +25 -18
- data/lib/prick/subcommand/prick-list.rb +99 -0
- data/lib/prick/subcommand/prick-make.rb +8 -8
- data/lib/prick/subcommand/prick-migrate.rb +8 -7
- data/lib/prick/subcommand/prick-release.rb +4 -2
- data/lib/prick/subcommand/prick-set.rb +52 -0
- data/lib/prick/subcommand/prick-setup.rb +3 -13
- data/lib/prick/subcommand/prick-teardown.rb +13 -9
- data/lib/prick/subcommand/subcommand.rb +12 -0
- data/lib/prick/version.rb +1 -1
- data/lib/prick.rb +54 -15
- metadata +9 -5
- data/lib/prick/share/init/schema/prick/data.sql +0 -6
- data/prick.environments.yml +0 -14
@@ -3,28 +3,71 @@
|
|
3
3
|
require_relative '../builder/builder.rb'
|
4
4
|
|
5
5
|
module Prick::SubCommand
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# Drop database owner
|
7
|
+
def self.drop_owner(username)
|
8
|
+
# No database at this point so no session is running and no cascade. A nop
|
9
|
+
# if the user is the current user or owns objects in other databases
|
10
|
+
if username != ENV['USER']
|
11
|
+
super_conn.role.drop(username, fail: false, silent: true)
|
12
|
+
end
|
10
13
|
end
|
11
14
|
|
12
|
-
# Drop all users associated with the given database except the owner
|
15
|
+
# Drop all users associated with the given database except the owner. We
|
16
|
+
# assume that users can only be connected to the project database and that
|
17
|
+
# they don't own objects in other databases
|
13
18
|
def self.drop_users(database)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
constrain database, String
|
20
|
+
conn = super_conn
|
21
|
+
if conn.rdbms.exist? database
|
22
|
+
users = conn.role.list(database: database).reject { _1 == conn.rdbms.owner(database) }
|
23
|
+
conn.session.terminate(database, users)
|
24
|
+
if conn.rdbms.exist?(database)
|
25
|
+
# Connect to database to make cascade work. Run in a block to close connection afterwards
|
26
|
+
PgConn.new(database) { |conn| conn.role.drop(users, cascade: true) }
|
27
|
+
else
|
28
|
+
conn.rdbms.role.drop(users)
|
29
|
+
end
|
30
|
+
else
|
31
|
+
# We don't terminate sessions because we assume one-database-users
|
32
|
+
conn.role.drop(users, cascade: true) # Fails if the users owns objects in other databases
|
33
|
+
end
|
18
34
|
end
|
19
35
|
|
36
|
+
# Drop a database
|
20
37
|
def self.drop_database(database)
|
21
|
-
|
38
|
+
State.connection.session.terminate(database, nil)
|
39
|
+
State.connection { |conn| conn.rdbms.drop database }
|
22
40
|
end
|
23
41
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
42
|
+
# Empty the database
|
43
|
+
def self.drop_schema(database, schemas = [])
|
44
|
+
constrain database, String
|
45
|
+
constrain schemas, [String]
|
46
|
+
if schemas.empty?
|
47
|
+
State.connection { |conn| conn.rdbms.empty!(database) }
|
48
|
+
else
|
49
|
+
Prick.state.connection { |conn|
|
50
|
+
schemas.each { |schema| conn.schema.drop(schema, cascade: true) }
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Drop database and its users including the owner if possible and not the
|
56
|
+
# current user
|
57
|
+
def self.drop_all(database, username = nil)
|
58
|
+
constrain database, String
|
59
|
+
State.connection { |conn|
|
60
|
+
if username.nil? && conn.rdbms.exist?(database)
|
61
|
+
owner = State.connection.rdbms.owner(database)
|
62
|
+
else
|
63
|
+
owner = username || database
|
64
|
+
end
|
65
|
+
if conn.rdbms.exist? database
|
66
|
+
drop_users(database)
|
67
|
+
drop_database(database)
|
68
|
+
end
|
69
|
+
drop_owner(owner) if owner != ENV['USER']
|
70
|
+
}
|
28
71
|
end
|
29
72
|
end
|
30
73
|
|
@@ -1,46 +1,53 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
|
3
3
|
module Prick::SubCommand
|
4
|
-
def self.init(dir, name, title,
|
4
|
+
def self.init(project_file, dir, name, title) # dir, name, and title can be nil
|
5
|
+
cwd = Dir.getwd
|
5
6
|
if dir
|
6
|
-
!File.exist?(dir) or
|
7
|
+
!File.exist?(dir) or Prick.error "Directory #{dir} exists"
|
7
8
|
FileUtils.mkdir_p(dir)
|
8
9
|
Dir.chdir(dir)
|
9
10
|
else
|
10
11
|
dir = "."
|
11
12
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
username ||= name
|
13
|
+
dirname = File.basename(Dir.getwd)
|
14
|
+
name ||= dirname
|
15
|
+
title ||= name.gsub(/[_-]/, " ").capitalize
|
16
16
|
|
17
|
+
# Note that the initial project file is invalid and is removed again after
|
18
|
+
# the initial commit
|
17
19
|
Command.command %(
|
18
20
|
git init .
|
19
|
-
|
21
|
+
dir=#{SHARE_PATH}/init
|
22
|
+
for path in $dir/*; do
|
23
|
+
source_file=$(basename $path)
|
24
|
+
dest_file=$(sed 's/^dot\././' <<<$source_file)
|
25
|
+
cp -a $dir/$source_file $dest_file
|
26
|
+
done
|
20
27
|
git add .
|
21
28
|
git commit -am "Initial import"
|
29
|
+
rm -f #{project_file}
|
22
30
|
), fail: false
|
31
|
+
Command.status == 0 or Prick.failure "Failed creating initial import"
|
23
32
|
|
24
|
-
|
25
|
-
|
26
|
-
state = State.new
|
33
|
+
# Write (valid) configuration file
|
34
|
+
state = State.new(project_file, nil, nil)
|
27
35
|
state.name = name
|
28
36
|
state.title = title
|
29
37
|
state.prick_version = PrickVersion.new VERSION
|
30
38
|
state.version = PrickVersion.new("0.0.0")
|
31
|
-
state.
|
32
|
-
state.database = database
|
33
|
-
state.username = username
|
34
|
-
state.save
|
39
|
+
state.save_project
|
35
40
|
|
41
|
+
# Commit configuration file and create initial release
|
36
42
|
Command.command %(
|
37
43
|
set -e
|
44
|
+
git add #{project_file}
|
38
45
|
git commit -am "Release 0.0.0"
|
39
|
-
git tag v0.0.0
|
46
|
+
git tag --message "Initial Release" v0.0.0
|
40
47
|
), fail: false
|
48
|
+
Command.status == 0 or Prick.failure "Failed creating initial release"
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
[dir, state]
|
50
|
+
Dir.chdir(cwd)
|
51
|
+
[dir, name]
|
45
52
|
end
|
46
53
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Prick::SubCommand
|
2
|
+
def self.list_environments(format: :long)
|
3
|
+
environments = Environment.environments.select { |env| env.comment }
|
4
|
+
if format == :short
|
5
|
+
puts environments.map(&:name)
|
6
|
+
else
|
7
|
+
headers = %w(Environment Description)
|
8
|
+
rows = environments.map { |env| [env.name, env.comment] }
|
9
|
+
Fmt.puts_table(headers, rows)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.list_variables(format: :long, all: false)
|
14
|
+
if format == :short
|
15
|
+
puts Prick.state.bash_environment.keys
|
16
|
+
else
|
17
|
+
headers = %w(variable value)
|
18
|
+
vars = Prick.state.bash_environment(all: all).reject { |k,v| k == "PATH" }
|
19
|
+
rows = vars.map { |k,v| [k, Array(v).flatten.join(" ")] }
|
20
|
+
Fmt.puts_table(headers, rows)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.list_databases(format: :long)
|
25
|
+
constrain format, :long, :short
|
26
|
+
conn = State.connection
|
27
|
+
# databases = conn.values "select datname from pg_database where datistemplate = false order by datname;"
|
28
|
+
|
29
|
+
if format == :short
|
30
|
+
puts Prick.databases
|
31
|
+
else
|
32
|
+
fs_time = `find . -type f -not -path '*/\.*' -printf '%TF %TT\n' | sort -r | head -n 1`
|
33
|
+
git_branch = Git.branch.current
|
34
|
+
git_rev = Git.id[0...8]
|
35
|
+
|
36
|
+
rows = []
|
37
|
+
Prick.databases { |database, conn|
|
38
|
+
row = conn.record(%(
|
39
|
+
select
|
40
|
+
'#{database}' as "database", name, version, branch, rev, clean, environment,
|
41
|
+
to_char(
|
42
|
+
built_at at time zone 'UTC' at time zone current_setting('TimeZone'),
|
43
|
+
'YYYY-MM-DD HH24:MI') as "built_at",
|
44
|
+
success
|
45
|
+
from prick.versions
|
46
|
+
))
|
47
|
+
|
48
|
+
if row[:success]
|
49
|
+
clean = row[:clean]
|
50
|
+
same_revision = row[:branch] == git_branch && row[:rev] == git_rev
|
51
|
+
up2date = fs_time <= row[:built_at]
|
52
|
+
row[:state] =
|
53
|
+
case [clean, same_revision, up2date]
|
54
|
+
in [true, true, true]; "clean" # Clean repo
|
55
|
+
in [true, true, false]; "dirty" # Clean repo but doesn't include latest changes
|
56
|
+
in [true, false, _]; "detached" # Clean repo but different revision
|
57
|
+
|
58
|
+
in [false, true, true]; "ok" # Dirty repo
|
59
|
+
in [false, true, false]; "dirty" # Dirty repo, but doesn't include latest changes
|
60
|
+
in [false, false, _]; "stale" # Dirty repo, no way back
|
61
|
+
end
|
62
|
+
else
|
63
|
+
row[:state] = "-"
|
64
|
+
end
|
65
|
+
|
66
|
+
last_column = (Prick.state.database == database ? "*" : "")
|
67
|
+
rows << row.values + [last_column]
|
68
|
+
}
|
69
|
+
|
70
|
+
headers = %w(database project version branch rev clean environment built success state) + [" "]
|
71
|
+
Fmt.puts_table(headers, rows)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.list_users
|
76
|
+
puts State.connection.role.list(database: Prick.state.database)
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.list_owners(format: :long)
|
80
|
+
owners = {}
|
81
|
+
Prick.databases.each { |database|
|
82
|
+
# owner = super_conn.rdbms.exist?(d) ? super_conn.rdbms.owner(d) : d
|
83
|
+
owner = super_conn.rdbms.owner(database)
|
84
|
+
(owners[owner] ||= []) << database
|
85
|
+
}
|
86
|
+
if format == :short
|
87
|
+
puts owners.keys
|
88
|
+
else
|
89
|
+
headers = %w(username databases) + [" "]
|
90
|
+
rows = owners.map { |owner, databases|
|
91
|
+
current_user_mark = (Prick.state.username == owner ? '*' : "")
|
92
|
+
[owner, databases.join(","), current_user_mark]
|
93
|
+
}
|
94
|
+
Fmt.puts_table(headers, rows)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
|
@@ -7,22 +7,22 @@ module Prick::SubCommand
|
|
7
7
|
Timer.on! if timer
|
8
8
|
time "Prick::Command#make" do
|
9
9
|
begin
|
10
|
-
super_conn =
|
10
|
+
super_conn = State.connection
|
11
11
|
conn = nil
|
12
12
|
builder = nil
|
13
|
-
|
13
|
+
last_built_at = EPOCH
|
14
14
|
clean = false
|
15
15
|
create_schemas = []
|
16
16
|
|
17
17
|
time "Load build object" do
|
18
18
|
if super_conn.rdbms.exist? database
|
19
|
-
conn =
|
20
|
-
if conn.schema.
|
21
|
-
|
19
|
+
conn = Prick.state.connection
|
20
|
+
if conn.schema.exist_relation?("prick", "versions") && !conn.empty?("prick.versions")
|
21
|
+
last_built_at = conn.value("select built_at from prick.versions")
|
22
22
|
end
|
23
23
|
else
|
24
24
|
super_conn.rdbms.create database, owner: username
|
25
|
-
conn =
|
25
|
+
conn = Prick.state.connection
|
26
26
|
clean = true
|
27
27
|
end
|
28
28
|
|
@@ -43,7 +43,7 @@ module Prick::SubCommand
|
|
43
43
|
after_schemas.each { |delete_schema| builder.pool.delete_schema(delete_schema) }
|
44
44
|
end
|
45
45
|
|
46
|
-
touched_nodes = builder.nodes.select { |node| File.mtime(node.path) >
|
46
|
+
touched_nodes = builder.nodes.select { |node| File.mtime(node.path) > last_built_at }
|
47
47
|
touched_phases = touched_nodes.map(&:phase).uniq.compact
|
48
48
|
touched_kinds = touched_nodes.map(&:kind).uniq.compact
|
49
49
|
touched_schema = touched_nodes.first&.schema
|
@@ -74,7 +74,7 @@ module Prick::SubCommand
|
|
74
74
|
when :batches; builder.dump
|
75
75
|
when nil;
|
76
76
|
else
|
77
|
-
|
77
|
+
Prick.error "Illegal dump type: #{dump.inspect}"
|
78
78
|
end
|
79
79
|
exit if dump
|
80
80
|
|
@@ -3,12 +3,13 @@ module Prick
|
|
3
3
|
module SubCommand
|
4
4
|
# def self.migrate(database, username, file) TODO
|
5
5
|
def self.migrate(database, username, file: nil)
|
6
|
-
|
6
|
+
conn = Prick.state.connection
|
7
|
+
# PgConn.new(database, username) { |conn|
|
7
8
|
conn.schema.exist_relation? "prick", "versions" or
|
8
|
-
|
9
|
+
Prick.failure "Can't read version from database"
|
9
10
|
|
10
11
|
from_version = PrickVersion.new(conn.value "select version from prick.versions") or
|
11
|
-
|
12
|
+
Prick.failure "Illegal version in table prick.versions"
|
12
13
|
|
13
14
|
if file
|
14
15
|
conn.transaction {
|
@@ -16,12 +17,12 @@ module Prick
|
|
16
17
|
}
|
17
18
|
else
|
18
19
|
to_version = Prick.state.version
|
19
|
-
from_version != to_version or
|
20
|
-
from_version < to_version or
|
20
|
+
from_version != to_version or Prick.failure "Already up to date"
|
21
|
+
from_version < to_version or Prick.failure "Can't migrate backwards"
|
21
22
|
|
22
23
|
migration_dir = "#{MIGRATION_DIR}/#{from_version}"
|
23
24
|
File.directory? migration_dir or
|
24
|
-
|
25
|
+
Prick.failure "Can't migrate from #{from_version} to #{to_version}"
|
25
26
|
|
26
27
|
puts "Migrating from #{from_version} to #{to_version}"
|
27
28
|
|
@@ -31,7 +32,7 @@ module Prick
|
|
31
32
|
conn.exec File.read(SCHEMA_VERSION_PATH)
|
32
33
|
}
|
33
34
|
end
|
34
|
-
|
35
|
+
# }
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -8,15 +8,17 @@ module Prick
|
|
8
8
|
Git.synchronized? or raise "Won't release: Repository is not synchronized with origin"
|
9
9
|
|
10
10
|
version = Prick.state.version.increment!(kind).to_s
|
11
|
-
Prick.state.
|
11
|
+
Prick.state.save_project
|
12
12
|
|
13
|
-
Git.add(Prick.state.
|
13
|
+
Git.add(Prick.state.project_file)
|
14
14
|
Git.add(Prick.state.schema_file)
|
15
15
|
Git.commit "Release #{version}"
|
16
16
|
Git.tag.create "v#{version}"
|
17
17
|
Git.branch.create version
|
18
18
|
Git.push
|
19
19
|
|
20
|
+
# TODO TODO TODO
|
21
|
+
|
20
22
|
puts version
|
21
23
|
end
|
22
24
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'time' # For Time#parse
|
2
|
+
|
3
|
+
module Prick::SubCommand
|
4
|
+
def self.set(variable, value = nil, arg = nil)
|
5
|
+
case variable
|
6
|
+
when "database"; set_database(value, arg)
|
7
|
+
when "environment"; set_environment(value)
|
8
|
+
when "duration"; set_duration(value)
|
9
|
+
else
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.set_environment(environment)
|
16
|
+
if environment
|
17
|
+
Prick.state.environment = environment
|
18
|
+
Prick.state.save_state
|
19
|
+
else
|
20
|
+
puts Prick.state.environment
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# If the environment is nil, it is initialized from the database on next build
|
25
|
+
def self.set_database(database, environment = nil)
|
26
|
+
if database
|
27
|
+
conn = State.connection
|
28
|
+
conn.rdbms.exist? database or Prick.error "Database '#{database}' does not exist"
|
29
|
+
username = conn.rdbms.owner database
|
30
|
+
|
31
|
+
Prick.state.database = database
|
32
|
+
Prick.state.username = username
|
33
|
+
|
34
|
+
if environment.nil?
|
35
|
+
Prick.state.connection # Implicitly initialize database enviroment if present
|
36
|
+
environment = Prick.state.database_environment # or Prick.error "Can't find environment"
|
37
|
+
end
|
38
|
+
Prick.state.environment = environment
|
39
|
+
Prick.state.save_state
|
40
|
+
else
|
41
|
+
puts Prick.state.database
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.set_duration(make_start)
|
46
|
+
conn = Prick.state.connection
|
47
|
+
built_at = conn.value "select built_at from prick.versions"
|
48
|
+
duration = Time.now - Time.iso8601(make_start)
|
49
|
+
conn.exec "update prick.versions set make_duration = #{duration}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -3,18 +3,8 @@
|
|
3
3
|
require_relative '../builder/builder.rb'
|
4
4
|
|
5
5
|
module Prick::SubCommand
|
6
|
-
def self.setup(database, username)
|
7
|
-
|
8
|
-
|
9
|
-
# FIXME Should not be created as superuser but we can't do that before we
|
10
|
-
# have a super: option in build
|
11
|
-
conn.role.create username, superuser: true, can_login: true, create_role: true
|
12
|
-
end
|
13
|
-
if !conn.rdbms.exist? database
|
14
|
-
conn.rdbms.create database, owner: username
|
15
|
-
end
|
16
|
-
builder = Prick::Build::Builder.new(conn, "schema")
|
17
|
-
# TODO Run builder setup scrips
|
6
|
+
def self.setup(database, username, environment)
|
7
|
+
create_database(database, username, environment)
|
8
|
+
set_database(database, environment)
|
18
9
|
end
|
19
10
|
end
|
20
|
-
|
@@ -3,17 +3,21 @@
|
|
3
3
|
require_relative '../builder/builder.rb'
|
4
4
|
|
5
5
|
module Prick::SubCommand
|
6
|
-
def self.teardown(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
def self.teardown(*databases, remove_state_file: false)
|
7
|
+
databases = Array(databases).flatten
|
8
|
+
owners = databases.map { |d|
|
9
|
+
super_conn.rdbms.exist?(d) ? super_conn.rdbms.owner(d) : d
|
10
|
+
}.uniq
|
11
|
+
users = databases.map { |d| super_conn.role.list(database: d) }.flatten.uniq
|
12
|
+
|
13
|
+
databases.each { |d| drop_database(d) }
|
14
|
+
super_conn.role.drop(users)
|
15
|
+
super_conn.role.drop(owners, fail: false)
|
16
|
+
owners.each { |o| drop_owner(o) }
|
17
|
+
|
18
|
+
FileUtils.rm_f Prick.state.state_file if remove_state_file
|
14
19
|
|
15
20
|
# TODO Run builder teardown scrips
|
16
|
-
# builder = Prick::Build::Builder.new(conn, "schema")
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
data/lib/prick/version.rb
CHANGED
data/lib/prick.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'prick/version.rb'
|
2
2
|
|
3
3
|
require 'pg_conn'
|
4
4
|
|
@@ -8,7 +8,7 @@ require 'constrain'
|
|
8
8
|
|
9
9
|
module Prick
|
10
10
|
class Error < RuntimeError; end
|
11
|
-
class
|
11
|
+
class Failure < RuntimeError; end
|
12
12
|
end
|
13
13
|
|
14
14
|
require_relative 'prick/constants.rb'
|
@@ -18,6 +18,7 @@ require_relative 'prick/local/command.rb'
|
|
18
18
|
require_relative 'prick/local/git.rb'
|
19
19
|
require_relative 'prick/local/timer.rb'
|
20
20
|
require_relative 'prick/local/ansi.rb'
|
21
|
+
require_relative 'prick/local/fmt.rb'
|
21
22
|
|
22
23
|
require_relative 'prick/environment.rb'
|
23
24
|
require_relative 'prick/state.rb'
|
@@ -25,27 +26,65 @@ require_relative 'prick/prick_version.rb'
|
|
25
26
|
require_relative 'prick/diff.rb'
|
26
27
|
|
27
28
|
module Prick
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
29
|
+
def mesg(*msgs) = Prick.mesg(*msgs)
|
30
|
+
def verb(*msgs) = Prick.verb(*msgs)
|
31
|
+
def self.mesg(*msgs) puts msgs.join(" ") if !$quiet end
|
32
|
+
def self.verb(*msgs) puts msgs.join(" ") if $verbose && !$quiet end
|
33
33
|
end
|
34
34
|
|
35
|
-
require_relative 'prick/subcommand/
|
36
|
-
require_relative 'prick/subcommand/prick-
|
37
|
-
require_relative 'prick/subcommand/prick-teardown.rb'
|
35
|
+
require_relative 'prick/subcommand/subcommand.rb'
|
36
|
+
require_relative 'prick/subcommand/prick-build.rb'
|
38
37
|
require_relative 'prick/subcommand/prick-clean.rb'
|
39
38
|
require_relative 'prick/subcommand/prick-create.rb'
|
40
|
-
require_relative 'prick/subcommand/prick-build.rb'
|
41
|
-
require_relative 'prick/subcommand/prick-make.rb'
|
42
|
-
require_relative 'prick/subcommand/prick-fox.rb'
|
43
39
|
require_relative 'prick/subcommand/prick-drop.rb'
|
44
|
-
require_relative 'prick/subcommand/prick-
|
40
|
+
require_relative 'prick/subcommand/prick-set.rb'
|
41
|
+
require_relative 'prick/subcommand/prick-list.rb'
|
42
|
+
require_relative 'prick/subcommand/prick-fox.rb'
|
43
|
+
require_relative 'prick/subcommand/prick-init.rb'
|
44
|
+
require_relative 'prick/subcommand/prick-make.rb'
|
45
45
|
require_relative 'prick/subcommand/prick-migrate.rb'
|
46
|
+
require_relative 'prick/subcommand/prick-release.rb'
|
47
|
+
require_relative 'prick/subcommand/prick-setup.rb'
|
48
|
+
require_relative 'prick/subcommand/prick-teardown.rb'
|
46
49
|
|
47
50
|
module Prick
|
48
51
|
@state = nil
|
49
|
-
def self.state()
|
52
|
+
def self.state?() !@state.nil? end
|
53
|
+
def self.state() @state or raise ArgumentError end
|
50
54
|
def self.state=(state) @state = state end
|
55
|
+
|
56
|
+
def self.error(*args) raise Prick::Error.new *args end
|
57
|
+
def self.failure(*args) raise Prick::Failure.new *args end
|
58
|
+
|
59
|
+
def self.owner_conn = state.connection
|
60
|
+
def self.super_conn = State.connection
|
61
|
+
# def self.conn = owner_conn
|
62
|
+
|
63
|
+
# Return list of prick databases. If a block is given it is called with a
|
64
|
+
# connection to each of the databases
|
65
|
+
def self.databases(&block)
|
66
|
+
databases = super_conn.values %(
|
67
|
+
select datname from pg_database where datistemplate = false order by datname
|
68
|
+
)
|
69
|
+
databases.select! { |database|
|
70
|
+
PgConn.new(database) { |conn|
|
71
|
+
is_prick_database = conn.exist?(%(
|
72
|
+
select 1
|
73
|
+
from information_schema.tables
|
74
|
+
where table_schema = 'prick'
|
75
|
+
and table_name = 'builds'
|
76
|
+
limit 1
|
77
|
+
))
|
78
|
+
yield(database, conn) if is_prick_database && block_given?
|
79
|
+
is_prick_database
|
80
|
+
}
|
81
|
+
}
|
82
|
+
databases
|
83
|
+
end
|
84
|
+
|
85
|
+
module SubCommand
|
86
|
+
def self.owner_conn = Prick.owner_conn
|
87
|
+
def self.super_conn = Prick.super_conn
|
88
|
+
# def self.conn = Prick.conn
|
89
|
+
end
|
51
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claus Rasmussen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semantic
|
@@ -194,19 +194,21 @@ files:
|
|
194
194
|
- lib/prick/ext/expand_variables.rb
|
195
195
|
- lib/prick/local/ansi.rb
|
196
196
|
- lib/prick/local/command.rb
|
197
|
+
- lib/prick/local/fmt.rb
|
197
198
|
- lib/prick/local/git.rb
|
198
199
|
- lib/prick/local/timer.rb
|
199
200
|
- lib/prick/prick_version.rb
|
200
|
-
- lib/prick/share/init/.gitignore
|
201
201
|
- lib/prick/share/init/.rspec
|
202
|
+
- lib/prick/share/init/dot.gitignore
|
202
203
|
- lib/prick/share/init/migration/.keep
|
204
|
+
- lib/prick/share/init/prick.environment.yml
|
203
205
|
- lib/prick/share/init/prick.yml
|
204
206
|
- lib/prick/share/init/schema/.keep
|
205
207
|
- lib/prick/share/init/schema/build.yml
|
206
208
|
- lib/prick/share/init/schema/prick/.keep
|
207
209
|
- lib/prick/share/init/schema/prick/build.yml
|
208
|
-
- lib/prick/share/init/schema/prick/data.sql
|
209
210
|
- lib/prick/share/init/schema/prick/tables.sql
|
211
|
+
- lib/prick/share/init/schema/prick/views.sql
|
210
212
|
- lib/prick/share/init/schema/public/.keep
|
211
213
|
- lib/prick/share/init/spec/prick_helper.rb
|
212
214
|
- lib/prick/share/init/spec/prick_spec.rb
|
@@ -222,13 +224,15 @@ files:
|
|
222
224
|
- lib/prick/subcommand/prick-drop.rb
|
223
225
|
- lib/prick/subcommand/prick-fox.rb
|
224
226
|
- lib/prick/subcommand/prick-init.rb
|
227
|
+
- lib/prick/subcommand/prick-list.rb
|
225
228
|
- lib/prick/subcommand/prick-make.rb
|
226
229
|
- lib/prick/subcommand/prick-migrate.rb
|
227
230
|
- lib/prick/subcommand/prick-release.rb
|
231
|
+
- lib/prick/subcommand/prick-set.rb
|
228
232
|
- lib/prick/subcommand/prick-setup.rb
|
229
233
|
- lib/prick/subcommand/prick-teardown.rb
|
234
|
+
- lib/prick/subcommand/subcommand.rb
|
230
235
|
- lib/prick/version.rb
|
231
|
-
- prick.environments.yml
|
232
236
|
- prick.gemspec
|
233
237
|
homepage: http://www.nowhere.com/
|
234
238
|
licenses: []
|