Kobold 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/kobold +17 -12
- data/lib/Kobold/first_time_setup.rb +14 -0
- data/lib/Kobold/init.rb +20 -0
- data/lib/Kobold/invoke.rb +202 -0
- data/lib/Kobold/read_config.rb +15 -0
- data/lib/Kobold/version.rb +2 -2
- data/lib/Kobold.rb +9 -100
- data/prototyping/.gitignore +2 -0
- data/prototyping/.kobold +25 -4
- metadata +78 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a104942e0236e764a6fa1adbd31d8e65fa84f550ff56c4138db311191dcb58a
|
4
|
+
data.tar.gz: 696e18a91d1a5d84d9ba8f3cebe96cc18805bce71a94b4227fdb482bca9fc8ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e403e1b4a039586145d0de0b2311ebccb258e418fef3c43981ddbf0324d234b3d9fbe3a65c3892da01edd3b63233e427dfc2ba3af65dfe559b85c86d33aefbf8
|
7
|
+
data.tar.gz: f2f7d927a487911b8ddc39967378761568bb28ab9e8c199a8c5c4136dcb23a309101494e95b7f0f8484f3c61dc16cfc84f1043dfa2c7046595cbe7a2648f2229
|
data/exe/kobold
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'Kobold'
|
4
4
|
require 'tty-option'
|
5
|
-
require 'pry'
|
5
|
+
#require 'pry'
|
6
6
|
|
7
7
|
module Kobold
|
8
8
|
class Command
|
@@ -11,24 +11,19 @@ module Kobold
|
|
11
11
|
usage do
|
12
12
|
program "kobold"
|
13
13
|
|
14
|
-
|
14
|
+
commands "init", "invoke"
|
15
15
|
|
16
|
-
desc "Initializes empty Kobold configuration file"
|
17
16
|
end
|
18
17
|
|
19
18
|
argument :command do
|
20
19
|
optional
|
21
|
-
desc "
|
20
|
+
desc "Accepts commands for Kobold to execute."
|
22
21
|
end
|
23
22
|
|
24
23
|
flag :help do
|
25
24
|
short "-h"
|
26
25
|
long "--help"
|
27
|
-
desc "Print usage"
|
28
|
-
end
|
29
|
-
|
30
|
-
flag :init do
|
31
|
-
desc "initialize"
|
26
|
+
desc "Print usage."
|
32
27
|
end
|
33
28
|
|
34
29
|
def run
|
@@ -37,7 +32,7 @@ module Kobold
|
|
37
32
|
elsif params.errors.any?
|
38
33
|
puts params.errors.summary
|
39
34
|
else
|
40
|
-
pp params.to_h
|
35
|
+
#pp params.to_h
|
41
36
|
end
|
42
37
|
end
|
43
38
|
end
|
@@ -50,6 +45,16 @@ run = cmd.run
|
|
50
45
|
|
51
46
|
if cmd.params[:command] == nil || cmd.params == "invoke"
|
52
47
|
Kobold.invoke
|
53
|
-
|
54
|
-
|
48
|
+
else
|
49
|
+
case cmd.params[:command]
|
50
|
+
when "add"
|
51
|
+
when "remove"
|
52
|
+
when "update"
|
53
|
+
when "list"
|
54
|
+
Kobold.list
|
55
|
+
when "init"
|
56
|
+
Kobold.init
|
57
|
+
else
|
58
|
+
print cmd.help
|
59
|
+
end
|
55
60
|
end
|
data/lib/Kobold/init.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tty-config"
|
4
|
+
require 'fileutils'
|
5
|
+
require 'git'
|
6
|
+
|
7
|
+
module Kobold
|
8
|
+
class << self
|
9
|
+
# create empty file with current
|
10
|
+
# file version in current dir
|
11
|
+
def init
|
12
|
+
kobold_config = TTY::Config.new
|
13
|
+
kobold_config.filename = ".kobold"
|
14
|
+
kobold_config.extname = ".ini"
|
15
|
+
kobold_config.set "_kobold_config", "format_version", value: Kobold::FORMAT_VERSION
|
16
|
+
kobold_config.write
|
17
|
+
File.rename ".kobold.ini", ".kobold"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tty-config"
|
4
|
+
require 'fileutils'
|
5
|
+
require 'git'
|
6
|
+
|
7
|
+
#require_relative "Kobold/vars.rb"
|
8
|
+
|
9
|
+
module Kobold
|
10
|
+
class << self
|
11
|
+
def invoke
|
12
|
+
Kobold.first_time_setup if !File.directory? "#{KOBOLD_DIR}/repo_cache"
|
13
|
+
if !File.file? "#{Dir.pwd}/.kobold"
|
14
|
+
puts "ERROR: Kobold file not found at '#{Dir.pwd}'"
|
15
|
+
return
|
16
|
+
end
|
17
|
+
settings = Kobold.read_config(Dir.pwd)
|
18
|
+
|
19
|
+
if Kobold::FORMAT_VERSION == settings["_kobold_config"]["format_version"]
|
20
|
+
# iterate over all dependencies
|
21
|
+
settings.each do |key, value|
|
22
|
+
if key[0] == '_'
|
23
|
+
next
|
24
|
+
end
|
25
|
+
repo_dir = "#{KOBOLD_DIR}/repo_cache/#{value['repo'].gsub('/', '-')}"
|
26
|
+
|
27
|
+
source_repo = nil;
|
28
|
+
# check if source exists
|
29
|
+
if !Dir.exist? "#{repo_dir}/source" # TODO: make this properly check for git repo
|
30
|
+
# if it doesnt, make it
|
31
|
+
FileUtils.mkdir_p "#{repo_dir}/source"
|
32
|
+
FileUtils.mkdir_p "#{repo_dir}/worktrees"
|
33
|
+
FileUtils.mkdir_p "#{repo_dir}/worktrees/branched"
|
34
|
+
FileUtils.mkdir_p "#{repo_dir}/worktrees/sha"
|
35
|
+
FileUtils.mkdir_p "#{repo_dir}/worktrees/labelled"
|
36
|
+
FileUtils.mkdir_p "#{repo_dir}/branches"
|
37
|
+
source_repo = clone_git_repo "#{value["source"]}/#{value['repo']}.git", "#{repo_dir}/source"
|
38
|
+
else
|
39
|
+
source_repo = Git.open("#{repo_dir}/source")
|
40
|
+
end
|
41
|
+
|
42
|
+
# must be scoped here, used in various inner scopes
|
43
|
+
target_symlink = nil
|
44
|
+
|
45
|
+
# Structure of a segment of following code:
|
46
|
+
# if it declares a branch: make the branch
|
47
|
+
# if it has a label
|
48
|
+
# it must have a sha
|
49
|
+
# if it has a branch
|
50
|
+
# use that branch + sha
|
51
|
+
# else
|
52
|
+
# use source + sha
|
53
|
+
# end
|
54
|
+
# else check if it has a branch
|
55
|
+
# if it has a sha
|
56
|
+
# make the sha
|
57
|
+
# else
|
58
|
+
# make it point to branch
|
59
|
+
# end
|
60
|
+
# else check if it has a sha
|
61
|
+
# make the sha on the source
|
62
|
+
# else
|
63
|
+
# use source
|
64
|
+
# end
|
65
|
+
|
66
|
+
branch_repo = nil
|
67
|
+
if value["branch"]
|
68
|
+
branch_repo_path = "#{repo_dir}/branches/#{value["branch"]}"
|
69
|
+
# check if branch already exists, make it if it doesnt
|
70
|
+
if !Dir.exist? branch_repo_path
|
71
|
+
FileUtils.mkdir_p "#{repo_dir}/branches"
|
72
|
+
source_repo.worktree(branch_repo_path, value["branch"]).add
|
73
|
+
end
|
74
|
+
branch_repo = Git.open(branch_repo_path)
|
75
|
+
end
|
76
|
+
|
77
|
+
target_symlink = nil
|
78
|
+
# if it has a label
|
79
|
+
if value["label"]
|
80
|
+
|
81
|
+
if !value["commit"]
|
82
|
+
raise "Must give a specific sha when making a label. #{key} has no specific sha given"
|
83
|
+
end
|
84
|
+
if value["branch"]
|
85
|
+
worktree_path = "#{repo_dir}/worktrees/labelled/#{value["label"]}/#{value["branch"]}"
|
86
|
+
_commit_val = value["commit"].to_s.delete_prefix('"').delete_suffix('"').delete_prefix("'").delete_suffix("'")
|
87
|
+
worktree_sha = branch_repo.object(_commit_val).sha;
|
88
|
+
target_symlink = "#{worktree_path}/#{worktree_sha}"
|
89
|
+
if !Dir.exist? target_symlink
|
90
|
+
FileUtils.mkdir_p "#{worktree_path}"
|
91
|
+
branch_repo.worktree(target_symlink, worktree_sha).add
|
92
|
+
end
|
93
|
+
else
|
94
|
+
branch = source_repo.branch.name
|
95
|
+
worktree_path = "#{repo_dir}/worktrees/labelled/#{value["label"]}/#{branch}"
|
96
|
+
_commit_val = value["commit"].to_s.delete_prefix('"').delete_suffix('"').delete_prefix("'").delete_suffix("'")
|
97
|
+
worktree_sha = source_repo.object(_commit_val).sha;
|
98
|
+
target_symlink = "#{worktree_path}/#{worktree_sha}"
|
99
|
+
if !Dir.exist? target_symlink
|
100
|
+
FileUtils.mkdir_p "#{worktree_path}"
|
101
|
+
source_repo.worktree(target_symlink, worktree_sha).add
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
elsif value["branch"]
|
106
|
+
|
107
|
+
if value['sha']
|
108
|
+
worktree_path = "#{repo_dir}/worktrees/branched/#{branch}"
|
109
|
+
_commit_val = value["commit"].to_s.delete_prefix('"').delete_suffix('"').delete_prefix("'").delete_suffix("'")
|
110
|
+
worktree_sha = branch_repo.object(_commit_val).sha;
|
111
|
+
target_symlink = "#{worktree_path}/#{worktree_sha}"
|
112
|
+
if !Dir.exist? target_symlink
|
113
|
+
FileUtils.mkdir_p "#{worktree_path}"
|
114
|
+
branch_repo.worktree(target_symlink, worktree_sha).add
|
115
|
+
end
|
116
|
+
else
|
117
|
+
target_symlink = "#{repo_dir}/branches/#{value['branch']}"
|
118
|
+
end
|
119
|
+
|
120
|
+
elsif value["commit"]
|
121
|
+
|
122
|
+
worktree_path = "#{repo_dir}/worktrees/sha"
|
123
|
+
_commit_val = value["commit"].to_s.delete_prefix('"').delete_suffix('"').delete_prefix("'").delete_suffix("'")
|
124
|
+
worktree_sha = source_repo.object(_commit_val).sha;
|
125
|
+
target_symlink = "#{worktree_path}/#{worktree_sha}"
|
126
|
+
if !Dir.exist? target_symlink
|
127
|
+
FileUtils.mkdir_p "#{worktree_path}"
|
128
|
+
source_repo.worktree(target_symlink, worktree_sha).add
|
129
|
+
end
|
130
|
+
|
131
|
+
else
|
132
|
+
|
133
|
+
target_symlink = "#{repo_dir}/source"
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
# build the symlink
|
138
|
+
if value["dir"].end_with? "/"
|
139
|
+
FileUtils.mkdir_p value["dir"]
|
140
|
+
#puts "value: " + value["dir"] + key.split('/').last
|
141
|
+
#puts !File.symlink?(value["dir"] + key.split('/').last)
|
142
|
+
|
143
|
+
symlink1 = File.symlink?(value["dir"] + value['repo'].split('/').last)
|
144
|
+
symlink2 = File.symlink? value["dir"]
|
145
|
+
|
146
|
+
if !(symlink1 || symlink2)
|
147
|
+
puts "value['dir'] #{value['dir']}"
|
148
|
+
puts "value['repo'] #{value['repo']}"
|
149
|
+
puts "target_symlink #{target_symlink}"
|
150
|
+
File.symlink(target_symlink, "#{value['dir']}/#{value['repo'].split('/').last}")
|
151
|
+
end
|
152
|
+
#File.symlink(target_symlink, "#{value['dir']}/#{key.split('/').last}")
|
153
|
+
|
154
|
+
else
|
155
|
+
dir_components = value["dir"].split "/"
|
156
|
+
dir_components.pop
|
157
|
+
dir_components = dir_components.join "/"
|
158
|
+
FileUtils.mkdir_p dir_components
|
159
|
+
File.symlink(target_symlink, value["dir"]) if !File.symlink? value["dir"]
|
160
|
+
|
161
|
+
symlink1 = File.symlink?(value["dir"] + ['repo'].split('/').last)
|
162
|
+
symlink2 = File.symlink? value["dir"]
|
163
|
+
|
164
|
+
if !(symlink1 || symlink2)
|
165
|
+
File.symlink(target_symlink, value["dir"])
|
166
|
+
end
|
167
|
+
#File.symlink(target_symlink, value["dir"])
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
# iterate over all sub kobold files
|
173
|
+
sub_kobolds = if settings["_kobold_include"] then settings["_kobold_include"]["files"].strip.split("\n") else [] end
|
174
|
+
sub_kobolds.each do |path|
|
175
|
+
Dir.chdir(path.strip) do
|
176
|
+
invoke
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
else
|
181
|
+
raise "Wrong format version"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
private
|
186
|
+
|
187
|
+
def clone_git_repo(url, path)
|
188
|
+
progress_bar = TTY::ProgressBar.new("[:bar] Cloning: #{url} ", bar_format: :blade, total: nil, width: 45)
|
189
|
+
|
190
|
+
thread = Thread.new(abort_on_exception: true) do
|
191
|
+
Git.clone url, path
|
192
|
+
end
|
193
|
+
progress_bar.start
|
194
|
+
while thread.status
|
195
|
+
progress_bar.advance
|
196
|
+
sleep 0.016
|
197
|
+
end
|
198
|
+
puts
|
199
|
+
return thread.value
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tty-config"
|
4
|
+
#require 'fileutils'
|
5
|
+
|
6
|
+
module Kobold
|
7
|
+
class << self
|
8
|
+
def read_config(dir)
|
9
|
+
config = TTY::Config.new
|
10
|
+
config.append_path dir
|
11
|
+
settings = config.read ".kobold", format: :ini
|
12
|
+
return settings
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/Kobold/version.rb
CHANGED
data/lib/Kobold.rb
CHANGED
@@ -1,110 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
3
|
+
require_relative 'Kobold/version'
|
4
|
+
require 'tty-config'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'git'
|
7
|
+
require 'tty-progressbar'
|
8
|
+
|
9
|
+
require_relative 'Kobold/vars.rb'
|
10
|
+
require_relative 'Kobold/read_config.rb'
|
11
|
+
require_relative 'Kobold/first_time_setup.rb'
|
12
|
+
require_relative 'Kobold/invoke.rb'
|
13
|
+
require_relative 'Kobold/init.rb'
|
7
14
|
|
8
15
|
module Kobold
|
9
16
|
KOBOLD_DIR = "#{Dir.home}/.local/share/Kobold"
|
10
17
|
class << self
|
11
|
-
|
12
|
-
# read configuration file
|
13
|
-
# for each item:
|
14
|
-
# 1. check if repo exists
|
15
|
-
# ~2. check if correct version exists~
|
16
|
-
# 3. check if symlink is correct
|
17
|
-
|
18
|
-
def invoke
|
19
|
-
first_time_setup if !File.directory? "#{KOBOLD_DIR}/repo_cache"
|
20
|
-
config = TTY::Config.new
|
21
|
-
config.append_path Dir.pwd
|
22
|
-
settings = config.read ".kobold", format: :ini
|
23
|
-
|
24
|
-
puts Kobold::FORMAT_VERSION + " " + settings["kobold_config"]["format_version"]
|
25
|
-
if Kobold::FORMAT_VERSION == settings["kobold_config"]["format_version"]
|
26
|
-
settings.delete "kobold_config"
|
27
|
-
|
28
|
-
# iterate over all dependencies
|
29
|
-
settings.each do |key, value|
|
30
|
-
puts "key:#{key}"
|
31
|
-
repo_dir = "#{KOBOLD_DIR}/repo_cache/#{key.gsub('/', '-')}"
|
32
|
-
|
33
|
-
master_repo = nil;
|
34
|
-
# check if master exists
|
35
|
-
if !Dir.exist? "#{repo_dir}/master" # TODO: make this properly check for git repo
|
36
|
-
# if it doesnt, make it
|
37
|
-
FileUtils.mkdir_p "#{repo_dir}/master"
|
38
|
-
FileUtils.mkdir_p "#{repo_dir}/worktrees"
|
39
|
-
puts "#{value["source"]}/#{key}.git", "#{repo_dir}/master"
|
40
|
-
master_repo = Git.clone "#{value["source"]}/#{key}.git", "#{repo_dir}/master"
|
41
|
-
else
|
42
|
-
master_repo = Git.open("#{repo_dir}/master")
|
43
|
-
end
|
44
|
-
|
45
|
-
target_symlink = nil
|
46
|
-
# check if requested version exists
|
47
|
-
if value["tag"]
|
48
|
-
dir_name = value["tag"].to_s.gsub("/","-")
|
49
|
-
# TODO make the thing
|
50
|
-
else # use hash as name
|
51
|
-
if value["commit"]
|
52
|
-
# use given commit name, also check it exists
|
53
|
-
begin # git errors when it does not find the hash
|
54
|
-
if value["commit"].is_a? Float
|
55
|
-
value["commit"] = value["commit"].to_i.to_s
|
56
|
-
end
|
57
|
-
commit_sha = master_repo.object(value["commit"].to_s.delete_prefix('"').delete_suffix('"').delete_prefix("'").delete_suffix("'")).sha;
|
58
|
-
if commit_sha
|
59
|
-
target_symlink = "#{repo_dir}/worktrees/#{commit_sha}"
|
60
|
-
if !Dir.exist? target_symlink
|
61
|
-
# make it
|
62
|
-
master_repo.worktree(target_symlink, commit_sha).add
|
63
|
-
end
|
64
|
-
else
|
65
|
-
raise "Cannot find commit"
|
66
|
-
end
|
67
|
-
rescue # we catch this error here
|
68
|
-
raise "Cannot find commit"
|
69
|
-
end
|
70
|
-
else
|
71
|
-
raise "No commit given for #{key}"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
# build the symlink
|
76
|
-
if value["dir"].end_with? "/"
|
77
|
-
FileUtils.mkdir_p value["dir"]
|
78
|
-
File.symlink target_symlink, "#{value['dir']}/#{key.split('/').last}"
|
79
|
-
else
|
80
|
-
dir_components = value["dir"].split "/"
|
81
|
-
dir_components.pop
|
82
|
-
dir_components = dir_components.join "/"
|
83
|
-
FileUtils.mkdir_p dir_components
|
84
|
-
File.symlink target_symlink, value["dir"]
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
else
|
90
|
-
raise "Wrong format version"
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
def first_time_setup
|
96
|
-
FileUtils.mkdir_p "#{KOBOLD_DIR}/repo_cache"
|
97
|
-
end
|
98
|
-
|
99
|
-
# create empty file with current
|
100
|
-
# file version in current dir
|
101
|
-
def init
|
102
|
-
kobold_config = TTY::Config.new
|
103
|
-
kobold_config.filename = ".kobold"
|
104
|
-
kobold_config.extname = ".ini"
|
105
|
-
kobold_config.set "kobold_config", "format_version", value: Kobold::FORMAT_VERSION
|
106
|
-
kobold_config.write
|
107
|
-
File.rename ".kobold.ini", ".kobold"
|
108
|
-
end
|
109
18
|
end
|
110
19
|
end
|
data/prototyping/.gitignore
CHANGED
data/prototyping/.kobold
CHANGED
@@ -1,7 +1,28 @@
|
|
1
|
-
[
|
2
|
-
format_version = 0.
|
1
|
+
[_kobold_config]
|
2
|
+
format_version = 0.3.0
|
3
3
|
|
4
|
-
[
|
4
|
+
;[_kobold_include]
|
5
|
+
;files = "
|
6
|
+
;dir1/
|
7
|
+
;dir2/
|
8
|
+
;"
|
9
|
+
|
10
|
+
[raylib-linux]
|
11
|
+
repo = raysan5/raylib
|
12
|
+
source = https://github.com
|
13
|
+
dir = external/linux-x64/
|
14
|
+
commit = 'b8cd102'
|
15
|
+
label = linux-x64
|
16
|
+
|
17
|
+
[raylib-web]
|
18
|
+
repo = raysan5/raylib
|
19
|
+
source = https://github.com
|
20
|
+
dir = external/emscripten/
|
21
|
+
commit = 'b8cd102'
|
22
|
+
label = web
|
23
|
+
|
24
|
+
[raygui]
|
25
|
+
repo = raysan5/raygui
|
5
26
|
source = https://github.com
|
6
27
|
dir = external/
|
7
|
-
|
28
|
+
|
metadata
CHANGED
@@ -1,15 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Kobold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CatsAtTheRodeo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
12
|
-
dependencies:
|
11
|
+
date: 2023-09-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-option
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.3.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.3.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tty-config
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.6.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: inifile
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: git
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.18.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.18.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: tty-progressbar
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.18.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.18.2
|
13
83
|
description:
|
14
84
|
email:
|
15
85
|
- contact@tradam.dev
|
@@ -33,6 +103,10 @@ files:
|
|
33
103
|
- Rakefile
|
34
104
|
- exe/kobold
|
35
105
|
- lib/Kobold.rb
|
106
|
+
- lib/Kobold/first_time_setup.rb
|
107
|
+
- lib/Kobold/init.rb
|
108
|
+
- lib/Kobold/invoke.rb
|
109
|
+
- lib/Kobold/read_config.rb
|
36
110
|
- lib/Kobold/version.rb
|
37
111
|
- prototyping/.gitignore
|
38
112
|
- prototyping/.kobold
|
@@ -60,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
134
|
- !ruby/object:Gem::Version
|
61
135
|
version: '0'
|
62
136
|
requirements: []
|
63
|
-
rubygems_version: 3.
|
137
|
+
rubygems_version: 3.3.25
|
64
138
|
signing_key:
|
65
139
|
specification_version: 4
|
66
140
|
summary: Version manager for various libraries and projects.
|