# File lib/chef/provider/git.rb, line 44
      def define_resource_requirements
        # Parent directory of the target must exist. 
        requirements.assert(:checkout, :sync) do |a|
          dirname = ::File.dirname(@new_resource.destination)
          a.assertion { ::File.directory?(dirname) }
          a.whyrun("Directory #{dirname} does not exist, this run will fail unless it has been previously created. Assuming it would have been created.")
          a.failure_message(Chef::Exceptions::MissingParentDirectory,
            "Cannot clone #{@new_resource} to #{@new_resource.destination}, the enclosing directory #{dirname} does not exist")
        end


        requirements.assert(:all_actions) do |a|
          a.assertion { !(@new_resource.revision =~ /^origin\//) }
          a.failure_message Chef::Exceptions::InvalidRemoteGitReference,
             "Deploying remote branches is not supported. " +
             "Specify the remote branch as a local branch for " +
             "the git repository you're deploying from " +
             "(ie: '#{@new_resource.revision.gsub('origin/', '')}' rather than '#{@new_resource.revision}')."
        end

        requirements.assert(:all_actions) do |a|
          # this can't be recovered from in why-run mode, because nothing that 
          # we do in the course of a run is likely to create a valid target_revision 
          # if we can't resolve it up front.
          a.assertion { target_revision != nil }
          a.failure_message Chef::Exceptions::UnresolvableGitReference, 
            "Unable to parse SHA reference for '#{@new_resource.revision}' in repository '#{@new_resource.repository}'. " +
            "Verify your (case-sensitive) repository URL and revision.\n" + 
            "`git ls-remote` output: #{@resolved_reference}"
        end
      end