Kobold 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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