knife-essentials 0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -94,21 +94,27 @@ Works just like 'ls', except it lists files on the server.
94
94
  Works just like +knife node show+, +knife role show+, etc. except there is One Verb To Rule
95
95
  Them All.
96
96
 
97
- == NOTE
98
-
99
- Since these patterns are also interpreted by the shell in Unix,
100
- you will need to backslash them if you want these knife commands to actually
101
- look at the server. For example, if you want to list all data bags starting
102
- with "a" on the server, you can do
103
-
104
- knife list data_bags/a\*
105
-
106
- If you do this instead, the shell will expand the pattern before passing it to knife:
107
-
108
- knife list data_bags/a*
109
-
110
- Expands to the list of data bags on your local filesystem:
111
-
112
- knife list data_bags/aardvarks data_bags/anagrams
113
-
114
- But this means that if the server has a data bag named +arp_tables+, you won't see it.
97
+ == NOTE ABOUT WILDCARDS
98
+
99
+ knife-essentials supports wildcards internally, and will use them to sift through objects
100
+ on the server. This can be very useful. However, since it uses the same wildcard
101
+ characters as the Unix command line (+*+, +?+, etc.), you need to backslash them so that
102
+ the +*+ actually reaches the server. If you don't, the shell will expand the * into
103
+ actual filenames and knife will never know you typed +*+ in the first place. For example,
104
+ if the Chef server has data bags +aardvarks+, +anagrams+ and +arp_tables+, but your local
105
+ filesystem only has +aardvarks+ and +anagrams+, backslashing vs. not backslashing will
106
+ yield slightly different results:
107
+
108
+ # This actually asks the server for everything starting with a
109
+ $ knife list data_bags/a\*
110
+ aardvarks/ anagrams/ arp_tables/
111
+ # But this ...
112
+ $ knife list data_bags/a*
113
+ aardvarks/ anagrams/
114
+ # Is actually expanded by the command line to this:
115
+ $ knife list data_bags/aardvarks data_bags/aardvarks
116
+ aardvarks/ anagrams/
117
+
118
+ You can avoid this problem permanently in zsh with this alias:
119
+
120
+ alias knife="noglob knife"
data/lib/chef_fs/diff.rb CHANGED
@@ -121,8 +121,8 @@ module ChefFS
121
121
  # infinitely.
122
122
  #
123
123
  def self.diffable_leaves(a, b, recurse_depth)
124
- # If we have children, recurse into them and diff the children instead of returning ourselves.
125
- if recurse_depth != 0 && a.dir? && b.dir? && a.children.length > 0 && b.children.length > 0
124
+ # If both are directories, recurse into them and diff the children instead of returning ourselves.
125
+ if recurse_depth != 0 && a.dir? && b.dir?
126
126
  a_children_names = Set.new
127
127
  a.children.each do |a_child|
128
128
  a_children_names << a_child.name
@@ -50,6 +50,15 @@ module ChefFS
50
50
  @children
51
51
  end
52
52
 
53
+ def dir?
54
+ exists?
55
+ end
56
+
57
+ def read
58
+ # This will only be called if dir? is false, which means exists? is false.
59
+ raise ChefFS::FileSystem::NotFoundException, path_for_printing
60
+ end
61
+
53
62
  def exists?
54
63
  if !@versions
55
64
  child = parent.children.select { |child| child.name == name }.first
@@ -11,6 +11,15 @@ module ChefFS
11
11
  @exists = nil
12
12
  end
13
13
 
14
+ def dir?
15
+ exists?
16
+ end
17
+
18
+ def read
19
+ # This will only be called if dir? is false, which means exists? is false.
20
+ raise ChefFS::FileSystem::NotFoundException, path_for_printing
21
+ end
22
+
14
23
  def exists?
15
24
  if @exists.nil?
16
25
  @exists = parent.children.any? { |child| child.name == name }
@@ -16,7 +16,8 @@ module ChefFS
16
16
  end
17
17
  # dot-dot up from 'source' to the common ancestor, then
18
18
  # descend to 'dest' from the common ancestor
19
- ChefFS::PathUtils.join(*(['..']*(source_parts.length-i) + dest_parts[i,dest.length-i]))
19
+ result = ChefFS::PathUtils.join(*(['..']*(source_parts.length-i) + dest_parts[i,dest.length-i]))
20
+ result == '' ? '.' : result
20
21
  end
21
22
 
22
23
  def self.join(*parts)
@@ -1,4 +1,4 @@
1
1
  module ChefFS
2
- VERSION = "0.1"
2
+ VERSION = "0.1.1"
3
3
  end
4
4
 
@@ -14,6 +14,8 @@ describe ChefFS::Diff do
14
14
  :sub_both_files => nil,
15
15
  :sub_both_files_different => "a\n",
16
16
  :sub_both_dirs_empty => {},
17
+ :sub_dirs_empty_in_a_filled_in_b => {},
18
+ :sub_dirs_empty_in_b_filled_in_a => { :subsub => nil },
17
19
  :sub_a_only_dir => { :subsub => nil },
18
20
  :sub_a_only_file => nil,
19
21
  :sub_dir_in_a_file_in_b => {},
@@ -21,7 +23,9 @@ describe ChefFS::Diff do
21
23
  },
22
24
  :both_files => nil,
23
25
  :both_files_different => "a\n",
24
- :both_dirs_empty => {},
26
+ :both_dirs_empty => {},
27
+ :dirs_empty_in_a_filled_in_b => {},
28
+ :dirs_empty_in_b_filled_in_a => { :subsub => nil },
25
29
  :a_only_dir => { :subsub => nil },
26
30
  :a_only_file => nil,
27
31
  :dir_in_a_file_in_b => {},
@@ -35,6 +39,8 @@ describe ChefFS::Diff do
35
39
  :sub_both_files => nil,
36
40
  :sub_both_files_different => "b\n",
37
41
  :sub_both_dirs_empty => {},
42
+ :sub_dirs_empty_in_a_filled_in_b => { :subsub => nil },
43
+ :sub_dirs_empty_in_b_filled_in_a => {},
38
44
  :sub_b_only_dir => { :subsub => nil },
39
45
  :sub_b_only_file => nil,
40
46
  :sub_dir_in_a_file_in_b => nil,
@@ -43,6 +49,8 @@ describe ChefFS::Diff do
43
49
  :both_files => nil,
44
50
  :both_files_different => "b\n",
45
51
  :both_dirs_empty => {},
52
+ :dirs_empty_in_a_filled_in_b => { :subsub => nil },
53
+ :dirs_empty_in_b_filled_in_a => {},
46
54
  :b_only_dir => { :subsub => nil },
47
55
  :b_only_file => nil,
48
56
  :dir_in_a_file_in_b => nil,
@@ -55,7 +63,8 @@ describe ChefFS::Diff do
55
63
  /both_dirs/sub_both_dirs/subsub
56
64
  /both_dirs/sub_both_files
57
65
  /both_dirs/sub_both_files_different
58
- /both_dirs/sub_both_dirs_empty
66
+ /both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
67
+ /both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
59
68
  /both_dirs/sub_a_only_dir
60
69
  /both_dirs/sub_a_only_file
61
70
  /both_dirs/sub_b_only_dir
@@ -64,7 +73,8 @@ describe ChefFS::Diff do
64
73
  /both_dirs/sub_file_in_a_dir_in_b
65
74
  /both_files
66
75
  /both_files_different
67
- /both_dirs_empty
76
+ /dirs_empty_in_b_filled_in_a/subsub
77
+ /dirs_empty_in_a_filled_in_b/subsub
68
78
  /a_only_dir
69
79
  /a_only_file
70
80
  /b_only_dir
@@ -96,14 +106,16 @@ describe ChefFS::Diff do
96
106
  /both_dirs/sub_both_dirs/subsub
97
107
  /both_dirs/sub_both_files
98
108
  /both_dirs/sub_both_files_different
99
- /both_dirs/sub_both_dirs_empty
109
+ /both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
110
+ /both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
100
111
  /both_dirs/sub_a_only_dir
101
112
  /both_dirs/sub_a_only_file
102
113
  /both_dirs/sub_b_only_dir
103
114
  /both_dirs/sub_b_only_file
104
115
  /both_dirs/sub_dir_in_a_file_in_b
105
116
  /both_dirs/sub_file_in_a_dir_in_b
106
- /both_dirs_empty
117
+ /dirs_empty_in_b_filled_in_a/subsub
118
+ /dirs_empty_in_a_filled_in_b/subsub
107
119
  /a_only_dir
108
120
  /b_only_dir
109
121
  /dir_in_a_file_in_b
@@ -122,7 +134,18 @@ describe ChefFS::Diff do
122
134
  @@ -1 +1 @@
123
135
  -a
124
136
  +b
125
- ','Common subdirectories: /both_dirs/sub_both_dirs_empty
137
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
138
+ new file
139
+ --- /dev/null DATE
140
+ +++ b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub DATE
141
+ @@ -0,0 +1 @@
142
+ +subsub
143
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
144
+ deleted file
145
+ --- a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub DATE
146
+ +++ /dev/null DATE
147
+ @@ -1 +0,0 @@
148
+ -subsub
126
149
  ','Only in a/both_dirs: sub_a_only_dir
127
150
  ','diff --knife a/both_dirs/sub_a_only_file b/both_dirs/sub_a_only_file
128
151
  deleted file
@@ -145,7 +168,18 @@ new file
145
168
  @@ -1 +1 @@
146
169
  -a
147
170
  +b
148
- ','Common subdirectories: /both_dirs_empty
171
+ ','diff --knife a/dirs_empty_in_a_filled_in_b/subsub b/dirs_empty_in_a_filled_in_b/subsub
172
+ new file
173
+ --- /dev/null DATE
174
+ +++ b/dirs_empty_in_a_filled_in_b/subsub DATE
175
+ @@ -0,0 +1 @@
176
+ +subsub
177
+ ','diff --knife a/dirs_empty_in_b_filled_in_a/subsub b/dirs_empty_in_b_filled_in_a/subsub
178
+ deleted file
179
+ --- a/dirs_empty_in_b_filled_in_a/subsub DATE
180
+ +++ /dev/null DATE
181
+ @@ -1 +0,0 @@
182
+ -subsub
149
183
  ','Only in a: a_only_dir
150
184
  ','diff --knife a/a_only_file b/a_only_file
151
185
  deleted file
@@ -176,7 +210,18 @@ new file
176
210
  @@ -1 +1 @@
177
211
  -a
178
212
  +b
179
- ','Common subdirectories: /both_dirs/sub_both_dirs_empty
213
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
214
+ new file
215
+ --- /dev/null DATE
216
+ +++ b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub DATE
217
+ @@ -0,0 +1 @@
218
+ +subsub
219
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
220
+ deleted file
221
+ --- a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub DATE
222
+ +++ /dev/null DATE
223
+ @@ -1 +0,0 @@
224
+ -subsub
180
225
  ','Only in a/both_dirs: sub_a_only_dir
181
226
  ','diff --knife a/both_dirs/sub_a_only_file b/both_dirs/sub_a_only_file
182
227
  deleted file
@@ -209,6 +254,8 @@ new file
209
254
  -a
210
255
  +b
211
256
  ','Common subdirectories: /both_dirs_empty
257
+ ','Common subdirectories: /dirs_empty_in_b_filled_in_a
258
+ ','Common subdirectories: /dirs_empty_in_a_filled_in_b
212
259
  ','Only in a: a_only_dir
213
260
  ','diff --knife a/a_only_file b/a_only_file
214
261
  deleted file
@@ -241,6 +288,8 @@ new file
241
288
  -a
242
289
  +b
243
290
  ','Common subdirectories: /both_dirs_empty
291
+ ','Common subdirectories: /dirs_empty_in_b_filled_in_a
292
+ ','Common subdirectories: /dirs_empty_in_a_filled_in_b
244
293
  ','Only in a: a_only_dir
245
294
  ','diff --knife a/a_only_file b/a_only_file
246
295
  deleted file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-essentials
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-04-26 00:00:00.000000000Z
13
13
  dependencies: []
14
- description: A library that treats the Chef server as if it were a filesystem
14
+ description: Universal knife verbs that work with your Chef repository
15
15
  email: jkeiser@opscode.com
16
16
  executables: []
17
17
  extensions: []
@@ -75,5 +75,5 @@ rubyforge_project:
75
75
  rubygems_version: 1.8.10
76
76
  signing_key:
77
77
  specification_version: 3
78
- summary: A library that treats the Chef server as if it were a filesystem
78
+ summary: Universal knife verbs that work with your Chef repository
79
79
  test_files: []