define apt::preferences_snippet(
  $ensure = 'present',
  $source = '',
  $release,
  $priority )
{

  if $custom_preferences == false {
    fail("Trying to define a preferences_snippet with \$custom_preferences set to false.")
  }

  include apt::preferences

  file { "${apt::preferences::apt_preferences_dir}/${name}":
    ensure => $ensure,
    #TODO this template is somewhat limited
    notify => Exec["concat_${apt::preferences::apt_preferences_dir}"],
    owner => root, group => 0, mode => 0600;
  }

  # This should really work in the same manner as sources_list and apt_conf
  # snippets, but since the preferences.d directory cannot be used in Debian
  # lenny, we can't generalize without going into ugly special-casing.
  case $source {
    '': {
      File["${apt::preferences::apt_preferences_dir}/${name}"] {
        content => template("apt/preferences_snippet.erb")
      }
    }
    default: {
      File["${apt::preferences::apt_preferences_dir}/${name}"] {
        source => $source
      }
    }
  }
}