dgd-tools 0.1.5 → 0.1.6

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: 7248b5e9b0f257568633b8f83c166430e1451da62c0d84acfa468f48a6bf4196
4
- data.tar.gz: 435dfa244ae63087b45acd18f9220267cf4facf560f2c1a235392d6ec9fe00f6
3
+ metadata.gz: f64aa1b29bc2fb6a0c10292a25246ce4fbe5a43b7fa23dc19a84ab01abc58013
4
+ data.tar.gz: 60fb058d6f25ca80348e5236450ed3c5fe812137d04e0fce237d36b6b252dfca
5
5
  SHA512:
6
- metadata.gz: 0f6534cced478794994f6a85ebf10277d6c0455d095708a49901b3527bea1534a9d18b2c5dc6bffc5b3a03bf5949fd352644b019148f541f1e6f98660aee060b
7
- data.tar.gz: 86c72de588f15ce2f1804068771e46a6ca71f707399fc807b74bdca02c52ef173dab11058eb24475e387852443de79c59cd553d9902a79611240a39f1ae72431
6
+ metadata.gz: 30b54b93e1b4e5da44c7cf0bc6e526dd489d74301df20cd4d9644c69aab509416d3082d2646dd6394331f81643a92cbc24933141fdca024057ed6e003866b37a
7
+ data.tar.gz: 525305f71a39842d01f7ce99f3bce1d85d7dc0e5493411e09759cf003a8632609130281f40ba8ff25bf7edb8ffa73de5e9b53d3c3022c4143a8b99be70a9c4f9
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  *.gem
10
+ test/data/**/dgd.config
11
+ test/data/*/.root
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dgd-tools (0.1.4)
4
+ dgd-tools (0.1.5)
5
5
  nokogiri (~> 1.10.5)
6
6
 
7
7
  GEM
data/exe/dgd-manifest CHANGED
@@ -11,6 +11,17 @@ if ARGV == ["--version"]
11
11
  exit
12
12
  end
13
13
 
14
+ if ARGV.size == 1 && ["-h", "--help"].include?(ARGV[0])
15
+ puts <<HELP_INFO
16
+ dgd-manifest commands:
17
+
18
+ new [project_name]: create a new DGD-manifest project
19
+ test: make sure the dgd.manifest file is well-formed and usable
20
+ install: compile the DGD application to a config file and a root directory
21
+ HELP_INFO
22
+ exit
23
+ end
24
+
14
25
  case ARGV[0]
15
26
  when "new"
16
27
  unless ARGV.size == 2
data/exe/skotos-xml-diff CHANGED
@@ -6,6 +6,17 @@
6
6
 
7
7
  require "dgd-tools/skotos_xml_obj"
8
8
 
9
+ if ARGV.size == 1 && ["-h", "--help"].include?(ARGV[0])
10
+ print <<HELP_INFO
11
+ skotos-xml-diff [file1] [file2]
12
+
13
+ OR
14
+
15
+ skotos-xml-diff [dir1] [dir2]
16
+ HELP_INFO
17
+ exit
18
+ end
19
+
9
20
  if ARGV.size != 2
10
21
  STDERR.puts "Usage: skotos-xml-diff <obj_or_dir_1> <obj_or_dir_2>"
11
22
  exit -1
@@ -30,24 +30,26 @@ module DGD::Manifest
30
30
  # This is a repo of everything DGD Manifest saves between runs.
31
31
  # It includes downloaded Git repos, Goods files and more.
32
32
  class Repo
33
- attr_reader :manifest_dir
33
+ attr_reader :shared_dir
34
34
 
35
35
  def initialize
36
+ @no_manifest_file = true
36
37
  @home = ENV["HOME"]
37
- @manifest_dir = "#{@home}/.dgd-tools"
38
- Dir.mkdir(@manifest_dir) unless File.directory?(@manifest_dir)
38
+ @shared_dir = "#{@home}/.dgd-tools"
39
+ Dir.mkdir(@shared_dir) unless File.directory?(@shared_dir)
40
+
39
41
  ["git", "goods"].each do |subdir|
40
- full_subdir = "#{@manifest_dir}/#{subdir}"
42
+ full_subdir = "#{@shared_dir}/#{subdir}"
41
43
  Dir.mkdir(full_subdir) unless File.directory?(full_subdir)
42
44
  end
43
45
 
44
- unless File.exist?("#{@manifest_dir}/dgd/bin/dgd")
45
- dgd_dir = "#{@manifest_dir}/dgd"
46
+ unless File.exist?("#{@shared_dir}/dgd/bin/dgd")
47
+ dgd_dir = "#{@shared_dir}/dgd"
46
48
  if File.directory?(dgd_dir)
47
49
  # Not clear to me what to do here...
48
50
  else
49
51
  DGD::Manifest.system_call("git clone https://github.com/ChatTheatre/dgd.git #{dgd_dir}")
50
- Dir.chdir("#{@manifest_dir}/dgd/src") do
52
+ Dir.chdir("#{@shared_dir}/dgd/src") do
51
53
  DGD::Manifest.system_call(DGD_BUILD_COMMAND)
52
54
  end
53
55
  end
@@ -60,25 +62,33 @@ module DGD::Manifest
60
62
  end
61
63
 
62
64
  def manifest_file(path)
63
- raise "Already have a dgd.manifest file!" if @manifest_file
65
+ raise "Already have a dgd.manifest file!" unless @no_manifest_file
64
66
 
67
+ @no_manifest_file = false
65
68
  @manifest_file ||= AppFile.new(self, path)
66
69
  end
67
70
 
68
- def files_to_assemble
69
- subdirs = []
71
+ protected
72
+
73
+ # This includes files to assemble... But also subdirectories and commands. This format is
74
+ # unstable and ugly, and should not be exposed to outside parties who might later depend on it.
75
+ def assembly_operations(location)
76
+ operations = []
77
+
78
+ raise("No manifest file!") if @no_manifest_file
70
79
 
71
80
  @manifest_file.specs.each do |spec|
72
81
  git_repo = spec.source
73
- git_repo.use_details(spec.source_details)
82
+ git_repo.use_details(spec.source_details) # This sets things like checked-out branch
74
83
 
75
84
  spec.paths.each do |from, to|
85
+ # Note: git_repo.local_dir is an absolute path.
76
86
  from_path = "#{git_repo.local_dir}/#{from}"
77
87
  if File.directory?(from_path)
78
88
  files = Dir["#{from_path}/**/*"].to_a + Dir["#{from_path}/**/.*"].to_a
79
89
  dirs = files.select { |file| File.directory?(file) }
80
90
  non_dirs = files - dirs
81
- subdirs << { from: from_path, to: to, dirs: dirs, non_dirs: non_dirs, source: git_repo }
91
+ operations << { cmd: "cp", from: from_path, to: to, dirs: dirs, non_dirs: non_dirs, comment: :single_dir }
82
92
  elsif from_path["*"] # If from_path contains at least one asterisk
83
93
  components = from.split("/")
84
94
  first_wild_idx = components.index { |item| item["*"] }
@@ -91,51 +101,56 @@ module DGD::Manifest
91
101
  dirs.uniq!
92
102
 
93
103
  non_dirs = files - dirs
94
- subdirs << { from: "#{git_repo.local_dir}/#{no_wild_from_path}", to: to, dirs: dirs, non_dirs: non_dirs, source: git_repo }
104
+ operations << { cmd: "cp", from: "#{git_repo.local_dir}/#{no_wild_from_path}", to: to, dirs: dirs, non_dirs: non_dirs, comment: :path_wildcard }
95
105
  else
96
106
  # A single file
97
- subdirs << { from: from_path, to: to, dirs: [], non_dirs: [from], source: git_repo }
107
+ operations << { cmd: "cp", from: from_path, to: to, dirs: [], non_dirs: [from_path], comment: :single_file }
98
108
  end
99
109
  end
100
110
  end
101
111
 
102
- subdirs
112
+ app_path = "#{File.expand_path(location)}/#{@manifest_file.app_root}"
113
+ app_files = Dir["#{app_path}/**/*"].to_a
114
+ app_dirs = app_files.select { |f| File.directory?(f) }
115
+ app_non_dirs = app_files - app_dirs
116
+ unless app_dirs.empty? && app_non_dirs.empty?
117
+ operations << { cmd: "cp", from: app_path, to: ".", dirs: app_dirs, non_dirs: app_non_dirs, comment: :app_files } # No source
118
+ end
119
+
120
+ operations
103
121
  end
104
122
 
123
+ public
124
+
105
125
  def assemble_app(location)
106
126
  dgd_root = "#{File.expand_path(location)}/#{GENERATED_ROOT}"
107
- app_path = "#{File.expand_path(location)}/#{@manifest_file.app_root}"
108
127
  FileUtils.rm_rf(dgd_root)
109
- FileUtils.cp_r(app_path, dgd_root)
110
128
 
111
- write_config_file("#{location}/dgd.config")
112
- FileUtils.mkdir_p("#{location}/state") # Statedir for statedumps, editor files, etc.
129
+ Dir.chdir(location) do
130
+ write_config_file("#{location}/dgd.config")
131
+ FileUtils.mkdir_p("#{location}/state") # Statedir for statedumps, editor files, etc.
113
132
 
114
- files_to_assemble.sort_by { |sd| sd[:to] }.each do |sd_hash|
115
- to_path = "#{dgd_root}/#{sd_hash[:to]}"
133
+ assembly_operations(location).each do |sd_hash|
134
+ to_path = "#{dgd_root}/#{sd_hash[:to]}"
116
135
 
117
- # Make appropriate dirs, including empty ones
118
- sd_hash[:dirs].each do |dir|
119
- FileUtils.mkdir_p dir.sub(sd_hash[:from], to_path)
120
- end
136
+ # Make appropriate dirs, including empty ones
137
+ sd_hash[:dirs].each do |dir|
138
+ FileUtils.mkdir_p dir.sub(sd_hash[:from], to_path)
139
+ end
121
140
 
122
- # Copy all files
123
- sd_hash[:non_dirs].each do |from_file|
124
- to_file = from_file.sub(sd_hash[:from], "#{dgd_root}/#{sd_hash[:to]}")
125
- to_dir = File.dirname(to_file)
126
- FileUtils.mkdir_p to_dir
127
- FileUtils.cp from_file, to_file
141
+ # Copy all files
142
+ sd_hash[:non_dirs].each do |from_file|
143
+ to_file = from_file.sub(sd_hash[:from], "#{dgd_root}/#{sd_hash[:to]}")
144
+ to_dir = File.dirname(to_file)
145
+ FileUtils.mkdir_p to_dir
146
+ FileUtils.cp from_file, to_file
147
+ end
128
148
  end
129
149
  end
130
150
  end
131
151
 
132
152
  def precheck(location)
133
- app_path = "#{File.expand_path(location)}/#{@manifest_file.app_root}"
134
- app_files = Dir["#{app_path}/**"].to_a.select { |f| !File.directory?(f) }
135
-
136
- subdirs = files_to_assemble
137
- all_files = subdirs.flat_map { |sd| sd[:non_dirs] } + app_files
138
- all_files.sort!
153
+ all_files = assembly_operations(location).flat_map { |sd| sd[:non_dirs] }
139
154
 
140
155
  if all_files.size != all_files.uniq.size
141
156
  repeated = all_files.uniq.select { |f| all_files.count(f) > 1 }
@@ -146,7 +161,7 @@ module DGD::Manifest
146
161
  def write_config_file(path)
147
162
  File.open(path, "wb") do |f|
148
163
  f.write <<CONTENTS
149
- /* These are SkotOS limits. They are enormous. They should
164
+ /* These are SkotOS limits. They are larger than you are likely to need. They should
150
165
  be configurable but they are not yet. */
151
166
  telnet_port = ([
152
167
  "*":50100 /* telnet port number */
@@ -193,7 +208,7 @@ CONTENTS
193
208
  @git_url = git_url
194
209
  @repo = repo
195
210
  local_path = git_url.tr("/\\", "_")
196
- @local_dir = "#{@repo.manifest_dir}/git/#{local_path}"
211
+ @local_dir = "#{@repo.shared_dir}/git/#{local_path}"
197
212
 
198
213
  if File.directory?(@local_dir)
199
214
  Dir.chdir(@local_dir) do
@@ -205,9 +220,7 @@ CONTENTS
205
220
  end
206
221
 
207
222
  def default_branch
208
- return @default_branch if @default_branch
209
- output = `git rev-parse --abbrev-ref origin/HEAD`.chomp
210
- @default_branch = output.gsub(/^origin\//, "")
223
+ @default_branch ||= `git rev-parse --abbrev-ref origin/HEAD`.chomp.gsub(/^origin\//, "")
211
224
  end
212
225
 
213
226
  def use_details(details)
@@ -1,3 +1,3 @@
1
1
  module DGD
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dgd-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Gibbs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-21 00:00:00.000000000 Z
11
+ date: 2021-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri