summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerdar Sutay <serdar@opscode.com>2014-10-10 13:28:23 -0700
committerSerdar Sutay <serdar@opscode.com>2014-10-10 13:28:23 -0700
commit937a0394a1a3749bacebaee23f2bdd103e38991e (patch)
treef91b999d383c8c5bc967ac2cc9aa4e079b284867
parent57d2c50408a356f5fdde79b9471ddfef3e767b04 (diff)
parent3794f12abf6f1760d5f3f125a7c8972d21010663 (diff)
downloadchef-937a0394a1a3749bacebaee23f2bdd103e38991e.tar.gz
Merge pull request #1724 from higanworks/prevew_archive_before_site_share
Add option --prevew-archive to `knife cookbook site share`
-rw-r--r--lib/chef/knife/cookbook_site_share.rb15
-rw-r--r--spec/unit/knife/cookbook_site_share_spec.rb26
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/chef/knife/cookbook_site_share.rb b/lib/chef/knife/cookbook_site_share.rb
index 7204ccdb1c..d6cd570067 100644
--- a/lib/chef/knife/cookbook_site_share.rb
+++ b/lib/chef/knife/cookbook_site_share.rb
@@ -40,6 +40,13 @@ class Chef
:description => "A colon-separated path to look for cookbooks in",
:proc => lambda { |o| Chef::Config.cookbook_path = o.split(":") }
+ option :dry_run,
+ :long => '--dry-run',
+ :short => '-n',
+ :boolean => true,
+ :default => false,
+ :description => "Don't take action, only print what files will be upload to SuperMarket."
+
def run
if @name_args.length < 2
show_usage
@@ -66,6 +73,14 @@ class Chef
exit(1)
end
+ if config[:dry_run]
+ ui.info("Not uploading #{cookbook_name}.tgz due to --dry-run flag.")
+ result = shell_out!("tar -tzf #{cookbook_name}.tgz", :cwd => tmp_cookbook_dir)
+ ui.info(result.stdout)
+ FileUtils.rm_rf tmp_cookbook_dir
+ return
+ end
+
begin
do_upload("#{tmp_cookbook_dir}/#{cookbook_name}.tgz", category, Chef::Config[:node_name], Chef::Config[:client_key])
ui.info("Upload complete!")
diff --git a/spec/unit/knife/cookbook_site_share_spec.rb b/spec/unit/knife/cookbook_site_share_spec.rb
index ad3f32fecc..744472cab7 100644
--- a/spec/unit/knife/cookbook_site_share_spec.rb
+++ b/spec/unit/knife/cookbook_site_share_spec.rb
@@ -25,6 +25,8 @@ describe Chef::Knife::CookbookSiteShare do
before(:each) do
@knife = Chef::Knife::CookbookSiteShare.new
+ # Merge default settings in.
+ @knife.merge_configs
@knife.name_args = ['cookbook_name', 'AwesomeSausage']
@cookbook = Chef::CookbookVersion.new('cookbook_name')
@@ -50,6 +52,10 @@ describe Chef::Knife::CookbookSiteShare do
@knife.stub(:do_upload).and_return(true)
end
+ it 'should set true to config[:dry_run] as default' do
+ @knife.config[:dry_run].should be_false
+ end
+
it 'should should print usage and exit when given no arguments' do
@knife.name_args = []
@knife.should_receive(:show_usage)
@@ -93,6 +99,26 @@ describe Chef::Knife::CookbookSiteShare do
FileUtils.should_receive(:rm_rf)
@knife.run
end
+
+ context "when the --dry-run flag is specified" do
+ before do
+ Chef::CookbookSiteStreamingUploader.stub(:create_build_dir).and_return("/var/tmp/dummy")
+ @knife.config = { :dry_run => true }
+ @knife.stub_chain(:shell_out!, :stdout).and_return('file')
+ end
+
+ it "should list files in the tarball" do
+ expect(@knife).to receive(:shell_out!).with("tar -czf #{@cookbook.name}.tgz #{@cookbook.name}", {:cwd => "/var/tmp/dummy"})
+ expect(@knife).to receive(:shell_out!).with("tar -tzf #{@cookbook.name}.tgz", {:cwd => "/var/tmp/dummy"})
+ @knife.run
+ end
+
+ it "does not upload the cookbook" do
+ allow(@knife).to receive(:shell_out!).and_return(true)
+ expect(@knife).not_to receive(:do_upload)
+ @knife.run
+ end
+ end
end
describe 'do_upload' do