machinery-tool 1.9.1 → 1.10.0

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