# 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/bootstrap-dev-env.sh
!docker/bootstrap-runtime-env.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.*