dgd-tools 0.1.5 → 0.1.6

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: 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