Kobold 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c742718fdab33d2dcf4ca03749e3df35e57a3ffbf988f2ba2a58904ce3414c3
4
- data.tar.gz: abd99306ceb78dde69e0dcb504670c2cd9bcb54f9c792ffee570b74e4c9ee07c
3
+ metadata.gz: 95561edd1b18544bfc735599c499a2b0d415a2b1638a30a56257fda2175adbbc
4
+ data.tar.gz: a87c0b8575ea4abf21acf6325b32d8f4c371db5c6f0f9e0b7df97edb8a196021
5
5
  SHA512:
6
- metadata.gz: 5e654583ded3e1113c5c427c32547414ee020290401ac27c43bc7de77e948f9d1314f0ed3dd8272f55627e592277001f0ec776ff6175198232457c6cb0af47cf
7
- data.tar.gz: e75b81edfe86a795b9fdfcf64a04f03611b5adedcaf32d9772047f141cca651b12f6b7706b69738d28fd7b57f4270d6848b95feb92743e2e76a7ba4edffaac03
6
+ metadata.gz: 7e5df73b29da03d20e409b39d4752011bd56e38d5e1bef5132f09bd732a9ee4ac73e71043c2d7048f8e66b7ae36e5b5a77cff91bf15fa1ffbc6a433f7b34c340
7
+ data.tar.gz: 430e6ad01c0d0c89853811362b6e51cb7ce0e62d424bcd3e8cd1a875e11de3cc85f4b72bf680ea0e5529d12aee030afe8e74b0a1a0d2b863ede06543bd65601b
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
- command "init"
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 "askjd"
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
- elsif cmd.params[:command] == "init"
54
- Kobold.init
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
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-config"
4
+ require 'fileutils'
5
+ require 'git'
6
+
7
+ module Kobold
8
+ class << self
9
+ def first_time_setup
10
+ FileUtils.mkdir_p "#{KOBOLD_DIR}/repo_cache"
11
+ end
12
+ end
13
+ end
14
+
@@ -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,123 @@
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
+ #puts Kobold::FORMAT_VERSION + " " + settings["kobold_config"]["format_version"]
20
+ if Kobold::FORMAT_VERSION == settings["_kobold_config"]["format_version"]
21
+ #settings.delete "kobold_config"
22
+
23
+ # iterate over all dependencies
24
+ settings.each do |key, value|
25
+ if Kobold::CONFIG_TITLES.include? key
26
+ #puts "skipping #{key}"
27
+ next
28
+ end
29
+ repo_dir = "#{KOBOLD_DIR}/repo_cache/#{key.gsub('/', '-')}"
30
+
31
+ source_repo = nil;
32
+ # check if source exists
33
+ if !Dir.exist? "#{repo_dir}/source" # TODO: make this properly check for git repo
34
+ # if it doesnt, make it
35
+ FileUtils.mkdir_p "#{repo_dir}/source"
36
+ FileUtils.mkdir_p "#{repo_dir}/worktrees"
37
+ FileUtils.mkdir_p "#{repo_dir}/branches" # these are also worktrees, but just for the branch specifically if possible. TODO for later
38
+ #puts "#{value["source"]}/#{key}.git", "#{repo_dir}/source"
39
+ source_repo = Git.clone "#{value["source"]}/#{key}.git", "#{repo_dir}/source"
40
+ else
41
+ source_repo = Git.open("#{repo_dir}/source")
42
+ end
43
+
44
+ target_symlink = nil
45
+ # check if requested version exists
46
+ if value["tag"]
47
+ dir_name = value["tag"].to_s.gsub("/","-")
48
+ # TODO make the thing
49
+ else # use hash as name
50
+ if value["commit"]
51
+ # use given commit name, also check it exists
52
+ begin # git errors when it does not find the hash
53
+ #if value["commit"].is_a? Float
54
+ # value["commit"] = value["commit"].to_i.to_s
55
+ #end
56
+ commit_val = value["commit"].to_s.delete_prefix('"').delete_suffix('"').delete_prefix("'").delete_suffix("'")
57
+ if commit_val == 'latest'
58
+ # TODO just use source git repo
59
+ target_symlink = "#{repo_dir}/source"
60
+ elsif commit_sha
61
+ commit_sha = source_repo.object(commit_val).sha;
62
+ target_symlink = "#{repo_dir}/worktrees/#{commit_sha}"
63
+ if !Dir.exist? target_symlink
64
+ # make it
65
+ source_repo.worktree(target_symlink, commit_sha).add
66
+ end
67
+ else
68
+ raise "Cannot find commit"
69
+ end
70
+ rescue # we catch this error here
71
+ raise "Cannot find commit"
72
+ end
73
+ else
74
+ raise "No commit given for #{key}"
75
+ end
76
+ end
77
+
78
+ # build the symlink
79
+ if value["dir"].end_with? "/"
80
+ FileUtils.mkdir_p value["dir"]
81
+ #puts "value: " + value["dir"] + key.split('/').last
82
+ #puts !File.symlink?(value["dir"] + key.split('/').last)
83
+
84
+ symlink1 = File.symlink?(value["dir"] + key.split('/').last)
85
+ symlink2 = File.symlink? value["dir"]
86
+
87
+ if !(symlink1 || symlink2)
88
+ File.symlink(target_symlink, "#{value['dir']}/#{key.split('/').last}")
89
+ end
90
+ #File.symlink(target_symlink, "#{value['dir']}/#{key.split('/').last}")
91
+
92
+ else
93
+ dir_components = value["dir"].split "/"
94
+ dir_components.pop
95
+ dir_components = dir_components.join "/"
96
+ FileUtils.mkdir_p dir_components
97
+ File.symlink(target_symlink, value["dir"]) if !File.symlink? value["dir"]
98
+
99
+ symlink1 = File.symlink?(value["dir"] + key.split('/').last)
100
+ symlink2 = File.symlink? value["dir"]
101
+
102
+ if !(symlink1 || symlink2)
103
+ File.symlink(target_symlink, value["dir"])
104
+ end
105
+ #File.symlink(target_symlink, value["dir"])
106
+ end
107
+
108
+ end
109
+
110
+ # iterate over all sub kobold files
111
+ sub_kobolds = if settings["_kobold_include"] then settings["_kobold_include"]["files"].strip.split("\n") else [] end
112
+ sub_kobolds.each do |path|
113
+ Dir.chdir(path.strip) do
114
+ invoke
115
+ end
116
+ end
117
+
118
+ else
119
+ raise "Wrong format version"
120
+ end
121
+ end
122
+ end
123
+ 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
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ #require_relative "Kobold/version"
4
+
5
+ module Kobold
6
+ CONFIG_TITLES = [
7
+ "_kobold_config",
8
+ "_kobold_include",
9
+ ]
10
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kobold
4
- VERSION = "0.1.0"
5
- FORMAT_VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
+ FORMAT_VERSION = "0.2.0"
6
6
  end
data/lib/Kobold.rb CHANGED
@@ -5,106 +5,14 @@ require "tty-config"
5
5
  require 'fileutils'
6
6
  require 'git'
7
7
 
8
+ require_relative "Kobold/vars.rb"
9
+ require_relative "Kobold/read_config.rb"
10
+ require_relative "Kobold/first_time_setup.rb"
11
+ require_relative "Kobold/invoke.rb"
12
+ require_relative "Kobold/init.rb"
13
+
8
14
  module Kobold
9
15
  KOBOLD_DIR = "#{Dir.home}/.local/share/Kobold"
10
16
  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
17
  end
110
18
  end
@@ -1,2 +1,4 @@
1
1
  external
2
2
  external/raylib
3
+ dir1
4
+ dir2
data/prototyping/.kobold CHANGED
@@ -1,7 +1,15 @@
1
- [kobold_config]
2
- format_version = 0.1.0
1
+ [_kobold_config]
2
+ format_version = 0.2.0
3
+
4
+ [_kobold_include]
5
+ files = "
6
+ dir1/
7
+ dir2/
8
+ "
3
9
 
4
10
  [raysan5/raylib]
5
11
  source = https://github.com
6
12
  dir = external/
7
- commit = '0851960'
13
+ commit = 'latest'
14
+
15
+
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Kobold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.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-07-30 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2023-09-03 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
13
69
  description:
14
70
  email:
15
71
  - contact@tradam.dev
@@ -33,6 +89,11 @@ files:
33
89
  - Rakefile
34
90
  - exe/kobold
35
91
  - lib/Kobold.rb
92
+ - lib/Kobold/first_time_setup.rb
93
+ - lib/Kobold/init.rb
94
+ - lib/Kobold/invoke.rb
95
+ - lib/Kobold/read_config.rb
96
+ - lib/Kobold/vars.rb
36
97
  - lib/Kobold/version.rb
37
98
  - prototyping/.gitignore
38
99
  - prototyping/.kobold