    # 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