# The `recipes` attribute controls which additional files are included in the
# recipes bundle when running the `//recipes/recipes.py bundle` command. These
# files will also be available to other repos' recipes when they pull in
# depot_tools as a recipe dependency.

# Tools
/*.bat recipes
/*.exe recipes
/*.py  recipes
/*.sh  recipes

# vpython specs
/.vpython*      recipes
/gsutil.vpython recipes

# Extensionless tools we want and support scripts.
/autoninja*                   recipes
/clang*                       recipes
/depot-tools-auth             recipes
/download_from_google_storage recipes
/fetch                        recipes
/gclient                      recipes
/git*                         recipes
/gn                           recipes
/ninja*                       recipes
/pylint*                      recipes
/repo                         recipes
/repo_launcher                recipes
/roll-dep*                    recipes
/yapf*                        recipes

# Symlinks
/cbuildbot      recipes
/chrome_set_ver recipes
/cros*          recipes

/support/* recipes

# TODO: There are some really junky dependencies in here that we should probably
# move to vpython/cipd.
/third_party/**                     recipes

/win_toolchain/** recipes

/fetch_configs/*.py recipes

# Some things we never need to include in the bundle
*.diff         -recipes
*LICENSE*      -recipes
*README*       -recipes
.gitattributes -recipes
.gitignore     -recipes
COPYING        -recipes
MANIFEST.in    -recipes
OWNERS         -recipes
PKG-INFO       -recipes
