foodcritic 4.0.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +47 -0
- data/README.md +7 -7
- data/bin/foodcritic +1 -1
- data/chef_dsl_metadata/chef_11.0.0.json +4 -0
- data/chef_dsl_metadata/chef_11.10.0.json +176 -1
- data/chef_dsl_metadata/chef_11.10.2.json +176 -1
- data/chef_dsl_metadata/chef_11.10.4.json +176 -1
- data/chef_dsl_metadata/chef_11.12.0.json +10861 -0
- data/chef_dsl_metadata/chef_11.12.2.json +10861 -0
- data/chef_dsl_metadata/chef_11.12.4.json +10800 -0
- data/chef_dsl_metadata/chef_11.12.8.json +10800 -0
- data/chef_dsl_metadata/chef_11.14.2.json +11172 -0
- data/chef_dsl_metadata/chef_11.14.6.json +11178 -0
- data/chef_dsl_metadata/chef_11.16.0.json +11236 -0
- data/chef_dsl_metadata/chef_11.16.2.json +11236 -0
- data/chef_dsl_metadata/chef_11.16.4.json +11236 -0
- data/chef_dsl_metadata/chef_11.18.0.json +11291 -0
- data/chef_dsl_metadata/chef_11.18.12.json +11291 -0
- data/chef_dsl_metadata/chef_11.18.6.json +11291 -0
- data/chef_dsl_metadata/chef_11.2.0.json +4 -0
- data/chef_dsl_metadata/chef_11.4.0.json +4 -0
- data/chef_dsl_metadata/chef_11.4.2.json +4 -0
- data/chef_dsl_metadata/chef_11.4.4.json +4 -0
- data/chef_dsl_metadata/chef_11.6.0.json +4 -0
- data/chef_dsl_metadata/chef_11.6.2.json +4 -0
- data/chef_dsl_metadata/chef_11.8.0.json +4 -0
- data/chef_dsl_metadata/chef_11.8.2.json +4 -0
- data/chef_dsl_metadata/chef_12.0.0.json +11855 -0
- data/chef_dsl_metadata/chef_12.0.1.json +11865 -0
- data/chef_dsl_metadata/chef_12.0.3.json +12054 -0
- data/chef_dsl_metadata/chef_12.1.0.json +12468 -0
- data/chef_dsl_metadata/chef_12.1.1.json +12468 -0
- data/chef_dsl_metadata/chef_12.1.2.json +12468 -0
- data/chef_dsl_metadata/chef_12.2.1.json +12645 -0
- data/chef_dsl_metadata/chef_12.3.0.json +12839 -0
- data/chef_dsl_metadata/chef_12.4.0.json +14625 -0
- data/chef_dsl_metadata/chef_12.4.1.json +14625 -0
- data/features/002_check_string_interpolation.feature +5 -0
- data/features/041_check_raw_download.feature +17 -9
- data/features/044_check_for_bare_attribute_keys.feature +10 -0
- data/features/048_check_for_shellout.feature +6 -1
- data/features/052_check_for_metadata_using_suggests_keyword.feature +15 -0
- data/features/053_check_for_metadata_using_recommends_keyword.feature +15 -0
- data/features/step_definitions/cookbook_steps.rb +66 -4
- data/features/support/command_helpers.rb +8 -2
- data/features/support/env.rb +7 -3
- data/lib/foodcritic/api.rb +5 -4
- data/lib/foodcritic/chef.rb +3 -7
- data/lib/foodcritic/command_line.rb +15 -0
- data/lib/foodcritic/domain.rb +14 -0
- data/lib/foodcritic/linter.rb +44 -4
- data/lib/foodcritic/rake_task.rb +15 -11
- data/lib/foodcritic/rules.rb +38 -6
- data/lib/foodcritic/version.rb +1 -1
- data/man/foodcritic.1 +8 -1
- data/man/foodcritic.1.ronn +7 -0
- data/misc/lucene.treetop +150 -0
- data/spec/foodcritic/command_line_spec.rb +10 -0
- data/spec/foodcritic/domain_spec.rb +19 -0
- data/spec/foodcritic/linter_spec.rb +13 -1
- data/spec/regression/cookbooks.txt +0 -60
- data/spec/regression/expected-output.txt +5 -445
- data/spec/regression_helpers.rb +5 -5
- data/spec/spec_helper.rb +7 -3
- metadata +38 -7
data/lib/foodcritic/rake_task.rb
CHANGED
@@ -4,8 +4,7 @@ require 'rake/tasklib'
|
|
4
4
|
module FoodCritic
|
5
5
|
module Rake
|
6
6
|
class LintTask < ::Rake::TaskLib
|
7
|
-
attr_accessor :name, :files
|
8
|
-
attr_writer :options
|
7
|
+
attr_accessor :name, :files, :options
|
9
8
|
|
10
9
|
def initialize(name = :foodcritic)
|
11
10
|
@name = name
|
@@ -15,24 +14,29 @@ module FoodCritic
|
|
15
14
|
define
|
16
15
|
end
|
17
16
|
|
18
|
-
def options
|
19
|
-
{
|
20
|
-
fail_tags: ['correctness'], # differs to default cmd-line behaviour
|
21
|
-
cookbook_paths: @files,
|
22
|
-
exclude_paths: ['test/**/*', 'spec/**/*', 'features/**/*'],
|
23
|
-
context: false,
|
24
|
-
}.merge(@options)
|
25
|
-
end
|
26
17
|
|
27
18
|
def define
|
28
19
|
desc 'Lint Chef cookbooks' unless ::Rake.application.last_comment
|
29
20
|
task(name) do
|
30
|
-
|
21
|
+
puts "Starting Foodcritic linting..."
|
22
|
+
result = FoodCritic::Linter.new.check(options.merge(default_options))
|
31
23
|
printer = options[:context] ? ContextOutput.new : SummaryOutput.new
|
32
24
|
printer.output(result) if result.warnings.any?
|
33
25
|
abort if result.failed?
|
26
|
+
puts "Completed!"
|
34
27
|
end
|
35
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def default_options
|
32
|
+
{
|
33
|
+
fail_tags: ['correctness'], # differs to default cmd-line behaviour
|
34
|
+
cookbook_paths: files,
|
35
|
+
exclude_paths: ['test/**/*', 'spec/**/*', 'features/**/*'],
|
36
|
+
context: false,
|
37
|
+
chef_version: FoodCritic::Linter::DEFAULT_CHEF_VERSION
|
38
|
+
}
|
39
|
+
end
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
data/lib/foodcritic/rules.rb
CHANGED
@@ -22,7 +22,7 @@ rule 'FC002', 'Avoid string interpolation where not required' do
|
|
22
22
|
recipe do |ast|
|
23
23
|
ast.xpath(%q{//*[self::string_literal | self::assoc_new]/string_add[
|
24
24
|
count(descendant::string_embexpr) = 1 and
|
25
|
-
count(
|
25
|
+
count(string_add) = 0]})
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -618,7 +618,7 @@ rule 'FC041', 'Execute resource used to run curl or wget commands' do
|
|
618
618
|
recipe do |ast|
|
619
619
|
find_resources(ast, type: 'execute').select do |cmd|
|
620
620
|
cmd_str = (resource_attribute(cmd, 'command') || resource_name(cmd)).to_s
|
621
|
-
(cmd_str.
|
621
|
+
(cmd_str.match(/^curl.*(-o|>|--output).*$/) || cmd_str.include?('wget '))
|
622
622
|
end
|
623
623
|
end
|
624
624
|
end
|
@@ -646,10 +646,17 @@ rule 'FC044', 'Avoid bare attribute keys' do
|
|
646
646
|
declared = ast.xpath('//descendant::var_field/ident/@value').map do |v|
|
647
647
|
v.to_s
|
648
648
|
end
|
649
|
+
|
649
650
|
ast.xpath('//assign/*[self::vcall or self::var_ref]
|
650
651
|
[count(child::kw) = 0]/ident').select do |v|
|
652
|
+
|
653
|
+
local_declared = v.xpath("ancestor::*[self::brace_block or self::do_block]
|
654
|
+
/block_var/descendant::ident/@value").map do |v|
|
655
|
+
v.to_s
|
656
|
+
end
|
657
|
+
|
651
658
|
(v['value'] != 'secure_password') &&
|
652
|
-
!declared.include?(v['value']) &&
|
659
|
+
!(declared + local_declared).uniq.include?(v['value']) &&
|
653
660
|
!v.xpath("ancestor::*[self::brace_block or self::do_block]/block_var/
|
654
661
|
descendant::ident/@value='#{v['value']}'")
|
655
662
|
end
|
@@ -698,9 +705,18 @@ end
|
|
698
705
|
rule 'FC048', 'Prefer Mixlib::ShellOut' do
|
699
706
|
tags %w(style processes)
|
700
707
|
recipe do |ast|
|
701
|
-
|
702
|
-
|
703
|
-
|
708
|
+
|
709
|
+
xstring_literal=ast.xpath('//xstring_literal')
|
710
|
+
next xstring_literal if xstring_literal.any?
|
711
|
+
|
712
|
+
ast.xpath('//*[self::command or self::fcall]/ident[@value="system"]').select do |x|
|
713
|
+
resource_name = x.xpath('ancestor::do_block/preceding-sibling::command/ident/@value')
|
714
|
+
if resource_name.any? && resource_attribute?(resource_name.to_s, 'system')
|
715
|
+
next false
|
716
|
+
end
|
717
|
+
next x.xpath('count(following-sibling::args_add_block/descendant::kw[@value="true" or @value="false"]) = 0')
|
718
|
+
end
|
719
|
+
|
704
720
|
end
|
705
721
|
end
|
706
722
|
|
@@ -739,3 +755,19 @@ rule 'FC051', 'Template partials loop indefinitely' do
|
|
739
755
|
end.map { |t| file_match(t) }
|
740
756
|
end
|
741
757
|
end
|
758
|
+
|
759
|
+
rule 'FC052', 'Metadata uses the unimplemented "suggests" keyword' do
|
760
|
+
tags %w(style metadata)
|
761
|
+
metadata do |ast, filename|
|
762
|
+
ast.xpath(%Q(//command[ident/@value='suggests']))
|
763
|
+
end
|
764
|
+
end
|
765
|
+
|
766
|
+
rule 'FC053', 'Metadata uses the unimplemented "recommends" keyword' do
|
767
|
+
tags %w(style metadata)
|
768
|
+
metadata do |ast, filename|
|
769
|
+
ast.xpath(%Q(//command[ident/@value='recommends']))
|
770
|
+
end
|
771
|
+
end
|
772
|
+
|
773
|
+
# NOTE: FC054 was yanked and should be considered reserved, do not reuse it
|
data/lib/foodcritic/version.rb
CHANGED
data/man/foodcritic.1
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "FOODCRITIC" "1" "
|
4
|
+
.TH "FOODCRITIC" "1" "September 2015" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBfoodcritic\fR \- lint tool for chef cookbooks
|
@@ -9,6 +9,9 @@
|
|
9
9
|
.SH "SYNOPSIS"
|
10
10
|
\fBfoodcritic\fR [\fIoptions\fR\.\.\.] \fIcookbook\fR\.\.\.
|
11
11
|
.
|
12
|
+
.P
|
13
|
+
\fBfoodcritic\fR [\fIoptions\fR\.\.\.] \-\-list
|
14
|
+
.
|
12
15
|
.SH "DESCRIPTION"
|
13
16
|
\fBfoodcritic\fR makes it easier to flag problems in your Chef cookbooks that will cause Chef to blow up when you attempt to converge\. This is about faster feedback\.
|
14
17
|
.
|
@@ -22,6 +25,10 @@ Each \fBcookbook\fR path specified will be examined for common problems and poor
|
|
22
25
|
Only check against rules with the specified tags\. Prefix tags with a tilde \fB~\fR to exclude rules\.
|
23
26
|
.
|
24
27
|
.TP
|
28
|
+
\fB\-l\fR, \fB\-\-list\fR
|
29
|
+
Do not perform a lint check; instead simply list the rules that would be enabled based on the defaults and the rule selection options (\-t, \-I)
|
30
|
+
.
|
31
|
+
.TP
|
25
32
|
\fB\-f\fR, \fB\-\-epic\-fail\fR \fITAGS\fR
|
26
33
|
Exit non\-zero if any of the specified tags are matched\. Use the pseudo\-tag \fBany\fR to fail if any tag is matched\.
|
27
34
|
.
|
data/man/foodcritic.1.ronn
CHANGED
@@ -5,6 +5,8 @@ foodcritic(1) -- lint tool for chef cookbooks
|
|
5
5
|
|
6
6
|
`foodcritic` [<options>...] <cookbook>...
|
7
7
|
|
8
|
+
`foodcritic` [<options>...] --list
|
9
|
+
|
8
10
|
|
9
11
|
## DESCRIPTION
|
10
12
|
|
@@ -22,6 +24,11 @@ poor style.
|
|
22
24
|
Only check against rules with the specified tags. Prefix
|
23
25
|
tags with a tilde `~` to exclude rules.
|
24
26
|
|
27
|
+
* `-l`, `--list`:
|
28
|
+
Do not perform a lint check; instead simply list the
|
29
|
+
rules that would be enabled based on the defaults and
|
30
|
+
the rule selection options (-t, -I)
|
31
|
+
|
25
32
|
* `-f`, `--epic-fail` <TAGS>:
|
26
33
|
Exit non-zero if any of the specified tags are matched.
|
27
34
|
Use the pseudo-tag `any` to fail if any tag is matched.
|
data/misc/lucene.treetop
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
grammar Lucene
|
20
|
+
|
21
|
+
rule body
|
22
|
+
(expression / space)* <Body>
|
23
|
+
end
|
24
|
+
|
25
|
+
rule expression
|
26
|
+
operation / group / field / field_range / term / string
|
27
|
+
end
|
28
|
+
|
29
|
+
rule term
|
30
|
+
keyword valid_letter+ <Term> / !keyword !"?" valid_letter <Term>
|
31
|
+
end
|
32
|
+
|
33
|
+
rule field
|
34
|
+
field_name ":" (term/string/group) <Field>
|
35
|
+
end
|
36
|
+
|
37
|
+
rule field_range
|
38
|
+
field_name ":" "[" range_value " TO " range_value "]" <InclFieldRange>
|
39
|
+
/
|
40
|
+
field_name ":" "{" range_value " TO " range_value "}" <ExclFieldRange>
|
41
|
+
end
|
42
|
+
|
43
|
+
rule field_name
|
44
|
+
!keyword valid_letter+ <FieldName>
|
45
|
+
end
|
46
|
+
|
47
|
+
rule range_value
|
48
|
+
valid_letter+ <RangeValue> / "*" <RangeValue>
|
49
|
+
end
|
50
|
+
|
51
|
+
rule group
|
52
|
+
space? '(' body ')' space? <Group>
|
53
|
+
end
|
54
|
+
|
55
|
+
rule operation
|
56
|
+
binary_op / unary_op / fuzzy_op / boost_op
|
57
|
+
end
|
58
|
+
|
59
|
+
rule unary_op
|
60
|
+
not_op / required_op / prohibited_op
|
61
|
+
end
|
62
|
+
|
63
|
+
rule binary_op
|
64
|
+
(group / field / field_range / term) space? boolean_operator space+ body <BinaryOp>
|
65
|
+
end
|
66
|
+
|
67
|
+
rule boolean_operator
|
68
|
+
and_operator / or_operator
|
69
|
+
end
|
70
|
+
|
71
|
+
rule and_operator
|
72
|
+
'AND' <AndOperator> / '&&' <AndOperator>
|
73
|
+
end
|
74
|
+
|
75
|
+
rule or_operator
|
76
|
+
'OR' <OrOperator> / '||' <OrOperator>
|
77
|
+
end
|
78
|
+
|
79
|
+
rule not_op
|
80
|
+
not_operator space (group / field / field_range / term / string) <UnaryOp>
|
81
|
+
/
|
82
|
+
bang_operator space? (group / field / field_range / term / string) <UnaryOp>
|
83
|
+
end
|
84
|
+
|
85
|
+
rule not_operator
|
86
|
+
'NOT' <NotOperator>
|
87
|
+
end
|
88
|
+
|
89
|
+
rule bang_operator
|
90
|
+
'!' <NotOperator>
|
91
|
+
end
|
92
|
+
|
93
|
+
rule required_op
|
94
|
+
!valid_letter required_operator (term/string) <UnaryOp>
|
95
|
+
/
|
96
|
+
required_operator (term/string) <UnaryOp>
|
97
|
+
end
|
98
|
+
|
99
|
+
rule required_operator
|
100
|
+
'+' <RequiredOperator>
|
101
|
+
end
|
102
|
+
|
103
|
+
rule prohibited_op
|
104
|
+
!valid_letter prohibited_operator (field/field_range/term/string) <UnaryOp>
|
105
|
+
end
|
106
|
+
|
107
|
+
rule prohibited_operator
|
108
|
+
'-' <ProhibitedOperator>
|
109
|
+
end
|
110
|
+
|
111
|
+
rule boost_op
|
112
|
+
(term/string) '^' fuzzy_param <BoostOp>
|
113
|
+
end
|
114
|
+
|
115
|
+
rule fuzzy_op
|
116
|
+
(term/string) '~' fuzzy_param? (space / !valid_letter) <FuzzyOp>
|
117
|
+
end
|
118
|
+
|
119
|
+
rule fuzzy_param
|
120
|
+
[0-9] '.'? [0-9] <FuzzyParam> / [0-9]+ <FuzzyParam>
|
121
|
+
end
|
122
|
+
|
123
|
+
rule string
|
124
|
+
'"' term (space term)* '"' <Phrase>
|
125
|
+
end
|
126
|
+
|
127
|
+
rule keyword
|
128
|
+
'AND' / 'OR' / 'NOT'
|
129
|
+
end
|
130
|
+
|
131
|
+
rule valid_letter
|
132
|
+
start_letter+ ([a-zA-Z0-9@*?_.-] / '\\' special_char)*
|
133
|
+
end
|
134
|
+
|
135
|
+
rule start_letter
|
136
|
+
[a-zA-Z0-9@._*] / '\\' special_char
|
137
|
+
end
|
138
|
+
|
139
|
+
rule end_letter
|
140
|
+
[a-zA-Z0-9*?_.] / '\\' special_char
|
141
|
+
end
|
142
|
+
|
143
|
+
rule special_char
|
144
|
+
[-+&|!(){}\[\]^"~*?:\\]
|
145
|
+
end
|
146
|
+
|
147
|
+
rule space
|
148
|
+
[\s]+
|
149
|
+
end
|
150
|
+
end
|
@@ -61,4 +61,14 @@ describe FoodCritic::CommandLine do
|
|
61
61
|
refute FoodCritic::CommandLine.new(["lib", "lib2"]).valid_paths?
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
describe "#list_rules?" do
|
66
|
+
it "returns false if ---list is not specified" do
|
67
|
+
refute FoodCritic::CommandLine.new([]).list_rules?
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns true if --list is specified" do
|
71
|
+
assert FoodCritic::CommandLine.new(['--list']).list_rules?
|
72
|
+
end
|
73
|
+
end
|
64
74
|
end
|
@@ -23,6 +23,25 @@ describe FoodCritic::Review do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe FoodCritic::RuleList do
|
27
|
+
it "is instantiable with no warnings" do
|
28
|
+
FoodCritic::RuleList.new([])
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:rule) { FoodCritic::Rule.new('FCTEST001', 'Test rule') }
|
32
|
+
|
33
|
+
describe "#rules" do
|
34
|
+
|
35
|
+
it 'is empty when instantiated with an empty rule list' do
|
36
|
+
assert FoodCritic::RuleList.new([]).rules.empty?
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'contains the given rule' do
|
40
|
+
assert FoodCritic::RuleList.new([rule]).rules.include?(rule)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
26
45
|
describe FoodCritic::Rule do
|
27
46
|
let(:rule) { FoodCritic::Rule.new('FCTEST001', 'Test rule') }
|
28
47
|
|
@@ -11,7 +11,7 @@ describe FoodCritic::Linter do
|
|
11
11
|
|
12
12
|
describe "chef version" do
|
13
13
|
it "should be the latest stable version of Chef" do
|
14
|
-
FoodCritic::Linter::DEFAULT_CHEF_VERSION.must_equal "
|
14
|
+
FoodCritic::Linter::DEFAULT_CHEF_VERSION.must_equal "12.4.1"
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -42,6 +42,18 @@ describe FoodCritic::Linter do
|
|
42
42
|
|
43
43
|
end
|
44
44
|
|
45
|
+
describe "#list_rules" do
|
46
|
+
|
47
|
+
it "does not require cookbook_path, role_path or environment_path to be specified" do
|
48
|
+
linter.list(:list => true)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns a rule listing" do
|
52
|
+
linter.list(:list => true).must_respond_to(:rules)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
45
57
|
describe "#load_files!" do
|
46
58
|
let(:default_rules_file) do
|
47
59
|
File.expand_path(File.join(File.dirname(__FILE__), '../../lib/foodcritic/rules.rb'))
|
@@ -1,16 +1,6 @@
|
|
1
|
-
7-zip:5dad0850d7c8ad5e63a0ae655f1ee2b17adfcd12
|
2
1
|
activemq:5dce4ca5283d2a6252130a2d800b9387a57d6e01
|
3
|
-
ant:2bd97f4bb7c8bcd37ea3bb3615a5f306e65d80a0
|
4
|
-
apache2:29056c1a0a04cb718651ff0f522204ec651f94f0
|
5
2
|
apparmor:fd09a6fda4f6fc722d4c8d5b8a5c815feda280c0
|
6
|
-
application:da3eb5ac8fc20e9db7213c3b22f0a7856a73778c
|
7
|
-
application_java:8aff84b60fb27c8fc228d86c6eca5949ba5a93a8
|
8
|
-
application_nginx:a67bc25b95d33565d2c368b41c46f7366fb2a1e4
|
9
|
-
application_php:08de9c64cd01b67e411f14f407254a36fed273c6
|
10
|
-
application_python:b738476bd7d37a0a1e10094da32c6a5f4759cdb6
|
11
|
-
application_ruby:812efe31df6c3c1607ed73f45e0adca7723b6c64
|
12
3
|
apt:ea834265247cc8b507ac37ab3a34a9b44ed27a11
|
13
|
-
ark:aa82cb6d9d83f12c3f4fa5969f56ce809529bf72
|
14
4
|
aws:a9530561bf559c6db2cb40a93b125607c5ef3efa
|
15
5
|
bluepill:1d6422afcbc910e587c9639e4e0a28c72727c90b
|
16
6
|
boost:14f30e36040a4fcd038f030d9ee1c7fb29b08b68
|
@@ -19,117 +9,67 @@ chef:dac09eea9fa0d611b7b010160d6b8fa7f4d6ae1e
|
|
19
9
|
chef-client:7fc4472c9913c9cb1762f979e05047a674318ef5
|
20
10
|
chef-server:d98b96d69962c7988b9640fe5bee09f771ba8977
|
21
11
|
chef_handler:d147ca9644f146b97a2d53324ca344321799b45f
|
22
|
-
cloudkick:3f48cee9dc854914d002ea7e21380f60528583bd
|
23
|
-
couchdb:cad1afe6cb51e31f6ad8f289a761d638fbfee8c2
|
24
12
|
cron:dce04363b6a02d36f8da88f202cedfae2daa6a2c
|
25
|
-
daemontools:7ff23d4884138e957bef04a1e63e8c240020fcc1
|
26
13
|
database:1ab3822ca50824fbdc14f7c89341faa7ae1e90cb
|
27
|
-
djbdns:d3b2dd6e0fe1faf6193d44b794685b59acaf2da2
|
28
14
|
dmg:11caf56f57a1168a891f01f0614a01b879aff624
|
29
15
|
drbd:e65b60894b48855163c3a13ead40fb897d66c4b8
|
30
16
|
dynect:5ef2328cc612cc4c36882742367af0e2bdbd0367
|
31
|
-
emacs:96d1026a6a6cdab979c7ef54fc27fe49b1f5d8ca
|
32
17
|
erlang:58290537b49b495bc18e7a06d9d7560b4d239582
|
33
18
|
fail2ban:7b1939c9bc345f3a449545cb8e7ddb8190a6fe5f
|
34
19
|
firewall:81a8db5a868f9f486ba694a7fe8eb969a2ae99d1
|
35
20
|
freebsd:f7a4457507caab966448f4e37709370df05d6167
|
36
21
|
gecode:87dc9114bf79e67b8eea9f2a0c42929040d08e4b
|
37
22
|
gems:6f8c222cf8326b5266ca3c68344accbbf8d5c468
|
38
|
-
getting-started:ec6b8de327daa43403560a1204a2ac7645a3b959
|
39
|
-
git:f971753d7bac72c4decf2dddda8f9be5289ae324
|
40
|
-
glance:ce4ee4fbc75309e1f7eae8eda1841d8bd1a2d8ec
|
41
|
-
gnu_parallel:ad31c1d7411686b8b54ce726d9cf8d864a33fcaf
|
42
|
-
god:2e1691b7d9383a7f3fc6fe0ad285801a3397decb
|
43
23
|
gunicorn:89be74c6b47bdb980ee1d98f9aae6b747f1d11e8
|
44
|
-
hadoop:eab8f63f9a47714a6ca05821285db6043dc7be5e
|
45
|
-
haproxy:6b7a212d1c82ac420cba3335a31e32f346d149fa
|
46
24
|
heartbeat:da496afa31286512a9b977974bec5ff51d6de9d8
|
47
25
|
homebrew:f42d8d09d8ae3d45f5bdb680dd52da351cb80e2e
|
48
|
-
horizon:736422cecad62a939f1721df66b6388e9bc489de
|
49
26
|
iis:ab7e4823d375e8eb4f927dee5b7ab0591301cb0e
|
50
|
-
imagemagick:20aec29c45ee3c04616bb3fa3cd5ddf4baf48f00
|
51
27
|
iptables:da126cf900af3cc36bf212973bb8d0be69fa2b9f
|
52
|
-
java:81d7d7f8f831405af1f42c8bb4230e6456b493be
|
53
28
|
jetty:d165775c2c7ce3cc484cbe8c7aadf6649505d078
|
54
|
-
jira:328b662dbf07078fa5841035260ade016f3dd1f1
|
55
29
|
jpackage:23e6f4b717620455ee9d29cbf82d9a7ab7fa6e5b
|
56
30
|
keepalived:629c8e4c5251f6125be9f6eacecb1369fcb1cd4c
|
57
|
-
keystone:7d54242ac6edfffd1ed017914018a02d07ef5194
|
58
31
|
kickstart:6523fca008362ed72f8fbb25f0c7af70d563b96d
|
59
|
-
logrotate:e1b6ee784954218652f817211e22fea9baf042f6
|
60
32
|
logwatch:706174796a3bc1d85d57d3aee792e78cb13570ac
|
61
33
|
lvm:57bd5291fbaa41e7a13f25c4553cdacbfc3ad3dd
|
62
|
-
man:f52cfeaa6a8ca0979eee235e6d9c7243104af2f5
|
63
34
|
maradns:e975ded4303432629ad37234cb7a05c9d6edcf73
|
64
35
|
maven:e486321f1e89f7ad2b9700c08fcbc68c32daa599
|
65
36
|
memcached:db13b6c4088e93faf995441df4aa856adc84c565
|
66
|
-
mercurial:5b8f95e1a8b74bc92d6b2e119e2cf31bc76ad059
|
67
37
|
motd-tail:e01096b73c387a46302f63ae6f838fac94e0ca81
|
68
|
-
munin:ac753f2ff5be33473a36c9b22625d0d7a47f485a
|
69
38
|
mysql:1709b1ea22339a0c829cf5ced8c5a7ed4a186615
|
70
|
-
nagios:a21ac7b3ee2384b31ffdee7986ba2891235bd845
|
71
|
-
nginx:638280b3125e68d0903a60b167206f9be5bc2cca
|
72
|
-
nova:04417ae3bca444b6870f3551ad3528c3ba661d0c
|
73
39
|
nscd:28f37aaf70228c0f5b55c36b78bf3fbd56cb3112
|
74
|
-
ntp:288935754b2c25017e3e0890ffb1a35b2a9f4668
|
75
40
|
ohai:8ad8c92b14d5198ffa5ebd094acd83ba0c5c828c
|
76
41
|
openldap:2f21ae90544b4f938e554f914955e3fac1a885de
|
77
42
|
openssh:a61b47fb0efbdab731e7929506bb1dc6902f0091
|
78
43
|
openssl:7f5b84a942f015191ade6badf65a49f1fe7b05b1
|
79
|
-
openvpn:1d9838ca3cec981e1ab78d1160821d77f26978b3
|
80
|
-
ossec:44dddb496e595d200c802b515adfd4ac2e497647
|
81
|
-
pacman:77efa35dca9e53bc6c67773b217df645429e53f4
|
82
44
|
partial_search:9a96d68a4af2eff1cf5d3e8ed7ff2ede723a09c8
|
83
45
|
passenger_apache2:793f7bbaac7a883d5f9ef1414260718e33958ae8
|
84
|
-
pdns:bf14786602b43a15025275c1acf73a52eac9d577
|
85
46
|
perl:bd6f978aea0ad7e65a8e6266951476b717a9a074
|
86
47
|
php:f3f5db8d823db821ac696f7b52b2a613c1e2f167
|
87
48
|
postfix:d7d149e7a7235b2733455e524d86e3a984b9b97c
|
88
|
-
postgresql:cdeb1ccca7cfd5564706315a8d95986658b5c300
|
89
49
|
powershell:4b175affe1a8a7d091a8ca905a580bf975af5edc
|
90
|
-
pxe_dust:8f2e8ebd9f41086fe1033a613197da357aa075b5
|
91
|
-
python:34cb929504f9972d9d0ce66cad70254d3ab36f21
|
92
|
-
rabbitmq:b297e3137c37d3ed9a4e4fc17f9fc6a56e9a98f4
|
93
|
-
radiant:5bc888a4dfa3cc5f397a196706434bae12ff61b3
|
94
|
-
reprepro:30bc7be95a03f16dc042de3b5605a0e8b5153a4e
|
95
50
|
resolver:105ad0a2fc9c065a7c4455cfc07ab7771b8e0da0
|
96
51
|
rsync:41756f404fc39f3ce407cce9fe03294dd907c0fe
|
97
52
|
rsyslog:8830d558d2ee3126fef56ea3a25a4f0253ce269f
|
98
|
-
runit:378c918b78a7e5f0819211fc8bce034ee071dcc9
|
99
|
-
samba:c68e51b0bfaf8770a3e89224858aa0a095dd725a
|
100
|
-
sbuild:ce41bcfdf06baf35c6e0c254c6f39a823d350b05
|
101
|
-
screen:ba61c6529958decb2ebcc133c198cf37b16b8aaa
|
102
|
-
selinux:7a1b10b4f3191272c07bc3a8efcd7f50dda52d18
|
103
|
-
snort:e829f5e2a8d7c5dd8799216371692b07fd6f636f
|
104
53
|
sql_server:d9702f8fc29f208c9e712627cda64ccae2d71321
|
105
54
|
sqlite:3efb50f4166f04f1afefa21f7f8fe7e9082b37ed
|
106
55
|
ssh_known_hosts:a89f0c32e8e2c408a2e153153cc703f1184c6b72
|
107
56
|
stompserver:bf81830bb7783f4198565201c825c23267e1d515
|
108
57
|
subversion:cad4c069deca1fbbfb6b8f4d21b6c341cc9c6b55
|
109
58
|
sudo:00d024f293afb9df4fea23ba127529d67c1daf14
|
110
|
-
supervisor:83d4e59560cf35050819b12a6625b4c43753fbd3
|
111
|
-
swift:73c8bf74330a07850645c9e2115596781681e6fc
|
112
59
|
tftp:f4016b14eae2c0fe7fb48020bf28039c2de043a4
|
113
|
-
thrift:f7e0f2ec87b1e7bf382870b785cf74973bdbc9f8
|
114
|
-
tmux:d023930b19325d3366a12174f9df227a95ca5fcd
|
115
60
|
tomcat:8934392833cef89b7b779b4cd36ad46d088b643b
|
116
|
-
trac:7c5d613102701a88c51af80b9f492a9adc5c8f93
|
117
61
|
transmission:c3d62aa4741a55b693630d9cc48b012ff22d2e7b
|
118
62
|
ubuntu:7d21b626873ee397755d59aa222cf7fa681f6e90
|
119
|
-
ucspi-tcp:6140c33bbffdce20c94409485de3f42de4861a09
|
120
63
|
ufw:6bc6de62a84f6fa6f172edf0a490f1a332e89e29
|
121
64
|
unicorn:bacbb2400dcb476dd53784aa965fa9329e8c3869
|
122
65
|
users:c51c96afca83b382678dc21b8deb25677e6a3d8a
|
123
|
-
varnish:359ce3329f576884815b4146dc889970c8908e40
|
124
66
|
vim:88e8d018267d2cd5cfa3260ce55a0025f52dae6f
|
125
67
|
webpi:6cb4fde9dedf2abc980fa49880753512baa26b23
|
126
68
|
whitelist-node-attrs:2d76a2d179096e3ab048547d0d7849238ac2a5d3
|
127
69
|
windows:1601558f5fce30bed47bfc6d458a80891e127c61
|
128
70
|
wix:422b8da1dcf706bb4742d83abc44a649522afe83
|
129
|
-
wordpress:e159cf1147107c7dffdccf676b8dda4faa507259
|
130
71
|
xfs:7f1033820459324a863b2955e774cfa366fbc70f
|
131
72
|
xml:0b538834aa26c4df5918aa193029d285d7b1d4de
|
132
73
|
yum:b1191511b011790b2fc5c35cfbc78d0cc7bbc5b8
|
133
|
-
zenoss:d2bbe7fc3d4fdade89b324ab856b156c0c3cf8cc
|
134
74
|
zlib:45342f78d2866c3b2f443e693df562317e37963d
|
135
75
|
zsh:3bff82836677564478ffc90dfb487ffc986702f3
|