machinery-tool 1.9.1 → 1.10.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS +7 -0
  3. data/html/assets/compare/machinery-compare.js +43 -0
  4. data/html/assets/compare/machinery.js +17 -0
  5. data/html/assets/machinery.css +13 -0
  6. data/html/assets/modal.js +280 -0
  7. data/html/assets/show/machinery-show.js +16 -9
  8. data/html/assets/show/machinery.js +61 -25
  9. data/html/comparison.html.haml +194 -116
  10. data/html/index.html.haml +46 -12
  11. data/lib/array.rb +2 -1
  12. data/lib/cli.rb +44 -23
  13. data/lib/compare_task.rb +5 -29
  14. data/lib/comparison.rb +69 -0
  15. data/lib/config.rb +4 -0
  16. data/lib/export_task.rb +7 -0
  17. data/lib/file_scope.rb +2 -2
  18. data/lib/html.rb +165 -88
  19. data/lib/machinery.rb +6 -2
  20. data/lib/{generate_html_task.rb → man_task.rb} +8 -6
  21. data/lib/object.rb +1 -1
  22. data/lib/renderer.rb +70 -41
  23. data/lib/{scope_file_access.rb → scope_file_access_archive.rb} +23 -20
  24. data/lib/scope_file_access_flat.rb +36 -0
  25. data/lib/serve_html_task.rb +33 -0
  26. data/lib/show_task.rb +19 -5
  27. data/lib/system_file.rb +25 -0
  28. data/lib/version.rb +1 -1
  29. data/man/generated/machinery.1.gz +0 -0
  30. data/man/generated/machinery.1.html +60 -34
  31. data/plugins/changed_managed_files/changed_managed_files_renderer.rb +5 -5
  32. data/plugins/config_files/config_files_renderer.rb +7 -6
  33. data/plugins/groups/groups_renderer.rb +3 -3
  34. data/plugins/os/os_renderer.rb +5 -5
  35. data/plugins/packages/packages_model.rb +25 -0
  36. data/plugins/packages/packages_renderer.rb +36 -5
  37. data/plugins/patterns/patterns_renderer.rb +3 -3
  38. data/plugins/repositories/repositories_model.rb +1 -1
  39. data/plugins/repositories/repositories_renderer.rb +4 -4
  40. data/plugins/services/services_model.rb +2 -2
  41. data/plugins/services/services_renderer.rb +3 -3
  42. data/plugins/unmanaged_files/unmanaged_files_model.rb +2 -1
  43. data/plugins/unmanaged_files/unmanaged_files_renderer.rb +5 -5
  44. data/plugins/users/users_renderer.rb +3 -3
  45. metadata +36 -4
@@ -45,6 +45,65 @@ $(document).ready(function () {
45
45
  html: true
46
46
  });
47
47
 
48
+ // Set up inspection details popover
49
+ $("a.inspection_details").popover({
50
+ template: "<div class='popover inspection-details-popover' role='tooltip'>\
51
+ <div class='arrow'></div>\
52
+ <div class='popover-header'>\
53
+ <button type='button' class='close' onclick='$(\".inspection_details\").popover(\"hide\")'\
54
+ aria-hidden='true'>&times;</button>\
55
+ <h3 class='popover-title'></h3>\
56
+ </div>\
57
+ <div class='popover-content'></div>\
58
+ </div>",
59
+ trigger: "click",
60
+ placement: "bottom",
61
+ html: true,
62
+ content: function() {
63
+ return $("#inspection_details").html();
64
+ },
65
+ title: function() {
66
+ return "Inspection details";
67
+ }
68
+ });
69
+ $('.inspection-details-popover .close').click(function() { $(".inspection_details").popover("hide") });
70
+ });
71
+
72
+
73
+ setupDynamicContent = function() {
74
+ // Set up file download links
75
+ $(".file-download").click(function() {
76
+ $("#file-modal-file-content").hide();
77
+ $("#file-modal-error").hide();
78
+
79
+ var file = $(this);
80
+ var scope = file.parents(".scope").data("scope");
81
+ var description = $("body").data("description");
82
+ var url = "/descriptions/" + description + "/files/" + scope + file.text().trim();
83
+
84
+ $("#file-modal-download-link").attr("href", url);
85
+ $.get(url, function(res) {
86
+ if(res.length === 0) {
87
+ $("#file-modal-error").html("File is empty.").show();
88
+ } else {
89
+ $("#file-modal-file-content").val(res).show();
90
+ }
91
+ }, "text").
92
+ error(function(res) {
93
+ if(res.readyState == 0) {
94
+ $("#file-modal-error").html("Could not download file content. Is the web server still running?").show();
95
+ } else if(res.status == 406) {
96
+ $("#file-modal-error").html("File is binary.").show();
97
+ } else {
98
+ $("#file-modal-error").html("There was an unknown error downloading the file.").show();
99
+ }
100
+ });
101
+
102
+ $("#file-modal-title").html(file.html());
103
+ $("#file-modal").modal("show");
104
+
105
+ return false;
106
+ });
48
107
  // Set up config file diffs popovers
49
108
  var counter;
50
109
  $(".diff-toggle").popover({
@@ -66,7 +125,7 @@ $(document).ready(function () {
66
125
  counter = setTimeout(function(){
67
126
  $(_this).popover("show");
68
127
  $(".diff-popover").on("mouseleave", function () {
69
- $(".diff-toggle").popover("hide");
128
+ $(".diff-toggle").popover("hide");
70
129
  });
71
130
  }, 100);
72
131
  }).on("mouseleave", function () {
@@ -77,29 +136,6 @@ $(document).ready(function () {
77
136
  }, 500);
78
137
  });
79
138
 
80
- // Set up inspection details popover
81
- $("a.inspection_details").popover({
82
- template: "<div class='popover inspection-details-popover' role='tooltip'>\
83
- <div class='arrow'></div>\
84
- <div class='popover-header'>\
85
- <button type='button' class='close' onclick='$(\".inspection_details\").popover(\"hide\")'\
86
- aria-hidden='true'>&times;</button>\
87
- <h3 class='popover-title'></h3>\
88
- </div>\
89
- <div class='popover-content'></div>\
90
- </div>",
91
- trigger: "click",
92
- placement: "bottom",
93
- html: true,
94
- content: function() {
95
- return $("#inspection_details").html();
96
- },
97
- title: function() {
98
- return "Inspection details";
99
- }
100
- });
101
- $('.inspection-details-popover .close').click(function() { $(".inspection_details").popover("hide") });
102
-
103
139
  // Tooltips for service states
104
140
  $("td.systemd_enabled, td.systemd_enabled-runtime").attr("title", "Enabled through a symlink in .wants directory (permanently or just in /run).");
105
141
  $("td.systemd_linked, td.systemd_linked-runtime").attr("title", "Made available through a symlink to the unit file (permanently or just in /run).");
@@ -118,4 +154,4 @@ $(document).ready(function () {
118
154
  $this.attr('title', $this.text());
119
155
  }
120
156
  });
121
- });
157
+ };
@@ -41,18 +41,18 @@
41
41
  .row.scope_content.collapse.in
42
42
  .row
43
43
  .col-xs-1
44
- .col-xs-5{"ng-show" => "diff.os[0]"}
44
+ .col-xs-5{"ng-show" => "diff.os.only_in1"}
45
45
  %only-in-a
46
- %render-template{:template => "scope_os_partial", :object => "diff.os[0]"}
46
+ %render-template{:template => "scope_os_partial", :object => "diff.os.only_in1"}
47
47
  .col-xs-1
48
- .col-xs-5{"ng-show" => "diff.os[1]"}
48
+ .col-xs-5{"ng-show" => "diff.os.only_in2"}
49
49
  %only-in-b
50
- %render-template{:template => "scope_os_partial", :object => "diff.os[1]"}
51
- .row
50
+ %render-template{:template => "scope_os_partial", :object => "diff.os.only_in2"}
51
+ .row.scope_content_common.collapse.in
52
52
  .col-xs-1
53
- .col-xs-11{"ng-show" => "diff.os[2]"}
53
+ .col-xs-11{"ng-show" => "diff.os.common"}
54
54
  %in-both
55
- %render-template{:template => "scope_os_partial", :object => "diff.os[2]"}
55
+ %render-template{:template => "scope_os_partial", :object => "diff.os.common"}
56
56
 
57
57
  %script#scope_packages_partial{:type => "text/ng-template"}
58
58
  %table.table.table-striped.table-hover.table-condensed
@@ -76,6 +76,11 @@
76
76
  %td.hidden-lg{:title => "Name: {{package.name}}\nVersion: {{package.version}}\nRelease: {{package.release}}\n" |
77
77
  "Architecture: {{package.arch}}\nVendor: {{package.vendor}}\nChecksum: {{package.checksum}}"} ... |
78
78
 
79
+ %script#scope_packages_changed_partial{:type => "text/ng-template"}
80
+ %ul.changed
81
+ %li{"ng-repeat" => "changed_element in changed_elements"}
82
+ {{changed_element}}
83
+
79
84
  %script#scope_packages.partial{:type => "text/ng-template"}
80
85
  %a.scope_anchor{:id => "packages"}
81
86
  #packages_container.scope
@@ -88,30 +93,47 @@
88
93
  %h2
89
94
  Packages
90
95
  .scope-summary
91
- %span.summary-part{"ng-show" => "diff.packages[0]"}
92
- {{diff.meta.description_a}}: {{diff.packages[0].length}} packages
93
- %span.summary-part{"ng-show" => "diff.packages[1]"}
94
- {{diff.meta.description_b}}: {{diff.packages[1].length}} packages
95
- %span.summary-part{"ng-show" => "diff.packages[2]"}
96
+ %span.summary-part{"ng-show" => "diff.packages.only_in1"}
97
+ {{diff.meta.description_a}}: {{diff.packages.only_in1.length}} packages
98
+ %span.summary-part{"ng-show" => "diff.packages.only_in2"}
99
+ {{diff.meta.description_b}}: {{diff.packages.only_in2.length}} packages
100
+ %span.summary-part{"ng-show" => "diff.packages.changed"}
101
+ %a{href: "#packages_changed"}
102
+ Changed
103
+ = ": {{diff.packages.changed.length}} packages"
104
+ %span.summary-part{"ng-show" => "diff.packages.common"}
96
105
  %a{href: "#packages_both"}
97
106
  both
98
- = ": {{diff.packages[2].length}} packages"
107
+ = ": {{diff.packages.common.length}} packages"
99
108
  .row.scope_content.collapse.in
100
109
  .row
101
110
  .col-xs-1
102
- .col-xs-5.table_container{"ng-show" => "diff.packages[0]"}
111
+ .col-xs-5.table_container{"ng-show" => "diff.packages.only_in1"}
103
112
  %only-in-a
104
- %render-template{:template => "scope_packages_partial", :object => "diff.packages[0]"}
113
+ %render-template{:template => "scope_packages_partial", :object => "diff.packages.only_in1"}
105
114
  .col-xs-1
106
- .col-xs-5.table_container{"ng-show" => "diff.packages[1]"}
115
+ .col-xs-5.table_container{"ng-show" => "diff.packages.only_in2"}
107
116
  %only-in-b
108
- %render-template{:template => "scope_packages_partial", :object => "diff.packages[1]"}
109
- %a.both_anchor{id: "packages_both"}
110
- .row{"ng-show" => "diff.packages[2]"}
117
+ %render-template{:template => "scope_packages_partial", :object => "diff.packages.only_in2"}
118
+ %a.both_anchor{id: "packages_changed"}
119
+ .row{"ng-show" => "diff.packages.changed"}
111
120
  .col-xs-1
112
121
  .col-xs-11.table_container
122
+ %changed
123
+ %changed_packages{:object => "diff.packages.changed"}
124
+ %a.both_anchor{id: "packages_both"}
125
+ .row
126
+ .col-xs-1
127
+ .col-xs-2
128
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.packages.common"}
129
+ Show common elements in packages
130
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.packages.common"}
131
+ Hide common elements in packages
132
+ .row.scope_common_content.collapse{"ng-show" => "diff.packages.common"}
133
+ .col-xs-1
134
+ .col-xs-10.table_container
113
135
  %in-both
114
- %render-template{:template => "scope_packages_partial", :object => "diff.packages[2]"}
136
+ %render-template{:template => "scope_packages_partial", :object => "diff.packages.common"}
115
137
 
116
138
  %script#scope_patterns_partial{:type => "text/ng-template"}
117
139
  %table.table.table-striped.table-hover.table-condensed
@@ -138,31 +160,37 @@
138
160
  %h2
139
161
  Patterns
140
162
  .scope-summary
141
- %span.summary-part{"ng-show" => "diff.patterns[0]"}
142
- {{diff.meta.description_a}}: {{diff.patterns[0].length}} patterns
143
- %span.summary-part{"ng-show" => "diff.patterns[1]"}
144
- {{diff.meta.description_b}}: {{diff.patterns[1].length}} patterns
145
- %span.summary-part{"ng-show" => "diff.patterns[2]"}
163
+ %span.summary-part{"ng-show" => "diff.patterns.only_in1"}
164
+ {{diff.meta.description_a}}: {{diff.patterns.only_in1.length}} patterns
165
+ %span.summary-part{"ng-show" => "diff.patterns.only_in2"}
166
+ {{diff.meta.description_b}}: {{diff.patterns.only_in2.length}} patterns
167
+ %span.summary-part{"ng-show" => "diff.patterns.common"}
146
168
  %a{href: "#patterns_both"}
147
169
  both
148
- = ": {{diff.patterns[2].length}} patterns"
170
+ = ": {{diff.patterns.common.length}} patterns"
149
171
  .row.scope_content.collapse.in
150
172
  .row
151
173
  .col-xs-1
152
- .col-xs-5{"ng-show" => "diff.patterns[0]"}
174
+ .col-xs-5{"ng-show" => "diff.patterns.only_in1"}
153
175
  %only-in-a
154
- %render-template{:template => "scope_patterns_partial", :object => "diff.patterns[0]"}
155
- .col-xs-5{"ng-show" => "diff.patterns[1]"}
176
+ %render-template{:template => "scope_patterns_partial", :object => "diff.patterns.only_in1"}
177
+ .col-xs-1
178
+ .col-xs-5{"ng-show" => "diff.patterns.only_in2"}
156
179
  %only-in-b
157
- %render-template{:template => "scope_patterns_partial", :object => "diff.patterns[1]"}
180
+ %render-template{:template => "scope_patterns_partial", :object => "diff.patterns.only_in2"}
158
181
  %a.both_anchor{id: "patterns_both"}
159
- .row{"ng-show" => "diff.patterns[2]"}
182
+ .row
183
+ .col-xs-1
184
+ .col-xs-2
185
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.patterns.common"}
186
+ Show common elements in patterns
187
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.patterns.common"}
188
+ Hide common elements in patterns
189
+ .row.scope_common_content.collapse{"ng-show" => "diff.patterns.common"}
160
190
  .col-xs-1
161
191
  .col-xs-11
162
192
  %in-both
163
- %render-template{:template => "scope_patterns_partial", :object => "diff.patterns[2]"}
164
-
165
-
193
+ %render-template{:template => "scope_patterns_partial", :object => "diff.patterns.common"}
166
194
 
167
195
  %script#scope_users_partial{:type => "text/ng-template"}
168
196
  %table.table.table-striped.table-hover.table-condensed
@@ -194,30 +222,37 @@
194
222
  %h2
195
223
  Users
196
224
  .scope-summary
197
- %span.summary-part{"ng-show" => "diff.users[0]"}
198
- {{diff.meta.description_a}}: {{diff.users[0].length}} users
199
- %span.summary-part{"ng-show" => "diff.users[1]"}
200
- {{diff.meta.description_b}}: {{diff.users[1].length}} users
201
- %span.summary-part{"ng-show" => "diff.users[2]"}
225
+ %span.summary-part{"ng-show" => "diff.users.only_in1"}
226
+ {{diff.meta.description_a}}: {{diff.users.only_in1.length}} users
227
+ %span.summary-part{"ng-show" => "diff.users.only_in2"}
228
+ {{diff.meta.description_b}}: {{diff.users.only_in2.length}} users
229
+ %span.summary-part{"ng-show" => "diff.users.common"}
202
230
  %a{href: "#users_both"}
203
231
  both
204
- = ": {{diff.users[2].length}} users"
232
+ = ": {{diff.users.common.length}} users"
205
233
  .row.scope_content.collapse.in
206
234
  .row
207
235
  .col-xs-1
208
- .col-xs-5{"ng-show" => "diff.users[0]"}
236
+ .col-xs-5{"ng-show" => "diff.users.only_in1"}
209
237
  %only-in-a
210
- %render-template{:template => "scope_users_partial", :object => "diff.users[0]"}
238
+ %render-template{:template => "scope_users_partial", :object => "diff.users.only_in1"}
211
239
  .col-xs-1
212
- .col-xs-5{"ng-show" => "diff.users[1]"}
240
+ .col-xs-5{"ng-show" => "diff.users.only_in2"}
213
241
  %only-in-b
214
- %render-template{:template => "scope_users_partial", :object => "diff.users[1]"}
242
+ %render-template{:template => "scope_users_partial", :object => "diff.users.only_in2"}
215
243
  %a.both_anchor{id: "users_both"}
216
- .row{"ng-show" => "diff.users[2]"}
244
+ .row
245
+ .col-xs-1
246
+ .col-xs-2
247
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.users.common"}
248
+ Show common elements in users
249
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.users.common"}
250
+ Hide common elements in users
251
+ .row.scope_common_content.collapse{"ng-show" => "diff.users.common"}
217
252
  .col-xs-1
218
253
  .col-xs-11
219
254
  %in-both
220
- %render-template{:template => "scope_users_partial", :object => "diff.users[2]"}
255
+ %render-template{:template => "scope_users_partial", :object => "diff.users.common"}
221
256
 
222
257
  %script#scope_unmanaged_files_partial{:type => "text/ng-template"}
223
258
  %p
@@ -243,30 +278,37 @@
243
278
  %h2
244
279
  Unmanaged Files
245
280
  .scope-summary
246
- %span.summary-part{"ng-show" => "diff.unmanaged_files[0]"}
247
- {{diff.meta.description_a}}: {{diff.unmanaged_files[0].files.length || 0}} files
248
- %span.summary-part{"ng-show" => "diff.unmanaged_files[1]"}
249
- {{diff.meta.description_b}}: {{diff.unmanaged_files[1].files.length || 0}} files
250
- %span.summary-part{"ng-show" => "diff.unmanaged_files[2]"}
281
+ %span.summary-part{"ng-show" => "diff.unmanaged_files.only_in1"}
282
+ {{diff.meta.description_a}}: {{diff.unmanaged_files.only_in1.files.length || 0}} files
283
+ %span.summary-part{"ng-show" => "diff.unmanaged_files.only_in2"}
284
+ {{diff.meta.description_b}}: {{diff.unmanaged_files.only_in2.files.length || 0}} files
285
+ %span.summary-part{"ng-show" => "diff.unmanaged_files.common"}
251
286
  %a{href: "#unmanaged_files_both"}
252
287
  both
253
- = ": {{diff.unmanaged_files[2].files.length}} files"
288
+ = ": {{diff.unmanaged_files.common.files.length}} files"
254
289
  .row.scope_content.collapse.in
255
290
  .row
256
291
  .col-xs-1
257
292
  .col-xs-5
258
293
  %only-in-a
259
- %render-template{:template => "scope_unmanaged_files_partial", :object => "diff.unmanaged_files[0]"}
294
+ %render-template{:template => "scope_unmanaged_files_partial", :object => "diff.unmanaged_files.only_in1"}
260
295
  .col-xs-1
261
296
  .col-xs-5
262
297
  %only-in-b
263
- %render-template{:template => "scope_unmanaged_files_partial", :object => "diff.unmanaged_files[1]"}
298
+ %render-template{:template => "scope_unmanaged_files_partial", :object => "diff.unmanaged_files.only_in2"}
264
299
  %a.both_anchor{id: "unmanaged_files_both"}
265
300
  .row
301
+ .col-xs-1
302
+ .col-xs-4
303
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.unmanaged_files.common"}
304
+ Show common elements in unmanaged_files
305
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.unmanaged_files.common"}
306
+ Hide common elements in unmanaged_files
307
+ .row.scope_common_content.collapse{"ng-show" => "diff.unmanaged_files.common"}
266
308
  .col-xs-1
267
309
  .col-xs-11
268
310
  %in-both
269
- %render-template{:template => "scope_unmanaged_files_partial", :object => "diff.unmanaged_files[2]"}
311
+ %render-template{:template => "scope_unmanaged_files_partial", :object => "diff.unmanaged_files.common"}
270
312
 
271
313
  %script#scope_groups_partial{:type => "text/ng-template"}
272
314
  %table.table.table-striped.table-hover.table-condensed
@@ -294,30 +336,37 @@
294
336
  %h2
295
337
  Groups
296
338
  .scope-summary
297
- %span.summary-part{"ng-show" => "diff.groups[0]"}
298
- {{diff.meta.description_a}}: {{diff.groups[0].length}} groups
299
- %span.summary-part{"ng-show" => "diff.groups[1]"}
300
- {{diff.meta.description_b}}: {{diff.groups[1].length}} groups
301
- %span.summary-part{"ng-show" => "diff.groups[2]"}
339
+ %span.summary-part{"ng-show" => "diff.groups.only_in1"}
340
+ {{diff.meta.description_a}}: {{diff.groups.only_in1.length}} groups
341
+ %span.summary-part{"ng-show" => "diff.groups.only_in2"}
342
+ {{diff.meta.description_b}}: {{diff.groups.only_in2.length}} groups
343
+ %span.summary-part{"ng-show" => "diff.groups.common"}
302
344
  %a{href: "#groups_both"}
303
345
  both
304
- = ": {{diff.groups[2].length}} groups"
346
+ = ": {{diff.groups.common.length}} groups"
305
347
  .row.scope_content.collapse.in
306
348
  .row
307
349
  .col-xs-1
308
- .col-xs-5{"ng-show" => "diff.groups[0]"}
350
+ .col-xs-5{"ng-show" => "diff.groups.only_in1"}
309
351
  %only-in-a
310
- %render-template{:template => "scope_groups_partial", :object => "diff.groups[0]"}
352
+ %render-template{:template => "scope_groups_partial", :object => "diff.groups.only_in1"}
311
353
  .col-xs-1
312
- .col-xs-5{"ng-show" => "diff.groups[1]"}
354
+ .col-xs-5{"ng-show" => "diff.groups.only_in2"}
313
355
  %only-in-b
314
- %render-template{:template => "scope_groups_partial", :object => "diff.groups[1]"}
356
+ %render-template{:template => "scope_groups_partial", :object => "diff.groups.only_in2"}
315
357
  %a.both_anchor{id: "groups_both"}
316
- .row{"ng-show" => "diff.groups[2]"}
358
+ .row
359
+ .col-xs-1
360
+ .col-xs-2
361
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.groups.common"}
362
+ Show common elements in groups
363
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.groups.common"}
364
+ Hide common elements in groups
365
+ .row.scope_common_content.collapse{"ng-show" => "diff.groups.common"}
317
366
  .col-xs-1
318
367
  .col-xs-11
319
368
  %in-both
320
- %render-template{:template => "scope_groups_partial", :object => "diff.groups[2]"}
369
+ %render-template{:template => "scope_groups_partial", :object => "diff.groups.common"}
321
370
 
322
371
  %script#scope_repositories_partial{:type => "text/ng-template"}
323
372
  %table.table.table-striped.table-hover.table-condensed
@@ -358,30 +407,37 @@
358
407
  %h2
359
408
  Repositories
360
409
  .scope-summary
361
- %span.summary-part{"ng-show" => "diff.repositories[0]"}
362
- {{diff.meta.description_a}}: {{diff.repositories[0].length}} repos
363
- %span.summary-part{"ng-show" => "diff.repositories[1]"}
364
- {{diff.meta.description_b}}: {{diff.repositories[1].length}} repos
365
- %span.summary-part{"ng-show" => "diff.repositories[2]"}
410
+ %span.summary-part{"ng-show" => "diff.repositories.only_in1"}
411
+ {{diff.meta.description_a}}: {{diff.repositories.only_in1.length}} repos
412
+ %span.summary-part{"ng-show" => "diff.repositories.only_in2"}
413
+ {{diff.meta.description_b}}: {{diff.repositories.only_in2.length}} repos
414
+ %span.summary-part{"ng-show" => "diff.repositories.common"}
366
415
  %a{href: "#repositories_both"}
367
416
  both
368
- = ": {{diff.repositories[2].length}} repos"
417
+ = ": {{diff.repositories.common.length}} repos"
369
418
  .row.scope_content.collapse.in
370
419
  .row
371
420
  .col-xs-1
372
- .col-xs-5{"ng-show" => "diff.repositories[0]"}
421
+ .col-xs-5{"ng-show" => "diff.repositories.only_in1"}
373
422
  %only-in-a
374
- %render-template{:template => "scope_repositories_partial", :object => "diff.repositories[0]"}
423
+ %render-template{:template => "scope_repositories_partial", :object => "diff.repositories.only_in1"}
375
424
  .col-xs-1
376
- .col-xs-5{"ng-show" => "diff.repositories[1]"}
425
+ .col-xs-5{"ng-show" => "diff.repositories.only_in2"}
377
426
  %only-in-b
378
- %render-template{:template => "scope_repositories_partial", :object => "diff.repositories[1]"}
427
+ %render-template{:template => "scope_repositories_partial", :object => "diff.repositories.only_in2"}
379
428
  %a.both_anchor{id: "repositories_both"}
380
- .row{"ng-show" => "diff.repositories[2]"}
429
+ .row
430
+ .col-xs-1
431
+ .col-xs-2
432
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.repositories.common"}
433
+ Show common elements in repositories
434
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.repositories.common"}
435
+ Hide common elements in repositories
436
+ .row.scope_common_content.collapse{"ng-show" => "diff.repositories.common"}
381
437
  .col-xs-1
382
438
  .col-xs-11
383
439
  %in-both
384
- %render-template{:template => "scope_repositories_partial", :object => "diff.repositories[2]"}
440
+ %render-template{:template => "scope_repositories_partial", :object => "diff.repositories.common"}
385
441
 
386
442
  %script#scope_changed_managed_files_partial{:type => "text/ng-template"}
387
443
  %p
@@ -418,30 +474,37 @@
418
474
  %h2
419
475
  Changed Managed Files
420
476
  .scope-summary
421
- %span.summary-part{"ng-show" => "diff.changed_managed_files[0]"}
422
- {{diff.meta.description_a}}: {{diff.changed_managed_files[0].files.length || 0}} files
423
- %span.summary-part{"ng-show" => "diff.changed_managed_files[1]"}
424
- {{diff.meta.description_b}}: {{diff.changed_managed_files[1].files.length || 0}} files
425
- %span.summary-part{"ng-show" => "diff.changed_managed_files[2]"}
477
+ %span.summary-part{"ng-show" => "diff.changed_managed_files.only_in1"}
478
+ {{diff.meta.description_a}}: {{diff.changed_managed_files.only_in1.files.length || 0}} files
479
+ %span.summary-part{"ng-show" => "diff.changed_managed_files.only_in2"}
480
+ {{diff.meta.description_b}}: {{diff.changed_managed_files.only_in2.files.length || 0}} files
481
+ %span.summary-part{"ng-show" => "diff.changed_managed_files.common"}
426
482
  %a{href: "#changed_managed_files_both"}
427
483
  both
428
- = ": {{diff.changed_managed_files[2].files.length}} files"
484
+ = ": {{diff.changed_managed_files.common.files.length}} files"
429
485
  .row.scope_content.collapse.in
430
486
  .row
431
487
  .col-xs-1
432
- .col-xs-5{"ng-show" => "diff.changed_managed_files[0]"}
488
+ .col-xs-5{"ng-show" => "diff.changed_managed_files.only_in1"}
433
489
  %only-in-a
434
- %render-template{:template => "scope_changed_managed_files_partial", :object => "diff.changed_managed_files[0]"}
490
+ %render-template{:template => "scope_changed_managed_files_partial", :object => "diff.changed_managed_files.only_in1"}
435
491
  .col-xs-1
436
- .col-xs-5{"ng-show" => "diff.changed_managed_files[1]"}
492
+ .col-xs-5{"ng-show" => "diff.changed_managed_files.only_in2"}
437
493
  %only-in-b
438
- %render-template{:template => "scope_changed_managed_files_partial", :object => "diff.changed_managed_files[1]"}
494
+ %render-template{:template => "scope_changed_managed_files_partial", :object => "diff.changed_managed_files.only_in2"}
439
495
  %a.both_anchor{id: "changed_managed_files_both"}
440
- .row{"ng-show" => "diff.changed_managed_files[2]"}
496
+ .row
497
+ .col-xs-1
498
+ .col-xs-4
499
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.changed_managed_files.common"}
500
+ Show common elements in changed_managed_files
501
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.changed_managed_files.common"}
502
+ Hide common elements in changed_managed_files
503
+ .row.scope_common_content.collapse{"ng-show" => "diff.changed_managed_files.common"}
441
504
  .col-xs-1
442
505
  .col-xs-11
443
506
  %in-both
444
- %render-template{:template => "scope_changed_managed_files_partial", :object => "diff.changed_managed_files[2]"}
507
+ %render-template{:template => "scope_changed_managed_files_partial", :object => "diff.changed_managed_files.common"}
445
508
 
446
509
  %script#scope_config_files_partial{:type => "text/ng-template"}
447
510
  %p
@@ -480,30 +543,37 @@
480
543
  %h2
481
544
  Config Files
482
545
  .scope-summary
483
- %span.summary-part{"ng-show" => "diff.config_files[0]"}
484
- {{diff.meta.description_a}}: {{diff.config_files[0].files.length || 0}} files
485
- %span.summary-part{"ng-show" => "diff.config_files[1]"}
486
- {{diff.meta.description_b}}: {{diff.config_files[1].files.length || 0}} files
487
- %span.summary-part{"ng-show" => "diff.config_files[2]"}
546
+ %span.summary-part{"ng-show" => "diff.config_files.only_in1"}
547
+ {{diff.meta.description_a}}: {{diff.config_files.only_in1.files.length || 0}} files
548
+ %span.summary-part{"ng-show" => "diff.config_files.only_in2"}
549
+ {{diff.meta.description_b}}: {{diff.config_files.only_in2.files.length || 0}} files
550
+ %span.summary-part{"ng-show" => "diff.config_files.common"}
488
551
  %a{href: "#config_files_both"}
489
552
  both
490
- = ": {{diff.config_files[2].files.length}} files"
553
+ = ": {{diff.config_files.common.files.length}} files"
491
554
  .row.scope_content.collapse.in
492
555
  .row
493
556
  .col-xs-1
494
- .col-xs-5{"ng-show" => "diff.config_files[0]"}
557
+ .col-xs-5{"ng-show" => "diff.config_files.only_in1"}
495
558
  %only-in-a
496
- %render-template{:template => "scope_config_files_partial", :object => "diff.config_files[0]"}
559
+ %render-template{:template => "scope_config_files_partial", :object => "diff.config_files.only_in1"}
497
560
  .col-xs-1
498
- .col-xs-5{"ng-show" => "diff.config_files[1]"}
561
+ .col-xs-5{"ng-show" => "diff.config_files.only_in2"}
499
562
  %only-in-b
500
- %render-template{:template => "scope_config_files_partial", :object => "diff.config_files[1]"}
563
+ %render-template{:template => "scope_config_files_partial", :object => "diff.config_files.only_in2"}
501
564
  %a.both_anchor{id: "config_files_both"}
502
- .row{"ng-show" => "diff.config_files[2]"}
565
+ .row
566
+ .col-xs-1
567
+ .col-xs-2
568
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.config_files.common"}
569
+ Show common elements in config_files
570
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.config_files.common"}
571
+ Hide common elements in config_files
572
+ .row.scope_common_content.collapse{"ng-show" => "diff.config_files.common"}
503
573
  .col-xs-1
504
574
  .col-xs-11
505
575
  %in-both
506
- %render-template{:template => "scope_config_files_partial", :object => "diff.config_files[2]"}
576
+ %render-template{:template => "scope_config_files_partial", :object => "diff.config_files.common"}
507
577
 
508
578
  %script#scope_services_partial{:type => "text/ng-template"}
509
579
  %table.table.table-striped.table-hover.table-condensed
@@ -528,30 +598,37 @@
528
598
  %h2
529
599
  Services
530
600
  .scope-summary
531
- %span.summary-part{"ng-show" => "diff.services[0]"}
532
- {{diff.meta.description_a}}: {{diff.services[0].services.length || 0}} services ({{diff.services[0].init_system}})
533
- %span.summary-part{"ng-show" => "diff.services[1]"}
534
- {{diff.meta.description_b}}: {{diff.services[1].services.length || 0}} services ({{diff.services[1].init_system}})
535
- %span.summary-part{"ng-show" => "diff.services[2]"}
601
+ %span.summary-part{"ng-show" => "diff.services.only_in1"}
602
+ {{diff.meta.description_a}}: {{diff.services.only_in1.services.length || 0}} services ({{diff.services.only_in1.init_system}})
603
+ %span.summary-part{"ng-show" => "diff.services.only_in2"}
604
+ {{diff.meta.description_b}}: {{diff.services.only_in2.services.length || 0}} services ({{diff.services.only_in2.init_system}})
605
+ %span.summary-part{"ng-show" => "diff.services.common"}
536
606
  %a{href: "#services_both"}
537
607
  both
538
- = ": {{diff.services[2].services.length}} services ({{diff.services[2].init_system}})"
608
+ = ": {{diff.services.common.services.length}} services ({{diff.services.common.init_system}})"
539
609
  .row.scope_content.collapse.in
540
610
  .row
541
611
  .col-xs-1
542
- .col-xs-5{"ng-show" => "diff.services[0]"}
612
+ .col-xs-5{"ng-show" => "diff.services.only_in1"}
543
613
  %only-in-a
544
- %render-template{:template => "scope_services_partial", :object => "diff.services[0]"}
614
+ %render-template{:template => "scope_services_partial", :object => "diff.services.only_in1"}
545
615
  .col-xs-1
546
- .col-xs-5{"ng-show" => "diff.services[1]"}
616
+ .col-xs-5{"ng-show" => "diff.services.only_in2"}
547
617
  %only-in-b
548
- %render-template{:template => "scope_services_partial", :object => "diff.services[1]"}
618
+ %render-template{:template => "scope_services_partial", :object => "diff.services.only_in2"}
549
619
  %a.both_anchor{id: "services_both"}
550
- .row{"ng-show" => "diff.services[2]"}
620
+ .row
621
+ .col-xs-1
622
+ .col-xs-2
623
+ %a{:class=>"show-common-elements", :href => "#", "ng-show" => "diff.services.common"}
624
+ Show common elements in services
625
+ %a{:class=>"hide-common-elements", :href => "#", :style => "display: none", "ng-show" => "diff.services.common"}
626
+ Hide common elements in services
627
+ .row.scope_common_content.collapse{"ng-show" => "diff.services.common"}
551
628
  .col-xs-1
552
629
  .col-xs-11
553
630
  %in-both
554
- %render-template{:template => "scope_services_partial", :object => "diff.services[2]"}
631
+ %render-template{:template => "scope_services_partial", :object => "diff.services.common"}
555
632
 
556
633
  %script{:src => "assets/diff.js"}
557
634
  %script{:src => "assets/compare/machinery.js"}
@@ -594,7 +671,8 @@
594
671
  Expand all
595
672
  %a#collapse-all{:href => "#"}
596
673
  Collapse all
597
- .col-xs-10
674
+ .row
675
+ .col-xs-9
598
676
  %small.pull-right.pad-top
599
677
  created by
600
678
  %a{:href => "http://machinery-project.org", :target => "_blank"}