# Directory trees to ignore
/backups/
/build/
/buildSrc/build/
/buildSrc/subprojects/*/build/
/buildSrc/subprojects/*/bin/
/buildSrc/subprojects/*/out/
/src/build/
/src/bin/
/src/out/
/src/*/build/
/src/*/bin/
/src/*/out/
/src/protocol/*/build/
/src/protocol/*/bin/
/src/protocol/*/out/
# This folder is generated by running one of the tests (HTML report?), so ignore it for now
# See https://github.com/apache/jmeter/issues/5762
/src/dist-check/temp/
/dist/
/docs/
/local/
/printable_docs/
/reports/
/site/
/target/

!/bin/report-template/**/dist
/bin/temp/
/bin/testfiles/testReport*

# Ignore Gradle project-specific cache directory
.gradle

# burrunan/gradle-cache-action creates this folder, so ignore it until the folder moved to another location
/.cache-proxy

# macOS
.DS_Store

# specific files to ignore
*.log
.ant-targets-build.xml
.checkstyle
.classpath
.externalToolBuilders
.fbwarnings
.fbprefs
.pmd
.project
.settings

# bin/ folder is used to launch JMeter, so we ignore certain files there
/bin/ApacheJMeter.jar
# Below are the results of "batch test" execution
/bin/*.csv
/bin/*.jmx
/bin/*.jtl
/bin/*.xml
# We need log4j2.xml and tika-config.xml even though we want to exclude xml created by batch tests
!/bin/log4j2.xml
!/bin/tika-config.xml

build-local.properties
jmeter-fb.*

# ignore generated keystore and certs
/bin/proxyserver.jks
/bin/ApacheJMeterTemporaryRootCA.crt
/bin/ApacheJMeterTemporaryRootCA.usr

# ignore jar's in lib/
/lib/**/*.jar

# ignore default report output directory
/bin/report-output
/output/

# IDEA
/out/
.idea/*
!/.idea/icon.png
*.iml

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
# other jvm related files
.attach_*
