##############################################################################
#
# Copyright 2019 highstreet technologies GmbH and others...
#
# Licensed 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
#
#     https://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.
#

pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
*.pyc

*/**/bin/

# Maven
target/
*.tar.gz

# Opendaylight yang-tools
yang-gen-sal/

# IDE (Eclipse, vsCode) related
.project
.classpath
.settings/
target-ide/
release.properties
.vscode

# data models in scp/oam/modeling
*.yang

# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
!/.mvn/wrapper/maven-wrapper.jar

# VES related
*/**/json/examples
*/**/__pycache__
*.log

# documentation

.tox
docs/_build/
ci-management/
