# 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
*.patch
*.egginfo/
*.egg-info/
*.prefs
build.number
*.log.*
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/
tools/appliance/systemvmtemplate/packer_cache/
*.jar
*.war
*.mar
*.iso
*.tar.gz
*.tgz
*.vscode
*.css.map

# 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/*
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
node_modules
.vscode
