machinery-tool 1.14.0 → 1.14.1

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.git_revision +1 -1
  3. data/NEWS +10 -0
  4. data/html/assets/compare/machinery.js +1 -0
  5. data/html/assets/jquery.searcher.min.js +5 -0
  6. data/html/assets/machinery.css +3 -0
  7. data/html/assets/show/machinery.js +10 -4
  8. data/html/comparison.html.haml +18 -652
  9. data/html/index.html.haml +93 -431
  10. data/html/partials/changed_managed_files.html.haml +41 -0
  11. data/html/partials/compare/alert.html.haml +22 -0
  12. data/html/partials/compare/changed_managed_file_list.html.haml +26 -0
  13. data/html/partials/compare/changed_managed_files.html.haml +57 -0
  14. data/html/partials/compare/config_file_list.html.haml +26 -0
  15. data/html/partials/compare/config_files.html.haml +54 -0
  16. data/html/partials/compare/group_list.html.haml +14 -0
  17. data/html/partials/compare/groups.html.haml +52 -0
  18. data/html/partials/compare/os.html.haml +32 -0
  19. data/html/partials/compare/os_table.html.haml +10 -0
  20. data/html/partials/compare/package_list.html.haml +23 -0
  21. data/html/partials/compare/packages.html.haml +66 -0
  22. data/html/partials/compare/pattern_list.html.haml +12 -0
  23. data/html/partials/compare/patterns.html.haml +53 -0
  24. data/html/partials/compare/repositories.html.haml +51 -0
  25. data/html/partials/compare/repository_list.html.haml +28 -0
  26. data/html/partials/compare/service_list.html.haml +11 -0
  27. data/html/partials/compare/services.html.haml +56 -0
  28. data/html/partials/compare/unmanaged_file_list.html.haml +13 -0
  29. data/html/partials/compare/unmanaged_files.html.haml +59 -0
  30. data/html/partials/compare/user_list.html.haml +18 -0
  31. data/html/partials/compare/users.html.haml +52 -0
  32. data/html/partials/config_files.html.haml +57 -0
  33. data/html/partials/groups.html.haml +25 -0
  34. data/html/partials/os.html.haml +26 -0
  35. data/html/partials/packages.html.haml +30 -0
  36. data/html/partials/patterns.html.haml +23 -0
  37. data/html/partials/repositories.html.haml +35 -0
  38. data/html/partials/scope_header.html.haml +17 -0
  39. data/html/partials/services.html.haml +23 -0
  40. data/html/partials/unmanaged_files.html.haml +28 -0
  41. data/html/partials/users.html.haml +29 -0
  42. data/lib/cli.rb +48 -40
  43. data/lib/exceptions.rb +7 -0
  44. data/lib/helper.rb +21 -0
  45. data/lib/hint.rb +1 -1
  46. data/lib/html.rb +9 -1
  47. data/lib/scope_file_access_archive.rb +1 -2
  48. data/lib/scope_file_access_flat.rb +1 -2
  49. data/lib/server.rb +104 -50
  50. data/lib/version.rb +1 -1
  51. data/machinery-helper/version.go +1 -1
  52. data/man/generated/machinery.1.gz +0 -0
  53. data/man/generated/machinery.1.html +106 -16
  54. metadata +47 -18
  55. data/html/assets/angular-sanitize.min.js +0 -16
  56. data/html/assets/angular.min.js +0 -251
  57. data/html/assets/compare/machinery-compare.js +0 -100
  58. data/html/assets/show/machinery-show.js +0 -72
@@ -74,7 +74,6 @@ module ScopeFileAccessArchive
74
74
  content = file_content(system_file)
75
75
  return false if content.empty?
76
76
 
77
- output = Cheetah.run("file", "-", stdin: content, stdout: :capture)
78
- !output.include?("ASCII")
77
+ Machinery.content_is_binary?(content.slice(0, 1024))
79
78
  end
80
79
  end
@@ -30,8 +30,7 @@ module ScopeFileAccessFlat
30
30
  path = system_file.scope.file_path(system_file)
31
31
  return false if File.zero?(path)
32
32
 
33
- output = Cheetah.run("file", path, stdout: :capture)
34
- !output.include?("ASCII")
33
+ Machinery.content_is_binary?(File.read(path))
35
34
  end
36
35
 
37
36
  def has_file?(name)
@@ -17,11 +17,88 @@
17
17
 
18
18
  class Server < Sinatra::Base
19
19
  module Helpers
20
+ def render_partial(partial, locals = {})
21
+ source = File.read(File.join(Machinery::ROOT, "html/partials/#{partial}.html.haml"))
22
+ haml source, locals: locals
23
+ end
24
+
25
+ def render_scope(scope)
26
+ render_partial scope, scope => @description[scope]
27
+ end
28
+
29
+ def scope_meta_info(scope)
30
+ return "" if !@description[scope]
31
+
32
+ " (" \
33
+ "inspected host: '#{@description[scope].meta.hostname}', " \
34
+ "at: #{DateTime.parse(@description[scope].meta.modified).strftime("%F %T")})"
35
+ end
36
+
20
37
  def scope_help(scope)
21
38
  text = File.read(File.join(Machinery::ROOT, "plugins", "#{scope}/#{scope}.md"))
22
39
  Kramdown::Document.new(text).to_html
23
40
  end
24
41
 
42
+ def safe_length(object, attribute)
43
+ if object && collection = object.send(attribute)
44
+ collection.length
45
+ else
46
+ 0
47
+ end
48
+ end
49
+
50
+ def only_in_a
51
+ "<h3>Only in '#{@description_a.name}':</h3>"
52
+ end
53
+
54
+ def only_in_b
55
+ "<h3>Only in '#{@description_b.name}':</h3>"
56
+ end
57
+
58
+ def in_both
59
+ "<h3>In both descriptions:</h3>"
60
+ end
61
+
62
+ def changed
63
+ "<h3>In both with different attributes:</h3>"
64
+ end
65
+
66
+ def changed_packages
67
+ changed = []
68
+ @diff["packages"].changed.each do |change|
69
+ changes = []
70
+ relevant_attributes = ["version", "vendor", "arch"]
71
+
72
+ if change[0].version == change[1].version
73
+ relevant_attributes.push("release")
74
+ if change[0].release == change[1].release
75
+ relevant_attributes.push("checksum")
76
+ end
77
+ end
78
+
79
+ relevant_attributes.each do |attribute|
80
+ if change[0][attribute] != change[1][attribute]
81
+ changes.push(attribute + ": " + change[0][attribute] + " ↔ " + change[1][attribute])
82
+ end
83
+ end
84
+
85
+ changed.push(change[0].name + " (" + changes.join(", ") + ")")
86
+ end
87
+ changed
88
+ end
89
+
90
+ def diffable_unmanaged_files
91
+ return @diffable_unmanaged_files if @diffable_unmanaged_files
92
+
93
+ return [] if !@diff["unmanaged_files"] || !@diff["unmanaged_files"].only_in1 ||
94
+ !@diff["unmanaged_files"].only_in2
95
+
96
+ files_in_1 = @diff["unmanaged_files"].only_in1.files.select(&:file?).map(&:name)
97
+ files_in_2 = @diff["unmanaged_files"].only_in2.files.select(&:file?).map(&:name)
98
+
99
+ @diffable_unmanaged_files = files_in_1 & files_in_2
100
+ end
101
+
25
102
  def diff_to_object(diff)
26
103
  diff = Machinery.scrub(diff)
27
104
  lines = diff.lines[2..-1]
@@ -79,29 +156,6 @@ class Server < Sinatra::Base
79
156
 
80
157
  helpers Helpers
81
158
 
82
- get "/descriptions/:id.js" do
83
- description = SystemDescription.load(params[:id], settings.system_description_store)
84
- diffs_dir = description.scope_file_store("analyze/config_file_diffs").path
85
- if description.config_files && diffs_dir
86
- # Enrich description with the config file diffs
87
- description.config_files.files.each do |file|
88
- path = File.join(diffs_dir, file.name + ".diff")
89
- file.diff = diff_to_object(File.read(path)) if File.exists?(path)
90
- end
91
- end
92
-
93
- # Enrich file information with downloadable flag
94
- ["config_files", "changed_managed_files", "unmanaged_files"].each do |scope|
95
- next if !description[scope]
96
-
97
- description[scope].files.each do |file|
98
- file.downloadable = file.on_disk?
99
- end
100
- end
101
-
102
- description.to_hash.to_json
103
- end
104
-
105
159
  get "/descriptions/:id/files/:scope/*" do
106
160
  description = SystemDescription.load(params[:id], settings.system_description_store)
107
161
  filename = File.join("/", params["splat"].first)
@@ -122,41 +176,31 @@ class Server < Sinatra::Base
122
176
  content
123
177
  end
124
178
 
125
- get "/compare/:a/:b.json" do
126
- description_a = SystemDescription.load(params[:a], settings.system_description_store)
127
- description_b = SystemDescription.load(params[:b], settings.system_description_store)
179
+ get "/compare/:a/:b" do
180
+ @description_a = SystemDescription.load(params[:a], settings.system_description_store)
181
+ @description_b = SystemDescription.load(params[:b], settings.system_description_store)
128
182
 
129
- diff = {
130
- meta: {
131
- description_a: description_a.name,
132
- description_b: description_b.name,
133
- }
134
- }
183
+ @meta = {}
184
+ @diff = {}
135
185
 
136
186
  Inspector.all_scopes.each do |scope|
137
- if description_a[scope] && description_b[scope]
138
- comparison = Comparison.compare_scope(description_a, description_b, scope)
139
- diff[scope] = comparison.as_json
187
+ if @description_a[scope] && @description_b[scope]
188
+ @diff[scope] = Comparison.compare_scope(@description_a, @description_b, scope)
140
189
  else
141
- diff[:meta][:uninspected] ||= Hash.new
190
+ @meta[:uninspected] ||= Hash.new
142
191
 
143
- if !description_a[scope] && description_b[scope]
144
- diff[:meta][:uninspected][description_a.name] ||= Array.new
145
- diff[:meta][:uninspected][description_a.name] << scope
192
+ if !@description_a[scope] && @description_b[scope]
193
+ @meta[:uninspected][@description_a.name] ||= Array.new
194
+ @meta[:uninspected][@description_a.name] << scope
146
195
  end
147
- if !description_b[scope] && description_a[scope]
148
- diff[:meta][:uninspected][description_b.name] ||= Array.new
149
- diff[:meta][:uninspected][description_b.name] << scope
196
+ if !@description_b[scope] && @description_a[scope]
197
+ @meta[:uninspected][@description_b.name] ||= Array.new
198
+ @meta[:uninspected][@description_b.name] << scope
150
199
  end
151
200
  end
152
201
  end
153
202
 
154
- diff.to_json
155
- end
156
-
157
- get "/compare/:a/:b" do
158
- haml File.read(File.join(Machinery::ROOT, "html/comparison.html.haml")),
159
- locals: { description_a: params[:a], description_b: params[:b] }
203
+ haml File.read(File.join(Machinery::ROOT, "html/comparison.html.haml"))
160
204
  end
161
205
 
162
206
  get "/compare/:a/:b/files/:scope/*" do
@@ -175,7 +219,17 @@ class Server < Sinatra::Base
175
219
  end
176
220
 
177
221
  get "/:id" do
178
- haml File.read(File.join(Machinery::ROOT, "html/index.html.haml")),
179
- locals: { description_name: params[:id] }
222
+ @description = SystemDescription.load(params[:id], settings.system_description_store)
223
+
224
+ diffs_dir = @description.scope_file_store("analyze/config_file_diffs").path
225
+ if @description.config_files && diffs_dir
226
+ # Enrich description with the config file diffs
227
+ @description.config_files.files.each do |file|
228
+ path = File.join(diffs_dir, file.name + ".diff")
229
+ file.diff = diff_to_object(File.read(path)) if File.exists?(path)
230
+ end
231
+ end
232
+
233
+ haml File.read(File.join(Machinery::ROOT, "html/index.html.haml"))
180
234
  end
181
235
  end
@@ -17,6 +17,6 @@
17
17
 
18
18
  module Machinery
19
19
 
20
- VERSION = "1.14.0"
20
+ VERSION = "1.14.1"
21
21
 
22
22
  end
@@ -2,4 +2,4 @@
2
2
 
3
3
  package main
4
4
 
5
- const VERSION = "9787fc1eff835522740423ff35c98b78205b31cb"
5
+ const VERSION = "a879bc791c625025e2861c0bc37a2d2207da250a"
Binary file
@@ -67,6 +67,7 @@
67
67
  <a href="#export-autoyast-Export-System-Description-as-AutoYasST-profile">export-autoyast — Export System Description as AutoYasST profile</a>
68
68
  <a href="#export-kiwi-Export-System-Description-as-KIWI-Image-Description">export-kiwi — Export System Description as KIWI Image Description</a>
69
69
  <a href="#inspect-Inspect-Running-System">inspect — Inspect Running System</a>
70
+ <a href="#inspect-container-Inspect-Container">inspect-container — Inspect Container</a>
70
71
  <a href="#list-List-System-Descriptions">list — List System Descriptions</a>
71
72
  <a href="#man-Shows-Man-Page">man — Shows Man Page</a>
72
73
  <a href="#move-Move-System-Description">move — Move System Description</a>
@@ -900,6 +901,105 @@ configuration files are saved:</p>
900
901
  </ul>
901
902
 
902
903
 
904
+ <h2 id="inspect-container-Inspect-Container">inspect-container — Inspect Container</h2>
905
+
906
+ <h3 id="SYNOPSIS">SYNOPSIS</h3>
907
+
908
+ <p><code>machinery inspect-container</code> <a href="#OPTIONS" title="OPTIONS" data-bare-link="true">OPTIONS</a> IMAGENAME</p>
909
+
910
+ <p><code>machinery inspect-container</code> <a href="#OPTIONS" title="OPTIONS" data-bare-link="true">OPTIONS</a> IMAGEID</p>
911
+
912
+ <p><code>machinery</code> help inspect-container</p>
913
+
914
+ <h3 id="DESCRIPTION">DESCRIPTION</h3>
915
+
916
+ <p>The <code>inspect-container</code> command inspects a container image. It creates and starts the container from the provided image before inspection
917
+ and generates a system description from the gathered data. After the inspection the container will be killed and removed again.
918
+ This approach ensures that no containers and images are affected by the inspection.</p>
919
+
920
+ <p>Right now we support only images from the type <code>docker</code>.</p>
921
+
922
+ <p>The system data is structured into scopes, controlled by the
923
+ <code>--scope</code> option.</p>
924
+
925
+ <p><strong>Note</strong>:
926
+ Machinery will always inspect all specified scopes, and skip scopes which
927
+ trigger errors.</p>
928
+
929
+ <h3 id="ARGUMENTS">ARGUMENTS</h3>
930
+
931
+ <dl>
932
+ <dt><code>IMAGENAME / IMAGEID</code> (required)</dt><dd>The name or id of the image to be inspected. The provided name or id will also be
933
+ used as the name of the stored system description unless another name is
934
+ provided with the <code>--name</code> option.</dd>
935
+ </dl>
936
+
937
+
938
+ <h3 id="OPTIONS">OPTIONS</h3>
939
+
940
+ <dl>
941
+ <dt><code>-n NAME</code>, <code>--name=NAME</code> (optional)</dt><dd><p>Store the system description under the specified name.</p></dd>
942
+ <dt><code>-s SCOPE</code>, <code>--scope=SCOPE</code> (optional)</dt><dd><p>Inspect image for specified scope.
943
+ See the <a href="#Scopes" data-bare-link="true">Scope section</a> for more information.</p></dd>
944
+ <dt><code>-e SCOPE</code>, <code>--exclude-scope=EXCLUDE-SCOPE</code> (optional)</dt><dd><p>Inspect image for all scopes except the specified scope.
945
+ See the <a href="#Scopes" data-bare-link="true">Scope section</a> for more information.</p></dd>
946
+ <dt><code>-x</code>, <code>--extract-files</code> (optional)</dt><dd><p>Extract changed configuration and unmanaged files from the inspected container.
947
+ Shortcut for the combination of <code>--extract-changed-config-files</code>,
948
+ <code>--extract-unmanaged-files</code>, and <code>--extract-changed-managed-files</code></p></dd>
949
+ <dt><code>--extract-changed-config-files</code> (optional)</dt><dd><p>Extract changed configuration files from the inspected image.</p></dd>
950
+ <dt><code>--extract-unmanaged-files</code> (optional)</dt><dd><p>Extract unmanaged files from the inspected image.</p></dd>
951
+ <dt><code>--extract-changed-managed-files</code> (optional)</dt><dd><p>Extract changed managed files from inspected image.</p></dd>
952
+ <dt><code>--skip-files</code> (optional)</dt><dd><p>Do not consider given files or directories during inspection. Either provide
953
+ one file or directory name or a list of names separated by commas. You can
954
+ also point to a file which contains a list of files to filter (one per line)
955
+ by adding an '@' before the path, e.g.</p>
956
+
957
+ <p> $ <code>machinery</code> inspect-container --skip-files=@/path/to/filter_file mycontainer</p>
958
+
959
+ <p>If a filename contains a comma it needs to be escaped, e.g.</p>
960
+
961
+ <p> $ <code>machinery</code> inspect-container --skip-files=/file\,with_comma mycontainer</p>
962
+
963
+ <p><strong>Note</strong>: File or directory names are not expanded, e.g. '../path' is taken
964
+ literally and not expanded.</p></dd>
965
+ <dt><code>--verbose</code> (optional)</dt><dd><p>Display the filters which are used during inspection.</p></dd>
966
+ </dl>
967
+
968
+
969
+ <h3 id="PREREQUISITES">PREREQUISITES</h3>
970
+
971
+ <ul>
972
+ <li><p>Inspecting a container requires an image specified by the name or id.</p></li>
973
+ <li><p>The image to be inspected needs to have the following commands:</p>
974
+
975
+ <ul>
976
+ <li><code>rpm</code></li>
977
+ <li><code>zypper</code> or <code>yum</code></li>
978
+ <li><code>rsync</code></li>
979
+ <li><code>chkconfig</code></li>
980
+ <li><code>cat</code></li>
981
+ <li><code>sed</code></li>
982
+ <li><code>find</code></li>
983
+ </ul>
984
+ </li>
985
+ </ul>
986
+
987
+
988
+ <h3 id="EXAMPLES">EXAMPLES</h3>
989
+
990
+ <dl>
991
+ <dt>Inspect docker-container <code>mycontainer</code> and save system description under name 'MyContainer':</dt><dd><p></p>
992
+
993
+ <p>$ <code>machinery</code> inspect-container --name=MyContainer mycontainer</p></dd>
994
+ <dt>Inspect docker-container <code>076f46c1bef1</code> and save system description under name 'MySecondContainer':</dt><dd><p></p>
995
+
996
+ <p>$ <code>machinery</code> inspect-container --name=MySecondContainer 076f46c1bef1</p></dd>
997
+ <dt>Extracts changed managed files and saves them:</dt><dd><p></p>
998
+
999
+ <p>$ <code>machinery</code> inspect-container --scope=changed-managed-files --extract-files mycontainer</p></dd>
1000
+ </dl>
1001
+
1002
+
903
1003
  <h2 id="list-List-System-Descriptions">list — List System Descriptions</h2>
904
1004
 
905
1005
  <h3 id="SYNOPSIS">SYNOPSIS</h3>
@@ -1030,7 +1130,7 @@ Currently displays [HOSTNAME] and (DATE).</dd>
1030
1130
 
1031
1131
  <h3 id="SYNOPSIS">SYNOPSIS</h3>
1032
1132
 
1033
- <p><code>machinery serve</code> [-p PORT | --port=PORT] [-i IP | --ip=IP] NAME</p>
1133
+ <p><code>machinery serve</code> [-p PORT | --port=PORT] [--public] NAME</p>
1034
1134
 
1035
1135
  <p><code>machinery</code> help serve</p>
1036
1136
 
@@ -1055,10 +1155,8 @@ IP address and the port can be configured using the according options.</p>
1055
1155
 
1056
1156
  <p>Ports can be selected in a range between 2-65535. Ports between 2 and 1023 can only be
1057
1157
  chosen when <code>machinery</code> will be executed as <code>root</code> user.</p></dd>
1058
- <dt><code>-i IP</code>, <code>--ip=IP</code> (optional)</dt><dd><p>Specify the IP address on which the web server will be made available. Default: 127.0.0.1</p>
1059
-
1060
- <p>It's only possible to use an IP address (or hostnames resolving to an IP address) which
1061
- is assigned to a network interface on the local machine.</p></dd>
1158
+ <dt><code>--public</code> (optional)</dt><dd><p>Specifying this option, lets the server listen on each configured IP address. By default
1159
+ the server will only listen on the localhost IP address 127.0.0.1</p></dd>
1062
1160
  </dl>
1063
1161
 
1064
1162
 
@@ -1068,9 +1166,9 @@ is assigned to a network interface on the local machine.</p></dd>
1068
1166
  <dt>Serve the system description taken from the last inspection, saved as <code>earth</code>:</dt><dd><p></p>
1069
1167
 
1070
1168
  <p>$ <code>machinery</code> serve earth</p></dd>
1071
- <dt>Make the system description available to other machines on the network:</dt><dd><p></p>
1169
+ <dt>Make the system description available to other machines on the network on port 3000:</dt><dd><p></p>
1072
1170
 
1073
- <p>$ <code>machinery</code> serve earth -i 10.10.100.123 -p 3000</p></dd>
1171
+ <p>$ <code>machinery</code> serve earth --public --port 3000</p></dd>
1074
1172
  </dl>
1075
1173
 
1076
1174
 
@@ -1078,7 +1176,7 @@ is assigned to a network interface on the local machine.</p></dd>
1078
1176
 
1079
1177
  <h3 id="SYNOPSIS">SYNOPSIS</h3>
1080
1178
 
1081
- <p><code>machinery show</code> [-s SCOPE | --scope=SCOPE] [-e EXCLUDE-SCOPE | --exclude-scope=EXCLUDE-SCOPE] [--no-pager] [--show-diffs] [--html] [-p PORT | --port=PORT] [-i IP | --ip=IP] NAME</p>
1179
+ <p><code>machinery show</code> [-s SCOPE | --scope=SCOPE] [-e EXCLUDE-SCOPE | --exclude-scope=EXCLUDE-SCOPE] [--no-pager] [--show-diffs] [--html] NAME</p>
1082
1180
 
1083
1181
  <p><code>machinery</code> help show</p>
1084
1182
 
@@ -1110,14 +1208,6 @@ See the <a href="#Scopes" data-bare-link="true">Scope section</a> for more infor
1110
1208
  for more information).</p></dd>
1111
1209
  <dt><code>--html</code> (optional)</dt><dd><p>Run a web server and open the system description in HTML format in your web browser using the
1112
1210
  <code>xdg-open</code> command.</p></dd>
1113
- <dt><code>-p PORT</code>, <code>--port=PORT</code> (optional)</dt><dd><p>Specify the port on which the web server will serve the system description: Default: 7585</p>
1114
-
1115
- <p>Ports can be selected in a range between 2-65535. Ports between 2 and 1023 can only be
1116
- chosen when <code>machinery</code> will be executed as <code>root</code> user.</p></dd>
1117
- <dt><code>-i IP</code>, <code>--ip=IP</code> (optional)</dt><dd><p>Specify the IP address on which the web server will be made available. Default: 127.0.0.1</p>
1118
-
1119
- <p>It's only possible to use an IP address (or hostnames resolving to an IP address) which
1120
- is assigned to a network interface on the local machine.</p></dd>
1121
1211
  <dt><code>--verbose</code> (optional)</dt><dd><p>Display the filters which were applied before showing the system description.</p></dd>
1122
1212
  </dl>
1123
1213
 
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: machinery-tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - SUSE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-06 00:00:00.000000000 Z
11
+ date: 2015-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cheetah
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.8.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.8.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: abstract_method
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.2.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.2.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.6.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.6.0
69
69
  - !ruby/object:Gem::Dependency
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.11.0
75
+ version: '2.11'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.11.0
82
+ version: '2.11'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: json-schema
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -126,14 +126,14 @@ dependencies:
126
126
  name: tilt
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: '2.0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '2.0'
139
139
  - !ruby/object:Gem::Dependency
@@ -243,18 +243,16 @@ files:
243
243
  - export_helpers/unmanaged_files_kiwi_excludes
244
244
  - filters/default_filters.json
245
245
  - filters/filter-packages-for-build.yaml
246
- - html/assets/angular-sanitize.min.js
247
- - html/assets/angular.min.js
248
246
  - html/assets/arrow_down.png
249
247
  - html/assets/arrow_up.png
250
248
  - html/assets/bootstrap-popover.js
251
249
  - html/assets/bootstrap-tooltip.js
252
250
  - html/assets/bootstrap.min.css
253
251
  - html/assets/collapse.js
254
- - html/assets/compare/machinery-compare.js
255
252
  - html/assets/compare/machinery.js
256
253
  - html/assets/cross.png
257
254
  - html/assets/jquery-2.1.1.min.js
255
+ - html/assets/jquery.searcher.min.js
258
256
  - html/assets/logo-changed-managed-files-small.png
259
257
  - html/assets/logo-changed-managed-files.png
260
258
  - html/assets/logo-config-files-small.png
@@ -279,12 +277,43 @@ files:
279
277
  - html/assets/machinery.css
280
278
  - html/assets/modal.js
281
279
  - html/assets/reset.png
282
- - html/assets/show/machinery-show.js
283
280
  - html/assets/show/machinery.js
284
281
  - html/assets/transition.js
285
282
  - html/assets/wheels_horizontal.png
286
283
  - html/comparison.html.haml
287
284
  - html/index.html.haml
285
+ - html/partials/changed_managed_files.html.haml
286
+ - html/partials/compare/alert.html.haml
287
+ - html/partials/compare/changed_managed_file_list.html.haml
288
+ - html/partials/compare/changed_managed_files.html.haml
289
+ - html/partials/compare/config_file_list.html.haml
290
+ - html/partials/compare/config_files.html.haml
291
+ - html/partials/compare/group_list.html.haml
292
+ - html/partials/compare/groups.html.haml
293
+ - html/partials/compare/os.html.haml
294
+ - html/partials/compare/os_table.html.haml
295
+ - html/partials/compare/package_list.html.haml
296
+ - html/partials/compare/packages.html.haml
297
+ - html/partials/compare/pattern_list.html.haml
298
+ - html/partials/compare/patterns.html.haml
299
+ - html/partials/compare/repositories.html.haml
300
+ - html/partials/compare/repository_list.html.haml
301
+ - html/partials/compare/service_list.html.haml
302
+ - html/partials/compare/services.html.haml
303
+ - html/partials/compare/unmanaged_file_list.html.haml
304
+ - html/partials/compare/unmanaged_files.html.haml
305
+ - html/partials/compare/user_list.html.haml
306
+ - html/partials/compare/users.html.haml
307
+ - html/partials/config_files.html.haml
308
+ - html/partials/groups.html.haml
309
+ - html/partials/os.html.haml
310
+ - html/partials/packages.html.haml
311
+ - html/partials/patterns.html.haml
312
+ - html/partials/repositories.html.haml
313
+ - html/partials/scope_header.html.haml
314
+ - html/partials/services.html.haml
315
+ - html/partials/unmanaged_files.html.haml
316
+ - html/partials/users.html.haml
288
317
  - inspect_helpers/changed_files.sh
289
318
  - inspect_helpers/yum_repositories.py
290
319
  - lib/analyze_config_file_diffs_task.rb