# File lib/chef/knife/cookbook_download.rb, line 48
      def run
        @cookbook_name, @version = @name_args

        if @cookbook_name.nil?
          show_usage
          Chef::Log.fatal("You must specify a cookbook name")
          exit 1
        elsif @version.nil?
          determine_version
        end
          
        Chef::Log.info("Downloading #{@cookbook_name} cookbook version #{@version}")
        
        cookbook = rest.get_rest("cookbooks/#{@cookbook_name}/#{@version}")
        manifest = cookbook.manifest

        basedir = File.join(config[:download_directory], "#{@cookbook_name}-#{cookbook.version}")
        if File.exists?(basedir)
          if config[:force]
            Chef::Log.debug("Deleting #{basedir}")
            FileUtils.rm_rf(basedir)
          else
            Chef::Log.fatal("Directory #{basedir} exists, use --force to overwrite")
            exit
          end
        end
        
        Chef::CookbookVersion::COOKBOOK_SEGMENTS.each do |segment|
          next unless manifest.has_key?(segment)
          Chef::Log.info("Downloading #{segment}")
          manifest[segment].each do |segment_file|
            dest = File.join(basedir, segment_file['path'].gsub('/', File::SEPARATOR))
            Chef::Log.debug("Downloading #{segment_file['path']} to #{dest}")
            FileUtils.mkdir_p(File.dirname(dest))
            rest.sign_on_redirect = false
            tempfile = rest.get_rest(segment_file['url'], true)
            FileUtils.mv(tempfile.path, dest)
          end
        end
        Chef::Log.info("Cookbook downloaded to #{basedir}")
      end