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

build/build.number
.lock-wscript
.waf-*
waf-*
target/
override/
.metadata
dist/
*~
*.bak
cloud-*.tar.bz2
*.log
*.pyc
*.egginfo/
*.egg-info/
*.prefs
build.number
*.log.*.gz
cloud.log.*.*
unittest
deps/cloud.userlibraries
.DS_Store
.idea
*.iml
git-remote-https.exe.stackdump
*.swp
tools/devcloud/devcloudbox/.vagrant
tools/cli/cloudmonkey/marvin/
tools/cli/cloudmonkey/precache.py
tools/marvin/marvin/cloudstackAPI/
tools/marvin/build/
tools/cli/build/
*.jar
*.war
*.mar
*.iso
*.tar.gz
*.tgz

# this ignores _all files starting with '.'. Don't do that!
#.*

target-eclipse
!.gitignore
.classpath
.settings.xml
.settings/
db.properties.override
replace.properties.override
tools/marvin/marvin/cloudstackAPI/*
*.egg-info/
docs/tmp
docs/publish
docs/runbook/tmp
docs/runbook/publish
.project
Gemfile.lock
debian/tmp
debian/files
debian/cloudstack-*/*
debian/*.substvars
debian/*.debhelper
replace.properties.tmp
build-indep-stamp
configure-stamp
*_flymake.js
engine/storage/integration-test/test-output
tools/apidoc/log/
plugins/network-elements/juniper-contrail/logs/
scripts/vm/hypervisor/xenserver/vhd-util
*.orig
tools/appliance/box/
.reviewboardrc
.checkstyle
.pmd
.pmdruleset.xml
.pydevproject
systemvm/.pydevproject
test/.pydevprojec
plugins/hypervisors/kvm/.pydevproject
scripts/.pydevproject
*.qcow2
*.raw
venv
.vscode
