# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
.DS_Store
cpanfile.snapshot
rpm/build.number
rpmbuild/
docs/build/*
/grove/grove
/grove/grovetccfg/grovetccfg
local
traffic_ops_extensions/log/*
traffic_ops_extensions/lib/Extensions/InfluxDB/log/*
traffic_ops/app/log/*.log
traffic_ops/app/public/CRConfig-Snapshots/*
traffic_ops/app/public/Trafficserver-Snapshots/*
docs/.todo_cache
docs/_build/
docs/source/_build/
traffic_ops/app/conf/ldap.conf
traffic_ops/app/db/admin
traffic_ops/app/db/reencrypt/reencrypt
traffic_ops/app/db/traffic_vault_migrate/traffic_vault_migrate
traffic_ops/app/db/traffic_vault_migrate/dump
traffic_ops/**/*.log
traffic_stats/traffic_stats
traffic_router/*/*.log
traffic_router/*.log
traffic_router/core/src/test/conf/*.properties
vendor/**/appveyor.yml
vendor/**/.gitattributes
vendor/**/.gitignore
vendor/**/.gitmodules
vendor/golang.org/
vendor/**/*.sh
vendor/**/.travis.yml
.dbInfo
/dist
*.pyc
bin/docker-compose
/.m2/
/.npm/
/.github/actions/**/node_modules/
# local storage for cdn-in-a-box Carton packages
local.tar.gz
# Editor/IDE configuration files
*.sublime-project
*.sublime-workspace
.vscode/
__debug_bin
*.code-workspace
*.pydevproject
.idea/
.project
.*.swp
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
*.elc
.projectile
*.bak
*.iml
.anjuta/
.anjuta_sym_db.db
*.anjuta
*.kateproject
# built local binaries
./traffic_ops_golang
# Created by TP/TO docker integration tests
junit/
# local install of Python packages in "edit" mode
*.egg-info/
