# Note: these patterns are applied to single files or directories, not full paths
# coverage/* will ignore any coverage dir, but airflow/www/static/coverage/* will match nothing

.github/*
.gitignore
.gitattributes
.gitrepo
.airflow_db_initialised
.airflowignore
.coverage
.coveragerc
.codecov.yml
.eslintrc
.eslintignore
.flake8
.rat-excludes
.stylelintignore
.stylelintrc
requirements
requirements.txt
.*log
.travis.yml
.*pyc
.*lock
dist
build
airflow.egg-info
apache_airflow.egg-info
.idea
metastore_db
.*sql
.*svg
.*csv
.*md5
CHANGELOG.txt
.*zip
.*lock
unittests.cfg
logs
.bash_aliases
venv
files
airflow.iml
.gitmodules

# Generated doc files
.*html
_build/*
_static/*
_images/*
.buildinfo
searchindex.js
_api/*

# the word list for checking spellings
spelling_wordlist.txt

# Apache Rat does not detect BSD-2 clause properly
# it is compatible according to http://www.apache.org/legal/resolved.html#category-a
kerberos_auth.py
airflow_api_auth_backend_kerberos_auth_py.html
licenses/*
parallel.js
underscore.js
jquery.dataTables.min.js
jqClock.min.js
dagre-d3.min.js
d3.v3.min.js
ace.js
node_modules/*
.*json
coverage/*
git_version
flake8_diff.sh
coverage*.xml
_sources/*

rat-results.txt
apache-airflow-.*\+source.tar.gz.*
apache-airflow-.*\+bin.tar.gz.*
PULL_REQUEST_TEMPLATE.md
PROVIDER_CHANGES*.md
manifests/*
redirects.txt

# Temporary list of files to make compatible with Pylint
pylint_todo.txt

# Locally mounted files
.*egg-info/*
.bash_history
.bash_aliases
.inputrc

# the example notebook is ASF 2 licensed but RAT cannot read this
input_notebook.ipynb

# .git might be a file in case of worktree
.git
tmp

# Vendored-in code
_vendor

# generated doc-only-changes.txt
.latest-doc-only-change.txt

# generated provider_packages
provider_packages
