# 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.

# Ignore everything.
# It is easier to ensure smaller docker images and avoid cache invalidations
# to ignore everything and add back the files we want.
*

# General top level source files.
!CONTRIBUTING.adoc
!LICENSE.txt
!NOTICE.txt
!README.adoc
!RELEASING.adoc
!version.txt

# Docker files.
!docker/impala
!docker/bootstrap-dev-env.sh
!docker/bootstrap-java-env.sh
!docker/bootstrap-maven-env.sh
!docker/bootstrap-python-env.sh
!docker/bootstrap-runtime-env.sh
!docker/impala-entrypoint.sh
!docker/kudu-entrypoint.sh

# Docs files.
!docs
# Ignore docs files we don't need in docker.
docs/design-docs
docs/whitepaper

# Example files.
!examples
# Ensure these directories are completely ignored.
examples/**/.idea
examples/**/target

# Java source files.
!java
# Ensure these directories are completely ignored.
java/**/build
java/**/.gradle
java/**/.idea
# Ensure compiled source is ignored.
java/**/*.jar

# Python source files.
!python
# Ensure these directories are completely ignored.
python/.eggs
python/.idea
python/build
python/dist
python/sdist
python/env/
python/venv/
# Ensure generated source is ignored.
python/**/*.c
python/**/*.cpp
python/**/*.cmake
python/kudu/version.py
python/kudu/config.pxi
# Ensure compiled source is ignored.
**/*.py[ocd]

# C++ source files.
!build-support
!cmake_modules
!src
!CMakeLists.txt
# Ensure compiled source is ignored.
**/*.so
# Ignore build files we don't need in docker.
build-support/jenkins

# Thirdparty source files.
!thirdparty/patches
!thirdparty/scripts
!thirdparty/*.py
!thirdparty/*.sh
!thirdparty/*.txt

# www source files.
# Don't ignore all the www directory files except those generated by the build.
!www
# Tracing files are generated by the thirdparty trace-viewer build.
www/tracing.*