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

# OpenAPI Generator Ignore
# Generated by openapi-generator https://github.com/openapitools/openapi-generator

# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.

# Standard project files that should not be overwritten
pyproject.toml
README.md
LICENSE
NOTICE

# Source code
apache_polaris/__init__.py
apache_polaris/cli/

# Tests
tests
integration_tests

# Build and configuration files
hatch_build.py
generate_clients.py
docker-compose.yml
.pre-commit-config.yaml
.gitignore

# Generated files to ignore
**/catalog_README.md
**/management_README.md
