machinery-tool 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS +18 -0
  3. data/html/assets/machinery.css +20 -1
  4. data/html/assets/machinery.js +53 -26
  5. data/html/index.html.haml +69 -46
  6. data/lib/analyze_config_file_diffs_task.rb +1 -1
  7. data/lib/array.rb +36 -14
  8. data/lib/cli.rb +45 -50
  9. data/lib/compare_task.rb +1 -1
  10. data/lib/config.rb +8 -2
  11. data/lib/config_base.rb +14 -1
  12. data/lib/element_filter.rb +48 -11
  13. data/lib/exceptions.rb +5 -0
  14. data/lib/filter.rb +63 -14
  15. data/lib/filter_option_parser.rb +83 -0
  16. data/lib/generate_html_task.rb +3 -1
  17. data/lib/hint.rb +36 -18
  18. data/lib/html.rb +1 -0
  19. data/lib/inspect_task.rb +12 -21
  20. data/lib/inspector.rb +13 -6
  21. data/lib/kiwi_config.rb +17 -14
  22. data/lib/list_task.rb +5 -1
  23. data/lib/local_system.rb +3 -4
  24. data/lib/logged_cheetah.rb +3 -1
  25. data/lib/machinery.rb +1 -0
  26. data/lib/object.rb +24 -19
  27. data/lib/scope_file_store.rb +3 -1
  28. data/lib/show_task.rb +5 -7
  29. data/lib/system_description.rb +11 -12
  30. data/lib/system_description_store.rb +1 -1
  31. data/lib/ui.rb +44 -36
  32. data/lib/upgrade_format_task.rb +4 -1
  33. data/lib/version.rb +1 -1
  34. data/man/generated/machinery.1.gz +0 -0
  35. data/man/generated/machinery.1.html +7 -2
  36. data/plugins/inspect/changed_managed_files_inspector.rb +13 -6
  37. data/plugins/inspect/config_files_inspector.rb +27 -20
  38. data/plugins/inspect/groups_inspector.rb +12 -4
  39. data/plugins/inspect/os_inspector.rb +29 -22
  40. data/plugins/inspect/packages_inspector.rb +13 -5
  41. data/plugins/inspect/patterns_inspector.rb +24 -10
  42. data/plugins/inspect/repositories_inspector.rb +19 -15
  43. data/plugins/inspect/services_inspector.rb +28 -22
  44. data/plugins/inspect/unmanaged_files_inspector.rb +42 -33
  45. data/plugins/inspect/users_inspector.rb +13 -5
  46. data/plugins/model/os_model.rb +1 -1
  47. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 184d1ef94950678ea43a32a035f1b49393fcaa3a
4
- data.tar.gz: 4e4135549b3a332ae78c453100797d8bcc121ecf
3
+ metadata.gz: 725a9e95df8830f8b6d31b967a03bc08286a99b4
4
+ data.tar.gz: e4ede1e631fb2e78d4d74ae0859cbdcb4a1da40b
5
5
  SHA512:
6
- metadata.gz: 19f792e485da42fa7e8dad80d822cd0890f92ffc9cb96a89621bb86b8830388b061b8db39e96fd0afe86d3fe1d3f3a1f7728f8dc9d5788b756619831970b4e65
7
- data.tar.gz: e692387ddaf55efb16418c5b2db7ff7be53b7d5f0ffb46a2cae6297e0ce4ad090b1455140fef1f4500d7223111f8e1ce9c705b19054cc8ed553f8d8b6e7f1ed1
6
+ metadata.gz: 74773fd5aa6a4b23b52c9d27771a4a3ca1762f76a6169ce92b6e9380bf3a5233dd28fd68c05b2ae73721edc5cebbbc57750d8b68ef93784dad5337c66f7b734e
7
+ data.tar.gz: 580e1e8201d3ea4e1d58bd68a60192988a4539eb9811f8312e40414fec65caaa9146138c46dd1a445aac4098f60e102149d9e9452771cc2597202a4e3fbf581e
data/NEWS CHANGED
@@ -1,6 +1,24 @@
1
1
  # Machinery Release Notes
2
2
 
3
3
 
4
+ ## Version 1.6.0 - Wed Apr 01 15:43:17 CEST 2015 - thardeck@suse.de
5
+
6
+ * Add experimental `--exclude` option to exclude elements from inspection.
7
+ Run `machinery config experimental-features on` to enable the option
8
+ * Support global `--exclude` option for `show` command.
9
+ This feature is available when the experimental-features option is on.
10
+ * Add `--verbose` option to `inspect` command to display the filters which
11
+ were used during inspection
12
+ * Add `--verbose` option to `show` command to display the filters which were
13
+ applied before showing the system description
14
+ * Show progress on upgrading the system description format
15
+ * Improve help for users when upgrading system descriptions
16
+ * Fix piping output of Machinery to less (gh#SUSE/machinery#521)
17
+ * Better help for users when upgrading format of system descriptions
18
+ * Add option to show command to display filters used during inspection
19
+ * Support negated filter expressions in --exclude option
20
+ * Show filters used during inspection in HTML view
21
+
4
22
  ## Version 1.5.0 - Fri Mar 13 13:03:47 CET 2015 - thardeck@suse.de
5
23
 
6
24
  * Fix issue with changes of managed files on RHEL (gh#SUSE/machinery#636)
@@ -32,10 +32,12 @@ a.scope_anchor {
32
32
  }
33
33
 
34
34
  .scope-navigation {
35
- font-size: 60%;
36
35
  margin-left: 30px;
37
36
  }
38
37
 
38
+ .inspection_details {
39
+ margin-left: 30px;
40
+ }
39
41
 
40
42
  .filter-input {
41
43
  margin-bottom: 10px;
@@ -66,6 +68,10 @@ span.toggle.collapsed {
66
68
  max-width: 800px;
67
69
  }
68
70
 
71
+ .popover button.close {
72
+ padding: 6px;
73
+ }
74
+
69
75
  h1 {
70
76
  color: #3D3A38;
71
77
  }
@@ -124,8 +130,21 @@ table.diff td.linenumber {
124
130
  border-right: solid 1px #cccccc;
125
131
  }
126
132
 
133
+ .inspection-details-popover .popover-content,
127
134
  .diff-popover .popover-content {
128
135
  max-height: 500px;
129
136
  overflow-y: auto;
130
137
  font-family: monospace;
131
138
  }
139
+
140
+ .inspection-details-popover {
141
+ min-width: 800px;
142
+ }
143
+
144
+ li.filter {
145
+ font-family: monospace;
146
+ }
147
+
148
+ h1 {
149
+ display: inline-block;
150
+ }
@@ -30,7 +30,9 @@ $(document).ready(function () {
30
30
  $.each(scopes, function(index, scope) {
31
31
  templates[scope] = Hogan.compile($("#scope_" + scope).html());
32
32
  });
33
- template = Hogan.compile($('#content').html());
33
+ templates["inspection_details_template"] =
34
+ Hogan.compile($("#inspection_details_template").html());
35
+ template = Hogan.compile($("#content").html());
34
36
  $("#content_container").html(
35
37
  template.render(description, templates)
36
38
  );
@@ -71,7 +73,7 @@ $(document).ready(function () {
71
73
  $("#filter").keyup(function() {
72
74
  run_when_done_typing(function() {
73
75
  filterdocument();
74
- }, 500)
76
+ }, 500);
75
77
  });
76
78
 
77
79
  clearFilter = function() {
@@ -85,52 +87,55 @@ $(document).ready(function () {
85
87
  $("a.scope_anchor").css("height", header_height);
86
88
  $("a.scope_anchor").css("margin-top", -header_height);
87
89
 
88
- $('.scope_logo_big').each(function(){
90
+ $(".scope_logo_big").each(function(){
89
91
  var icon = $(this);
90
92
  $(window).scroll(function() {
91
- icon.removeClass('fixed');
93
+ icon.removeClass("fixed");
92
94
  var pos = icon.offset();
93
95
  var top_pos = $(this).scrollTop() + header_height;
94
- if(top_pos >= pos.top && icon.css('position') == 'static') {
95
- icon.addClass('fixed').css("top", header_height);
96
- } else if(top_pos <= pos.top && icon.hasClass('fixed')) {
97
- icon.removeClass('fixed');
96
+ if(top_pos >= pos.top && icon.css("position") == "static") {
97
+ icon.addClass("fixed").css("top", header_height);
98
+ } else if(top_pos <= pos.top && icon.hasClass("fixed")) {
99
+ icon.removeClass("fixed");
98
100
  }
99
101
  })
100
102
  });
101
103
 
102
104
  // Hook up the toggle links
103
- $('.toggle').click(function(){
104
- $(this).closest('.scope').find('.scope_content').collapse('toggle');
105
+ $(".toggle").click(function(){
106
+ $(this).closest(".scope").find(".scope_content").collapse("toggle");
105
107
  $(this).toggleClass("collapsed");
106
108
  });
107
109
 
108
110
  $("#collapse-all").click(function(){
109
- $(".scope_content").collapse('hide');
111
+ $(".scope_content").collapse("hide");
110
112
  $(".toggle").addClass("collapsed");
111
113
  $(this).hide();
112
114
  $("#expand-all").show();
113
115
  });
114
116
 
115
117
  $("#expand-all").click(function(){
116
- $(".scope_content").collapse('show');
118
+ $(".scope_content").collapse("show");
117
119
  $(".toggle").removeClass("collapsed");
118
120
  $(this).hide();
119
121
  $("#collapse-all").show();
120
122
  });
121
123
 
124
+ // Set up scope icon popovers
122
125
  $("img").popover({
123
126
  trigger: "hover",
124
127
  html: true
125
128
  });
129
+
130
+ // Set up config file diffs popovers
126
131
  var counter;
127
132
  $(".diff-toggle").popover({
128
133
  trigger: "mouseenter",
129
134
  html: true,
130
- template: '<div class="popover diff-popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
135
+ template: "<div class='popover diff-popover' role='tooltip'><div class='arrow'></div><h3 class='popover-title'></h3><div class='popover-content'></div></div>",
131
136
  content: function() {
132
137
  file = $(this).data("config-file");
133
- return $('*[data-config-file-diff="' + file + '"]').html();
138
+ return $("*[data-config-file-diff='" + file + "']").html();
134
139
  },
135
140
  title: function() {
136
141
  return "Changes for '" + $(this).data("config-file") + "'";
@@ -138,30 +143,52 @@ $(document).ready(function () {
138
143
  }).on("mouseenter",function () {
139
144
  clearTimeout(counter);
140
145
  var _this = this;
141
- $('.diff-toggle').not(_this).popover('hide');
146
+ $(".diff-toggle").not(_this).popover("hide");
142
147
 
143
148
  counter = setTimeout(function(){
144
149
  $(_this).popover("show");
145
150
  $(".diff-popover").on("mouseleave", function () {
146
- $('.diff-toggle').popover('hide');
151
+ $(".diff-toggle").popover("hide");
147
152
  });
148
153
  }, 100);
149
154
  }).on("mouseleave", function () {
150
155
  counter = setTimeout(function(){
151
156
  if (!$(".diff-popover:hover").length) {
152
- $('.diff-toggle').popover('hide');
157
+ $(".diff-toggle").popover("hide");
153
158
  }
154
159
  }, 500);
155
160
  });
156
161
 
157
- // Tooltips for service states
158
- $("td.systemd_enabled, td.systemd_enabled-runtime").attr("title", 'Enabled through a symlink in .wants directory (permanently or just in /run).')
159
- $("td.systemd_linked, td.systemd_linked-runtime").attr("title", 'Made available through a symlink to the unit file (permanently or just in /run).')
160
- $("td.systemd_masked, td.systemd_masked-runtime").attr("title", 'Disabled entirely (permanently or just in /run).')
161
- $("td.systemd_static").attr("title", 'Unit file is not enabled, and has no provisions for enabling in the "[Install]" section.')
162
- $("td.systemd_indirect").attr("title", 'Unit file itself is not enabled, but it has a non-empty Also= setting in the "[Install]" section, listing other unit files that might be enabled.')
163
- $("td.systemd_disabled").attr("title", 'Unit file is not enabled.')
164
- $("td.sysvinit_on").attr("title", 'Service is enabled')
165
- $("td.sysvinit_off").attr("title", 'Service is disabled')
162
+ // Set up inspection details popover
163
+ $("a.inspection_details").popover({
164
+ template: "<div class='popover inspection-details-popover' role='tooltip'>\
165
+ <div class='arrow'></div>\
166
+ <div class='popover-header'>\
167
+ <button type='button' class='close' onclick='$(\".inspection_details\").popover(\"hide\")'\
168
+ aria-hidden='true'>&times;</button>\
169
+ <h3 class='popover-title'></h3>\
170
+ </div>\
171
+ <div class='popover-content'></div>\
172
+ </div>",
173
+ trigger: "click",
174
+ placement: "bottom",
175
+ html: true,
176
+ content: function() {
177
+ return $("#inspection_details").html();
178
+ },
179
+ title: function() {
180
+ return "Inspection details";
181
+ }
182
+ });
183
+ $('.inspection-details-popover .close').click(function() { $(".inspection_details").popover("hide") });
166
184
 
185
+ // Tooltips for service states
186
+ $("td.systemd_enabled, td.systemd_enabled-runtime").attr("title", "Enabled through a symlink in .wants directory (permanently or just in /run).");
187
+ $("td.systemd_linked, td.systemd_linked-runtime").attr("title", "Made available through a symlink to the unit file (permanently or just in /run).");
188
+ $("td.systemd_masked, td.systemd_masked-runtime").attr("title", "Disabled entirely (permanently or just in /run).");
189
+ $("td.systemd_static").attr("title", "Unit file is not enabled, and has no provisions for enabling in the \"[Install]\" section.");
190
+ $("td.systemd_indirect").attr("title", "Unit file itself is not enabled, but it has a non-empty Also= setting in the \"[Install]\" section, listing other unit files that might be enabled.");
191
+ $("td.systemd_disabled").attr("title", "Unit file is not enabled.");
192
+ $("td.sysvinit_on").attr("title", "Service is enabled");
193
+ $("td.sysvinit_off").attr("title", "Service is disabled");
167
194
  });
data/html/index.html.haml CHANGED
@@ -12,6 +12,9 @@
12
12
  %script{:src => "assets/collapse.js"}
13
13
 
14
14
  %script#content{:type => "text/html"}
15
+ .hidden
16
+ {{>inspection_details_template}}
17
+
15
18
  {{>os}}
16
19
  {{>packages}}
17
20
  {{>patterns}}
@@ -23,14 +26,38 @@
23
26
  {{>config_files}}
24
27
  {{>services}}
25
28
 
29
+ %script#inspection_details_template{:type => "text/html"}
30
+ #inspection_details
31
+ #filters
32
+ .row
33
+ .col-xs-1
34
+ .col-xs-11
35
+ %h3 Filters used during Inspection
36
+
37
+ .row
38
+ .col-xs-1
39
+ .col-xs-11
40
+ {{#meta.filters.inspect.length}}
41
+ %ul
42
+ {{#meta.filters.inspect}}
43
+ %li.filter
44
+ {{.}}
45
+ {{/meta.filters.inspect}}
46
+ {{/meta.filters.inspect.length}}
47
+
48
+ {{^meta.filters.inspect.length}}
49
+ %p
50
+ No filters were used.
51
+ {{/meta.filters.inspect.length}}
52
+
53
+
26
54
  %script#scope_os.partial{:type => "text/html"}
27
55
  {{#os}}
28
56
  %a.scope_anchor{:id => "os"}
29
57
  #os_container.scope
30
58
  .row
31
59
  .col-xs-1
32
- %a{:href => "#os"}
33
- %img.scope_logo_big{:src => "assets/logo-os.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Operating System", :"data-content"=>"#{scope_help('os')}"}/
60
+ %img.scope_logo_big{:src => "assets/logo-os.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Operating System", :"data-content"=>"#{scope_help('os')}"}/
34
61
  %span.toggle{:title => "Collapse/Expand"}
35
62
  .col-xs-11
36
63
  %h2
@@ -57,8 +84,7 @@
57
84
  #packages_container.scope
58
85
  .row
59
86
  .col-xs-1
60
- %a{:href => "#packages"}
61
- %img.scope_logo_big{:src => "assets/logo-packages.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Packages", :"data-content"=>"#{scope_help('packages')}"}/
87
+ %img.scope_logo_big{:src => "assets/logo-packages.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Packages", :"data-content"=>"#{scope_help('packages')}"}/
62
88
  %span.toggle{:title => "Collapse/Expand"}
63
89
  .col-xs-11
64
90
  %h2
@@ -96,8 +122,7 @@
96
122
  #patterns_container.scope
97
123
  .row
98
124
  .col-xs-1
99
- %a{:href => "#patterns"}
100
- %img.scope_logo_big{:src => "assets/logo-patterns.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Patterns", :"data-content"=>"#{scope_help('patterns')}"}/
125
+ %img.scope_logo_big{:src => "assets/logo-patterns.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Patterns", :"data-content"=>"#{scope_help('patterns')}"}/
101
126
  %span.toggle{:title => "Collapse/Expand"}
102
127
  .col-xs-11
103
128
  %h2
@@ -129,8 +154,7 @@
129
154
  #users_container.scope
130
155
  .row
131
156
  .col-xs-1
132
- %a{:href => "#users"}
133
- %img.scope_logo_big{:src => "assets/logo-users.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Users", :"data-content"=>"#{scope_help('users')}"}/
157
+ %img.scope_logo_big{:src => "assets/logo-users.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Users", :"data-content"=>"#{scope_help('users')}"}/
134
158
  %span.toggle{:title => "Collapse/Expand"}
135
159
  .col-xs-11
136
160
  %h2
@@ -168,8 +192,7 @@
168
192
  #unmanaged_files_container.scope
169
193
  .row
170
194
  .col-xs-1
171
- %a{:href => "#unmanaged_files"}
172
- %img.scope_logo_big{:src => "assets/logo-unmanaged-files.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Unmanaged Files", :"data-content"=>"#{scope_help('unmanaged_files')}"}/
195
+ %img.scope_logo_big{:src => "assets/logo-unmanaged-files.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Unmanaged Files", :"data-content"=>"#{scope_help('unmanaged_files')}"}/
173
196
  %span.toggle{:title => "Collapse/Expand"}
174
197
  .col-xs-11
175
198
  %h2
@@ -199,8 +222,7 @@
199
222
  #groups_container.scope
200
223
  .row
201
224
  .col-xs-1
202
- %a{:href => "#groups"}
203
- %img.scope_logo_big{:src => "assets/logo-groups.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Groups", :"data-content"=>"#{scope_help('groups')}"}/
225
+ %img.scope_logo_big{:src => "assets/logo-groups.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Groups", :"data-content"=>"#{scope_help('groups')}"}/
204
226
  %span.toggle{:title => "Collapse/Expand"}
205
227
  .col-xs-11
206
228
  %h2
@@ -234,8 +256,7 @@
234
256
  #repositories_container.scope
235
257
  .row
236
258
  .col-xs-1
237
- %a{:href => "#repositories"}
238
- %img.scope_logo_big{:src => "assets/logo-repositories.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Repositories", :"data-content"=>"#{scope_help('repositories')}"}/
259
+ %img.scope_logo_big{:src => "assets/logo-repositories.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Repositories", :"data-content"=>"#{scope_help('repositories')}"}/
239
260
  %span.toggle{:title => "Collapse/Expand"}
240
261
  .col-xs-11
241
262
  %h2
@@ -278,8 +299,7 @@
278
299
  #changed_managed_files_container.scope
279
300
  .row
280
301
  .col-xs-1
281
- %a{:href => "#changed_managed_files"}
282
- %img.scope_logo_big{:src => "assets/logo-changed-managed-files.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Changed Managed Files", :"data-content"=>"#{scope_help('changed_managed_files')}"}/
302
+ %img.scope_logo_big{:src => "assets/logo-changed-managed-files.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Changed Managed Files", :"data-content"=>"#{scope_help('changed_managed_files')}"}/
283
303
  %span.toggle{:title => "Collapse/Expand"}
284
304
  .col-xs-11
285
305
  %h2
@@ -324,8 +344,7 @@
324
344
  #config_files_container.scope
325
345
  .row
326
346
  .col-xs-1
327
- %a{:href => "#config_files"}
328
- %img.scope_logo_big{:src => "assets/logo-config-files.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Config Files", :"data-content"=>"#{scope_help('config_files')}"}/
347
+ %img.scope_logo_big{:src => "assets/logo-config-files.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Config Files", :"data-content"=>"#{scope_help('config_files')}"}/
329
348
  %span.toggle{:title => "Collapse/Expand"}
330
349
  .col-xs-11
331
350
  %h2
@@ -393,8 +412,7 @@
393
412
  #services_container.scope
394
413
  .row
395
414
  .col-xs-1
396
- %a{:href => "#services"}
397
- %img.scope_logo_big{:src => "assets/logo-services.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Services", :"data-content"=>"#{scope_help('services')}"}/
415
+ %img.scope_logo_big{:src => "assets/logo-services.png", :class=>"over", :"data-toggle"=>"popover", :title=>"Services", :"data-content"=>"#{scope_help('services')}"}/
398
416
  %span.toggle{:title => "Collapse/Expand"}
399
417
  .col-xs-11
400
418
  %h2
@@ -433,41 +451,46 @@
433
451
  .col-xs-10
434
452
  %h1
435
453
  System '#{description.name}'
436
- %span.scope-navigation
437
- Scopes:
438
- %a{:href => "#os", :title => "Operating System"}
439
- %img{:src => "assets/logo-os-small.png"}/
440
- %a{:href => "#packages", :title => "Packages"}
441
- %img{:src => "assets/logo-packages-small.png"}/
442
- %a{:href => "#patterns", :title => "Patterns"}
443
- %img{:src => "assets/logo-patterns-small.png"}/
444
- %a{:href => "#users", :title => "Users"}
445
- %img{:src => "assets/logo-users-small.png"}/
446
- %a{:href => "#groups", :title => "Groups"}
447
- %img{:src => "assets/logo-groups-small.png"}/
448
- %a{:href => "#repositories", :title => "Repositories"}
449
- %img{:src => "assets/logo-repositories-small.png"}/
450
- %a{:href => "#unmanaged_files", :title => "Unmanaged Files"}
451
- %img{:src => "assets/logo-unmanaged-files-small.png"}/
452
- %a{:href => "#changed_managed_files", :title => "Changed Managed Files"}
453
- %img{:src => "assets/logo-changed-managed-files-small.png"}/
454
- %a{:href => "#config_files", :title => "Config Files"}
455
- %img{:src => "assets/logo-config-files-small.png"}/
456
- %a{:href => "#services", :title => "Services"}
457
- %img{:src => "assets/logo-services-small.png"}/
454
+
455
+ %a.inspection_details{:href => "#", "data-toggle" => "popover"} (inspection details)
458
456
  .row
459
457
  .col-xs-1
460
- %a#expand-all{:style => "display: none"}
458
+ %a#expand-all{:href => "#", :style => "display: none"}
461
459
  Expand all
462
- %a#collapse-all
460
+ %a#collapse-all{:href => "#"}
463
461
  Collapse all
464
462
  .col-xs-10
465
463
  %small.pull-right.pad-top
466
464
  created by
467
465
  %a{:href => "http://machinery-project.org", :target => "_blank"}
468
466
  Machinery
469
- .filter-input
467
+ .filter-input.col-md-3
470
468
  %input#filter{:placeholder => "Type To Filter"}/
471
- %img{:src => "assets/reset.png", :titel => "Reset Filter", :onclick=>"clearFilter()" }
469
+ %a{:href => "#"}
470
+ %img{:src => "assets/reset.png", :titel => "Reset Filter", :onclick=>"clearFilter()" }
471
+
472
+ %span.scope-navigation
473
+ Scopes:
474
+ %a{:href => "#os", :title => "Operating System"}
475
+ %img{:src => "assets/logo-os-small.png"}/
476
+ %a{:href => "#packages", :title => "Packages"}
477
+ %img{:src => "assets/logo-packages-small.png"}/
478
+ %a{:href => "#patterns", :title => "Patterns"}
479
+ %img{:src => "assets/logo-patterns-small.png"}/
480
+ %a{:href => "#users", :title => "Users"}
481
+ %img{:src => "assets/logo-users-small.png"}/
482
+ %a{:href => "#groups", :title => "Groups"}
483
+ %img{:src => "assets/logo-groups-small.png"}/
484
+ %a{:href => "#repositories", :title => "Repositories"}
485
+ %img{:src => "assets/logo-repositories-small.png"}/
486
+ %a{:href => "#unmanaged_files", :title => "Unmanaged Files"}
487
+ %img{:src => "assets/logo-unmanaged-files-small.png"}/
488
+ %a{:href => "#changed_managed_files", :title => "Changed Managed Files"}
489
+ %img{:src => "assets/logo-changed-managed-files-small.png"}/
490
+ %a{:href => "#config_files", :title => "Config Files"}
491
+ %img{:src => "assets/logo-config-files-small.png"}/
492
+ %a{:href => "#services", :title => "Services"}
493
+ %img{:src => "assets/logo-services-small.png"}/
494
+
472
495
 
473
496
  #content_container
@@ -124,7 +124,7 @@ class AnalyzeConfigFileDiffsTask
124
124
  # available from the other repositories.
125
125
  # If they aren't an error message will then be generated for each of
126
126
  # the actually missing files instead.
127
- Machinery.logger.error(e.message)
127
+ Machinery.logger.error("Error: " + e.message)
128
128
  Machinery.logger.debug(e.backtrace.join("\n"))
129
129
  Machinery.logger.debug("Standard output:\n #{e.stdout}")
130
130
  Machinery.logger.debug("Error output:\n #{e.stderr}")