knife-essentials 0.6 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,11 +8,19 @@ that is stored in the Chef server.
8
8
 
9
9
  knife diff cookbooks/*apache*
10
10
  knife download roles data_bags cookbooks/emacs
11
+ knife upload apache*
11
12
  knife list data_bags/users
12
- knife show roles/*base*
13
+ cd cookbooks && knife show *base*
13
14
 
14
- The plugin is in early days: more verbs will be added as time goes by, including
15
- +edit+, +delete+, +upload+ and +download+.
15
+ More verbs will be added as time goes by.
16
+
17
+ = INSTALLATION:
18
+
19
+ This plugin can be installed as a Ruby Gem.
20
+
21
+ gem install knife-essentials
22
+
23
+ You can also copy the source repository and install it using +rake install+.
16
24
 
17
25
  = PRINCIPLES
18
26
 
@@ -43,12 +51,6 @@ When you're in the +roles+ directory, the system knows that's what you are
43
51
  working with. Just type +knife show base.json+ and it will show you the base
44
52
  role from the server. knife-essentials knows.
45
53
 
46
- = INSTALLATION:
47
-
48
- This plugin builds a Ruby Gem (but has not yet been released to RubyGems). To install it, run:
49
-
50
- rake install
51
-
52
54
  = KNIFE PLUGINS
53
55
 
54
56
  chef_fs installs a number of useful knife verbs, including:
@@ -5,10 +5,10 @@ module ChefFS
5
5
  def self.diff(pattern, a_root, b_root, recurse_depth, output_mode)
6
6
  found_result = false
7
7
  ChefFS::FileSystem.list_pairs(pattern, a_root, b_root) do |a, b|
8
- found_result = true
9
- diff_entries(a, b, recurse_depth, output_mode) do |diff|
8
+ existed = diff_entries(a, b, recurse_depth, output_mode) do |diff|
10
9
  yield diff
11
10
  end
11
+ found_result = true if existed
12
12
  end
13
13
  if !found_result && pattern.exact_path
14
14
  yield "#{pattern}: No such file or directory on remote or local"
@@ -76,10 +76,12 @@ module ChefFS
76
76
  end
77
77
  end
78
78
 
79
+ # Neither is a directory, so they are diffable with file diff
79
80
  else
80
- # Neither is a directory, so they are diffable with file diff
81
81
  are_same, old_value, new_value = ChefFS::FileSystem.compare(old_entry, new_entry)
82
- if !are_same
82
+ if are_same
83
+ return old_value != :none
84
+ else
83
85
  if old_value == :none
84
86
  old_exists = false
85
87
  elsif old_value.nil?
@@ -98,10 +100,10 @@ module ChefFS
98
100
  # If one of the files doesn't exist, we only want to print the diff if the
99
101
  # other file *could be uploaded/downloaded*.
100
102
  if !old_exists && !old_entry.parent.can_have_child?(new_entry.name, new_entry.dir?)
101
- return
103
+ return true
102
104
  end
103
105
  if !new_exists && !new_entry.parent.can_have_child?(old_entry.name, old_entry.dir?)
104
- return
106
+ return true
105
107
  end
106
108
 
107
109
  if output_mode == :name_only
@@ -146,6 +148,7 @@ module ChefFS
146
148
  end
147
149
  end
148
150
  end
151
+ return true
149
152
  end
150
153
 
151
154
  private
@@ -224,13 +224,14 @@ module ChefFS
224
224
  end
225
225
 
226
226
  elsif !dest_entry.exists?
227
- if dest_entry.parent.can_have_child?(src_entry.name, src_entry.dir?)
227
+ dest_parent = get_or_create_parent(dest_entry, options)
228
+ if dest_parent.can_have_child?(src_entry.name, src_entry.dir?)
228
229
  if src_entry.dir?
229
230
  if options[:dry_run]
230
231
  puts "Would create #{dest_entry.path_for_printing}"
231
- new_dest_dir = dest_entry.parent.child(src_entry.name)
232
+ new_dest_dir = dest_parent.child(src_entry.name)
232
233
  else
233
- new_dest_dir = dest_entry.parent.create_child(src_entry.name, nil)
234
+ new_dest_dir = dest_parent.create_child(src_entry.name, nil)
234
235
  puts "Created #{dest_entry.path_for_printing}/"
235
236
  end
236
237
  # Directory creation is recursive.
@@ -286,6 +287,7 @@ module ChefFS
286
287
  Chef::Log.error("File #{dest_entry.path_for_printing} is a directory while file #{dest_entry.path_for_printing} is a regular file\n")
287
288
  return
288
289
  else
290
+
289
291
  # Both are files! Copy them unless we're sure they are the same.
290
292
  if options[:force]
291
293
  should_copy = true
@@ -308,6 +310,20 @@ module ChefFS
308
310
  end
309
311
  end
310
312
 
313
+ def self.get_or_create_parent(entry, options)
314
+ parent = entry.parent
315
+ if !parent.exists?
316
+ parent_parent = get_or_create_parent(entry.parent, options)
317
+ if options[:dry_run]
318
+ puts "Would create #{parent.path_for_printing}"
319
+ else
320
+ parent = parent_parent.create_child(parent.name, true)
321
+ puts "Created #{parent.path_for_printing}"
322
+ end
323
+ end
324
+ return parent
325
+ end
326
+
311
327
  end
312
328
  end
313
329
 
@@ -26,7 +26,12 @@ module ChefFS
26
26
 
27
27
  def path_for_printing
28
28
  if parent
29
- ChefFS::PathUtils::join(parent.path_for_printing, name)
29
+ parent_path = parent.path_for_printing
30
+ if parent_path == '.'
31
+ name
32
+ else
33
+ ChefFS::PathUtils::join(parent.path_for_printing, name)
34
+ end
30
35
  else
31
36
  name
32
37
  end
@@ -25,7 +25,11 @@ module ChefFS
25
25
 
26
26
  def exists?
27
27
  if @exists.nil?
28
- @exists = parent.children.any? { |child| child.name == name }
28
+ begin
29
+ @exists = parent.children.any? { |child| child.name == name }
30
+ rescue ChefFS::FileSystem::NotFoundError
31
+ @exists = false
32
+ end
29
33
  end
30
34
  @exists
31
35
  end
@@ -14,7 +14,10 @@ module ChefFS
14
14
  end
15
15
 
16
16
  def base_path
17
- @base_path ||= "/" + ChefFS::PathUtils::relative_to(File.absolute_path(Dir.pwd), chef_repo)
17
+ @base_path ||= begin
18
+ relative_to_base = ChefFS::PathUtils::relative_to(File.absolute_path(Dir.pwd), chef_repo)
19
+ relative_to_base == '.' ? '/' : "/#{relative_to_base}"
20
+ end
18
21
  end
19
22
 
20
23
  def chef_fs
@@ -1,4 +1,4 @@
1
1
  module ChefFS
2
- VERSION = "0.6"
2
+ VERSION = "0.6.1"
3
3
  end
4
4
 
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.6'
4
+ version: 0.6.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-19 00:00:00.000000000Z
12
+ date: 2012-05-24 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Universal knife verbs that work with your Chef repository
15
15
  email: jkeiser@opscode.com