SuccessConsole Output

Started by an SCM change
Building in workspace /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace
 > /usr/local/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/local/bin/git config remote.origin.url https://github.com/locationtech/geogig.git # timeout=10
Fetching upstream changes from https://github.com/locationtech/geogig.git
 > /usr/local/bin/git --version # timeout=10
Setting http proxy: proxy.eclipse.org:9898
 > /usr/local/bin/git fetch --tags --progress https://github.com/locationtech/geogig.git +refs/heads/*:refs/remotes/origin/*
 > /usr/local/bin/git rev-parse origin/1.1.x^{commit} # timeout=10
Checking out Revision a662ac4caccdbf212fc6217b390140c3efbcf429 (origin/1.1.x)
 > /usr/local/bin/git config core.sparsecheckout # timeout=10
 > /usr/local/bin/git checkout -f a662ac4caccdbf212fc6217b390140c3efbcf429
 > /usr/local/bin/git rev-list d575aff7b1a95eca400ded1d9606b9a6a31c08df # timeout=10
Parsing POMs
Established TCP socket on 50603
[parent] $ /shared/common/jdk1.8.0_x64-latest/bin/java -cp /home/hudson/genie.geogig/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven33-agent-1.8.1.jar:/shared/common/apache-maven-latest/boot/plexus-classworlds-2.5.2.jar:/shared/common/apache-maven-latest/conf/logging jenkins.maven3.agent.Maven33Main /shared/common/apache-maven-latest /home/hudson/genie.geogig/.jenkins/war/WEB-INF/lib/remoting-3.7.jar /home/hudson/genie.geogig/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven33-interceptor-1.8.1.jar /home/hudson/genie.geogig/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.8.1.jar 50603
<===[JENKINS REMOTING CAPACITY]===>channel started
Executing Maven:  -B -f /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/parent/pom.xml -Dmaven.repo.local=/home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository clean install -Pexperimental -DskipTests=false -Dcucumber.options=--monochrome --plugin json:target/cucumber.json -Djava.io.tmpdir=/opt/public/hipp/ramdisk/geogig
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] GeoGig
[INFO] GeoGig Core API
[INFO] GeoGig Core
[INFO] GeoGig DataStore Implementation
[INFO] Storage backends
[INFO] RocksDB storage backend
[INFO] GeoGig Command Line Interface
[INFO] PostgreSQL Storage Backend
[INFO] GeoTools Extension
[INFO] Web modules
[INFO] GeoGig Web API
[INFO] GeoGig WebApp
[INFO] GeoGig Web API Automated Functional Tests
[INFO] GeoGig Query Language Extension
[INFO] Basic GUI tools
[INFO] GeoGig CLI App
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/parent/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig ---
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/parent/target/geogig-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig ---
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig ---
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/parent/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig/1.1-SNAPSHOT/geogig-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/parent/target/geogig-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig/1.1-SNAPSHOT/geogig-1.1-SNAPSHOT-tests.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig Core API 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-api ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-api ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 55 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 28 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/test-classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/src/test/java/org/locationtech/geogig/model/FieldTypeTest.java: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/src/test/java/org/locationtech/geogig/model/FieldTypeTest.java uses or overrides a deprecated API.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/src/test/java/org/locationtech/geogig/model/FieldTypeTest.java: Recompile with -Xlint:deprecation for details.
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-api ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.model.FieldTypeTest
Running org.locationtech.geogig.model.RevObjectTest
Running org.locationtech.geogig.model.SymRefTest
Running org.locationtech.geogig.model.HashObjectFunnelsTest
Running org.locationtech.geogig.model.BucketTest
Running org.locationtech.geogig.model.RefTest
Running org.locationtech.geogig.model.ObjectIdTest
Running org.locationtech.geogig.model.NodeRefTest
Running org.locationtech.geogig.model.RevTreeTest
Running org.locationtech.geogig.model.Float32BoundsTest
Running org.locationtech.geogig.model.CanonicalNodeOrderTest
Running org.locationtech.geogig.model.NodeTest
Running org.locationtech.geogig.repository.ConflictTest
Running org.locationtech.geogig.repository.DiffEntryTest
Running org.locationtech.geogig.repository.HintsTest
Running org.locationtech.geogig.repository.DiffObjectCountTest
Running org.locationtech.geogig.repository.FeatureInfoTest
Running org.locationtech.geogig.repository.AbstractGeoGigOpTest
Running org.locationtech.geogig.repository.RemoteTest
Running org.locationtech.geogig.repository.ProgressListenerTest
Running org.locationtech.geogig.storage.StorageTypeTest
Running org.locationtech.geogig.storage.ConfigExceptionTest
Running org.locationtech.geogig.storage.VersionedFormatTest
Running org.locationtech.geogig.storage.AutoCloseableIteratorTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.342 sec - in org.locationtech.geogig.model.BucketTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.37 sec - in org.locationtech.geogig.model.SymRefTest
Running org.locationtech.geogig.storage.GraphDatabaseTest
Running org.locationtech.geogig.storage.PluginDefaultsTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.013 sec - in org.locationtech.geogig.storage.GraphDatabaseTest
Running org.locationtech.geogig.storage.BulkOpListenerTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec - in org.locationtech.geogig.storage.BulkOpListenerTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec - in org.locationtech.geogig.storage.PluginDefaultsTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.4 sec - in org.locationtech.geogig.model.Float32BoundsTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.316 sec - in org.locationtech.geogig.repository.DiffObjectCountTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.461 sec - in org.locationtech.geogig.model.ObjectIdTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.487 sec - in org.locationtech.geogig.model.RefTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.542 sec - in org.locationtech.geogig.model.FieldTypeTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.305 sec - in org.locationtech.geogig.storage.ConfigExceptionTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.411 sec - in org.locationtech.geogig.repository.ProgressListenerTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.379 sec - in org.locationtech.geogig.storage.VersionedFormatTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.531 sec - in org.locationtech.geogig.repository.ConflictTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.47 sec - in org.locationtech.geogig.repository.FeatureInfoTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.44 sec - in org.locationtech.geogig.storage.StorageTypeTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.71 sec - in org.locationtech.geogig.model.RevObjectTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.561 sec - in org.locationtech.geogig.repository.HintsTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.626 sec - in org.locationtech.geogig.model.CanonicalNodeOrderTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.723 sec - in org.locationtech.geogig.model.RevTreeTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.603 sec - in org.locationtech.geogig.repository.DiffEntryTest
Tests run: 23, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.734 sec - in org.locationtech.geogig.model.NodeRefTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.482 sec - in org.locationtech.geogig.storage.AutoCloseableIteratorTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.734 sec - in org.locationtech.geogig.model.NodeTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.896 sec - in org.locationtech.geogig.model.HashObjectFunnelsTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.701 sec - in org.locationtech.geogig.repository.AbstractGeoGigOpTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.778 sec - in org.locationtech.geogig.repository.RemoteTest

Results :

Tests run: 141, Failures: 0, Errors: 0, Skipped: 0

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-api >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-api ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-api <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-api >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-api ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-api <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-api ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-api/1.1-SNAPSHOT/geogig-api-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-api/1.1-SNAPSHOT/geogig-api-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-api/1.1-SNAPSHOT/geogig-api-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-api/1.1-SNAPSHOT/geogig-api-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/api/target/geogig-api-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-api/1.1-SNAPSHOT/geogig-api-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig Core 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-core ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-core ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 5 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-core ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 335 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/main/java/org/locationtech/geogig/storage/datastream/v2_3/DataStreamValueSerializerV2_3.java: Some input files use or override a deprecated API.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/main/java/org/locationtech/geogig/storage/datastream/v2_3/DataStreamValueSerializerV2_3.java: Recompile with -Xlint:deprecation for details.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/main/java/org/locationtech/geogig/model/internal/NodeId.java: Some input files use unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/main/java/org/locationtech/geogig/model/internal/NodeId.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-core ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 187 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/test-classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/test/java/org/locationtech/geogig/test/integration/HooksTest.java: Some input files use or override a deprecated API.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/test/java/org/locationtech/geogig/test/integration/HooksTest.java: Recompile with -Xlint:deprecation for details.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/test/java/org/locationtech/geogig/data/retrieve/BulkFeatureRetrieverTest.java: Some input files use unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/src/test/java/org/locationtech/geogig/data/retrieve/BulkFeatureRetrieverTest.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-core ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.storage.cache.CacheManagerTest
Running org.locationtech.geogig.storage.cache.KeyTest
Running org.locationtech.geogig.storage.cache.SharedCacheTest
Running org.locationtech.geogig.storage.cache.ObjectCacheTest
Running org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatTest
Running org.locationtech.geogig.storage.datastream.v2_3.StringTableTest
Running org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest
Running org.locationtech.geogig.storage.datastream.v2_3.TailTest
Running org.locationtech.geogig.storage.datastream.v2_3.DataStreamSerializationFactoryV2_3Test
Running org.locationtech.geogig.storage.datastream.v2_3.NodeSetTest
Running org.locationtech.geogig.storage.datastream.Float32BoundsSerializationTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.281 sec - in org.locationtech.geogig.storage.cache.KeyTest
Running org.locationtech.geogig.storage.datastream.LZFSerializationFactoryTest
Running org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV1Test
Running org.locationtech.geogig.storage.datastream.LZ4SerializationFactoryTest
Running org.locationtech.geogig.storage.datastream.FormatCommonV2_1Test
Running org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV2_2Test
Running org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV2_1Test
Running org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV2Test
Running org.locationtech.geogig.storage.datastream.VarintTest
Running org.locationtech.geogig.storage.datastream.FloatPackedCoordinateSequenceTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.245 sec - in org.locationtech.geogig.storage.datastream.v2_3.TailTest
Running org.locationtech.geogig.storage.memory.HeapBlobStoreTest
Running org.locationtech.geogig.storage.memory.HeapRefDatabaseTest
Running org.locationtech.geogig.storage.memory.HeapIndexDatabaseConformanceTest
Running org.locationtech.geogig.storage.memory.HeapConflictsDatabaseConformanceTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.362 sec - in org.locationtech.geogig.storage.datastream.v2_3.StringTableTest
Running org.locationtech.geogig.storage.memory.HeapObjectStoreConformanceTest
Running org.locationtech.geogig.storage.memory.HeapGraphDatabaseTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.247 sec - in org.locationtech.geogig.storage.datastream.Float32BoundsSerializationTest
Running org.locationtech.geogig.storage.impl.INIBlobTest
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.398 sec - in org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatPrefTest
Running org.locationtech.geogig.storage.impl.PersistedIterableTest
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Registered GeoGig cache manager MBean as org.geogig:type=shared-cache
Running org.locationtech.geogig.storage.fs.FileRefDatabaseTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.418 sec - in org.locationtech.geogig.storage.datastream.VarintTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.4 sec - in org.locationtech.geogig.storage.memory.HeapBlobStoreTest
Running org.locationtech.geogig.storage.fs.FileConflictsDatabaseConformanceTest
Running org.locationtech.geogig.storage.fs.FileBlobStoreTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.466 sec - in org.locationtech.geogig.storage.datastream.FloatPackedCoordinateSequenceTest
Running org.locationtech.geogig.storage.fs.IniFileConfigDatabaseTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.242 sec - in org.locationtech.geogig.storage.fs.FileBlobStoreTest
Running org.locationtech.geogig.storage.text.TextSerializationFactoryTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.6 sec - in org.locationtech.geogig.storage.impl.PersistedIterableTest
Running org.locationtech.geogig.test.integration.CleanOpTest
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 2,500 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 1,025 bytes as given by the System property GEOGIG_CACHE_MAX_SIZE=1025
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - cache size is too big: 1025, maximum allowed: 921
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 256 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 119,406,592 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.257 sec - in org.locationtech.geogig.storage.memory.HeapRefDatabaseTest
Running org.locationtech.geogig.test.integration.HooksTest
Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.276 sec - in org.locationtech.geogig.storage.memory.HeapGraphDatabaseTest
Running org.locationtech.geogig.test.integration.ConfigOpTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.579 sec - in org.locationtech.geogig.storage.datastream.FormatCommonV2_1Test
Running org.locationtech.geogig.test.integration.CheckoutOpTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.386 sec - in org.locationtech.geogig.storage.fs.FileRefDatabaseTest
Running org.locationtech.geogig.test.integration.ReportMergeConflictsOpTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.903 sec - in org.locationtech.geogig.storage.cache.ObjectCacheTest
Running org.locationtech.geogig.test.integration.repository.IndexTest
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 1,048,576 bytes as given by the System property GEOGIG_CACHE_MAX_SIZE=1M
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 102,400 bytes as given by the System property GEOGIG_CACHE_MAX_SIZE=100K
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 5,000 bytes as given by the System property GEOGIG_CACHE_MAX_SIZE=0.5
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=-1G. Falling back to default value
java.lang.IllegalArgumentException: Value must be a positive number or zero
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:257)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.assertDefaultMaxSizeDefaultValue(CacheManagerTest.java:188)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeSystemPropertyInvalidValue(CacheManagerTest.java:207)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 2,500 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
Tests run: 23, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.537 sec - in org.locationtech.geogig.storage.fs.IniFileConfigDatabaseTest
Running org.locationtech.geogig.test.integration.repository.WorkingTreeTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.996 sec - in org.locationtech.geogig.storage.memory.HeapConflictsDatabaseConformanceTest
Running org.locationtech.geogig.test.integration.RemoveOpTest
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=. Falling back to default value
java.lang.IllegalArgumentException: Invalid format (), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.getDefaultSizeMB(CacheManagerTest.java:270)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse environment variable GEOGIG_CACHE_MAX_SIZE=
java.lang.IllegalArgumentException: Invalid format (), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.getDefaultSizeMB(CacheManagerTest.java:270)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 2,621,440 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=-1G. Falling back to environment variable
java.lang.IllegalArgumentException: Value must be a positive number or zero
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:257)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeInvalidSysPropFallsBackToEnvVariable(CacheManagerTest.java:235)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 1,024 bytes as given by the environment variable GEOGIG_CACHE_MAX_SIZE=1024
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=. Falling back to environment variable
java.lang.IllegalArgumentException: Invalid format (), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeEnvironmantVariable(CacheManagerTest.java:214)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 1,048,576 bytes as given by the environment variable GEOGIG_CACHE_MAX_SIZE=1M
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=. Falling back to environment variable
java.lang.IllegalArgumentException: Invalid format (), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeEnvironmantVariable(CacheManagerTest.java:217)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 102,400 bytes as given by the environment variable GEOGIG_CACHE_MAX_SIZE=100K
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=. Falling back to environment variable
java.lang.IllegalArgumentException: Invalid format (), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeEnvironmantVariable(CacheManagerTest.java:223)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to 5,000 bytes as given by the environment variable GEOGIG_CACHE_MAX_SIZE=0.5
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=. Falling back to environment variable
java.lang.IllegalArgumentException: Invalid format (), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.assertDefaultMaxSizeDefaultValue(CacheManagerTest.java:188)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeEnvironmantVariableInvalidValue(CacheManagerTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse environment variable GEOGIG_CACHE_MAX_SIZE=-1G
java.lang.IllegalArgumentException: Value must be a positive number or zero
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:257)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.assertDefaultMaxSizeDefaultValue(CacheManagerTest.java:188)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeEnvironmantVariableInvalidValue(CacheManagerTest.java:229)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 2,500 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 119,406,592 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse System property GEOGIG_CACHE_MAX_SIZE=0.91. Falling back to environment variable
java.lang.IllegalArgumentException: percent must be between zero and 90% (0.9)
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
	at org.locationtech.geogig.storage.cache.CacheManager.getCacheSizePercent(CacheManager.java:203)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.assertDefaultMaxSizeDefaultValue(CacheManagerTest.java:188)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeInvalidSysPropAndEnvVarFallsBackToDefaultPercent(CacheManagerTest.java:242)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] WARN org.locationtech.geogig.storage.cache.CacheManager - Unable to parse environment variable GEOGIG_CACHE_MAX_SIZE=alsoInvalid
java.lang.IllegalArgumentException: Invalid format (ALSOINVALID), expected <float>[B|K|M|G]
	at org.locationtech.geogig.storage.cache.CacheManager.parseCacheSizeArgument(CacheManager.java:269)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.assertDefaultMaxSizeDefaultValue(CacheManagerTest.java:188)
	at org.locationtech.geogig.storage.cache.CacheManagerTest.resolveDefaultMaxSizeInvalidSysPropAndEnvVarFallsBackToDefaultPercent(CacheManagerTest.java:242)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.storage.cache.CacheManager - Configuring GeoGig shared object cache maximum size to the default of 2,500 bytes as given by the default 0.250000 percent of available heap. Use the GEOGIG_CACHE_MAX_SIZE System property or environmentvariable to set a different maximum size at runtime
Tests run: 31, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.883 sec - in org.locationtech.geogig.storage.cache.CacheManagerTest
Running org.locationtech.geogig.test.integration.RevParseIntegrationTest
Tests run: 24, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.767 sec - in org.locationtech.geogig.storage.memory.HeapObjectStoreConformanceTest
Running org.locationtech.geogig.test.integration.ApplyPatchOpTest
Tests run: 39, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.706 sec - in org.locationtech.geogig.storage.memory.HeapIndexDatabaseConformanceTest
Running org.locationtech.geogig.test.integration.BranchRenameOpTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.945 sec - in org.locationtech.geogig.storage.datastream.v2_3.NodeSetTest
Running org.locationtech.geogig.test.integration.RemoteRemoveOpTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.557 sec - in org.locationtech.geogig.storage.datastream.LZFSerializationFactoryTest
Running org.locationtech.geogig.test.integration.LogOpTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.755 sec - in org.locationtech.geogig.storage.datastream.LZ4SerializationFactoryTest
Running org.locationtech.geogig.test.integration.GeogigTransactionTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.109 sec - in org.locationtech.geogig.storage.datastream.v2_3.DataStreamSerializationFactoryV2_3Test
Running org.locationtech.geogig.test.integration.PushOpTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.277 sec - in org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV2Test
Running org.locationtech.geogig.test.integration.RevertOpTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.532 sec - in org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV2_2Test
Running org.locationtech.geogig.test.integration.BranchListOpTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.56 sec - in org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV2_1Test
Running org.locationtech.geogig.test.integration.BranchCreateOpTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.666 sec - in org.locationtech.geogig.storage.datastream.DataStreamSerializationFactoryV1Test
Running org.locationtech.geogig.test.integration.RebaseOpTest
Tests run: 22, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.267 sec - in org.locationtech.geogig.storage.text.TextSerializationFactoryTest
Running org.locationtech.geogig.test.integration.TagTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.813 sec - in org.locationtech.geogig.storage.fs.FileConflictsDatabaseConformanceTest
Running org.locationtech.geogig.test.integration.MergeOpTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.176 sec - in org.locationtech.geogig.storage.impl.INIBlobTest
Running org.locationtech.geogig.test.integration.CloneOpTest
[main] INFO org.locationtech.geogig.hooks.Scripting - Running jvm script /opt/public/hipp/ramdisk/geogig/junit640712628066054662/repo2112993152/.geogig/hooks/pre_commit.js
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.187 sec - in org.locationtech.geogig.test.integration.TagTest
Running org.locationtech.geogig.test.integration.FetchOpTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.724 sec - in org.locationtech.geogig.test.integration.CleanOpTest
Running org.locationtech.geogig.test.integration.FindCommonAncestorTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.109 sec - in org.locationtech.geogig.storage.datastream.v2_3.RevTreeFormatTest
[main] INFO org.locationtech.geogig.hooks.Scripting - Running jvm script /opt/public/hipp/ramdisk/geogig/junit640712628066054662/repo2112993152/.geogig/hooks/pre_commit.js
Running org.locationtech.geogig.test.integration.AddOpTest
[main] INFO org.locationtech.geogig.hooks.Scripting - Running jvm script /opt/public/hipp/ramdisk/geogig/junit8187719834653956391/repo315779594/.geogig/hooks/post_commit.js
[main] WARN org.locationtech.geogig.hooks.CommandHookChain - Post-command hook org.locationtech.geogig.hooks.JVMScriptHook@14bb2297 for command org.locationtech.geogig.porcelain.CommitOp threw an exception that will not be propagated
java.lang.NullPointerException
	at org.locationtech.geogig.hooks.Scripting.runJVMScript(Scripting.java:93)
	at org.locationtech.geogig.hooks.JVMScriptHook.post(JVMScriptHook.java:52)
	at org.locationtech.geogig.hooks.CommandHookChain.runPostHooks(CommandHookChain.java:65)
	at org.locationtech.geogig.hooks.CommandHooksDecorator$HooksListener.postCall(CommandHooksDecorator.java:60)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.notifyPost(AbstractGeoGigOp.java:179)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:155)
	at org.locationtech.geogig.test.integration.HooksTest.testFailingPostPostProcessHook(HooksTest.java:148)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] WARN org.locationtech.geogig.hooks.CommandHookChain - Post-command hook org.locationtech.geogig.test.integration.HooksTest$ClasspathHookTest@31c269fd for command org.locationtech.geogig.porcelain.AddOp threw an exception that will not be propagated
java.lang.RuntimeException: expected
	at org.locationtech.geogig.test.integration.HooksTest$ClasspathHookTest.post(HooksTest.java:266)
	at org.locationtech.geogig.hooks.CommandHookChain.runPostHooks(CommandHookChain.java:65)
	at org.locationtech.geogig.hooks.CommandHooksDecorator$HooksListener.postCall(CommandHooksDecorator.java:60)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.notifyPost(AbstractGeoGigOp.java:179)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:155)
	at org.locationtech.geogig.test.integration.RepositoryTestCase.insertAndAdd(RepositoryTestCase.java:377)
	at org.locationtech.geogig.test.integration.RepositoryTestCase.insertAndAdd(RepositoryTestCase.java:365)
	at org.locationtech.geogig.test.integration.HooksTest.testClasspathHookPostFail(HooksTest.java:191)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.hooks.Scripting - Running shell script /opt/public/hipp/ramdisk/geogig/junit8206347573022337886/repo-1739845835/.geogig/hooks/pre_commit.bat
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.992 sec - in org.locationtech.geogig.test.integration.ConfigOpTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.549 sec - in org.locationtech.geogig.test.integration.RemoteRemoveOpTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> a3ad4dd3b550a1215e3001faf8071e3448956105] to refs/remotes/origin/NewRemoteBranch(NewRemoteBranch)
Running org.locationtech.geogig.test.integration.BlameOpTest
[main] INFO org.locationtech.geogig.hooks.Scripting - Running shell script /opt/public/hipp/ramdisk/geogig/junit8206347573022337886/repo-1739845835/.geogig/hooks/pre_commit.bat
Running org.locationtech.geogig.test.integration.ReportCommitConflictsOpTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.064 sec - in org.locationtech.geogig.test.integration.RevParseIntegrationTest
Running org.locationtech.geogig.test.integration.PullOpTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/Branch1 -> 43a3e480cf2de155a4a8a7b4a9030df9a23ab671] to refs/remotes/origin/NewRemoteBranch2(NewRemoteBranch2)
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.033 sec - in org.locationtech.geogig.test.integration.BranchCreateOpTest
Running org.locationtech.geogig.test.integration.CheckSparsePathTest
[main] INFO org.locationtech.geogig.hooks.Scripting - Running jvm script /opt/public/hipp/ramdisk/geogig/junit8917045627846471088/repo1546520944/.geogig/hooks/pre_commit.js
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.408 sec - in org.locationtech.geogig.test.integration.HooksTest
Running org.locationtech.geogig.test.integration.CreatePatchOpTest
Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.628 sec - in org.locationtech.geogig.test.integration.ApplyPatchOpTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.991 sec - in org.locationtech.geogig.test.integration.repository.IndexTest
Running org.locationtech.geogig.test.integration.SquashOpTest
Running org.locationtech.geogig.test.integration.SparseCloneTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.084 sec - in org.locationtech.geogig.storage.cache.SharedCacheTest
Running org.locationtech.geogig.test.integration.DiffOpTest
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.569 sec - in org.locationtech.geogig.test.integration.RevertOpTest
Running org.locationtech.geogig.test.integration.CleanRefsOpTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.089 sec - in org.locationtech.geogig.test.integration.CleanRefsOpTest
Running org.locationtech.geogig.test.integration.LsTreeOpTest
Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.729 sec - in org.locationtech.geogig.test.integration.LogOpTest
Running org.locationtech.geogig.test.integration.GeogigAPITest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.535 sec - in org.locationtech.geogig.test.integration.BranchRenameOpTest
testMergeNoCommits
Running org.locationtech.geogig.test.integration.BranchDeleteOpTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.873 sec - in org.locationtech.geogig.test.integration.BranchListOpTest
Running org.locationtech.geogig.test.integration.CherryPickOpTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> a3ad4dd3b550a1215e3001faf8071e3448956105] to refs/remotes/origin/NewRemoteBranch(NewRemoteBranch)
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.255 sec - in org.locationtech.geogig.test.integration.GeogigAPITest
Running org.locationtech.geogig.test.integration.RemoteListOpTest
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.817 sec - in org.locationtech.geogig.test.integration.GeogigTransactionTest
Running org.locationtech.geogig.test.integration.CommitOpTest
testOctopusMerge
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.376 sec - in org.locationtech.geogig.test.integration.RemoteListOpTest
Running org.locationtech.geogig.test.integration.ConflictsReadWriteOpTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.089 sec - in org.locationtech.geogig.test.integration.ConflictsReadWriteOpTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.391 sec - in org.locationtech.geogig.test.integration.CheckSparsePathTest
Running org.locationtech.geogig.test.integration.RebuildGraphOpTest
Running org.locationtech.geogig.test.integration.RemoteAddOpTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 12.039 sec - in org.locationtech.geogig.test.integration.RemoveOpTest
Running org.locationtech.geogig.test.integration.StatusOpTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.879 sec - in org.locationtech.geogig.test.integration.BlameOpTest
Running org.locationtech.geogig.test.integration.ResetOpTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.018 sec - in org.locationtech.geogig.test.integration.BranchDeleteOpTest
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.829 sec - in org.locationtech.geogig.test.integration.RebaseOpTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.823 sec - in org.locationtech.geogig.test.integration.RebuildGraphOpTest
Running org.locationtech.geogig.test.performance.RevTreeBuilderPerformanceTest
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.test.performance.RevTreeBuilderPerformanceTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec - in org.locationtech.geogig.test.performance.RevTreeBuilderPerformanceTest
Running org.locationtech.geogig.model.impl.RevPersonTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in org.locationtech.geogig.model.impl.RevPersonTest
Running org.locationtech.geogig.model.impl.RevFeatureTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec - in org.locationtech.geogig.model.impl.RevFeatureTest
Running org.locationtech.geogig.model.impl.RevFeatureTypeTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.07 sec - in org.locationtech.geogig.model.impl.RevFeatureTypeTest
Running org.locationtech.geogig.model.impl.RevCommitImplTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec - in org.locationtech.geogig.model.impl.RevCommitImplTest
Running org.locationtech.geogig.model.impl.QuadTreeBuilderExpandCollapseTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec - in org.locationtech.geogig.model.impl.QuadTreeBuilderExpandCollapseTest
Running org.locationtech.geogig.model.impl.LegacyTreeBuilderTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> d13557ae0d974dbbc25eb1e98414ea3a2455cc3c] to refs/remotes/origin/refs/heads/master(refs/heads/master)
Running org.locationtech.geogig.test.performance.LogOpPerformanceTest
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.test.performance.LogOpPerformanceTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 sec - in org.locationtech.geogig.test.performance.LogOpPerformanceTest
Running org.locationtech.geogig.model.impl.CanonicalTreeBuilderTest
Running org.locationtech.geogig.test.performance.HeapGraphDatabaseStressTest
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.test.performance.HeapGraphDatabaseStressTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.013 sec - in org.locationtech.geogig.test.performance.HeapGraphDatabaseStressTest
Running org.locationtech.geogig.model.impl.CommitBuilderTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.033 sec - in org.locationtech.geogig.model.impl.CommitBuilderTest
Running org.locationtech.geogig.model.internal.QuadTreeClusteringStrategyTest
Tests run: 12, Failures: 0, Errors: 0, Skipped: 12, Time elapsed: 0.136 sec - in org.locationtech.geogig.model.internal.QuadTreeClusteringStrategyTest
Running org.locationtech.geogig.model.internal.CanonicalClusteringStrategyHeapStorageTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.325 sec - in org.locationtech.geogig.test.integration.StatusOpTest
Running org.locationtech.geogig.model.internal.CanonicalClusteringStrategyRocksdbStorageTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.521 sec - in org.locationtech.geogig.test.integration.RemoteAddOpTest
Running org.locationtech.geogig.model.internal.QuadTreeClusteringStrategy_putTest
Tests run: 20, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.517 sec - in org.locationtech.geogig.test.integration.repository.WorkingTreeTest
Running org.locationtech.geogig.model.internal.DAGNodeTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.093 sec - in org.locationtech.geogig.test.integration.CreatePatchOpTest
Running org.locationtech.geogig.model.internal.QuadTreeClusteringStrategy_computeIdTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.098 sec - in org.locationtech.geogig.model.internal.QuadTreeClusteringStrategy_computeIdTest
Running org.locationtech.geogig.model.internal.NodeIdTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.035 sec - in org.locationtech.geogig.model.internal.NodeIdTest
Running org.locationtech.geogig.model.internal.QuadrantTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.239 sec - in org.locationtech.geogig.model.internal.QuadrantTest
Running org.locationtech.geogig.data.retrieve.IteratorBackedFeatureReaderTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 sec - in org.locationtech.geogig.data.retrieve.IteratorBackedFeatureReaderTest
Running org.locationtech.geogig.data.retrieve.BulkFeatureRetrieverTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.935 sec - in org.locationtech.geogig.model.internal.DAGNodeTest
Running org.locationtech.geogig.data.retrieve.MultiFeatureTypeBuilderTest
DAG[id:[], orig:EMPTY, status: CHANGED, size: 129, children: 0, buckets: 1)[children: {}, buckets: [[2]]]
 DAG[id:[2], orig:EMPTY, status: CHANGED, size: 129, children: 0, buckets: 2)[children: {}, buckets: [[2, 0], [2, 3]]]
  Tests run: 7, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 3.199 sec - in org.locationtech.geogig.test.integration.CherryPickOpTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.111 sec - in org.locationtech.geogig.data.retrieve.MultiFeatureTypeBuilderTest
Running org.locationtech.geogig.data.retrieve.BackgroundingIteratorTest
DAG[id:[2, 0], orig:EMPTY, status: CHANGED, size: 90, children: 90, buckets: 0)[children: {node # 2=NodeId[node # 2, Env[2.0 : 2.0, 1.0 : 1.0]], node # 1=NodeId[node # 1, Env[1.0 : 1.0, 1.0 : 1.0]], node # 18=NodeId[node # 18, Env[18.0 : 18.0, 1.0 : 1.0]], node # 19=NodeId[node # 19, Env[19.0 : 19.0, 1.0 : 1.0]], node # 16=NodeId[node # 16, Env[16.0 : 16.0, 1.0 : 1.0]], node # 17=NodeId[node # 17, Env[17.0 : 17.0, 1.0 : 1.0]], node # 9=NodeId[node # 9, Env[9.0 : 9.0, 1.0 : 1.0]], node # 8=NodeId[node # 8, Env[8.0 : 8.0, 1.0 : 1.0]], node # 7=NodeId[node # 7, Env[7.0 : 7.0, 1.0 : 1.0]], node # 6=NodeId[node # 6, Env[6.0 : 6.0, 1.0 : 1.0]], node # 5=NodeId[node # 5, Env[5.0 : 5.0, 1.0 : 1.0]], node # 4=NodeId[node # 4, Env[4.0 : 4.0, 1.0 : 1.0]], node # 3=NodeId[node # 3, Env[3.0 : 3.0, 1.0 : 1.0]], node # 61=NodeId[node # 61, Env[61.0 : 61.0, 1.0 : 1.0]], node # 62=NodeId[node # 62, Env[62.0 : 62.0, 1.0 : 1.0]], node # 60=NodeId[node # 60, Env[60.0 : 60.0, 1.0 : 1.0]], node # 69=NodeId[node # 69, Env[69.0 : 69.0, 1.0 : 1.0]], node # 25=NodeId[node # 25, Env[25.0 : 25.0, 1.0 : 1.0]], node # 26=NodeId[node # 26, Env[26.0 : 26.0, 1.0 : 1.0]], node # 67=NodeId[node # 67, Env[67.0 : 67.0, 1.0 : 1.0]], node # 23=NodeId[node # 23, Env[23.0 : 23.0, 1.0 : 1.0]], node # 68=NodeId[node # 68, Env[68.0 : 68.0, 1.0 : 1.0]], node # 24=NodeId[node # 24, Env[24.0 : 24.0, 1.0 : 1.0]], node # 65=NodeId[node # 65, Env[65.0 : 65.0, 1.0 : 1.0]], node # 21=NodeId[node # 21, Env[21.0 : 21.0, 1.0 : 1.0]], node # 66=NodeId[node # 66, Env[66.0 : 66.0, 1.0 : 1.0]], node # 22=NodeId[node # 22, Env[22.0 : 22.0, 1.0 : 1.0]], node # 63=NodeId[node # 63, Env[63.0 : 63.0, 1.0 : 1.0]], node # 64=NodeId[node # 64, Env[64.0 : 64.0, 1.0 : 1.0]], node # 20=NodeId[node # 20, Env[20.0 : 20.0, 1.0 : 1.0]], node # 49=NodeId[node # 49, Env[49.0 : 49.0, 1.0 : 1.0]], node # 50=NodeId[node # 50, Env[50.0 : 50.0, 1.0 : 1.0]], node # 51=NodeId[node # 51, Env[51.0 : 51.0, 1.0 : 1.0]], node # 90=NodeId[node # 90, Env[90.0 : 90.0, 1.0 : 1.0]], node # 58=NodeId[node # 58, Env[58.0 : 58.0, 1.0 : 1.0]], node # 14=NodeId[node # 14, Env[14.0 : 14.0, 1.0 : 1.0]], node # 59=NodeId[node # 59, Env[59.0 : 59.0, 1.0 : 1.0]], node # 15=NodeId[node # 15, Env[15.0 : 15.0, 1.0 : 1.0]], node # 56=NodeId[node # 56, Env[56.0 : 56.0, 1.0 : 1.0]], node # 12=NodeId[node # 12, Env[12.0 : 12.0, 1.0 : 1.0]], node # 57=NodeId[node # 57, Env[57.0 : 57.0, 1.0 : 1.0]], node # 13=NodeId[node # 13, Env[13.0 : 13.0, 1.0 : 1.0]], node # 54=NodeId[node # 54, Env[54.0 : 54.0, 1.0 : 1.0]], node # 10=NodeId[node # 10, Env[10.0 : 10.0, 1.0 : 1.0]], node # 55=NodeId[node # 55, Env[55.0 : 55.0, 1.0 : 1.0]], node # 11=NodeId[node # 11, Env[11.0 : 11.0, 1.0 : 1.0]], node # 52=NodeId[node # 52, Env[52.0 : 52.0, 1.0 : 1.0]], node # 53=NodeId[node # 53, Env[53.0 : 53.0, 1.0 : 1.0]], node # 38=NodeId[node # 38, Env[38.0 : 38.0, 1.0 : 1.0]], node # 39=NodeId[node # 39, Env[39.0 : 39.0, 1.0 : 1.0]], node # 83=NodeId[node # 83, Env[83.0 : 83.0, 1.0 : 1.0]], node # 84=NodeId[node # 84, Env[84.0 : 84.0, 1.0 : 1.0]], node # 40=NodeId[node # 40, Env[40.0 : 40.0, 1.0 : 1.0]], node # 81=NodeId[node # 81, Env[81.0 : 81.0, 1.0 : 1.0]], node # 82=NodeId[node # 82, Env[82.0 : 82.0, 1.0 : 1.0]], node # 80=NodeId[node # 80, Env[80.0 : 80.0, 1.0 : 1.0]], node # 47=NodeId[node # 47, Env[47.0 : 47.0, 1.0 : 1.0]], node # 48=NodeId[node # 48, Env[48.0 : 48.0, 1.0 : 1.0]], node # 89=NodeId[node # 89, Env[89.0 : 89.0, 1.0 : 1.0]], node # 45=NodeId[node # 45, Env[45.0 : 45.0, 1.0 : 1.0]], node # 46=NodeId[node # 46, Env[46.0 : 46.0, 1.0 : 1.0]], node # 87=NodeId[node # 87, Env[87.0 : 87.0, 1.0 : 1.0]], node # 43=NodeId[node # 43, Env[43.0 : 43.0, 1.0 : 1.0]], node # 88=NodeId[node # 88, Env[88.0 : 88.0, 1.0 : 1.0]], node # 44=NodeId[node # 44, Env[44.0 : 44.0, 1.0 : 1.0]], node # 85=NodeId[node # 85, Env[85.0 : 85.0, 1.0 : 1.0]], node # 41=NodeId[node # 41, Env[41.0 : 41.0, 1.0 : 1.0]], node # 86=NodeId[node # 86, Env[86.0 : 86.0, 1.0 : 1.0]], node # 42=NodeId[node # 42, Env[42.0 : 42.0, 1.0 : 1.0]], node # 29=NodeId[node # 29, Env[29.0 : 29.0, 1.0 : 1.0]], node # 27=NodeId[node # 27, Env[27.0 : 27.0, 1.0 : 1.0]], node # 28=NodeId[node # 28, Env[28.0 : 28.0, 1.0 : 1.0]], node # 72=NodeId[node # 72, Env[72.0 : 72.0, 1.0 : 1.0]], node # 73=NodeId[node # 73, Env[73.0 : 73.0, 1.0 : 1.0]], node # 70=NodeId[node # 70, Env[70.0 : 70.0, 1.0 : 1.0]], node # 71=NodeId[node # 71, Env[71.0 : 71.0, 1.0 : 1.0]], node # 36=NodeId[node # 36, Env[36.0 : 36.0, 1.0 : 1.0]], node # 37=NodeId[node # 37, Env[37.0 : 37.0, 1.0 : 1.0]], node # 78=NodeId[node # 78, Env[78.0 : 78.0, 1.0 : 1.0]], node # 34=NodeId[node # 34, Env[34.0 : 34.0, 1.0 : 1.0]], node # 79=NodeId[node # 79, Env[79.0 : 79.0, 1.0 : 1.0]], node # 35=NodeId[node # 35, Env[35.0 : 35.0, 1.0 : 1.0]], node # 76=NodeId[node # 76, Env[76.0 : 76.0, 1.0 : 1.0]], node # 32=NodeId[node # 32, Env[32.0 : 32.0, 1.0 : 1.0]], node # 77=NodeId[node # 77, Env[77.0 : 77.0, 1.0 : 1.0]], node # 33=NodeId[node # 33, Env[33.0 : 33.0, 1.0 : 1.0]], node # 74=NodeId[node # 74, Env[74.0 : 74.0, 1.0 : 1.0]], node # 30=NodeId[node # 30, Env[30.0 : 30.0, 1.0 : 1.0]], node # 75=NodeId[node # 75, Env[75.0 : 75.0, 1.0 : 1.0]], node # 31=NodeId[node # 31, Env[31.0 : 31.0, 1.0 : 1.0]]}, buckets: []]
  DAG[id:[2, 3], orig:EMPTY, status: CHANGED, size: 39, children: 39, buckets: 0)[children: {node # 107=NodeId[node # 107, Env[107.0 : 107.0, 1.0 : 1.0]], node # 129=NodeId[node # 129, Env[129.0 : 129.0, 1.0 : 1.0]], node # 106=NodeId[node # 106, Env[106.0 : 106.0, 1.0 : 1.0]], node # 128=NodeId[node # 128, Env[128.0 : 128.0, 1.0 : 1.0]], node # 109=NodeId[node # 109, Env[109.0 : 109.0, 1.0 : 1.0]], node # 108=NodeId[node # 108, Env[108.0 : 108.0, 1.0 : 1.0]], node # 103=NodeId[node # 103, Env[103.0 : 103.0, 1.0 : 1.0]], node # 125=NodeId[node # 125, Env[125.0 : 125.0, 1.0 : 1.0]], node # 102=NodeId[node # 102, Env[102.0 : 102.0, 1.0 : 1.0]], node # 124=NodeId[node # 124, Env[124.0 : 124.0, 1.0 : 1.0]], node # 105=NodeId[node # 105, Env[105.0 : 105.0, 1.0 : 1.0]], node # 127=NodeId[node # 127, Env[127.0 : 127.0, 1.0 : 1.0]], node # 104=NodeId[node # 104, Env[104.0 : 104.0, 1.0 : 1.0]], node # 126=NodeId[node # 126, Env[126.0 : 126.0, 1.0 : 1.0]], node # 121=NodeId[node # 121, Env[121.0 : 121.0, 1.0 : 1.0]], node # 120=NodeId[node # 120, Env[120.0 : 120.0, 1.0 : 1.0]], node # 101=NodeId[node # 101, Env[101.0 : 101.0, 1.0 : 1.0]], node # 123=NodeId[node # 123, Env[123.0 : 123.0, 1.0 : 1.0]], node # 100=NodeId[node # 100, Env[100.0 : 100.0, 1.0 : 1.0]], node # 122=NodeId[node # 122, Env[122.0 : 122.0, 1.0 : 1.0]], node # 118=NodeId[node # 118, Env[118.0 : 118.0, 1.0 : 1.0]], node # 117=NodeId[node # 117, Env[117.0 : 117.0, 1.0 : 1.0]], node # 119=NodeId[node # 119, Env[119.0 : 119.0, 1.0 : 1.0]], node # 114=NodeId[node # 114, Env[114.0 : 114.0, 1.0 : 1.0]], node # 113=NodeId[node # 113, Env[113.0 : 113.0, 1.0 : 1.0]], node # 116=NodeId[node # 116, Env[116.0 : 116.0, 1.0 : 1.0]], node # 115=NodeId[node # 115, Env[115.0 : 115.0, 1.0 : 1.0]], node # 110=NodeId[node # 110, Env[110.0 : 110.0, 1.0 : 1.0]], node # 112=NodeId[node # 112, Env[112.0 : 112.0, 1.0 : 1.0]], node # 111=NodeId[node # 111, Env[111.0 : 111.0, 1.0 : 1.0]], node # 94=NodeId[node # 94, Env[94.0 : 94.0, 1.0 : 1.0]], node # 95=NodeId[node # 95, Env[95.0 : 95.0, 1.0 : 1.0]], node # 92=NodeId[node # 92, Env[92.0 : 92.0, 1.0 : 1.0]], node # 93=NodeId[node # 93, Env[93.0 : 93.0, 1.0 : 1.0]], node # 91=NodeId[node # 91, Env[91.0 : 91.0, 1.0 : 1.0]], node # 98=NodeId[node # 98, Env[98.0 : 98.0, 1.0 : 1.0]], node # 99=NodeId[node # 99, Env[99.0 : 99.0, 1.0 : 1.0]], node # 96=NodeId[node # 96, Env[96.0 : 96.0, 1.0 : 1.0]], node # 97=NodeId[node # 97, Env[97.0 : 97.0, 1.0 : 1.0]]}, buckets: []]
Running org.locationtech.geogig.data.retrieve.BulkGeoGigFeatureRetrieverTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.151 sec - in org.locationtech.geogig.data.retrieve.BulkGeoGigFeatureRetrieverTest
Running org.locationtech.geogig.data.EPSGBoundsCalcTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> a3ad4dd3b550a1215e3001faf8071e3448956105] to refs/remotes/origin/master(null)
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.702 sec - in org.locationtech.geogig.test.integration.FindCommonAncestorTest
Running org.locationtech.geogig.data.EPSGBoundsXYTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec - in org.locationtech.geogig.data.EPSGBoundsXYTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.009 sec - in org.locationtech.geogig.data.retrieve.BulkFeatureRetrieverTest
Running org.locationtech.geogig.data.PrimitiveArrayToStringConverterFactoryTest
Running org.locationtech.geogig.data.MapToStringConverterFactoryTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.233 sec - in org.locationtech.geogig.data.PrimitiveArrayToStringConverterFactoryTest
Running org.locationtech.geogig.data.EPSGBoundsYXTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.14 sec - in org.locationtech.geogig.data.MapToStringConverterFactoryTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.017 sec - in org.locationtech.geogig.data.EPSGBoundsYXTest
Running org.locationtech.geogig.plumbing.ResolveRepositoryNameTest
Running org.locationtech.geogig.data.FeatureBuilderTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.062 sec - in org.locationtech.geogig.test.integration.ReportCommitConflictsOpTest
Running org.locationtech.geogig.plumbing.merge.MergeFeaturesOpTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.086 sec - in org.locationtech.geogig.data.FeatureBuilderTest
Running org.locationtech.geogig.plumbing.merge.MergeStatusBuilderDiffEntrySerializerTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.14 sec - in org.locationtech.geogig.plumbing.merge.MergeFeaturesOpTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.196 sec - in org.locationtech.geogig.plumbing.ResolveRepositoryNameTest
Running org.locationtech.geogig.plumbing.index.BuildIndexOpTest
Running org.locationtech.geogig.plumbing.index.BuildFullHistoryIndexOpTest
Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 16.224 sec - in org.locationtech.geogig.test.integration.ReportMergeConflictsOpTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.243 sec - in org.locationtech.geogig.model.internal.QuadTreeClusteringStrategy_putTest
Running org.locationtech.geogig.plumbing.diff.DepthTreeIteratorTest
testMergeTwice
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.22 sec - in org.locationtech.geogig.plumbing.merge.MergeStatusBuilderDiffEntrySerializerTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.199 sec - in org.locationtech.geogig.data.retrieve.BackgroundingIteratorTest
Running org.locationtech.geogig.plumbing.diff.PostOrderDiffWalkTest
Running org.locationtech.geogig.plumbing.diff.MutableTreeTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec - in org.locationtech.geogig.plumbing.diff.MutableTreeTest
Running org.locationtech.geogig.plumbing.diff.GeometryDiffTest
Running org.locationtech.geogig.plumbing.diff.TreeDifferenceTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.013 sec - in org.locationtech.geogig.plumbing.diff.TreeDifferenceTest
Running org.locationtech.geogig.plumbing.diff.PreOrderDiffWalkTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.376 sec - in org.locationtech.geogig.plumbing.diff.GeometryDiffTest
Running org.locationtech.geogig.plumbing.diff.PatchSerializationTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> a3ad4dd3b550a1215e3001faf8071e3448956105] to refs/remotes/origin/master(null)
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/Branch1 -> e4d10fce0f71850b8e201763343ebde1c71aa5f6] to refs/remotes/origin/Branch1(null)
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.603 sec - in org.locationtech.geogig.test.integration.SquashOpTest
Running org.locationtech.geogig.plumbing.diff.DiffCountConsumerTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.305 sec - in org.locationtech.geogig.plumbing.diff.PatchSerializationTest
Running org.locationtech.geogig.plumbing.diff.AttributeDiffTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec - in org.locationtech.geogig.plumbing.diff.AttributeDiffTest
Running org.locationtech.geogig.plumbing.RevParseTest
testNoFastForwardSpecifyAuthor
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/Branch1 -> b9ffcf8d172b8905500e906f2218c55b58cf2c44] to refs/remotes/origin/Branch1(Branch1)
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.264 sec - in org.locationtech.geogig.test.integration.CheckoutOpTest
Running org.locationtech.geogig.plumbing.DiffTreeTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> b2e392a358773a01efe3ec48a3580362a7fc83d0] to refs/remotes/origin/refs/heads/master(refs/heads/master)
Removed 32,600 nodes in 1.685 s
testBothBranchesSameGeometryChange
Tests run: 26, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.557 sec - in org.locationtech.geogig.test.integration.CommitOpTest
Running org.locationtech.geogig.plumbing.HashObjectTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.781 sec - in org.locationtech.geogig.test.integration.CloneOpTest
Running org.locationtech.geogig.plumbing.ResolveFeatureTypeTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.287 sec - in org.locationtech.geogig.test.integration.LsTreeOpTest
Running org.locationtech.geogig.plumbing.ParseTimestampTest
Added 7,000 nodes in 320.1 ms
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.257 sec - in org.locationtech.geogig.plumbing.ParseTimestampTest
Running org.locationtech.geogig.plumbing.RefParseTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.733 sec - in org.locationtech.geogig.plumbing.HashObjectTest
Running org.locationtech.geogig.plumbing.WriteTree2Test
testMergeFastForwardSecondCase
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.138 sec - in org.locationtech.geogig.plumbing.diff.PostOrderDiffWalkTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.905 sec - in org.locationtech.geogig.plumbing.ResolveFeatureTypeTest
Running org.locationtech.geogig.plumbing.DescribeFeatureTypeTest
Running org.locationtech.geogig.plumbing.UpdateRefTest
testOctopusMergeWithAutomerge
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.18 sec - in org.locationtech.geogig.plumbing.DescribeFeatureTypeTest
Running org.locationtech.geogig.plumbing.ResolveGeogigURITest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec - in org.locationtech.geogig.plumbing.ResolveGeogigURITest
Running org.locationtech.geogig.plumbing.CatObjectTest
left : Tree[c932cbd11ec75bcc145e2a362a3199bb85eb3abc; size=7; subtrees=2, buckets=0, features=0]
	[TreeNode[buildings -> a400000000000000000000000000000000000000], TreeNode[roads -> ff488999ad51848c7850ffd4d12568a3125172b0]]
	[]
right: Tree[8996d6e4437a8d8ea41ffc1f32cfaab9bf9de384; size=5; subtrees=1, buckets=0, features=0]
	[TreeNode[roads -> 72e2f547f3adc30edd55733abb885e8e6de1f1a4]]
	[]
Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.164 sec - in org.locationtech.geogig.test.integration.ResetOpTest
Running org.locationtech.geogig.plumbing.UpdateSymRefTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.764 sec - in org.locationtech.geogig.model.impl.LegacyTreeBuilderTest
Running org.locationtech.geogig.plumbing.UpdateTreeTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.767 sec - in org.locationtech.geogig.plumbing.UpdateRefTest
Running org.locationtech.geogig.plumbing.DiffBoundsTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/Branch1 -> b9ffcf8d172b8905500e906f2218c55b58cf2c44] to refs/remotes/origin/Branch1(Branch1)
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.557 sec - in org.locationtech.geogig.plumbing.UpdateSymRefTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.438 sec - in org.locationtech.geogig.plumbing.UpdateTreeTest
Running org.locationtech.geogig.plumbing.CheckRefFormatTest
Running org.locationtech.geogig.plumbing.DiffFeatureTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.84 sec - in org.locationtech.geogig.plumbing.CatObjectTest
Running org.locationtech.geogig.plumbing.WalkGraphOpTest
testConflictingMergeInterceptor

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.389 sec - in org.locationtech.geogig.plumbing.CheckRefFormatTest
Running org.locationtech.geogig.porcelain.index.UpdateIndexesOpTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.99 sec - in org.locationtech.geogig.test.integration.PullOpTest
Running org.locationtech.geogig.porcelain.index.UpdateIndexOpTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.984 sec - in org.locationtech.geogig.plumbing.RefParseTest
Running org.locationtech.geogig.porcelain.index.DropIndexOpTest
Removed 32,600 nodes in 3.995 s
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.76 sec - in org.locationtech.geogig.test.integration.AddOpTest
Running org.locationtech.geogig.porcelain.index.CreateIndexOpTest
Added 5,000 nodes in 70.48 ms
Added 1,024 nodes in 2.267 ms
sp	StringProp1_1 -> StringProp1_1a
pp	0 point(s) deleted, 0 new point(s) added, 1 point(s) moved
ip	1000 -> 1001

Removed 400 nodes in 1.808 ms
Exception caught executing task: 
java.lang.IllegalStateException: java.lang.IllegalStateException: Object NodeRef[Points/Points.1 -> a47ca38e5c3e92c94dec9e8ea597c642003ec878] not found.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
	at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
	at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
	at java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2616)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk.walk(PreOrderDiffWalk.java:322)
	at org.locationtech.geogig.plumbing.WalkGraphOp._call(WalkGraphOp.java:160)
	at org.locationtech.geogig.plumbing.WalkGraphOp._call(WalkGraphOp.java:32)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.plumbing.WalkGraphOpTest.testObjectDoesNotExist(WalkGraphOpTest.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: java.lang.IllegalStateException: Object NodeRef[Points/Points.1 -> a47ca38e5c3e92c94dec9e8ea597c642003ec878] not found.
	at org.locationtech.geogig.plumbing.WalkGraphOp$1.checkExists(WalkGraphOp.java:155)
	at org.locationtech.geogig.plumbing.WalkGraphOp$1.feature(WalkGraphOp.java:128)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$CancellableConsumer.feature(PreOrderDiffWalk.java:1303)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$WalkAction.node(PreOrderDiffWalk.java:627)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$TraverseLeafLeaf.compute(PreOrderDiffWalk.java:830)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$TraverseTreeContents.compute(PreOrderDiffWalk.java:736)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$TraverseTree.compute(PreOrderDiffWalk.java:692)
	at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:401)
	at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:843)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$TraverseLeafLeaf.compute(PreOrderDiffWalk.java:837)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$TraverseTreeContents.compute(PreOrderDiffWalk.java:736)
	at org.locationtech.geogig.plumbing.diff.PreOrderDiffWalk$TraverseTree.compute(PreOrderDiffWalk.java:692)
	at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.673 sec - in org.locationtech.geogig.plumbing.diff.DiffCountConsumerTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.89 sec - in org.locationtech.geogig.plumbing.DiffFeatureTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.181 sec - in org.locationtech.geogig.plumbing.WalkGraphOpTest
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.767 sec - in org.locationtech.geogig.plumbing.WriteTree2Test
Running org.locationtech.geogig.porcelain.InitOpTest
Running org.locationtech.geogig.repository.impl.SpatialOpsTest
Running org.locationtech.geogig.repository.impl.DepthSearchTest
Running org.locationtech.geogig.repository.impl.RepositoryResolverTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec - in org.locationtech.geogig.repository.impl.RepositoryResolverTest
Running org.locationtech.geogig.repository.impl.RevFeatureBuilderTest
Added 10,000 nodes in 200.0 ms
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.628 sec - in org.locationtech.geogig.model.internal.CanonicalClusteringStrategyHeapStorageTest
testMerge
Added 7,000 nodes in 671.5 ms
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.482 sec - in org.locationtech.geogig.repository.impl.DepthSearchTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.888 sec - in org.locationtech.geogig.repository.impl.RevFeatureBuilderTest
testConflictingOctopusMerge
testFastForwardOnly
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.47 sec - in org.locationtech.geogig.porcelain.InitOpTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> a3ad4dd3b550a1215e3001faf8071e3448956105] to refs/remotes/origin/master(null)
testSpecifyAuthor
testOursAndTheirs
testNoCommitMerge
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> a3ad4dd3b550a1215e3001faf8071e3448956105] to refs/remotes/origin/master(null)
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 21.864 sec - in org.locationtech.geogig.test.integration.PushOpTest
testMergeFastForward
testOctopusMergeSameFeatureChanges
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> 32b4e258bf8026e45ba1c2ace4a1f36e15b862a1] to refs/remotes/origin/master(null)
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.709 sec - in org.locationtech.geogig.plumbing.RevParseTest
testMergeNullCommit
testMergeMultiple
testMergeConflictingPolygon
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.919 sec - in org.locationtech.geogig.model.impl.CanonicalTreeBuilderTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.412 sec - in org.locationtech.geogig.plumbing.DiffTreeTest
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 21.162 sec - in org.locationtech.geogig.test.integration.FetchOpTest
Added 5,000 nodes in 420.0 ms
testMergeConflictingBranchesTheirs
Added 1,024 nodes in 134.4 ms
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.166 sec - in org.locationtech.geogig.test.integration.SparseCloneTest
Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.066 sec - in org.locationtech.geogig.test.integration.DiffOpTest
Removed 400 nodes in 12.80 ms
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.513 sec - in org.locationtech.geogig.plumbing.DiffBoundsTest
testMergeWithFeatureMerge
testMergeNoCommitMessage
Added 10,000 nodes in 260.8 ms
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 16.78 sec - in org.locationtech.geogig.model.internal.CanonicalClusteringStrategyRocksdbStorageTest
testMergeTwoBranchesWithNewFeatureType
testCancelScenario1
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.091 sec - in org.locationtech.geogig.porcelain.index.DropIndexOpTest
testCancelScenario2
testCancelScenario3
testCancelScenario4
testNoFastForward
testMergeConflictingBranches
testMergeConflictingBranchesOurs
Tests run: 30, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 27.06 sec - in org.locationtech.geogig.test.integration.MergeOpTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 16.858 sec - in org.locationtech.geogig.plumbing.index.BuildIndexOpTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.734 sec - in org.locationtech.geogig.plumbing.index.BuildFullHistoryIndexOpTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.845 sec - in org.locationtech.geogig.porcelain.index.CreateIndexOpTest
Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.92 sec - in org.locationtech.geogig.porcelain.index.UpdateIndexOpTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 16.027 sec - in org.locationtech.geogig.porcelain.index.UpdateIndexesOpTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 23.346 sec - in org.locationtech.geogig.plumbing.diff.DepthTreeIteratorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.285 sec - in org.locationtech.geogig.repository.impl.SpatialOpsTest
PreOrderDiffWalkTest: walked 524,288 vs 262144 trees in 390.7 ms
PreOrderDiffWalkTest: walked 1,024 vs 512 trees in 12.62 ms
PreOrderDiffWalkTest: walked 16,384 vs 512 trees in 118.9 ms
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 28.486 sec - in org.locationtech.geogig.data.EPSGBoundsCalcTest
Tests run: 24, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 28.42 sec - in org.locationtech.geogig.plumbing.diff.PreOrderDiffWalkTest

Results :

Tests run: 1287, Failures: 0, Errors: 0, Skipped: 16

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-core ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-core ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-core >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-core ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-core <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-core ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-core >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-core ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-core <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-core ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-core ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-core/1.1-SNAPSHOT/geogig-core-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-core/1.1-SNAPSHOT/geogig-core-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-core/1.1-SNAPSHOT/geogig-core-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-core/1.1-SNAPSHOT/geogig-core-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/core/target/geogig-core-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-core/1.1-SNAPSHOT/geogig-core-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig DataStore Implementation 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-datastore ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-datastore ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-datastore ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-datastore ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 18 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/src/main/java/org/locationtech/geogig/geotools/data/GeogigFeatureSource.java: Some input files use unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/src/main/java/org/locationtech/geogig/geotools/data/GeogigFeatureSource.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-datastore ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-datastore ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 15 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/test-classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/src/test/java/org/locationtech/geogig/geotools/data/reader/FeatureReaderBuilderTest.java: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/src/test/java/org/locationtech/geogig/geotools/data/reader/FeatureReaderBuilderTest.java uses unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/src/test/java/org/locationtech/geogig/geotools/data/reader/FeatureReaderBuilderTest.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-datastore ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.geotools.data.GeoGigFeatureStoreTest
Running org.locationtech.geogig.geotools.data.reader.ExtraDataPropertyAccessorFactoryTest
Running org.locationtech.geogig.geotools.data.reader.PrePostFilterSplitterTest
Running org.locationtech.geogig.geotools.data.reader.PreFilterTest
Running org.locationtech.geogig.geotools.data.reader.MaterializedIndexFeatureIteratorTest
Running org.locationtech.geogig.geotools.data.reader.FeatureReaderBuilderTest
Running org.locationtech.geogig.geotools.data.functional.RunDataStoreDimensionTest
Running org.locationtech.geogig.geotools.data.functional.RunDataStoreFunctionalTest
Running org.locationtech.geogig.geotools.data.GeoGigFeatureStoreIndexedTest
Running org.locationtech.geogig.geotools.data.GeoGigDataStoreTest
Running org.locationtech.geogig.geotools.data.GeoGigDataStoreFactoryTest
Running org.locationtech.geogig.geotools.data.stresstest.DataStoreConcurrencyTest
Running org.locationtech.geogig.geotools.data.GeoGigFeatureSourceTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.956 sec - in org.locationtech.geogig.geotools.data.reader.ExtraDataPropertyAccessorFactoryTest
Feature: GeoGig DataStore Layer Dimension validation
  The GeoGig DataStore is the integration point between GeoServer/OGC services
  and GeoGig repositories. These scenarios are meant to ensure data/feature
  integrity when layers utilize time/elevation dimensions.
Feature: GeoGig DataStore Feature read/write validation
  The GeoGig DataStore is the integration point between GeoServer/OGC services
  and GeoGig repositories. These scenarios are meant to ensure data/feature
  integrity via interactions with the DataStore.
Tests run: 30, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.261 sec - in org.locationtech.geogig.geotools.data.reader.PreFilterTest
Tests run: 37, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.009 sec - in org.locationtech.geogig.geotools.data.reader.PrePostFilterSplitterTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.389 sec - in org.locationtech.geogig.geotools.data.reader.MaterializedIndexFeatureIteratorTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.057 sec - in org.locationtech.geogig.geotools.data.GeoGigDataStoreFactoryTest
2017-06-06T19:20:43.527-0400  WARNING  Feature Collection contains a heterogeneous mix of features
2017-06-06T19:20:44.692-0400  WARNING  Feature Collection contains a heterogeneous mix of features
2017-06-06T19:20:44.958-0400  WARNING  Feature Collection contains a heterogeneous mix of features
Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.89 sec - in org.locationtech.geogig.geotools.data.reader.FeatureReaderBuilderTest

  Scenario: Ensure Point Features with Time dimensions can be retrieved from a DataStore            # features/dimension/Dimesnion.feature:6
    Given I am working with the "pointTime" layer                                                   # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                               # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                 # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    Then I should be able to retrieve data from "dataStore1" using 1 threads and 1 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    And features in "dataStore1" should contain a Time attribute                                    # FunctionalStepDefinitions.features_should_contain_time_attribute(String)
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.342 sec - in org.locationtech.geogig.geotools.data.GeoGigDataStoreTest
Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.089 sec - in org.locationtech.geogig.geotools.data.GeoGigFeatureStoreTest

  Scenario: Ensure Point Features with Time dimensions can be retrieved from a DataStore with indexes # features/dimension/Dimesnion.feature:13
    Given I am working with the "pointTime" layer                                                     # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                 # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                   # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1" with extra attributes "dp"                          # FunctionalStepDefinitions.i_create_a_spatial_index_with_extra_Attributes(String,String)
    Then I should be able to retrieve data from "dataStore1" using 1 threads and 1 reads per thread   # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    And features in "dataStore1" should contain a Time attribute                                      # FunctionalStepDefinitions.features_should_contain_time_attribute(String)

  Scenario: Ensure Point Features with NULL Time dimension values can be retrieved from a DataStore with indexes # features/dimension/Dimesnion.feature:21
    Given I am working with the "pointTime" layer                                                                # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                            # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                              # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1" with extra attributes "dp"                                     # FunctionalStepDefinitions.i_create_a_spatial_index_with_extra_Attributes(String,String)
    And I edit a time dimension attribute value in "dataStore1" to be NULL                                       # FunctionalStepDefinitions.i_edit_a_time_dimension_attribute_value_to_be_null(String)
    Then I should be able to retrieve data from "dataStore1" using 1 threads and 1 reads per thread              # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    And the edited feature in "dataStore1" should contain a NULL Time attribute                                  # FunctionalStepDefinitions.edited_feature_should_contain_null_time_attribute(String)
Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.584 sec - in org.locationtech.geogig.geotools.data.GeoGigFeatureSourceTest

3 Scenarios (3 passed)
18 Steps (18 passed)
0m16.910s

Tests run: 21, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.85 sec - in org.locationtech.geogig.geotools.data.functional.RunDataStoreDimensionTest
2017-06-06T19:20:51.562-0400  WARNING  Feature Collection contains a heterogeneous mix of features
2017-06-06T19:20:52.198-0400  WARNING  Feature Collection contains a heterogeneous mix of features

  Scenario: Ensure Point Features can be retrieved from a DataStore                                  # features/index/FeatureReader.feature:6
    Given I am working with the "point" layer                                                        # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
2017-06-06T19:20:52.814-0400  WARNING  Feature Collection contains a heterogeneous mix of features
Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 22.295 sec - in org.locationtech.geogig.geotools.data.GeoGigFeatureStoreIndexedTest

  Scenario: Ensure Polygon Features can be retrieved from a DataStore                                # features/index/FeatureReader.feature:12
    Given I am working with the "polygon" layer                                                      # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 27.673 sec - in org.locationtech.geogig.geotools.data.stresstest.DataStoreConcurrencyTest

  Scenario: Ensure Point Features can be retrieved from a DataStore with an indexed repo             # features/index/FeatureReader.feature:18
    Given I am working with the "point" layer                                                        # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)

  Scenario: Ensure Polygon Features can be retrieved from a DataStore with an indexed repo           # features/index/FeatureReader.feature:26
    Given I am working with the "polygon" layer                                                      # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)

  Scenario: Ensure indexed Point Features match non-indexed Features                                 # features/index/FeatureReader.feature:34
    Given I am working with the "point" layer                                                        # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    And I have a datastore named "dataStore2" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore2" has the same data as "dataStore1"                                     # FunctionalStepDefinitions.datastore_has_same_data(String,String)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    And datastore "dataStore1" and datastore "dataStore2" both have the same features                # FunctionalStepDefinitions.datastores_have_the_same_features(String,String)

  Scenario: Ensure indexed Polygon Features match non-indexed Features                               # features/index/FeatureReader.feature:44
    Given I am working with the "polygon" layer                                                      # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    And I have a datastore named "dataStore2" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore2" has the same data as "dataStore1"                                     # FunctionalStepDefinitions.datastore_has_same_data(String,String)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    And datastore "dataStore1" and datastore "dataStore2" both have the same features                # FunctionalStepDefinitions.datastores_have_the_same_features(String,String)

  Scenario: Ensure Point Features can be retrieved from a DataStore after editing   # features/index/FeatureReader.feature:54
    Given I am working with the "point" layer                                       # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo               # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I make an edit to "dataStore1"                                             # FunctionalStepDefinitions.i_make_an_edit_to(String)
    Then datastore "dataStore1" has the edited feature                              # FunctionalStepDefinitions.datastore_has_the_edited_feature(String)

  Scenario: Ensure Polygon Features can be retrieved from a DataStore after editing # features/index/FeatureReader.feature:61
    Given I am working with the "polygon" layer                                     # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo               # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I make an edit to "dataStore1"                                             # FunctionalStepDefinitions.i_make_an_edit_to(String)
    Then datastore "dataStore1" has the edited feature                              # FunctionalStepDefinitions.datastore_has_the_edited_feature(String)

  Scenario: Ensure Point Features can be retrieved from a DataStore after editing with index         # features/index/FeatureReader.feature:68
    Given I am working with the "point" layer                                                        # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    When I make an edit to "dataStore1"                                                              # FunctionalStepDefinitions.i_make_an_edit_to(String)
    Then datastore "dataStore1" has the edited feature                                               # FunctionalStepDefinitions.datastore_has_the_edited_feature(String)

  Scenario: Ensure Polygon Features can be retrieved from a DataStore after editing with index       # features/index/FeatureReader.feature:77
    Given I am working with the "polygon" layer                                                      # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    When I make an edit to "dataStore1"                                                              # FunctionalStepDefinitions.i_make_an_edit_to(String)
    Then datastore "dataStore1" has the edited feature                                               # FunctionalStepDefinitions.datastore_has_the_edited_feature(String)

  Scenario: Ensure edited indexed Point Features match edited non-indexed Features     # features/index/FeatureReader.feature:86
    Given I am working with the "point" layer                                          # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                  # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads    # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    And I have a datastore named "dataStore2" backed by a GeoGig repo                  # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore2" has the same data as "dataStore1"                       # FunctionalStepDefinitions.datastore_has_same_data(String,String)
    When I create a spatial index on "dataStore1"                                      # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    And I make an edit to "dataStore1"                                                 # FunctionalStepDefinitions.i_make_an_edit_to(String)
    And I make the same edit to "dataStore2"                                           # FunctionalStepDefinitions.i_make_the_same_edit(String)
    Then datastore "dataStore1" and datastore "dataStore2" both have the same features # FunctionalStepDefinitions.datastores_have_the_same_features(String,String)

  Scenario: Ensure edited indexed Polygon Features match edited non-indexed Features   # features/index/FeatureReader.feature:97
    Given I am working with the "polygon" layer                                        # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                  # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads    # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    And I have a datastore named "dataStore2" backed by a GeoGig repo                  # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore2" has the same data as "dataStore1"                       # FunctionalStepDefinitions.datastore_has_same_data(String,String)
    When I create a spatial index on "dataStore1"                                      # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    And I make an edit to "dataStore1"                                                 # FunctionalStepDefinitions.i_make_an_edit_to(String)
    And I make the same edit to "dataStore2"                                           # FunctionalStepDefinitions.i_make_the_same_edit(String)
    Then datastore "dataStore1" and datastore "dataStore2" both have the same features # FunctionalStepDefinitions.datastores_have_the_same_features(String,String)

  Scenario: Ensure Point Features can be edited concurrently                                         # features/index/FeatureReader.feature:108
    Given I am working with the "point" layer                                                        # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    When I make 20 edits to "dataStore1" using 4 edit threads                                        # FunctionalStepDefinitions.i_make_concurrent_edits(int,String,int)
    Then datastore "dataStore1" has the edited features                                              # FunctionalStepDefinitions.datastore_has_the_edited_features(String)

  Scenario: Ensure Polygon Features can be edited concurrently                                       # features/index/FeatureReader.feature:117
    Given I am working with the "polygon" layer                                                      # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                  # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1"                                                    # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    Then I should be able to retrieve data from "dataStore1" using 4 threads and 40 reads per thread # FunctionalStepDefinitions.datastore_should_have_some_data(String,int,int)
    When I make 20 edits to "dataStore1" using 4 edit threads                                        # FunctionalStepDefinitions.i_make_concurrent_edits(int,String,int)
    Then datastore "dataStore1" has the edited features                                              # FunctionalStepDefinitions.datastore_has_the_edited_features(String)

  Scenario: Ensure Point Features can be edited concurrently with concurrent reads                              # features/index/FeatureReader.feature:126
    Given I am working with the "point" layer                                                                   # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                           # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                             # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1"                                                               # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    And I make 20 edits to "dataStore1" using 4 edit threads while using 20 read threads and 8 reads per thread # FunctionalStepDefinitions.i_make_concurrent_edits_and_reads(int,String,int,int,int)
    Then datastore "dataStore1" has the edited features                                                         # FunctionalStepDefinitions.datastore_has_the_edited_features(String)

  Scenario: Ensure Polygon Features can be edited concurrently with concurrent reads                            # features/index/FeatureReader.feature:134
    Given I am working with the "polygon" layer                                                                 # FunctionalStepDefinitions.i_am_working_with_the_layer(String)
    And I have a datastore named "dataStore1" backed by a GeoGig repo                                           # FunctionalStepDefinitions.i_have_a_datastore_backed_by_a_GeoGig_repo(String)
    And datastore "dataStore1" has 200 features per thread inserted using 4 threads                             # FunctionalStepDefinitions.datastore_has_features_inserted(String,int,int)
    When I create a spatial index on "dataStore1"                                                               # FunctionalStepDefinitions.i_create_a_spatial_index_on(String)
    And I make 20 edits to "dataStore1" using 4 edit threads while using 20 read threads and 8 reads per thread # FunctionalStepDefinitions.i_make_concurrent_edits_and_reads(int,String,int,int,int)
    Then datastore "dataStore1" has the edited features                                                         # FunctionalStepDefinitions.datastore_has_the_edited_features(String)

16 Scenarios (16 passed)
104 Steps (104 passed)
1m57.889s

Tests run: 120, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 120.976 sec - in org.locationtech.geogig.geotools.data.functional.RunDataStoreFunctionalTest

Results :

Tests run: 307, Failures: 0, Errors: 0, Skipped: 0

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-datastore ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-datastore ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-datastore >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-datastore ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-datastore <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-datastore ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-datastore >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-datastore ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-datastore <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-datastore ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-datastore ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-datastore/1.1-SNAPSHOT/geogig-datastore-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-datastore/1.1-SNAPSHOT/geogig-datastore-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-datastore/1.1-SNAPSHOT/geogig-datastore-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-datastore/1.1-SNAPSHOT/geogig-datastore-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/datastore/target/geogig-datastore-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-datastore/1.1-SNAPSHOT/geogig-datastore-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Storage backends 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ storage ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ storage ---
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ storage ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/target/storage-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ storage >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ storage ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ storage <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ storage ---
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ storage >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ storage ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ storage <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ storage ---
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ storage ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/storage/1.1-SNAPSHOT/storage-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/target/storage-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/storage/1.1-SNAPSHOT/storage-1.1-SNAPSHOT-tests.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building RocksDB storage backend 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-rocksdb ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-rocksdb ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-rocksdb ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-rocksdb ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 11 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/src/main/java/org/locationtech/geogig/rocksdb/RocksdbConflictsDatabase.java: Some input files use or override a deprecated API.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/src/main/java/org/locationtech/geogig/rocksdb/RocksdbConflictsDatabase.java: Recompile with -Xlint:deprecation for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-rocksdb ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-rocksdb ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 9 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-rocksdb ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.rocksdb.RocksdbBlobStoreTest
Running org.locationtech.geogig.rocksdb.RocksdbConflictsDatabaseConformanceTest
Running org.locationtech.geogig.rocksdb.RocksdbIndexDatabaseConformanceTest
Running org.locationtech.geogig.rocksdb.performance.RocksdbObjectStoreStressTest
Running org.locationtech.geogig.rocksdb.performance.RevTreeBuilderRocksObjectsPerformanceTest
Running org.locationtech.geogig.rocksdb.RocksdbGraphDatabaseConformanceTest
Running org.locationtech.geogig.rocksdb.RocksdbObjectStoreConformanceTest
Running org.locationtech.geogig.rocksdb.RocksdbStorageProviderTest
Running org.locationtech.geogig.rocksdb.DBOptionsTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.148 sec - in org.locationtech.geogig.rocksdb.RocksdbStorageProviderTest
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.rocksdb.performance.RocksdbObjectStoreStressTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.219 sec - in org.locationtech.geogig.rocksdb.performance.RocksdbObjectStoreStressTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.192 sec - in org.locationtech.geogig.rocksdb.DBOptionsTest
[main] INFO org.locationtech.geogig.test.performance.EnablePerformanceTestRule - org.locationtech.geogig.rocksdb.performance.RevTreeBuilderRocksObjectsPerformanceTest ignored, run with -Dgeogig.runPerformanceTests=true to enable it.
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.301 sec - in org.locationtech.geogig.rocksdb.performance.RevTreeBuilderRocksObjectsPerformanceTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.534 sec - in org.locationtech.geogig.rocksdb.RocksdbBlobStoreTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.664 sec - in org.locationtech.geogig.rocksdb.RocksdbGraphDatabaseConformanceTest
Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.907 sec - in org.locationtech.geogig.rocksdb.RocksdbConflictsDatabaseConformanceTest
Tests run: 29, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.585 sec - in org.locationtech.geogig.rocksdb.RocksdbObjectStoreConformanceTest
Tests run: 39, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.737 sec - in org.locationtech.geogig.rocksdb.RocksdbIndexDatabaseConformanceTest

Results :

Tests run: 110, Failures: 0, Errors: 0, Skipped: 0

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-rocksdb ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-rocksdb ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-rocksdb >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-rocksdb ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-rocksdb <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-rocksdb ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-rocksdb >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-rocksdb ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-rocksdb <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-rocksdb ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-rocksdb ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-rocksdb/1.1-SNAPSHOT/geogig-rocksdb-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-rocksdb/1.1-SNAPSHOT/geogig-rocksdb-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-rocksdb/1.1-SNAPSHOT/geogig-rocksdb-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-rocksdb/1.1-SNAPSHOT/geogig-rocksdb-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/rocksdb/target/geogig-rocksdb-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-rocksdb/1.1-SNAPSHOT/geogig-rocksdb-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig Command Line Interface 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-cli ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-cli ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-cli ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-cli ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 72 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-cli ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 50 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-cli ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 13 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-cli ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.cli.test.functional.RunPlumbingFunctionalTest
Running org.locationtech.geogig.cli.test.functional.RunRemoteFunctionalTest
Running org.locationtech.geogig.cli.test.functional.RunHooksFunctionalTest
Running org.locationtech.geogig.cli.test.functional.RunIndexFunctionalTest
Running org.locationtech.geogig.cli.test.functional.RunPorcelainFunctionalTest
Running org.locationtech.geogig.cli.test.functional.RunGenralFunctionalTest
Running org.locationtech.geogig.cli.test.ArgumentTokenizerTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.139 sec - in org.locationtech.geogig.cli.test.ArgumentTokenizerTest
Feature: "hooks" functionality
    In order to control how geogig commands are executed
    As a Geogig User
    I want to set hooks in my repo
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Set a pre-commit hook and perform a wrong commit': Using URIBuilder DefaultTestRepoURIBuilder
Feature: "cat" command
    In order to know the content of a given element
    As a Geogig User
    I want to display its content
Feature: "clone" command
    In order to build on the work in an existing repository
    As a Geogig User
    I want to clone that repository to my local machine
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the content of a tree.': Using URIBuilder DefaultTestRepoURIBuilder
Feature: General features of CLI
    In order to use the CLI
    As a Geogig User
    I want to use some basic functionality
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone without specifying a repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Use command alias': Using URIBuilder DefaultTestRepoURIBuilder
Feature: Automatic index updating
    In order to keep an index up to date with the canonical tree
    As a Geogig User
    Whenever I make changes to a repository, the index should be automatically updated
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Committing a modified indexed feature updates the indexes': Using URIBuilder DefaultTestRepoURIBuilder
Feature: "add" command
    In order to prepare for making a commit to the geogig repository
    As a Geogig User
    I want to stage my changes to the working tree
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a conflicted feature': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone into the current directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to clone without specifying a repository            # Clone.feature:6
    Given I am in an empty directory                                # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "clone"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "You must specify a repository to clone." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                      # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Merging updates the index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show command candidate when command is mistyped': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Committing a modified indexed feature updates the indexes            # AutomaticIndexUpdating.feature:6
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                  # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m noIndex"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    And the response should contain "1 features added"                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Updated index"                          # DefaultStepDefinitions.the_response_should_not_contain(String)
    When I run the command "index create --tree Points"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                # DefaultStepDefinitions.the_response_should_contain(String)
    And I have staged "points1_modified"                                         # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m withIndex"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Updated index"                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index should have the following features: # DefaultStepDefinitions.verifyIndexContents(String,DataTable)

  Scenario: Use command alias                           # General.feature:6
    Given I have a repository                           # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                         # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                         # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                          # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "config alias.ci commit"     # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "ci -m message"               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the content of a feature.': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show command candidates when command is mistyped': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the content of a tree.                                   # Cat.feature:6
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                       # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "commit -m TestCommit"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "cat HEAD:Points"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points.1"                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.2"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.3"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.hooks.Scripting - Running jvm script /opt/public/hipp/ramdisk/geogig/junit6651202981052173252/data/localrepo/.geogig/hooks/pre_commit.js

  Scenario: Show command candidate when command is mistyped # General.feature:15
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "brunch"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Did you mean this?"   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch"                # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Show command candidates when command is mistyped      # General.feature:22
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "confit"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Did you mean one of these?" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "config"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "commit"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
Feature: "help" command
    In order to know how to use geogig
    As a Geogig User
    I want to see the description of a command
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show general help, containing only porcelain commands': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Set a pre-commit hook and perform a valid commit': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone with too many parameters': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Set a pre-commit hook and perform a wrong commit                       # Hooks.feature:6
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                         # DefaultStepDefinitions.I_stage_6_features()
    And I set up a hook                                                            # DefaultStepDefinitions.I_set_up_a_hook()
    When I run the command "commit -m Test"                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should exit with non-zero exit code                                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    And the response should contain "Commit messages must have at least 5 letters" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Show general help, containing only porcelain commands # Help.feature:6
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "help"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "commit"                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "cat-object"              # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "ls-tree"                 # DefaultStepDefinitions.the_response_should_not_contain(String)

4 Scenarios (4 passed)
23 Steps (23 passed)
0m7.145s

Tests run: 27, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.895 sec - in org.locationtech.geogig.cli.test.functional.RunGenralFunctionalTest

  Scenario: Try to clone into the current directory                           # Clone.feature:12
    Given I am in an empty directory                                          # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                          # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone ${remoterepo} ."                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Cannot clone into your current working directory." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                                # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone a remote repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add features to the index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to clone with too many parameters             # Clone.feature:19
    Given I am in an empty directory                          # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "clone repository directory extra" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Too many arguments provided."      # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to add a conflicted feature                                     # Add.feature:6
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                             # DefaultStepDefinitions.I_have_conflicting_branches()
    And I run the command "merge branch1"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "add Points/Points.1"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1 features and 1 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with zero exit code                                      # DefaultStepDefinitions.it_should_exit_with_zero_exit_code()
    When I run the command "conflicts"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No elements need merging"                 # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the content of a feature that does not exist': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Rebasing a branch generates indexes for each rebased commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the content of a feature.                                         # Cat.feature:16
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "commit -m TestCommit"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "cat HEAD:Points/Points.1"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1000"                                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "POINT (1 1)"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "StringProp1_1"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)

  Scenario: Merging updates the index                                            # AutomaticIndexUpdating.feature:21
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                  # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "index create --tree Points"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    And the repository's "HEAD:Points" index should have the following features: # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "merge branch1 -m MergeMessage"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features added"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index should have the following features: # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a specific feature type to the index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the content of a feature in the working tree.': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.hooks.Scripting - Running jvm script /opt/public/hipp/ramdisk/geogig/junit5006259610456132558/data/localrepo/.geogig/hooks/pre_commit.js

  Scenario: Try to add features to the index                                    # Add.feature:16
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "add"                                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features and 2 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to show the content of a feature that does not exist        # Cat.feature:26
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "cat WORK_HEAD:Points/Points.1"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should exit with non-zero exit code                             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    And the response should contain "refspec did not resolve to any object" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Set a pre-commit hook and perform a valid commit                           # Hooks.feature:14
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                             # DefaultStepDefinitions.I_stage_6_features()
    And I set up a hook                                                                # DefaultStepDefinitions.I_set_up_a_hook()
    When I run the command "commit -m LongerMessage "                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should exit with zero exit code                                            # DefaultStepDefinitions.it_should_exit_with_zero_exit_code()
    And the response should not contain "Commit messages must have at least 5 letters" # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "6 features added"                                 # DefaultStepDefinitions.the_response_should_contain(String)

2 Scenarios (2 passed)
13 Steps (13 passed)
0m8.323s

Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.004 sec - in org.locationtech.geogig.cli.test.functional.RunHooksFunctionalTest
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a using too many parameters': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a specific feature type to the index                     # Add.feature:24
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "add Points"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features and 1 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the content of HEAD.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the content of a feature in the working tree.                          # Cat.feature:32
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                                             # DefaultStepDefinitions.I_have_6_unstaged_features()
    When I run the command "cat WORK_HEAD:Points/Points.1"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1000"                                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "POINT (1 1)"                                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "StringProp1_1"                                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|WORK_HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a specific feature to the index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone a remote repository with blank spaces': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a using too many parameters                            # Add.feature:32
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                             # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "add Points Lines"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Only a single path is supported so far" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Cherry-picking a commit updates the index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to clone a remote repository                                     # Clone.feature:25
    Given I am in an empty directory                                             # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                             # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone ${remoterepo} ${repoURI}"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cloning into '${repoURI}'..."              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Done."                                      # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log"                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit5"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master}"      # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit3"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|branch1}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Commit1"                                    # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Rebasing a branch generates indexes for each rebased commit            # AutomaticIndexUpdating.feature:36
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                    # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "index create --tree Points"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    And the repository's "HEAD:Points" index should have the following features:   # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "rebase master branch1"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the repository's "HEAD:Points" index should have the following features:  # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" index should have the following features: # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add an empty feature type': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a specific feature to the index                          # Add.feature:39
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "add Points/Points.1"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1 features and 1 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try show the binary content of HEAD': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add an empty feature type to an unclean index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the content of HEAD.              # Cat.feature:41
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "commit -m TestCommit"         # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "cat HEAD"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "COMMIT"             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "JohnDoe@example.com" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "TestCommit"          # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to add an empty feature type                                    # Add.feature:47
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged an empty feature type                                   # DefaultStepDefinitions.I_have_unstaged_an_empty_feature_type()
    When I run the command "add"                                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "0 features and 1 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Creating a branch updates the index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone a remote repository that does not exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add an empty feature type to an unclean index                # Add.feature:53
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "lines1"                                                # DefaultStepDefinitions.I_have_unstaged(String)
    And I run the command "add"                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have unstaged an empty feature type                                   # DefaultStepDefinitions.I_have_unstaged_an_empty_feature_type()
    When I run the command "add"                                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1 features and 2 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Cherry-picking a commit updates the index                             # AutomaticIndexUpdating.feature:54
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                   # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "index create --tree Points"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    And the repository's "HEAD:Points" index should have the following features:  # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "cherry-pick branch1"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the repository's "HEAD:Points" index should have the following features: # DefaultStepDefinitions.verifyIndexContents(String,DataTable)

  #annotate with FileSystemReposOnly because other URI providers don't allow spaces
  @FileSystemReposOnly
  Scenario: Try to clone a remote repository with blank spaces              # Clone.feature:42
    Given I am in an empty directory                                        # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository with blank spaces                      # DefaultStepDefinitions.there_is_a_remote_repository_with_blank_spaces()
    When I run the command "clone "remote repo" localrepo"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cloning into 'localrepo'..."          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Done."                                 # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log"                                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit5"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Commit3"                           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit1"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~2}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add when no changes have been made': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to make a shallow clone of a remote repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add from an empty directory                       # Add.feature:61
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "add"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
commitHMO���zJ���|W9John DoeJohnDoe@example.com\��.�$FJohn DoeJohnDoe@example.com\��.�$F
TestCommit
  Scenario: Try show the binary content of HEAD   # Cat.feature:50
    Given I have a repository                     # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                        # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "commit -m TestCommit" # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "cat --binary HEAD"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 1 lines      # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
Feature: "diff-tree" command
    In order to know changes made in a repository
    As a Geogig User
    I want to see the existing differences between trees
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to clone a remote repository that does not exist                  # Clone.feature:56
    Given I am in an empty directory                                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "clone nonexistentrepo ${localrepo}"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nonexistentrepo is not a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository at "${localrepo}" shall not exist                          # DefaultStepDefinitions.the_repository_at_shall_not_exist(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to just stage a modified feature with add update': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add when no changes have been made       # Add.feature:67
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "add"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No unstaged elements" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Creating a branch updates the index                                       # AutomaticIndexUpdating.feature:67
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                        # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the repository's "HEAD:Points" index should have the following features:     # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~3" should not have an index                            # DefaultStepDefinitions.noIndexAtCommit(String)
    When I run the command "branch newBranch HEAD~3"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the repository's "HEAD~3:Points" index should have the following features:   # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "newBranch:Points" index should have the following features: # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
Feature: "index create" command
    In order to improve query performance on a feature tree
    As a Geogig User
    I want to create an index on an attribute of the feature tree
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to just stage a modified feature with add update                # Add.feature:72
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                 # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                 # DefaultStepDefinitions.I_have_staged(String)
    And I have unstaged "points1_modified"                                      # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "add --update"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features and 1 trees staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "status"                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "3 total"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Changes not staged for commit"             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "2 total"                                   # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "apply" command
    In order to apply changes stored in a patch file
    As a Geogig User
    I want to apply a patch to the repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Check if a correct patch can be applied': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, omitting index refspec': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index        # DiffTree.feature:6
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                  # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                  # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree WORK_HEAD STAGE_HEAD" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 1 lines                 # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone a remote repository with a branch specified': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with extra attributes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to make a shallow clone of a remote repository                    # Clone.feature:62
    Given I am in an empty directory                                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                              # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone --depth 2 ${remoterepo} ${repoURI}"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cloning into '${repoURI}'..."               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Done."                                       # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit5"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master~1}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit3"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit1"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|remoterepo|branch1}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Check if a wrong patch can be applied': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index                                                     # CreateIndex.feature:6
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Size: 2"                                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain the index ID for tree "Points"                     # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "HEAD~2:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "HEAD~3:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)

  Scenario: Check if a correct patch can be applied                 # Apply.feature:6
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                  # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I have a patch file                                         # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply --check ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch can be applied"         # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, omitting both refspecs': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Check if a patch can be applied twice': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, omitting index refspec                   # DiffTree.feature:14
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                     # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                                     # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree WORK_HEAD"                                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 1 lines                                                    # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain variable "{@ObjectId|localrepo|WORK_HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)

  Scenario: Check if a wrong patch can be applied                   # Apply.feature:13
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                  # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I modify a feature                                          # DefaultStepDefinitions.I_modify_a_feature()
    And I have a patch file                                         # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply --check ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch cannot be applied"      # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with user-specified bounds': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index with extra attributes                               # CreateIndex.feature:26
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes sp"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Size: 2"                                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain the index ID for tree "Points"                     # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "HEAD~2:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "HEAD~3:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Apply a correct patch': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a sparse clone of a remote repository with no branch specified': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Check if a patch can be applied twice                  # Apply.feature:21
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                 # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I have a patch file                                        # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply ${currentdir}/test.patch"        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "apply --check ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch can be applied"        # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to clone a remote repository with a branch specified             # Clone.feature:77
    Given I am in an empty directory                                             # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                             # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone -b branch1 ${remoterepo} ${repoURI}"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cloning into '${repoURI}'..."              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Done."                                      # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log"                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Commit5"                               # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit4"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|remoterepo|master}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Commit3"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit1"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1~1}"   # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff tree stats between working tree and index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, omitting both refspecs # DiffTree.feature:23
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                   # DefaultStepDefinitions.I_stage_6_features()
    And I modify a featuregit                                                # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 1 lines                                  # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with too few bounds parameters': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index with user-specified bounds                          # CreateIndex.feature:46
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --bounds -45,-45,45,45"         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Size: 2"                                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain the index ID for tree "Points"                     # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-45,-45,45,45"          # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "HEAD~2:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "HEAD~3:Points" should not have an index                      # DefaultStepDefinitions.noIndexAtCommit(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to apply a wrong patch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Apply a correct patch                                # Apply.feature:29
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                               # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I have a patch file                                      # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply ${currentdir}/test.patch"      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch applied succesfully" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff using too many commit refspecs': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone a remote repository that has already been cloned': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff tree stats between working tree and index # DiffTree.feature:31
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                      # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                      # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree --tree-stats"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points 0 0 1"             # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to do a sparse clone of a remote repository with no branch specified             # Clone.feature:93
    Given I am in an empty directory                                                             # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                                             # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone --filter someFilter ${remoterepo} ${repoURI}"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Sparse Clone: You must explicitly specify a remote branch" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to partially apply a wrong patch': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with invalid bounds parameters': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to apply a wrong patch                                # Apply.feature:36
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                    # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I modify a feature                                            # DefaultStepDefinitions.I_modify_a_feature()
    And I have a patch file                                           # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply ${currentdir}/test.patch"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Error: Patch cannot be applied" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points/Points.1"                 # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to create an index with too few bounds parameters                                                   # CreateIndex.feature:66
    Given I have a repository                                                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                                      # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --bounds -45,-45,45"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Invalid bbox parameter: '-45,-45,45'. Expected format: <minx,miny,maxx,maxy>" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff using a wrong  refspec': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to apply an inexistent patch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff using too many commit refspecs                  # DiffTree.feature:38
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                            # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                            # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree refspec1 refspec2 refspec3"     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Tree refspecs list is too long" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to partially apply a wrong patch                     # Apply.feature:46
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                   # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I modify a feature                                           # DefaultStepDefinitions.I_modify_a_feature()
    And I have a patch file                                          # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply --reject ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch applied only partially"  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "0 changes were applied"         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "1 changes were rejected"        # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index on a nonexistent tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index with invalid bounds parameters                                                     # CreateIndex.feature:72
    Given I have a repository                                                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                                        # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --bounds -45,-45,45,A"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Invalid bbox parameter: '-45,-45,45,A'. Expected format: <minx,miny,maxx,maxy>" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to clone a remote repository with a single argument': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'List the content of a patch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to clone a remote repository that has already been cloned    # Clone.feature:99
    Given I am in an empty directory                                         # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                         # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone ${remoterepo} ${repoURI}"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "clone ${remoterepo} ${repoURI}"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Destination repository already exists" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to apply an inexistent patch                      # Apply.feature:57
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                # DefaultStepDefinitions.I_have_6_unstaged_features()
    When I run the command "apply ${currentdir}/test.patch"       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch file cannot be found" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, describing the modified element': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index on a nonexistent attribute': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff using a wrong  refspec                                   # DiffTree.feature:46
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                     # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                     # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree wrong:refspec"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "wrong:refspec did not resolve to a tree" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                 # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to create an index on a nonexistent tree                     # CreateIndex.feature:78
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree nonexistent"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree 'nonexistent'" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Apply a reversed patch that cannot be applied': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: List the content of a patch                               # Apply.feature:64
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                    # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I have a patch file                                           # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply --summary ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                # DefaultStepDefinitions.the_response_should_contain(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Remote repository has no HEAD.
java.lang.IllegalStateException: Remote repository has no HEAD.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.remote.LocalRemoteRepo.headRef(LocalRemoteRepo.java:121)
	at org.locationtech.geogig.porcelain.FetchOp._call(FetchOp.java:290)
	at org.locationtech.geogig.porcelain.FetchOp._call(FetchOp.java:48)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.porcelain.CloneOp._call(CloneOp.java:163)
	at org.locationtech.geogig.porcelain.CloneOp._call(CloneOp.java:39)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.Clone.runInternal(Clone.java:164)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Apply a path and then the reverse version of that patch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to clone a remote repository with a single argument  # Clone.feature:106
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                 # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone fakeRepo"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Remote repository has no HEAD" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "fetch" command
    In order to get changes from a remote repository
    As a Geogig User
    I want to fetch new objects and branches to my local machine
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Apply a reversed patch that cannot be applied             # Apply.feature:71
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1_modified"                            # DefaultStepDefinitions.I_have_unstaged(String)
    And I have a patch file                                           # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply --reverse ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Conflicting"                    # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index on a non-geometry attribute': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, with a change in the feature type': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch from origin': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index on a nonexistent attribute                   # CreateIndex.feature:84
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --attribute nonexistent" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "property nonexistent does not exist"      # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Show diff between working tree and index, describing the modified element # DiffTree.feature:54
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                            # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                            # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree WORK_HEAD STAGE_HEAD --describe"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 10 lines                                         # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "Points/Points.1"                                 # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to fetch from an empty directory                     # Fetch.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "fetch origin"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Apply a path and then the reverse version of that patch  # Apply.feature:79
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have 6 unstaged features                                   # DefaultStepDefinitions.I_have_6_unstaged_features()
    And I have a patch file                                          # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "apply ${currentdir}/test.patch"          # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "apply --reverse ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch applied succesfully"     # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "blame" command
    In order to know the history of a single feature
    As a Geogig User
    I want to see who edited each attribute of a feature
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with a valid path': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with the full history': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, using a path filter': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index on a non-geometry attribute                 # CreateIndex.feature:90
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                 # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --attribute sp"         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "property sp is not a geometry attribute" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Show diff between working tree and index, with a change in the feature type         # DiffTree.feature:62
    Given I have a repository                                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                      # DefaultStepDefinitions.I_stage_6_features()
    And I a featuretype is modified                                                             # DefaultStepDefinitions.I_modify_a_feature_type()
    When I run the command "diff-tree WORK_HEAD:Points STAGE_HEAD:Points"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 3 lines                                                    # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "Points.1"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.2"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.3"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|WORK_HEAD:Points/Points.1}"  # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|STAGE_HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with a valid path in porcelain mode': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to run blame with a valid path     # Blame.feature:6
    Given I have a repository                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                     # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame Points/Points.1" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 3 lines       # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch the full history for a shallow clone': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to fetch from origin                 # Fetch.feature:12
    Given I have a repository with a remote          # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    When I run the command "fetch origin"            # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch --all"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/branch1" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/HEAD"    # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a diff with --describe and --tree-stats': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with the full history and extra attributes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, using a path filter                       # DiffTree.feature:74
    Given I have a repository                                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                      # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                                      # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree WORK_HEAD:Points STAGE_HEAD:Points --path Points.1"       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points.1"                                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Points/Points.1"                                       # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 1 lines                                                     # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain variable "{@ObjectId|localrepo|WORK_HEAD:Points/Points.1}"  # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|STAGE_HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)

  Scenario: Try to create an index with the full history                                  # CreateIndex.feature:96
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                           # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "index create --tree Points --index-history"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 2"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                        # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"           # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" index should not track the extra attribute "sp"  # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should not track the extra attribute "ip"  # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should have the following features:        # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch2:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch2:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch1:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch1:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch1:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with the --no-values switch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to run blame with a valid path in porcelain mode # Blame.feature:12
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                   # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame --porcelain Points/Points.1"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 3 lines                     # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "1001"                       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, describing a removed element': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a diff with --describe and --tree-stats                              # DiffTree.feature:85
    Given I have a repository                                                                # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                   # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                                   # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff-tree WORK_HEAD STAGE_HEAD --describe --tree-stats"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot use --describe and --tree-stats simultaneously" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with a wrong path': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to deepen the history of a shallow clone': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to run blame with the --no-values switch       # Blame.feature:19
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                 # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame --no-values Points/Points.1" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 3 lines                   # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should not contain "1001"                 # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index without specifying a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to fetch the full history for a shallow clone                     # Fetch.feature:20
    Given I am in an empty directory                                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                              # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone --depth 1 ${remoterepo} ${localrepo}"           # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Commit4"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    When I run the command "fetch --fulldepth"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit5"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|remoterepo|master}"      # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit3"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|remoterepo|branch1}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Commit1"                                     # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to create an index with the full history and extra attributes                    # CreateIndex.feature:130
    Given I have a repository                                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                                  # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "index create --tree Points --extra-attributes sp,ip --index-history" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 2"                                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                               # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"                  # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"               # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "ip"               # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:                 # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" index should track the extra attribute "sp"             # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should track the extra attribute "ip"             # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should have the following features:               # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" index should track the extra attribute "sp"            # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch2:Points" index should track the extra attribute "ip"            # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch2:Points" index should have the following features:              # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch1:Points" index should track the extra attribute "sp"            # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch1:Points" index should track the extra attribute "ip"            # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch1:Points" index should have the following features:              # DefaultStepDefinitions.verifyIndexContents(String,DataTable)

  Scenario: Show diff between working tree and index, describing a removed element # DiffTree.feature:92
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                         # DefaultStepDefinitions.I_stage_6_features()
    And I remove a feature                                                         # DefaultStepDefinitions.I_remove_a_feature()
    When I run the command "diff-tree WORK_HEAD STAGE_HEAD --describe"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 7 lines                                        # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
Feature: "apply" command
    In order to modify feature
    As a Geogig User
    I want to insert a feature according to a definition in a file
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Insert from a file': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with more than one path': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a full history index on an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to run blame with a wrong path                          # Blame.feature:26
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                          # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame wrongpath"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The supplied path does not exist" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to create an index without specifying a tree            # CreateIndex.feature:164
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                          # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Expected a value after parameter" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a full history index on a repository with a single commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a full history index on an empty repository # CreateIndex.feature:170
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "index create --tree Points"               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree"        # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch from origin without specifying a remote': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to deepen the history of a shallow clone                           # Fetch.feature:36
    Given I am in an empty directory                                               # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                                               # DefaultStepDefinitions.there_is_a_remote_repository()
    When I run the command "clone --depth 1 ${remoterepo} ${localrepo}"            # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Commit4"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|remoterepo|master~1}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    When I run the command "fetch --depth 2"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit5"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|remoterepo|master~1}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit1"                                  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|remoterepo|master~2}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index with an incorrect extra attribute': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with no arguments': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to insert a feature passing a wrong file': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a full history index on a repository with a single commit    # CreateIndex.feature:175
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                        # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m "point1 added"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "index create --tree Points --index-history"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 1"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                     # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)

  Scenario: Try to run blame with more than one path              # Blame.feature:32
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                    # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame Point/Points.1 Points/Points.2" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Only one path allowed"      # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Insert from a file                                          # Insert.feature:6
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                              # DefaultStepDefinitions.I_stage_6_features()
    And I have an insert file                                           # DefaultStepDefinitions.I_have_an_insert_file()
    When I run the command "insert -f ${currentdir}/insert"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1 features successfully inserted" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create an index on a tree with an empty extra-attribute param': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to run blame with a feature type': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index with an incorrect extra attribute                     # CreateIndex.feature:190
    Given I have a repository                                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                           # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes invalidAttrib" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "FeatureType Points does not define attribute"      # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to insert a feature in a tree that does not exist in the repo': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to run blame with no arguments                  # Blame.feature:38
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                  # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "A path must be specified" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to insert a feature passing a wrong file           # Insert.feature:13
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                         # DefaultStepDefinitions.I_stage_6_features()
    And I have an insert file                                      # DefaultStepDefinitions.I_have_an_insert_file()
    When I run the command "insert -f wrong.file"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Insert file cannot be found" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch from an invalid remote': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to insert a feature in a tree that does not exist in the repo # Insert.feature:20
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "lines1"                                                # DefaultStepDefinitions.I_have_staged(String)
    And I have an insert file                                                 # DefaultStepDefinitions.I_have_an_insert_file()
    When I run the command "insert -f ${currentdir}/insert"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The parent tree does not exist: Points" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "ls-tree" command
    In order to know what is in a repository
    As a Geogig User
    I want to list the feature in the working tree
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list of features in the root tree recursively': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to fetch from origin without specifying a remote # Fetch.feature:51
    Given I have a repository with a remote                      # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    When I run the command "fetch"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch --all"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master"             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/branch1"             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/HEAD"                # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch from origin with pruning': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create an index on a tree with an empty extra-attribute param # CreateIndex.feature:196
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                   # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes"       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Expected a value after parameter"          # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "index drop" command
    In order to remove an unnecessary index
    As a Geogig User
    I want to drop an index from the repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to drop an index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to fetch from an invalid remote           # Fetch.feature:59
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "fetch origin"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Remote could not be resolved." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to reset from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to run blame with a feature type                                       # Blame.feature:44
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "blame Points"                                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The supplied path does not resolve to a feature" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list of features in the root tree recursively including trees': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to reset from an empty directory                  # Blame.feature:50
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "blame"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "branch" command
    In order to work separately from the main history
    As a Geogig User
    I want to be able to create, delete and list branches
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a branch while not in a repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a list of features in the root tree recursively # LsTree.feature:6
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                   # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree -r"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"           # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "Lines/Lines.1"             # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a branch while not in a repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a branch while not in a repository      # Branch.feature:6
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And I run the command "branch newBranch"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list branches while not in a geogig repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a branch while not in a repository      # Branch.feature:11
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And I run the command "branch --delete newBranch"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list of features in the root tree non-recursively': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a branch without having made any commits': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to drop a nonexistent index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a list of features in the root tree recursively including trees # LsTree.feature:15
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                   # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree -r -t -v"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                           # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "Lines/Lines.1"                             # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "tree"                                      # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to list branches while not in a geogig repository # Branch.feature:17
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And I run the command "branch"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to drop an index                                                       # DropIndex.feature:6
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "index drop --tree Points"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index successfully dropped."                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" should not have an index                        # DefaultStepDefinitions.noIndexAtCommit(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a branch with a non-existent start point': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a branch without having made any commits               # Branch.feature:23
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I run the command "branch newBranch"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "no commits yet, branch cannot be created." # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                   # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a verbose list of trees in the root tree non-recursively': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch a tag': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a list of features in the root tree non-recursively # LsTree.feature:25
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "tree"                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    Then the response should not contain "Points/Points.1"           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Points"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines"                          # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should not contain "Points/Points.1"           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@PointsTypeID}"   # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)

  Scenario: Try to fetch from origin with pruning        # Fetch.feature:65
    Given I have a repository with a remote              # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    And I have a remote ref called "branch2"             # DefaultStepDefinitions.i_have_a_remote_ref_called(String)
    When I run the command "branch --all"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/branch2"    # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "fetch --prune"               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch --all"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/branch1"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "origin/branch2" # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "origin/HEAD"        # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to drop the index without specifying a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to drop a nonexistent index                                  # DropIndex.feature:23
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index drop --tree nonexistent"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree 'nonexistent'" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a verbose list of features in the root tree recursively, not including children': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a branch off of master': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a verbose list of trees in the root tree non-recursively # LsTree.feature:38
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree -t -v"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "tree"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points 1.0;2.0;1.0;2.0 2"            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines 1.0;2.0;1.0;2.0 1 0"           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Points/Points.1"                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Lines/Lines.1"                   # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to create a branch with a non-existent start point                         # Branch.feature:29
    Given I have a repository                                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                             # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "branch newBranch nonexistent"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nonexistent does not resolve to a repository object" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to drop the index for a non-existent attribute': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a verbose list of features in a path': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to drop the index without specifying a tree                   # DropIndex.feature:29
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"               # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index drop"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The following option is required: --tree" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Show a verbose list of features in the root tree recursively, not including children # LsTree.feature:50
    Given I have a repository                                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree -d -v"                                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "tree"                                                      # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should not contain "Points/Points.1"                                       # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Points 1.0"                                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines 1.0"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to fetch from unchanged remote': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout a branch as soon as it is created': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to fetch a tag                                  # Fetch.feature:77
    Given I am in an empty directory                            # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository with a tag named "example" # DefaultStepDefinitions.there_is_a_remote_repository_with_a_tag_named(String)
    When I run the command "clone ${remoterepo} ${localrepo}"   # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "tag"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "example"                  # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to create a branch off of master                           # Branch.feature:35
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                             # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "branch newBranch master"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Created branch refs/heads/newBranch" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list of features using STAGE_HEAD as non-recursively, including trees': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a verbose list of features in a path          # LsTree.feature:61
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                 # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree -v Points"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "tree"                # DefaultStepDefinitions.the_response_should_not_contain(String)
    Then the response should contain "Points.1"                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@PointsTypeID}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - A matching index could not be found.
java.lang.IllegalStateException: A matching index could not be found.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.porcelain.index.DropIndexOp._call(DropIndexOp.java:62)
	at org.locationtech.geogig.porcelain.index.DropIndexOp._call(DropIndexOp.java:25)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.DropIndex.runInternal(DropIndex.java:47)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to drop an index in an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to drop the index for a non-existent attribute              # DropIndex.feature:37
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"             # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index drop --tree Points --attribute fakeAttrib"  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "A matching index could not be found."   # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to drop an index in an empty repository               # DropIndex.feature:45
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "index drop --tree Points"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree 'Points'" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "index list" command
    In order to see what indexes are available on the repository
    As a Geogig User
    I want to list all of the indexes
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list indexes': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list of trees using HEAD as origin, recursively': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a branch off of master while not on master': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a list of features using STAGE_HEAD as non-recursively, including trees # LsTree.feature:71
    Given I have a repository                                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                           # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "ls-tree STAGE_HEAD -t -v"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "tree"                                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points 1.0;2.0;1.0;2.0 2"                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines 1.0;2.0;1.0;2.0 1 0"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Points/Points.1"                                # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to checkout a branch as soon as it is created # Branch.feature:41
    Given I have a repository                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "branch -c newBranch"               # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "branch"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "* newBranch"            # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to fetch from unchanged remote               # Fetch.feature:84
    Given I am in an empty directory                         # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And there is a remote repository                         # DefaultStepDefinitions.there_is_a_remote_repository()
    And I run the command "clone ${remoterepo} ${localrepo}" # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "fetch origin"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Already up to date"    # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "pull" command
    In order to integrate changes from a remote repository to my working branch
    As a Geogig User
    I want to pull all new commits from that repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull from origin': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a verbose list of features using HEAD as origin, recursively': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a branch with the same name as an existing branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull from an empty directory                      # Pull.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "pull origin"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)

  Scenario: Show a list of trees using HEAD as origin, recursively # LsTree.feature:82
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                    # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                    # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                     # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "ls-tree HEAD -t"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points"                      # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "Lines"                       # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should not contain "Points/Points.1"         # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to create a branch off of master while not on master               # Branch.feature:48
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                    # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit1"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch -c newBranch"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "lines1"                                                     # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit2"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "branch -c newestBranch master"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master}"        # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit2"                                  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|newBranch}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list indexes in a specific feature type tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list indexes                                              # ListIndexes.feature:6
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points --extra-attributes ip" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index create --tree Lines --extra-attributes sp" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index list"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Lines"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "[sp]"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain index info ID for tree "Lines"           # DefaultStepDefinitions.the_response_contains_indexInfoID(String)
    And the response should contain "Points"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "[ip]"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain index info ID for tree "Points"          # DefaultStepDefinitions.the_response_contains_indexInfoID(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list of features in a path, using HEAD as origin': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a verbose list of features using HEAD as origin, recursively # LsTree.feature:93
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                               # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                               # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "ls-tree HEAD -r -v"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@PointsTypeID}"                # DefaultStepDefinitions.checkResponseTextContains(String)
    Then the response should contain "Lines/Lines.1"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@LinesTypeID}"                 # DefaultStepDefinitions.checkResponseTextContains(String)
    Then the response should not contain "tree"                               # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 3 lines                                   # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list local branches': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a branch with the same name as an existing branch     # Branch.feature:62
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                 # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch branch1"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "A branch named 'branch1' already exists." # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                  # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show a list from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list the indexes without specifying a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show a list of features in a path, using HEAD as origin # LsTree.feature:107
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "ls-tree HEAD:Points"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points.1"                     # DefaultStepDefinitions.the_response_should_contain(String)

    Then the response should not contain "Lines.1"                  # DefaultStepDefinitions.the_response_should_not_contain(String)
  Scenario: Try to list indexes in a specific feature type tree              # ListIndexes.feature:22
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points --extra-attributes ip" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index create --tree Lines --extra-attributes sp" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index list --tree Points"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Lines"                             # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "[sp]"                               # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Points"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "[ip]"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain index info ID for tree "Points"          # DefaultStepDefinitions.the_response_contains_indexInfoID(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull from origin after first pull': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Run ls-tree on an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull from origin                                               # Pull.feature:11
    Given I have a repository with a remote                                       # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    When I run the command "pull origin --rebase"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "branch --all"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/branch1"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/HEAD"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit5"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|remoterepo|master~1}"    # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit3"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit1"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain variable "{@ObjectId|remoterepo|branch1}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Commit1"                                     # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Show a list from an empty directory                      # LsTree.feature:117
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "ls-tree"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Run ls-tree on an empty repository # LsTree.feature:123
    Given I have a repository                  # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "ls-tree -r"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                   # DefaultStepDefinitions.it_should_answer_exactly(String)
Feature: "merge-base" command
    In order to know the common parent of 2 commits
    As a Geogig User
    I want to see the common ancestor of 2 commits before a merge
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to view the common parent of 2 commits': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list the indexes, specifying a non-existent tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to list the indexes without specifying a tree                # ListIndexes.feature:36
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                 # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points --extra-attributes ip"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index list --tree"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Expected a value after parameter --tree" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list local branches with verbose option': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list local branches          # Branch.feature:69
    Given I have a repository                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                 # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "* master" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch1"   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch2"   # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list the indexes when there are none': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to view the common parent with too many arguments': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to list the indexes, specifying a non-existent tree        # ListIndexes.feature:44
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points --extra-attributes ip" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index list --tree fakeTree"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain ""                                      # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to view the common parent of 2 commits  # MergeBase.feature:6
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                           # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "merge branch1 -m MergeMessage" # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "merge-base HEAD HEAD~2"       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 1 lines              # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And it should exit with zero exit code                # DefaultStepDefinitions.it_should_exit_with_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull a certain depth from origin': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull from origin after first pull              # Pull.feature:28
    Given I have a repository with a remote                       # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    When I run the command "pull origin"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "branch --all"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "pull origin"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "master already up to date." # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list remote branches only': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list local branches with verbose option # Branch.feature:77
    Given I have a repository                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                            # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch -v"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "* master"            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit5"              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch1"              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch2"              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"              # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list the indexes in an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to list the indexes when there are none # ListIndexes.feature:52
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index list"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain ""                   # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to list the indexes in an empty repository # ListIndexes.feature:58
    Given I have a repository                                # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "index list"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain ""                      # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "index rebuild" command
    In order to improve query performance on old commits
    As a Geogig User
    I want to build indexes on all commits in the history of a feature tree
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebuild an index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to view the parent using a bad left commit reference': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to view the common parent with too many arguments           # MergeBase.feature:14
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                               # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "merge branch1 -m MergeMessage"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "merge-base commit1 commit2 commit3"               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Two commit references must be provided" # DefaultStepDefinitions.the_response_should_contain(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Depth operations can only be used on a shallow clone.
org.locationtech.geogig.cli.CommandFailedException: Depth operations can only be used on a shallow clone.
	at org.locationtech.geogig.cli.porcelain.Pull.runInternal(Pull.java:81)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

  Scenario: Try to pull a certain depth from origin                                          # Pull.feature:36
    Given I have a repository with a remote                                                  # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    When I run the command "pull origin --depth 3"                                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Depth operations can only be used on a shallow clone." # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "push" command
    In order to share my changes with a remote repository
    As a Geogig User
    I want to push my commits to that remote
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to push from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to push with no changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to push from an empty directory                      # Push.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "push origin"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list all branches': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list remote branches only         # Branch.feature:88
    Given I have a repository with a remote          # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    And I run the command "pull origin --rebase"     # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "branch -r"               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/branch1" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/HEAD"    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "* master"   # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebuild a nonexistent index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to view the parent using a bad right commit reference': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebuild an index                                                       # RebuildIndex.feature:6
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                           # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "index create --tree Points"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" should not have an index                        # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "branch1:Points" should not have an index                        # DefaultStepDefinitions.noIndexAtCommit(String)
    When I run the command "index rebuild --tree Points"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 trees were rebuilt."                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" index should not track the extra attribute "sp"  # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should not track the extra attribute "ip"  # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should have the following features:        # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch2:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch2:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch1:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch1:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch1:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)

  Scenario: I try to view the parent using a bad left commit reference          # MergeBase.feature:21
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                 # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "merge branch1 -m MergeMessage"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "merge-base badCommit HEAD"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "badCommit does not resolve to any object" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to push to origin': Using URIBuilder DefaultTestRepoURIBuilder
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - A matching index could not be found.
java.lang.IllegalStateException: A matching index could not be found.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.plumbing.index.BuildFullHistoryIndexOp._call(BuildFullHistoryIndexOp.java:78)
	at org.locationtech.geogig.plumbing.index.BuildFullHistoryIndexOp._call(BuildFullHistoryIndexOp.java:40)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.RebuildIndex.runInternal(RebuildIndex.java:47)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

  Scenario: Try to push with no changes                 # Push.feature:11
    Given I clone a remote repository                   # DefaultStepDefinitions.i_clone_a_remote_repository()
    When I run the command "push"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Nothing to push." # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I rebuild the index for an attribute on a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebuild a nonexistent index                              # RebuildIndex.feature:46
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                              # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index rebuild --tree Points"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "A matching index could not be found." # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to view the parent using a bad right commit reference         # MergeBase.feature:28
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                 # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "merge branch1 -m MergeMessage"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "merge-base HEAD badCommit"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "badCommit does not resolve to any object" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "rebuild-graph" command
    In order to fix a geogig repository
    As a Geogig User
    I want to rebuild the graph
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the graph': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list all branches                 # Branch.feature:97
    Given I have a repository with a remote          # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    And I run the command "pull origin --rebase"     # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "branch --all"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "origin/master" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/branch1" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "origin/HEAD"    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "* master"       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the index for a non-existent attribute on a tree': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the graph with quiet argument': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to rebuild the graph                                                                                        # RebuildGraph.feature:6
    Given I have a repository                                                                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                                                # DefaultStepDefinitions.I_have_several_commits()
    And the repository has a truncated graph database                                                                         # DefaultStepDefinitions.the_repository_has_a_truncated_graph_database()
    When I run the command "rebuild-graph"                                                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The following graph elements (commits) were incomplete or missing and have been fixed:" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 4 lines                                                                                   # DefaultStepDefinitions.the_response_should_contain_x_lines(int)

  Scenario: I rebuild the index for an attribute on a tree                                # RebuildIndex.feature:52
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                           # DefaultStepDefinitions.I_have_several_branches()
    And I run the command "index create --tree Points --extra-attributes sp"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"        # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" should not have an index                        # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "branch1:Points" should not have an index                        # DefaultStepDefinitions.noIndexAtCommit(String)
    When I run the command "index rebuild --tree Points -a pp"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 trees were rebuilt."                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"        # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" index should track the extra attribute "sp"      # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should not track the extra attribute "ip"  # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should have the following features:        # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" index should track the extra attribute "sp"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch2:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch2:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch1:Points" index should track the extra attribute "sp"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch1:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch1:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a branch without specifying a name': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> fb550dea78b380d688600824a4fe2f86b7296fb7] to refs/remotes/origin/master(null)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to push a symbolic reference': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a branch                               # Branch.feature:106
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                  # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch --delete branch1"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted branch 'branch1'." # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to push to origin                                                # Push.feature:16
    Given I clone a remote repository                                            # DefaultStepDefinitions.i_clone_a_remote_repository()
    When I modify and add a feature                                              # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "commit -m Commit6"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Committed, counting objects"               # DefaultStepDefinitions.the_response_should_contain(String)
    And I run the command "push"                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Uploading objects to refs/heads/master" # DefaultStepDefinitions.the_response_should_start_with(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - A matching index could not be found.
java.lang.IllegalStateException: A matching index could not be found.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.plumbing.index.BuildFullHistoryIndexOp._call(BuildFullHistoryIndexOp.java:78)
	at org.locationtech.geogig.plumbing.index.BuildFullHistoryIndexOp._call(BuildFullHistoryIndexOp.java:40)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.RebuildIndex.runInternal(RebuildIndex.java:47)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the graph when it is not broken': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the index for an attribute on a non-existent tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to rebuild the index for a non-existent attribute on a tree # RebuildIndex.feature:92
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                # DefaultStepDefinitions.I_have_several_commits()

  Scenario: I try to rebuild the graph with quiet argument                    # RebuildGraph.feature:14
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I run the command "index create --tree Points"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"             # DefaultStepDefinitions.the_response_should_contain(String)
    And I have several commits                                                # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index rebuild --tree Points -a fakeAttrib"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "A matching index could not be found."   # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository has a truncated graph database                         # DefaultStepDefinitions.the_repository_has_a_truncated_graph_database()
    When I run the command "rebuild-graph --quiet"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 graph elements (commits) were fixed." # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete multiple branches': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a branch without specifying a name          # Branch.feature:112
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                       # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch --delete"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "no name specified for deletion" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: I try to rebuild the graph when it is not broken                   # RebuildGraph.feature:21
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                 # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "rebuild-graph"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No missing or incomplete graph elements" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "rev-list" command
    In order to know the history of commits on a repository
    As a Geogig User
    I want to see a list of commits
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show only a range of commits.': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the index for a non-existent attribute and tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to rebuild the index for an attribute on a non-existent tree # RebuildIndex.feature:100
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                 # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index rebuild --tree wrongTree -a pp"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree"                 # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to push when the remote has changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to push a symbolic reference                                 # Push.feature:24
    Given I clone a remote repository                                        # DefaultStepDefinitions.i_clone_a_remote_repository()
    When I modify and add a feature                                          # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "commit -m Commit6"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Committed, counting objects"           # DefaultStepDefinitions.the_response_should_contain(String)
    And I run the command "push origin HEAD"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Push failed: Cannot push to a symbolic reference" # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete the branch you are on': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a range of commits and provide additional commits.': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the index without specifying the tree param': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete multiple branches                     # Branch.feature:119
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                 # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch --delete branch1 branch2"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted branch 'branch1'" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Deleted branch 'branch2'"  # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "branch"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "* master"                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "branch1"               # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "branch2"               # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to show only a range of commits.    # RevList.feature:6
    Given I have a repository                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                      # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD~3..HEAD~1" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain " Commit4" # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit1"   # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit2"       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"       # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to rebuild the index for a non-existent attribute and tree # RebuildIndex.feature:108
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index rebuild --tree fakeTree -a fakeAttrib"     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree"               # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository with a single commit.': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to rebuild the index on an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a range of commits and provide additional commits.                        # RevList.feature:15
    Given I have a repository                                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                    # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD~3..HEAD~1 HEAD~2"                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Only one value accepted when using <since>..<until> syntax" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to rebuild the index without specifying the tree param        # RebuildIndex.feature:116
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "index create --tree Points"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"               # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index rebuild"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The following option is required: --tree" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to push when the remote has changes                                   # Push.feature:32
    Given I clone a remote repository                                                 # DefaultStepDefinitions.i_clone_a_remote_repository()
    And the remote repository has changes                                             # DefaultStepDefinitions.the_remote_repository_has_changes()
    And I modify and add a feature                                                    # DefaultStepDefinitions.I_modify_and_add_a_feature()
    When I run the command "commit -m modified"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1 changed"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "push"                                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Push failed: The remote repository has changes" # DefaultStepDefinitions.the_response_should_contain(String)

29 Scenarios (29 passed)
201 Steps (201 passed)
0m34.315s

Tests run: 230, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 35.297 sec - in org.locationtech.geogig.cli.test.functional.RunRemoteFunctionalTest
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rename a branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to rebuild the index on an empty repository  # RebuildIndex.feature:124
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "index rebuild --tree Points"       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "index update" command
    In order to modify the extra attributes stored on index trees
    As a Geogig User
    I want to update an index to change the extra attributes
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to update an index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete the branch you are on                            # Branch.feature:130
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                            # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "checkout branch1"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch --delete branch1"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot delete the branch you are on" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository with several commits.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository with a single commit.         # RevList.feature:21
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                              # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m TestCommit"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                     # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "rev-list HEAD"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "TestCommit"                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to update a nonexistent index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to update an index                                                     # UpdateIndex.feature:6
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "index update --tree Points --extra-attributes sp"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                     # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rename a branch that you are on': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of the commits that have changed the points feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rename a branch                                                      # Branch.feature:138
    Given I have a repository                                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                         # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch --rename branch1 superAwesomeBranch"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "renamed branch 'branch1' to 'superAwesomeBranch'" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "branch -v"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "* master"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "superAwesomeBranch"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "branch1"                                       # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to show a log of a repository with several commits. # RevList.feature:32
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                      # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to update an index with the full history': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to update a nonexistent index                                # UpdateIndex.feature:32
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index update --tree nonexistent"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree 'nonexistent'" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show only the last two commits.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of the commits that have changed the points feature # RevList.feature:41
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                    # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD --path Points"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master~3}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit3"                                 # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rename a branch that you are on to a name that already exists': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rename a branch that you are on                                      # Branch.feature:149
    Given I have a repository                                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                         # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "checkout branch1"                                           # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch --rename superAwesomeBranch"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "renamed branch 'branch1' to 'superAwesomeBranch'" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "branch -v"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "master"                                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "* superAwesomeBranch"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "branch1"                                       # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get commits list without starting commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show only the last two commits.                            # RevList.feature:51
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD -n 2"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain " Commit1"                           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                             # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit3"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master~2}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain "Commit4"                                 # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add attributes to an index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to update an index with the full history                                      # UpdateIndex.feature:38
    Given I have a repository                                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                               # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "index create --tree Points"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"               # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp"        # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"        # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:              # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch1:Points" should not have an index                            # DefaultStepDefinitions.noIndexAtCommit(String)
    And the repository's "branch2:Points" should not have an index                            # DefaultStepDefinitions.noIndexAtCommit(String)
    When I run the command "index update --tree Points --extra-attributes sp --index-history" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated successfully"                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 2"                                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                            # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"               # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"            # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"        # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:              # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "HEAD~1:Points" index should track the extra attribute "sp"          # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should not track the extra attribute "ip"      # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD~1:Points" index should have the following features:            # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch2:Points" index should track the extra attribute "sp"         # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch2:Points" index should not track the extra attribute "ip"     # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch2:Points" index should have the following features:           # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    And the repository's "branch1:Points" index should track the extra attribute "sp"         # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "branch1:Points" index should not track the extra attribute "ip"     # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "branch1:Points" index should have the following features:           # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rename a branch without being in a repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the log, skipping the last 2 commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rename a branch that you are on to a name that already exists                                      # Branch.feature:161
    Given I have a repository                                                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                                                       # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "checkout branch1"                                                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch --rename branch2"                                                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot rename branch to 'branch2' because a branch by that name already exists" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "branch --rename --force branch2"                                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "renamed branch 'branch1' to 'branch2'"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "branch -v"                                                                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "master"                                                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "* branch2"                                                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "branch1"                                                                     # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit4"                                                                     # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to get commits list without starting commit        # RevList.feature:61
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                     # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No starting commit provided" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                     # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rename a branch without specifying a name': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rename a branch without being in a repository  # Branch.feature:176
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "branch --rename branch2"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to replace attributes of an index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add attributes to an index                                          # UpdateIndex.feature:82
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp" # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "ip"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "index update --tree Points --extra-attributes sp --add"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated successfully"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                     # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "ip"     # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:       # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the list of commits, with the changes introduced by each one': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the log, skipping the last 2 commits                    # RevList.feature:68
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD --skip 2"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master~3}"   # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit3"                               # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit4"                               # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|master}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rename a branch to the same name': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to update the bounds of an index': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rename a branch without specifying a name                # Branch.feature:181
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                             # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch --rename"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "You must specify a branch to rename." # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to replace attributes of an index                                         # UpdateIndex.feature:108
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"           # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "ip"        # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "index update --tree Points --extra-attributes sp --overwrite" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated successfully"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                        # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"           # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"        # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"    # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:          # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the list of commits, with the changes introduced by each one # RevList.feature:79
    Given I have a repository                                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                       # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "rev-list HEAD --changed"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.1"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.2"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines.1"                                        # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to show a log from an empty directory                # RevList.feature:91
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "rev-list HEAD"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
Feature: "rev-parse" command
    As a Geogig User
    I want to determine if I am in a repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to print out the repository location"': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I check if I am in a repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to update the bounds of an index with incorrect bounds parameter': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to print out the repository location"     # RevParse.feature:5
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "rev-parse --resolve-geogig-uri" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "localrepo"            # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to rename a branch to the same name          # Branch.feature:188
    Given I have a repository                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                              # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "branch --rename branch1 branch1" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Done"                  # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "checkout" command
  In order to view an alternate version of the data
  As a Geogig User
  I want to be able to checkout out branches
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Create a new branch and check it out': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to update the bounds of an index                                                     # UpdateIndex.feature:134
    Given I have a repository                                                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                       # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes sp --bounds -45,-45,45,45" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-45,-45,45,45"                        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"                   # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"               # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:                     # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "index update --tree Points --bounds -20,-45,20,45"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated successfully"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 3"                                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                                   # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-20,-45,20,45"                        # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"                   # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"               # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:                     # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to check if I'm in a repository when in an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I check if I am in a repository                  # RevParse.feature:10
    Given I have a repository                                # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "rev-parse --is-inside-work-tree" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "true"                  # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to print the repository location when in an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to check if I'm in a repository when in an empty directory # RevParse.feature:15
    Given I am in an empty directory                                         # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "rev-parse --is-inside-work-tree"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository"            # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to use a refspec with another argument': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to print the repository location when in an empty directory # RevParse.feature:20
    Given I am in an empty directory                                          # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "rev-parse --resolve-geogig-uri"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository"             # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to change existing attributes without specifying add or overwrite': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to update the bounds of an index with incorrect bounds parameter                                    # UpdateIndex.feature:160
    Given I have a repository                                                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                                      # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes sp --bounds -45,-45,45,45"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the repository's "HEAD:Points" index bounds should be "-45,-45,45,45"                                       # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should track the extra attribute "sp"                                  # DefaultStepDefinitions.verifyIndexExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"                              # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:                                    # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
    When I run the command "index update --tree Points --bounds -20,-45,20"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Invalid bbox parameter: '-20,-45,20'. Expected format: <minx,miny,maxx,maxy>" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout something while not in a repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Create a new branch and check it out                           # Checkout.feature:6
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                             # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "branch newBranch"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Created branch refs/heads/newBranch" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "checkout newBranch"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "# On branch newBranch"               # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout without specifying a path': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to checkout something while not in a repository   # Checkout.feature:15
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "checkout noBranch"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to use a refspec with a bad ref': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to use a refspec with another argument                         # RevParse.feature:25
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                       # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "rev-parse STAGE_HEAD/Points.1 --is-inside-work-tree" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "if refSpec is given"                       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout multiple things at once': Using URIBuilder DefaultTestRepoURIBuilder
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Extra attributes already exist on index, specify add or overwrite to update.
java.lang.IllegalStateException: Extra attributes already exist on index, specify add or overwrite to update.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:178)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:41)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.UpdateIndex.runInternal(UpdateIndex.java:77)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

  Scenario: Try to checkout without specifying a path               # Checkout.feature:21
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "checkout"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "no branch or paths specified" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                      # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index without specifying a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to change existing attributes without specifying add or overwrite                                   # UpdateIndex.feature:176
    Given I have a repository                                                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                                      # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                                                   # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --extra-attributes sp"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Extra attributes already exist on index, specify add or overwrite to update." # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout a branch that doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to checkout multiple things at once       # Checkout.feature:27
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "branch newBranch"             # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch noBranch"               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "checkout noBranch newBranch"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "too many arguments" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to resolve the geogig uri when not in a repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to make a change but don't commit and then checkout a different branch without forcing': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to use a refspec with a bad ref                # RevParse.feature:31
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                   # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "rev-parse bad_ref"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "fatal: ambiguous argument" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to checkout a branch that doesn't exist                   # Checkout.feature:35
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "checkout noBranch"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "'noBranch' not found in repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: I try to resolve the geogig uri when not in a repository # RevParse.feature:37
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "rev-parse"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository"    # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "show-ref" command
    In order to know the branches in a geogig repository
    As a Geogig User
    I want list all references
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'List all references': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index for a non-existent attribute': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to update the index without specifying a tree                 # UpdateIndex.feature:184
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"               # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --extra-attributes sp"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The following option is required: --tree" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to make a change but don't commit and then checkout a different branch with forcing': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to make a change but don't commit and then checkout a different branch without forcing                          # Checkout.feature:41
    Given I have a repository                                                                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                                                 # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Commit1"                                                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch newBranch"                                                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Created branch refs/heads/newBranch"                                                      # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "checkout newBranch"                                                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have unstaged "points2"                                                                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I run the command "checkout master"                                                                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Working tree and index are not clean. To overwrite local changes, use the --force option" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                                                                  # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - A matching index could not be found.
java.lang.IllegalStateException: A matching index could not be found.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:150)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:41)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.UpdateIndex.runInternal(UpdateIndex.java:77)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index leaving the extra-attribute param empty': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to make a change to a feature and revert back to an old version using path filtering': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to update the index for a non-existent attribute             # UpdateIndex.feature:192
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                 # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --attribute fakeAttrib" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "A matching index could not be found."    # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: List all references                                              # ShowRef.feature:6
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                              # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "show-ref"                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 3 lines                                 # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "master"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch1"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "branch2"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|master}"  # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|branch2}" # DefaultStepDefinitions.checkResponseTextContains(String)
Feature: "verify-patch" command
    In order to ensure I have a valid patch
    As a Geogig User
    I want to verify the patch
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to verify a patch without specifying a file': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to make a change but don't commit and then checkout a different branch with forcing # Checkout.feature:53
    Given I have a repository                                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                     # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Commit1"                                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch newBranch"                                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Created branch refs/heads/newBranch"                          # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "checkout newBranch"                                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have unstaged "points2"                                                                   # DefaultStepDefinitions.I_have_unstaged(String)
    And I run the command "checkout -f master"                                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "# Changes not staged for commit:"                         # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "# On branch master"                                            # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to verify multiple files': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to verify a patch without specifying a file  # VerifyPatch.feature:6
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "verify-patch"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No patch file specified" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get rid of changes that I have made with path filtering with multiple paths': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to make a change to a feature and revert back to an old version using path filtering # Checkout.feature:66
    Given I have a repository                                                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                      # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Commit1"                                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    And I modify a feature                                                                           # DefaultStepDefinitions.I_modify_a_feature()
    And I run the command "checkout -p Points/Points.1"                                              # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                                                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nothing to commit"                                             # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to verify a patch with a bad file path': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index for a non-existent extra-attribute': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to verify multiple files                                 # VerifyPatch.feature:11
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "verify-patch file1 file2"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Only one single patch file accepted" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to update the index leaving the extra-attribute param empty              # UpdateIndex.feature:200
    Given I have a repository                                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                             # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                          # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --extra-attributes"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Expected a value after parameter --extra-attributes" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I have a patch file that contains rejects': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to verify a patch with a bad file path          # VerifyPatch.feature:16
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "verify-patch file1"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch file cannot be found" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to bring a feature from a different branch into this branch': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I have a patch file that is valid': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get rid of changes that I have made with path filtering with multiple paths # Checkout.feature:75
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Commit1"                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "lines1"                                                                 # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit2"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I modify a feature                                                                     # DefaultStepDefinitions.I_modify_a_feature()
    And I have unstaged "lines2"                                                               # DefaultStepDefinitions.I_have_unstaged(String)
    And I run the command "checkout -p Lines Points/Points.1"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nothing to commit"                                       # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I have a patch file that contains rejects              # VerifyPatch.feature:21
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have a patch file                                        # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "verify-patch ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch cannot be applied"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 10 lines                       # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to overwrite a non-existent extra-attribute': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to update the index for a non-existent extra-attribute                         # UpdateIndex.feature:208
    Given I have a repository                                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                   # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                                # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --extra-attributes fakeAttrib"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "FeatureType Points does not define attribute 'fakeAttrib'" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I have a patch file that is valid                      # VerifyPatch.feature:28
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                         # DefaultStepDefinitions.I_stage_6_features()
    And I have a patch file                                        # DefaultStepDefinitions.I_have_a_patch_file()
    When I run the command "verify-patch ${currentdir}/test.patch" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch can be applied"        # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "walk-graph" command
    In order to walk through objects in the history tree
    As a Geogig User
    I want to see the object information of each object in the tree
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to walk the graph with no arguments': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert using both --ours and --theirs': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index for the full history when there is only one commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to overwrite a non-existent extra-attribute                                     # UpdateIndex.feature:216
    Given I have a repository                                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                    # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --extra-attributes fakeAttrib --overwrite" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "FeatureType Points does not define attribute 'fakeAttrib'"  # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to bring a feature from a different branch into this branch # Checkout.feature:87
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                             # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Commit1"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "points2"                                             # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit2"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "points3"                                             # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit3"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "branch -c newBranch"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "lines1"                                              # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit4"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "lines2"                                              # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit5"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "lines3"                                              # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Commit6"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "checkout master"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "checkout newBranch -p Lines/Lines.1"             # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Lines/Lines.1"                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "added"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "# Changes not staged for commit:"      # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert a feature where the version you want doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert using both --ours and --theirs                   # Checkout.feature:109
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "checkout -p Points/Points.1 --ours --theirs"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot use both --ours and --theirs" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to walk the graph with bad arguments': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index without updating anything': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to walk the graph with no arguments         # WalkGraph.feature:6
    Given I have a repository                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "walk-graph"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Reference not provided" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to update the index for the full history when there is only one commit # UpdateIndex.feature:224
    Given I have a repository                                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                          # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m "point1 added"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "index create --tree Points --extra-attributes ip"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                        # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --index-history --overwrite"      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index updated successfully"                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Size: 1"                                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain the index ID for tree "Points"                       # DefaultStepDefinitions.the_response_contains_indexID(String)
    And the repository's "HEAD:Points" index bounds should be "-90,-180,90,180"          # DefaultStepDefinitions.verifyIndexBounds(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "sp"   # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should not track the extra attribute "ip"   # DefaultStepDefinitions.verifyIndexNotExtraAttributes(String,String)
    And the repository's "HEAD:Points" index should have the following features:         # DefaultStepDefinitions.verifyIndexContents(String,DataTable)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert an unmerged feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert a feature where the version you want doesn't exist                # Checkout.feature:115
    Given I have a repository                                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points2"                                                             # DefaultStepDefinitions.I_have_staged(String)
    When I modify a feature                                                                 # DefaultStepDefinitions.I_modify_a_feature()
    And I run the command "checkout -p Points/Points.1"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "'Points/Points.1' didn't match a feature in the tree" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Nothing to update...
java.lang.IllegalStateException: Nothing to update...
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:200)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:41)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.UpdateIndex.runInternal(UpdateIndex.java:77)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to walk the graph': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index with the same extra attribute': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to walk the graph with bad arguments         # WalkGraph.feature:12
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                 # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "walk-graph garbage"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't resolve reference" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to update the index without updating anything               # UpdateIndex.feature:241
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"             # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Nothing to update..."                   # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to walk the graph with verbose enabled': Using URIBuilder DefaultTestRepoURIBuilder
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Nothing to update...
java.lang.IllegalStateException: Nothing to update...
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:200)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:41)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.UpdateIndex.runInternal(UpdateIndex.java:77)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert a feature to the --theirs version and fix the conflict': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to walk the graph               # WalkGraph.feature:18
    Given I have a repository                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                    # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "walk-graph master"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "TREE"       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "FEATURETYPE" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "FEATURE"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Points"  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 12 lines      # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index by adding the same extra attribute': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert an unmerged feature                           # Checkout.feature:123
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have a merge conflict state                                   # DefaultStepDefinitions.I_have_a_merge_conflict_state()
    When I run the command "checkout -p Points/Points.1"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "path Points/Points.1 is unmerged" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                          # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: I try to update the index with the same extra attribute                       # UpdateIndex.feature:249
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes ip"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                         # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --extra-attributes ip --overwrite" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Nothing to update..."                               # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to walk the graph with verbose enabled # WalkGraph.feature:28
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                           # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "walk-graph -v master"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "TREE"              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "FEATURETYPE"        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "FEATURE"            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points"             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines"              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 12 lines             # DefaultStepDefinitions.the_response_should_contain_x_lines(int)

66 Scenarios (66 passed)
408 Steps (408 passed)
0m46.530s

Tests run: 474, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 49.207 sec - in org.locationtech.geogig.cli.test.functional.RunPlumbingFunctionalTest
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Nothing to update...
java.lang.IllegalStateException: Nothing to update...
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:200)
	at org.locationtech.geogig.porcelain.index.UpdateIndexOp._call(UpdateIndexOp.java:41)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.cli.porcelain.index.UpdateIndex.runInternal(UpdateIndex.java:77)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions.I_run_the_command_X(DefaultStepDefinitions.java:214)
	at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to update the index in an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to update the index by adding the same extra attribute            # UpdateIndex.feature:257
    Given I have a repository                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                      # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "index create --tree Points --extra-attributes sp,ip"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Index created successfully"                   # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "index update --tree Points --extra-attributes ip --add" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Nothing to update..."                         # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to update the index in an empty repository            # UpdateIndex.feature:265
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "index update --tree Points"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Can't find feature tree 'Points'" # DefaultStepDefinitions.the_response_should_contain(String)

57 Scenarios (57 passed)
496 Steps (496 passed)
0m46.860s

Tests run: 553, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 49.667 sec - in org.locationtech.geogig.cli.test.functional.RunIndexFunctionalTest
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout a remote branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert a feature to the --theirs version and fix the conflict # Checkout.feature:130
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have a merge conflict state                                            # DefaultStepDefinitions.I_have_a_merge_conflict_state()
    When I run the command "checkout -p Points/Points.1 --theirs"                # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "add"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "commit -m Commit"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Committed"                                 # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to checkout a specific commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to checkout a remote branch                                                                     # Checkout.feature:138
    Given I have a repository with a remote                                                                     # DefaultStepDefinitions.I_have_a_repository_with_a_remote()
    When I run the command "pull origin"                                                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "checkout branch1"                                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Branch 'branch1' was set up to track remote branch 'branch1' from origin" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Switched to a new branch 'branch1'"                                        # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to checkout a specific commit                           # Checkout.feature:145
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                          # DefaultStepDefinitions.I_have_several_commits()
    When I create a detached branch                                     # DefaultStepDefinitions.I_create_a_detached_branch()
    Then the response should contain "You are in 'detached HEAD' state" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "cherry-pick" command
    In order to select specific changes to bring to the current branch
    As a Geogig User
    I want to cherry pick several commits from other branches
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to cherry pick several commits': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to cherry pick a single commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to cherry pick several commits                     # CherryPick.feature:6
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                    # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "cherry-pick branch1 branch2"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Too many commits specified." # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                     # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to cherry pick a nonexistent branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to cherry pick a single commit                              # CherryPick.feature:13
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                             # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "cherry-pick branch1"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit3"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"   # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit2"                           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit4"                           # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit5"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain "Commit1"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~2}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to cherry pick without specifying any commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to cherry pick a nonexistent branch     # CherryPick.feature:27
    Given I have a repository                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                         # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "cherry-pick nonexistent"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit not found" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code          # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to cherry pick from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to cherry pick without specifying any commits # CherryPick.feature:34
    Given I have a repository                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                               # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "cherry-pick"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "No commits specified."             # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to cherry pick a commit that causes conflict': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to cherry pick from an empty directory               # CherryPick.feature:40
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "cherry-pick branch1"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to cherry pick a commit that causes conflict                 # CherryPick.feature:46
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                          # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "cherry-pick branch1"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "CONFLICT: conflict in Points/Points.1" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                               # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
Feature: "clean" command
    In order to remove unwanted changes
    As a Geogig User
    I want to remove all untracked features
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove all the untracked features': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove all the untracked features in a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove all the untracked features       # Clean.feature:6
    Given I have a repository                              # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                          # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                          # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                           # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "clean"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Points/Points.1" # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove all the untracked features in a tree that does not exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove all the untracked features in a tree      # Clean.feature:15
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                   # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                   # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                    # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "clean Points"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "status"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Removing Points/Points.1" # DefaultStepDefinitions.the_response_should_not_contain(String)
    Then the response should contain "Lines/Lines.1"                # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove all the untracked features in a path that is not a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove all the untracked features in a tree that does not exist # Clean.feature:25
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                                  # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                                  # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                   # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "clean fakeTree"                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "did not match any tree"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                     # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to know which untracked features would be removed in a non-existent tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove all the untracked features in a path that is not a tree # Clean.feature:34
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                                 # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                                 # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                  # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "clean Points/Points.1"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "did not resolve to a tree"                  # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to know which untracked features would be removed': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to know which untracked features would be removed in a non-existent tree # Clean.feature:43
    Given I have a repository                                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                                        # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                                        # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                         # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "clean -n fake/tree"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "pathspec 'fake/tree' did not match any tree"       # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to know which untracked features would be removed   # Clean.feature:51
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                   # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                   # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                    # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "clean -n"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Would remove Points/Points.1" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "commit" command
    In order to finalize a set of changes that have been staged
    As a Geogig User
    I want to create a commit and add it to the repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit with timestamp': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit with timestamp in millisecs': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit with timestamp                                  # Commit.feature:7
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -t 2010-04-22T19:53:23Z -m msg"         # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "log --utc"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2010-04-22"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit current staged features': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit with timestamp in millisecs                     # Commit.feature:15
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -t 1000000000 -m msg"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "log"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1970-01"                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit current staged features using a message with blank spaces': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit current staged features                         # Commit.feature:23
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to perform multiple commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit current staged features using a message with blank spaces # Commit.feature:32
    Given I have a repository                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                      # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m "A message with spaces""                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "A message with spaces"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"           # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit without providing a message': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to perform multiple commits                               # Commit.feature:42
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                   # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                       # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "commit -m Test2"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "1 changed"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit using a previous commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit without providing a message  # Commit.feature:54
    Given I have a repository                          # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                        # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                        # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                         # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "No commit message provided" # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code         # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit using a previous commit                     # Commit.feature:63
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                        # DefaultStepDefinitions.I_have_several_commits()
    And I have staged "points1"                                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -c HEAD~1"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "No commit message provided" # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit when no changes have been made': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit from an empty directory                    # Commit.feature:70
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "commit -m Test"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit when there is a merge conflict': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit when no changes have been made    # Commit.feature:76
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "commit -m Test"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Nothing to commit" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to amend last commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit when there is a merge conflict                                          # Commit.feature:82
    Given I have a repository                                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have a merge conflict state                                                             # DefaultStepDefinitions.I_have_a_merge_conflict_state()
    When I run the command "commit -m Message"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot run operation while merge or rebase conflicts exist" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to amend last commit, when no previous commit has been made': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to amend last commit                                      # Commit.feature:89
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "points2"                                           # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit --amend"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features added"                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit without message while solving a merge conflict': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to amend last commit, when no previous commit has been made # Commit.feature:99
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                             # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit --amend"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot amend"                         # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to commit only points': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to commit without message while solving a merge conflict # Commit.feature:105
    Given I have a repository                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have a merge conflict state                                    # DefaultStepDefinitions.I_have_a_merge_conflict_state()
    When I run the command "checkout -p Points/Points.1 --theirs"        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "add"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "commit"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Merge branch refs/heads/branch1"   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Conflicts:"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points/Points.1"                    # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to commit only points                                     # Commit.feature:115
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                         # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                         # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                          # DefaultStepDefinitions.I_have_unstaged(String)
    And I have staged "lines2"                                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test Points"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features added"                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
Feature: "config" command
    In order to configure geogig
    As a Geogig User
    I want to get and set global settings as well as repository settings on a directory of my choice
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to set a config value in the current empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get a local config value in the current empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to set a config value in the current empty directory # Config.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "config testing.key value"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The config location is invalid"           # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list local variables in the current empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get a local config value in the current empty directory # Config.feature:12
    Given I am in an empty directory                                       # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "config --get --local testing.key"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "the config location is invalid"                 # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get a config value in the current empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list local variables in the current empty directory # Config.feature:18
    Given I am in an empty directory                                   # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "config --list --local"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "the config location is invalid"             # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                         # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to set and get a global config value in the current empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get a config value in the current empty directory # Config.feature:24
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "config --get testing.key"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                         # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to set and get a config value in the current repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to set and get a global config value in the current empty directory # Config.feature:29
    Given I am in an empty directory                                                # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "config --global testing.global true"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global --get testing.global"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "true"                                                    # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to set and get a multi-word config value in the current repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to set and get a config value in the current repository # Config.feature:35
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config testing.local true"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --get testing.local"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "true"                                        # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --local --get testing.local"         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "true"                                        # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get a config value that doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to set and get a multi-word config value in the current repository # Config.feature:43
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config testing.local test word"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --get testing.local"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "test word"                                              # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --local --get testing.local"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "test word"                                              # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get a config value without specifying key': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get a config value that doesn't exist        # Config.feature:51
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global --get doesnt.exist" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                    # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --get doesnt.exist"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                    # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --local --get doesnt.exist"  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                    # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get a config value using malformed key': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get a config value without specifying key # Config.feature:60
    Given I have a repository                                # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global --get"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "No section or name was provided"  # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --get"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "No section or name was provided"  # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --local --get"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "No section or name was provided"  # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code               # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get a config value using the alternate syntax': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get a config value using malformed key # Config.feature:70
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global --get test"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The section or key is invalid" # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --get test"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The section or key is invalid" # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --local --get test"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The section or key is invalid" # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to set, unset, and get a config value in the current repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get a config value using the alternate syntax # Config.feature:80
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global section.key value1"  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global section.key"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "value1"                               # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config section.key value2"           # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config section.key"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "value2"                               # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --local section.key"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "value2"                               # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to set, unset, and get a config value globally': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to set, unset, and get a config value in the current repository # Config.feature:91
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config testing.local true"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --unset testing.local"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --get testing.local"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                                    # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config testing.local true"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --unset testing.local"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --local --get testing.local"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                                    # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to unset a config value that doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to set, unset, and get a config value globally    # Config.feature:102
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global testing.local true"   # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global --unset testing.local" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global --get testing.local"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                      # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to unset and get in the same config command': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to unset a config value that doesn't exist         # Config.feature:109
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global --unset testing.local" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global --get testing.local"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                       # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --unset testing.local"          # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --local --get testing.local"     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                       # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --unset testing.local"          # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --get testing.local"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                       # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Remove a section from the current repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to unset and get in the same config command             # Config.feature:121
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --unset --get testing.local"         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Tried to use more than one action at a time" # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                          # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Remove a section globally': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Remove a section from the current repository    # Config.feature:127
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config testing.local true"      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config testing.local2 false"     # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --remove-section testing" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --get testing.local"      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --get testing.local2"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove a section that doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Remove a section globally                                # Config.feature:137
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --global testing.local true"      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global testing.local2 false"     # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global --remove-section testing" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --global --get testing.local"      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                         # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --global --get testing.local2"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                         # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Add 2 config values and list them': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove a section that doesn't exist                          # Config.feature:147
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --remove-section somerandomsection"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Could not find a section with the name provided"     # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "config --global --remove-section somerandomsection" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Could not find a section with the name provided"     # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                                  # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Specify root URI and set a global config option': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Add 2 config values and list them              # Config.feature:155
    Given I have a repository                              # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config testing.local true"     # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config testing.local2 false"    # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --list"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "testing.local=true"  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "testing.local2=false" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "config testing.local3 true"    # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config testing.local4 false"    # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --list --local"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "testing.local=true"  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "testing.local2=false" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "testing.local3=true"  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "testing.local4=false" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a local config value when using a root URI': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Specify root URI and set a global config option                               # Config.feature:170
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --rootUri ${rootRepoURI} --global testing.global true" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config testing.local true"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config --rootUri ${rootRepoURI} --list"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "testing.global=true"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "testing.local=true"                              # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to use both global and local in the same config command': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a local config value when using a root URI               # Config.feature:178
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --rootUri ${rootRepoURI} testing.local true" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The config location is invalid"                      # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to use the config command with no arguments': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to use both global and local in the same config command # Config.feature:183
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config --local --global"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Usage:"                           # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to use the config command with no arguments # Config.feature:188
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "config"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Usage:"               # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "conflicts" command
    In order to know which features are conflicted 
    As a Geogig User
    I want to get a list of conflicted elements
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list conflicts': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list conflicts showing diffs': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list conflicts               # Conflicts.feature:6
    Given I have a repository                   # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches             # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1"      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "conflicts"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Ancestor" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Ours"      # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "Theirs"   # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list conflicts showing only ids': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list conflicts showing diffs                       # Conflicts.feature:15
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                   # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "conflicts --diff"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "StringProp1_1 -> StringProp1_2" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list conflicts showing only ids and diffs': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list conflicts showing only ids # Conflicts.feature:22
    Given I have a repository                      # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1"         # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "conflicts --ids-only"   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 1 lines       # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list conflicts when no conflicts exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list conflicts showing only ids and diffs                             # Conflicts.feature:29
    Given I have a repository                                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                                      # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1"                                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "conflicts --ids-only --diff"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot use --diff and --ids-only at the same time" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list conflicts showing only refspec': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to list conflicts when no conflicts exist       # Conflicts.feature:36
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                 # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "conflicts"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No elements need merging" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to list conflicts showing only refspec # Conflicts.feature:42
    Given I have a repository                          # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                    # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1"             # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "conflicts --refspecs-only"  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "diff" command
    In order to know changes made in a repository
    As a Geogig User
    I want to see the existing differences between commits
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, showing only summary': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index      # Diff.feature:6
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "[1.0,1.0] (1.0,2.0)" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "1000"                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "1001"                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "StringProp1_1"       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "StringProp1_1a"      # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, when no changes have been made': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, showing only summary # Diff.feature:18
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                 # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                 # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff --summary"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                     # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, for a single modified tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, when no changes have been made # Diff.feature:25
    Given I have a repository                                                        # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                           # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "diff"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No differences found"                          # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, for a single unmodified tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, for a single modified tree # Diff.feature:31
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                       # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                       # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff --path Points"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "[1.0,1.0] (1.0,2.0)"                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "1000"                                       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff using too many commit refspecs': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, for a single unmodified tree # Diff.feature:40
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                         # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                         # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff --path Lines"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No differences found"                        # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff using a wrong commit refspec': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff using too many commit refspecs           # Diff.feature:47
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                     # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                     # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff commit1 commit2 commit3"      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit list is too long" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                 # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, for a single modified tree, showing only summary': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff using a wrong commit refspec                                    # Diff.feature:55
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                            # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                            # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff wrongcommit"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Refspec wrongcommit does not resolve to a tree" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index, for a single feature whose feature type has changed': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, for a single modified tree, showing only summary # Diff.feature:63
    Given I have a repository                                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                             # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                                             # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "diff --path Points --summary"                                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/Points.1"                                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "POINT (1 1)"                                                  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "1000"                                                         # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index with bounds': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index, for a single feature whose feature type has changed # Diff.feature:72
    Given I have a repository                                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                                # DefaultStepDefinitions.I_stage_6_features()
    And I a featuretype is modified                                                                       # DefaultStepDefinitions.I_modify_a_feature_type()
    When I run the command "diff --path Points/Points.1"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "extra: [MISSING] -> "                                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "ExtraString"                                                         # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index with bounds': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index with bounds                  # Diff.feature:80
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                        # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "diff --bounds --crs EPSG:2163"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "right: 1.000000,1.000000,6.000000,6.000000" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "both:  1.000000,1.000000,6.000000,6.000000"  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "CRS:   EPSG:2163"                            # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Show diff between working tree and index with the count argument': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Show diff between working tree and index with bounds         # Diff.feature:88
    Given I have a repository                                            # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                               # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "diff --bounds --crs EPSG:71738191"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Unrecognized CRS: 'EPSG:71738191'" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Show diff between working tree and index with the count argument # Diff.feature:94
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                   # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "diff --count"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Features: added 6"                     # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "format-patch" command
    In order to share a diff
    As a Geogig User
    I want to create a patch file
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to create a patch file': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to create a patch without specifying the file': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to create a patch file                             # FormatPatch.feature:6
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                           # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                           # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "format-patch -f ${currentdir}/some_file" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should exit with zero exit code                          # DefaultStepDefinitions.it_should_exit_with_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to create a patch when there are no changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to create a patch without specifying the file # FormatPatch.feature:13
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                      # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                      # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "format-patch"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Patch file not specified" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to create a patch with too many commit arguments': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to create a patch when there are no changes        # FormatPatch.feature:20
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                       # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "format-patch -f ${currentdir}/some_file" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No differences found"          # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to create a patch between working tree and index, for a single modified tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to create a patch with too many commit arguments # FormatPatch.feature:26
    Given I have a repository                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                     # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "format-patch commit1 commit2 commit3"  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit list is too long"     # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to create a patch between working tree and index, for a single modified tree # FormatPatch.feature:32
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                     # DefaultStepDefinitions.I_stage_6_features()
    And I modify a feature                                                                     # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "format-patch --path Points -f ${currentdir}/some_file"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should exit with zero exit code                                                    # DefaultStepDefinitions.it_should_exit_with_zero_exit_code()
Feature: "init" command
    In order to start versioning my spatial datasets
    As a repository Owner
    I want to create a new repository on a directory of my choice
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Create repository in the current empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Create repository specifying initial configuration': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Create repository in the current empty directory                             # Init.feature:6
    Given I am in an empty directory                                                     # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "init"                                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Initialized empty Geogig repository in ${currentdir}/.geogig" # DefaultStepDefinitions.it_should_answer_exactly(String)
    And the repository shall exist                                                       # DefaultStepDefinitions.the_repository_shall_exist()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Create repository specifying the target directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Create repository specifying initial configuration # Init.feature:12
    Given I am in an empty directory                           # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "init --config foo.bar=baz"         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the repository shall exist                            # DefaultStepDefinitions.the_repository_shall_exist()
    When I run the command "config foo.bar"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "baz"                                # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to init a repository when already inside a repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Create repository specifying the target directory                                  # Init.feature:19
    Given I am in an empty directory                                                           # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "init roads"                                                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Initialized empty Geogig repository in ${currentdir}/roads/.geogig" # DefaultStepDefinitions.it_should_answer_exactly(String)
    And if I change to the respository subdirectory "roads"                                    # DefaultStepDefinitions.if_I_change_to_the_respository_subdirectory(String)
    Then the repository shall exist                                                            # DefaultStepDefinitions.the_repository_shall_exist()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to init a repository from inside a repository subdirectory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to init a repository when already inside a repository              # Init.feature:26
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "init"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Reinitialized existing Geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And the repository shall exist                                                 # DefaultStepDefinitions.the_repository_shall_exist()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Init specifying repo URI': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to init a repository from inside a repository subdirectory            # Init.feature:32
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I am inside a repository subdirectory "topp/shapes"                           # DefaultStepDefinitions.I_am_inside_a_repository_subdirectory(String)
    When I run the command "init"                                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Reinitialized existing Geogig repository in" # DefaultStepDefinitions.the_response_should_start_with(String)
    And the repository shall exist                                                    # DefaultStepDefinitions.the_repository_shall_exist()

  Scenario: Init specifying repo URI                # Init.feature:39
    Given I am in an empty directory                # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "init ${repoURI}"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the repository at "${repoURI}" shall exist # DefaultStepDefinitions.the_repository_at_shall_exist(String)
Feature: "log" command
    In order to know the history of commits on a repository
    As a Geogig User
    I want to log them to the console
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a empty repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository with a single commit.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a empty repository       # Log.feature:5
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "log"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No commits to show" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository with several commits.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository with a single commit.       # Log.feature:10
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m TestCommit"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                   # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: TestCommit"                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of the commits that have changed the points feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository with several commits.         # Log.feature:21
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                              # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log"                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~3}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain "Subject: Commit2"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"   # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of the commits that have changed the lines feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of the commits that have changed the points feature # Log.feature:32
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                    # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log --path Points"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"         # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~3}"       # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of the commits that have changed the points and lines features': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of the commits that have changed the lines feature # Log.feature:42
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                   # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log --path Lines"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit2"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~1}"      # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~2}"      # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show only the last two commits.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of the commits that have changed the points and lines features # Log.feature:51
    Given I have a repository                                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log --path Points Lines"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~1}"                  # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~3}"                  # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the log, skipping the last 2 commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show only the last two commits.                              # Log.feature:62
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log -n 2"                                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Subject: Commit1"                     # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Subject: Commit2"                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|HEAD~2}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Subject: Commit3"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"       # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the last 2 commits before the most recent': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the log, skipping the last 2 commits                 # Log.feature:73
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log --skip 2"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Subject: Commit3"                   # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Subject: Commit4"                   # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~3}"  # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain variable "{ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the last 2 commits before the most recent               # Log.feature:84
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                  # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "log -n 2 --skip 1"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Subject: Commit1"                     # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|HEAD~3}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Subject: Commit2"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~2}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain "Subject: Commit3"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~1}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Subject: Commit4"                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|HEAD}"   # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of all branches': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log from an empty directory                # Log.feature:97
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "log"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a single branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of all branches                                # Log.feature:103
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                              # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "log --all"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit5"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"    # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|branch2}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of all branches specifying the 'until' commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a single branch                             # Log.feature:116
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                              # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "log --branch branch1"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit4"                            # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit5"                            # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of all branches with decoration': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of all branches specifying the 'until' commit                    # Log.feature:127
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                                # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "log --all HEAD..HEAD~1"                                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot specify 'until' commit when listing all branches" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                                 # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository with a single commit.': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of all branches with decoration                # Log.feature:134
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                              # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "log --all --decoration"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit5"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|branch2}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|master}"  # DefaultStepDefinitions.checkResponseTextContains(String)
    Then the response should contain "HEAD"                                  # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "master"                                # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository with a single commit and decoration': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository with a single commit.       # Log.feature:149
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m TestCommit"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                   # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log --oneline"                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 1 lines                              # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "TestCommit"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository showing only names of affected elements': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository with a single commit and decoration # Log.feature:161
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                    # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m TestCommit"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                           # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log --oneline --decoration"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 1 lines                                      # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "(HEAD, refs/heads/master) TestCommit"        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"         # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository showing full descriptions of affected elements': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository showing only names of affected elements # Log.feature:173
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                       # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m TestCommit"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "points2"                                                       # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                       # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                        # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m TestCommit"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "log --names-only"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 13 lines                                         # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "Points.2"                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.3"                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines.1"                                         # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository showing stats of affected elements': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository showing full descriptions of affected elements # Log.feature:187
    Given I have a repository                                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                              # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m TestCommit"                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have staged "points2"                                                              # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                              # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                               # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m TestCommit"                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "log --summary"                                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 24 lines                                                # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository showing a specific author': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository showing stats of affected elements # Log.feature:198
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                   # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "log --stats"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain 23 lines                                    # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository showing a specific comitter': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository showing a specific author # Log.feature:205
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have a local committer                                        # DefaultStepDefinitions.I_have_a_local_committer()
    And I have several commits                                          # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "log --author "Jane Doe""                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "JaneDoe@example.com"              # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository since yesterday': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository showing a specific comitter # Log.feature:212
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have a local committer                                          # DefaultStepDefinitions.I_have_a_local_committer()
    And I have several commits                                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "log --committer "Jane Doe""                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "JaneDoe@example.com"                # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of a repository until now': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository since yesterday # Log.feature:219
    Given I have a repository                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "log --since yesterday"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 19 lines                 # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show a log of all branches specifying an until date': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show a log of a repository until now  # Log.feature:225
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                           # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "log --until "0.seconds.ago"" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 19 lines            # DefaultStepDefinitions.the_response_should_contain_x_lines(int)

  Scenario: Try to show a log of all branches specifying an until date                         # Log.feature:231
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                                # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "log --all --until today"                                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot specify 'until' commit when listing all branches" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "ls" command
    In order to explore the contents of a tree
    As a Geogig User
    I want to display information about it
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list contents in an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list and empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to list contents in an empty directory          # Ls.feature:6
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "ls"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to list and repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to list and empty repository                   # Ls.feature:11
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "ls"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The working tree is empty" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to show a recursive list in a repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to list and repository          # Ls.feature:16
    Given I have a repository                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                    # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "ls"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Root tree/" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points/"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines/"      # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to show only the tree not the children': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to show a recursive list in a repository # Ls.feature:24
    Given I have a repository                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                             # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "ls -r"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points.2"            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines.1"              # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to show a verbose list of a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to show only the tree not the children # Ls.feature:31
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                           # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "ls -d"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/"           # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I try to show a list with seven digit IDs': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I try to show a verbose list of a tree # Ls.feature:37
    Given I have a repository                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                     # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "ls -v Points"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points/"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.1"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.2"     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Points.3"     # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: I try to show a list with seven digit IDs # Ls.feature:46
    Given I have a repository                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                        # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "ls -v -r -t -a 5"         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 9 lines          # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "Points.3"        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Lines.3"         # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "merge" command
    In order to combine two or more geogig histories into one
    As a Geogig User
    I want to merge one or more commit histories into my current branch
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge one branch to a parent branch': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge the same branch twice': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge one branch to a parent branch                             # Merge.feature:6
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                    # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "merge branch1 -m MergeMessage"                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features added"                            # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "log --first-parent"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "MergeMessage"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit5"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~1}"        # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain "Commit1"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD~2}"        # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit4"                                  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit3"                                  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit2"                                  # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|branch1~1}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should not contain variable "{@ObjectId|localrepo|branch2}"   # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge without specifying any commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge the same branch twice                             # Merge.feature:23
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                            # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "merge branch1 -m MergeMessage"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 features added"                    # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "merge branch1 -m MergeMessage2"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The branch has already been merged." # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge a nonexistent branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge without specifying any commits   # Merge.feature:32
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                           # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "merge -m MergeMessage"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "No commits provided to merge." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge a nonexistent branch              # Merge.feature:39
    Given I have a repository                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                            # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "merge nonexistent"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Commit not found" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge two conflicting branches': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge from an empty directory                     # Merge.feature:46
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "merge branch1"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to perform an octopus merge with conflicts': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge two conflicting branches                                  # Merge.feature:52
    Given I have a repository                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                                # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "CONFLICT: Merge conflict in Points/Points.1" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                     # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to perform an octopus merge': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to perform an octopus merge with conflicts                                     # Merge.feature:59
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                                            # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1 branch2"                                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot merge more than two commits when conflicts exist" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                                 # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge two conflicting branches using --ours strategy': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to perform an octopus merge                            # Merge.feature:66
    Given I have a repository                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                        # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "merge branch1 branch2"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Merge branch refs/heads/branch1" # DefaultStepDefinitions.the_response_should_contain(String)
    Then the response should contain "Merge branch refs/heads/branch2" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge two conflicting branches using --ours and --theirs strategy': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge two conflicting branches using --ours strategy # Merge.feature:73
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                     # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1 --ours"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Merge branch refs/heads/branch1"  # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to merge two conflicting branches using --theirs strategy': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge two conflicting branches using --ours and --theirs strategy # Merge.feature:79
    Given I have a repository                                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                                  # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1 --ours --theirs"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot use both --ours and --theirs"           # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to abort a conflicted merge': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to merge two conflicting branches using --theirs strategy # Merge.feature:85
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                       # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "merge branch1 --theirs"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Merge branch refs/heads/branch1"    # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to abort when there is no conflict': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to abort a conflicted merge                       # Merge.feature:91
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have a merge conflict state                             # DefaultStepDefinitions.I_have_a_merge_conflict_state()
    When I run the command "merge branch1 --abort"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Merge aborted successfully" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "status"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nothing to commit"          # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to abort when there is no conflict                # Merge.feature:99
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "merge --abort"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "There is no merge to abort" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
Feature: "rebase" command
    In order to linearize the geogig history
    As a Geogig User
    I want to rebase my local commits onto an existing branch
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase one branch to a parent branch': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase one branch to a parent branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase one branch to a parent branch                          # Rebase.feature:6
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                  # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "rebase master branch1"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}"     # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Commit4"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|branch2}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Commit5"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"        # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to graft a branch onto another branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase one branch to a parent branch                          # Rebase.feature:20
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                  # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "rebase master branch1 --squash squashmessage"        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Commit2"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit3"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit4"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|branch2}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
    And the response should contain "Commit5"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}"        # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain "squashmessage"                              # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase a nonexistant branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to graft a branch onto another branch             # Rebase.feature:34
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                   # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "rebase branch1 branch2 --onto master" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Commit2"                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Commit3"                 # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit4"                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit5"                     # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase to a nonexistant upstream': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase a nonexistant branch                          # Rebase.feature:45
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                         # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "rebase master nonexistant"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The branch reference could not be resolved." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                          # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to graft a branch onto a nonexistant branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase to a nonexistant upstream                       # Rebase.feature:52
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                           # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "rebase nonexistant branch1"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The upstream reference could not be resolved." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to graft a branch onto a nonexistant branch           # Rebase.feature:59
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                       # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "rebase master branch1 --onto nonexistant" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "The onto reference could not be resolved." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase with conflicts and skip': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase from an empty directory                    # Rebase.feature:66
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "rebase master branch1"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase with conflicts and continue': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase with conflicts and skip                            # Rebase.feature:72
    Given I have a repository                                                # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                          # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "rebase branch1 master"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "CONFLICT"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                               # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    When I run the command "rebase --skip"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Commit2"                            # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Commit3"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase with conflicts and abort': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase with conflicts and continue                         # Rebase.feature:86
    Given I have a repository                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                                           # DefaultStepDefinitions.I_have_conflicting_branches()
    And I run the command "rebase branch1 master"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    And I have unstaged "points1"                                             # DefaultStepDefinitions.I_have_unstaged(String)
    And I run the command "add"                                               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "rebase --continue"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit1"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit2"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit3"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Commit4"                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}"  # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@ObjectId|localrepo|master~3}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase --skip when no conflict exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase with conflicts and abort          # Rebase.feature:101
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    And I have conflicting branches                         # DefaultStepDefinitions.I_have_conflicting_branches()
    When I run the command "rebase master branch1"          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "CONFLICT"             # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    When I run the command "rebase --abort"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "aborted successfully" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase --continue when no conflict exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase --skip when no conflict exist # Rebase.feature:110
    Given I have a repository                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "rebase --skip"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot skip"      # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code          # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to rebase --abort when no conflict exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to rebase --continue when no conflict exist # Rebase.feature:116
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "rebase --continue"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot continue"      # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to rebase --abort when no conflict exist # Rebase.feature:122
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "rebase --abort"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot abort"      # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code           # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
Feature: "remote" command
    In order to track changes from other repositories
    As a Geogig User
    I want to add and remove remotes for the current repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add and list remote from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add and list a remote to the current repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add and list remote from an empty directory       # Remote.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "remote add myremote http://myremote.com" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository"    # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add several remotes and list them': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add and list a remote to the current repository   # Remote.feature:11
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add myremote http://myremote.com" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote list"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "myremote"                                 # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a remote that already exists': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add several remotes and list them                  # Remote.feature:17
    Given I have a repository                                         # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add myremote http://myremote.com"  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote add myremote2 http://myremote2.org" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote list"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "myremote"                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "myremote2"                       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a remote and list with verbose mode': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a remote that already exists                                   # Remote.feature:25
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add myremote http://myremote.com"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote add myremote http://myremote2.org"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Could not add, a remote called 'myremote' already exists." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                                        # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a remote that tracks a specific branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a remote and list with verbose mode                  # Remote.feature:32
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add myremote http://myremote.com"        # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote list -v"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "myremote http://myremote.com (fetch)" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "myremote http://myremote.com (push)"   # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add a remote that tracks all branches': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a remote that tracks a specific branch                  # Remote.feature:39
    Given I have a repository                                                  # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add -t branch myremote http://myremote.com" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config remote.myremote.fetch"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "+refs/heads/branch:refs/remotes/myremote/branch"    # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to add, remove, and list a remote': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add a remote that tracks all branches             # Remote.feature:45
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add myremote http://myremote.com" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "config remote.myremote.fetch"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "+refs/heads/*:refs/remotes/myremote/*"    # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove a remote from an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to add, remove, and list a remote                    # Remote.feature:51
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote add myremote http://myremote.com" # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote rm myremote"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "remote list"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                         # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to remove a remote that doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove a remote from an empty repository       # Remote.feature:58
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "remote rm myremote"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to list remotes from an empty repository': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to remove a remote that doesn't exist                  # Remote.feature:64
    Given I have a repository                                          # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "remote rm myremote"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Could not find a remote called 'myremote'." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                         # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to list remotes from an empty repository          # Remote.feature:70
    Given I am in an empty directory                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "remote list"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                    # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
Feature: "rm" command
    In order to remove features from the repository
    As a Geogig User
    I want to delete features and trees from the working tree
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a single feature': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete several features': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a single feature                  # Remove.feature:6
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                              # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "rm Points/Points.1"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted 1 feature(s)" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a whole tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete several features                      # Remove.feature:15
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                 # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                 # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                  # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "rm Points/Points.1 Points/Points.2" # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted 2 feature(s)"     # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a whole tree without the -r modifier': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a whole tree                     # Remove.feature:24
    Given I have a repository                              # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                            # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                            # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                             # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "rm Points -r "                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted Points tree" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete an inexistent feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a whole tree without the -r modifier                                             # Remove.feature:33
    Given I have a repository                                                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                            # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                                            # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                                             # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "rm Points"                                                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Cannot remove tree Points if recursive or truncate is not specified" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                                             # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Truncate a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete an inexistent feature             # Remove.feature:43
    Given I have a repository                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                              # DefaultStepDefinitions.I_have_staged(String)
    And I run the command "commit -m Test"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "rm Points/Wrong.1"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted 0 feature(s)" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Truncate a tree                                  # Remove.feature:53
    Given I have a repository                                # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                              # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                              # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                               # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "rm Points -t "                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Truncated Points tree" # DefaultStepDefinitions.the_response_should_contain(String)
    When I run the command "ls-tree -s"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points 0"              # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "reset" command
    In order to undo local changes
    As a Geogig User
    I want to reset the head, and optionally, the working tree and index to the state of another commit
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a mixed reset of all local changes': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a hard reset of all local changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a mixed reset of all local changes             # Reset.feature:6
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                  # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --mixed"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Unstaged changes after reset:" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 2 lines                          # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    When I run the command "status"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes not staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes to be committed"    # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a soft reset of all local changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a hard reset of all local changes  # Reset.feature:21
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                           # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"  # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                      # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --hard"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                             # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "status"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nothing to commit" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a mixed and hard reset of all local changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a soft reset of all local changes                  # Reset.feature:34
    Given I have a repository                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                           # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                  # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                      # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --soft"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                             # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "status"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Changes not staged for commit" # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Changes to be committed"            # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a mixed and soft reset of all local changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a mixed and hard reset of all local changes # Reset.feature:48
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                    # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"           # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                               # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --hard --mixed"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "you may only specify one mode."        # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to reset from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a mixed and soft reset of all local changes # Reset.feature:59
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                    # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"           # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                               # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --soft --mixed"                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "you may only specify one mode."        # DefaultStepDefinitions.it_should_answer_exactly(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to reset with no commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to reset from an empty directory                     # Reset.feature:70
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "reset"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to reset to a nonexistant commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to reset with no commits                  # Reset.feature:76
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "reset"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Commit could not be resolved." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a reset of a specific path': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to reset to a nonexistant commit          # Reset.feature:82
    Given I have a repository                             # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                            # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"   # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                       # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset nonexistant"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Commit could not be resolved." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code            # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a reset of a non-used path': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a reset of a specific path                     # Reset.feature:94
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                  # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --path Points"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Unstaged changes after reset:" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 2 lines                          # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    When I run the command "status"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes not staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes to be committed"    # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a reset of multiple paths': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a reset of a non-used path                         # Reset.feature:109
    Given I have a repository                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                           # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                  # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                      # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --path Lines"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer ""                                             # DefaultStepDefinitions.it_should_answer_exactly(String)
    When I run the command "status"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Changes not staged for commit" # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain "Changes to be committed"            # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to reset to the state of another branch': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a reset of multiple paths                      # Reset.feature:123
    Given I have a repository                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"              # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                  # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --path Lines Points"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Unstaged changes after reset:" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 2 lines                          # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    When I run the command "status"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes not staged for commit" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes to be committed"    # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a reset with a mode and paths': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to reset to the state of another branch                         # Reset.feature:138
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several branches                                                 # DefaultStepDefinitions.I_have_several_branches()
    When I run the command "checkout branch2"                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "reset branch1"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Unstaged changes after reset:"            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 2 lines                                     # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    When I run the command "log"                                                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|branch1}"    # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should not contain "Subject: Commit4"                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain "Subject: Commit5"                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should not contain variable "{@ObjectId|localrepo|master}" # DefaultStepDefinitions.checkResponseTextDoesNotContain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to do a reset with removed feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to do a reset with a mode and paths                              # Reset.feature:154
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                   # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "commit -m Test"                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "3 features added"                          # DefaultStepDefinitions.the_response_should_contain(String)
    When I modify and add a feature                                              # DefaultStepDefinitions.I_modify_and_add_a_feature()
    And I run the command "reset --hard --path Lines"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then it should answer "Ambiguous call, cannot specify paths and reset mode." # DefaultStepDefinitions.it_should_answer_exactly(String)
    And it should exit with non-zero exit code                                   # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to do a reset with removed feature                  # Reset.feature:166
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                      # DefaultStepDefinitions.I_have_several_commits()
    And I remove and add a feature                                  # DefaultStepDefinitions.I_remove_and_add_a_feature()
    When I run the command "reset"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Unstaged changes after reset" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "revert" command
  In order to undo committed changes
  As a Geogig user
  I want to revert a series of commits and commit those changes
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert something while not in a geogig repository': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert with nothing specified for reverting': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert something while not in a geogig repository # Revert.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    And I run the command "revert master"                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Not in a geogig repository"    # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert one commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert with nothing specified for reverting         # Revert.feature:12
    Given I have a repository                                          # DefaultStepDefinitions.I_have_a_repository()
    And I run the command "revert"                                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nothing specified for reverting" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                         # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert a commit that doesn't exist': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert one commit                            # Revert.feature:18
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                  # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "revert master"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Revert 'Commit4'" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert multiple commits': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert a commit that doesn't exist                                              # Revert.feature:29
    Given I have a repository                                                                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                                     # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "revert doesntExist"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Couldn't resolve 'doesntExist' to a commit, aborting revert" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                                     # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    When I run the command "log"                                                                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Subject: Revert 'Commit4'"                                # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert multiple commits but with one nonexistant commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert multiple commits                      # Revert.feature:42
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                  # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "revert master~1 master~2"           # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Revert 'Commit2'" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Revert 'Commit3'" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert with conflict and abort': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert multiple commits but with one nonexistant commit                  # Revert.feature:54
    Given I have a repository                                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                                              # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "revert master~1 blah"                                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Couldn't resolve 'blah' to a commit, aborting revert" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                                              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    When I run the command "log"                                                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Subject: Commit1"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit2"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit3"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Subject: Commit4"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Subject: Revert of commit"                         # DefaultStepDefinitions.the_response_should_not_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert without commiting': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert with conflict and abort                           # Revert.feature:68
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                              # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "revert HEAD~3"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "could not apply"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "CONFLICT: conflict in Points/Points.1" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                              # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    When I run the command "revert --abort"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "aborted"                              # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to revert with conflict and continue': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to revert without commiting           # Revert.feature:78
    Given I have a repository                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                        # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "revert master --no-commit" # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "log"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should not contain "Revert"     # DefaultStepDefinitions.the_response_should_not_contain(String)

  Scenario: Try to revert with conflict and continue   # Revert.feature:85
    Given I have a repository                          # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                         # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "revert HEAD~3"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "could not apply" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code         # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
    When I have staged "points1"                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "revert --continue"         # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Revert"          # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "show" command
    In order to know about a given element
    As a Geogig User
    I want to display information about it
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a feature using only its path': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a feature using only its path                  # Show.feature:6
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show Points/Points.1"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "ATTRIBUTES"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "FEATURE TYPE ID"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "sp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "pp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "ip"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@PointsTypeID}"                            # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a tree': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a commit                       # Show.feature:19
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show HEAD"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Commit"                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Author"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a feature': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a tree                                # Show.feature:28
    Given I have a repository                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                       # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show HEAD:Points"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "TREE ID"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "DEFAULT FEATURE TYPE ATTRIBUTES"            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "sp"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "pp"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "ip"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@PointsTypeID}"                   # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a feature using its SHA-1': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a feature                                      # Show.feature:41
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show HEAD:Points/Points.1"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "ATTRIBUTES"                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "FEATURE TYPE ID"                                     # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "sp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "pp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "ip"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)
    And the response should contain variable "{@PointsTypeID}"                            # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a feature with the --raw modifier': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a feature using its SHA-1                                          # Show.feature:54
    Given I have a repository                                                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                                    # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                                                              # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show a47ca38e5c3e92c94dec9e8ea597c642003ec878"                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "FEATURE"                                                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "STRING"                                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "INTEGER"                                                                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "POINT"                                                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|a47ca38e5c3e92c94dec9e8ea597c642003ec878}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a 2 features with the --raw modifier': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a feature with the --raw modifier              # Show.feature:65
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show HEAD:Points/Points.1 --raw"                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "STRING"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "INTEGER"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "POINT urn:ogc:def:crs:EPSG::4326"                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "sp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "pp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "ip"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to show the description of a featuretype': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to show the description of a 2 features with the --raw modifier           # Show.feature:78
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show HEAD:Points/Points.1 HEAD:Points/Points.2 --raw"         # DefaultStepDefinitions.I_run_the_command_X(String)
    And the response should contain "HEAD:Points/Points.1"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "HEAD:Points/Points.2"                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "STRING"                                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "INTEGER"                                             # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "POINT"                                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "sp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "pp"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "ip"                                                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD:Points/Points.1}" # DefaultStepDefinitions.checkResponseTextContains(String)

  Scenario: Try to show the description of a featuretype # Show.feature:93
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                               # DefaultStepDefinitions.I_stage_6_features()
    And I run the command "commit -m TestCommit"         # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "show Points"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "TREE ID"           # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "squash" command
    In order to modify history of the repository
    As a Geogig User
    I want to squash commits
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Squash commits': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Squash commits with message': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Squash commits                                                # Squash.feature:6
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "squash HEAD~2 HEAD"                           # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log --oneline"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 2 lines                              # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Squash commits in wrong order': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Squash commits with message                                   # Squash.feature:14
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "squash HEAD~2 HEAD -m squashed"               # DefaultStepDefinitions.I_run_the_command_X(String)
    And I run the command "log --oneline"                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain 2 lines                              # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
    And the response should contain "squashed"                            # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Squash commits with only one commit provided': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Squash commits in wrong order          # Squash.feature:23
    Given I have a repository                      # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                     # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "squash HEAD HEAD~2"    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "wrong order" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Squash commits with only one commit provided                    # Squash.feature:29
    Given I have a repository                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                              # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "squash HEAD~2"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "2 commit references must be supplied" # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "status" command
    In order to know what I have staged and unstaged
    As a Geogig User
    I want to check the status of the current repository
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with no changes': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of an empty directory              # Status.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "status"                                  # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)
    And it should exit with non-zero exit code                       # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with unstaged changes without using a limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with no changes # Status.feature:12
    Given I have a repository                                     # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "status"                               # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "nothing to commit"          # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with staged changes without using a limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with unstaged changes without using a limit # Status.feature:17
    Given I have a repository                                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                                             # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                                             # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points3"                                                             # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                              # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines2"                                                              # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines3"                                                              # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "status"                                                           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes not staged for commit"                          # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes to be committed"                             # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 14 lines                                                  # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with staged and unstaged changes without using a limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with staged changes without using a limit # Status.feature:31
    Given I have a repository                                                               # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                             # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                              # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines2"                                                              # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines3"                                                              # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "status"                                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes not staged for commit"                     # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 14 lines                                                # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with unstaged changes specifying all': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with staged and unstaged changes without using a limit # Status.feature:45
    Given I have a repository                                                                            # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                                          # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines2"                                                                           # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines3"                                                                           # DefaultStepDefinitions.I_have_staged(String)
    And I modify a feature                                                                               # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "status"                                                                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Changes not staged for commit"                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "2 total."                                                           # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 21 lines                                                             # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with staged changes specifying all': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with unstaged changes specifying all # Status.feature:61
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                                      # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                                      # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points3"                                                      # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                       # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines2"                                                       # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines3"                                                       # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "status --all"                                              # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes not staged for commit"                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                         # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes to be committed"                      # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 14 lines                                           # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with staged and unstaged changes specifying all': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with staged changes specifying all # Status.feature:75
    Given I have a repository                                                        # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                       # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines2"                                                       # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines3"                                                       # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "status --all"                                            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should not contain "Changes not staged for commit"              # DefaultStepDefinitions.the_response_should_not_contain(String)
    And the response should contain 14 lines                                         # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with unstaged changes using a limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with staged and unstaged changes specifying all # Status.feature:89
    Given I have a repository                                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                                    # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines2"                                                                    # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines3"                                                                    # DefaultStepDefinitions.I_have_staged(String)
    And I modify a feature                                                                        # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "status --all"                                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Changes not staged for commit"                               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "2 total."                                                    # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 21 lines                                                      # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with staged changes using a limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with unstaged changes using a limit # Status.feature:105
    Given I have a repository                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have unstaged "points1"                                                     # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points2"                                                     # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "points3"                                                     # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines1"                                                      # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines2"                                                      # DefaultStepDefinitions.I_have_unstaged(String)
    And I have unstaged "lines3"                                                      # DefaultStepDefinitions.I_have_unstaged(String)
    When I run the command "status --limit 3"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes not staged for commit"                  # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                        # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 9 lines                                           # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with staged and unstaged changes using a limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with staged changes using a limit # Status.feature:118
    Given I have a repository                                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                     # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines2"                                                      # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines3"                                                      # DefaultStepDefinitions.I_have_staged(String)
    When I run the command "status --limit 3"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                      # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 9 lines                                         # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to get the status of a repository with a negative limit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with staged and unstaged changes using a limit # Status.feature:131
    Given I have a repository                                                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have staged "points1"                                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points2"                                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "points3"                                                                  # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines1"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines2"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I have staged "lines3"                                                                   # DefaultStepDefinitions.I_have_staged(String)
    And I modify a feature                                                                       # DefaultStepDefinitions.I_modify_a_feature()
    When I run the command "status --limit 0"                                                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Changes to be committed"                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "8 total."                                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Changes not staged for commit"                              # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "2 total."                                                   # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain 11 lines                                                     # DefaultStepDefinitions.the_response_should_contain_x_lines(int)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try the get the status of a repository with unmerged elements': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to get the status of a repository with a negative limit # Status.feature:147
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "status --limit -2"                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Limit must be 0 or greater"       # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                          # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try the get the status of a repository with unmerged elements # Status.feature:153
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have a merge conflict state                                     # DefaultStepDefinitions.I_have_a_merge_conflict_state()
    When I run the command "status"                                       # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "unmerged  Points/Points.1"          # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "tag" command
  In order to store defined versions of my repository
  As a Geogig User
  I want to be create tags
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'List the available tags': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Create a new tag': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: List the available tags          # Tag.feature:6
    Given I have a repository                # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits               # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "tag mytag -m msg" # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "tag"             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "mytag" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Create a new tag for a given commit': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Create a new tag                                              # Tag.feature:13
    Given I have a repository                                             # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                            # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "tag mytag -m msg"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Created tag mytag ->"               # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Delete a tag': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Create a new tag for a given commit                            # Tag.feature:20
    Given I have a repository                                              # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                             # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "tag mytag HEAD^ -m msg"                        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Created tag mytag ->"                # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain variable "{@ObjectId|localrepo|HEAD^}" # DefaultStepDefinitions.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Delete an inexistent tag': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Delete a tag                                 # Tag.feature:27
    Given I have a repository                            # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                           # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "tag mytag -m msg"             # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "tag -d mytag"                # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Deleted tag mytag" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a tag with too many parameters provided': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Delete an inexistent tag                            # Tag.feature:34
    Given I have a repository                                   # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                  # DefaultStepDefinitions.I_have_several_commits()
    And I run the command "tag mytag -m msg"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "tag -d wrongtag"                    # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Wrong tag name: wrongtag" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                  # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to delete a tag with too many parameters provided': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a tag with too many parameters provided   # Tag.feature:42
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                      # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "tag mytag HEAD^ extraparam -m msg"      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Too many parameters provided" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                      # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a tag with no message': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to delete a tag with too many parameters provided   # Tag.feature:49
    Given I have a repository                                       # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                      # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "tag -d mytag HEAD^"                     # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Too many parameters provided" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                      # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to create a tag with a wrong commit ref': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to create a tag with no message                # Tag.feature:56
    Given I have a repository                                  # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                 # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "tag mytag HEAD^"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "No tag message provided" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                 # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()

  Scenario: Try to create a tag with a wrong commit ref          # Tag.feature:63
    Given I have a repository                                    # DefaultStepDefinitions.I_have_a_repository()
    And I have several commits                                   # DefaultStepDefinitions.I_have_several_commits()
    When I run the command "tag mytag aaaaaaaa -m msg"           # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Wrong reference: aaaaaaaa" # DefaultStepDefinitions.the_response_should_contain(String)
    And it should exit with non-zero exit code                   # DefaultStepDefinitions.it_should_exit_with_non_zero_exit_code()
@Version
Feature: "version" command
    In order to view GeoGig version information
    As a Geogig User
    I want to display information about it
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'I want to view the GeoGig version': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: I want to view the GeoGig version          # Version.feature:7
    Given I am in an empty directory                   # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "version"                   # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Project Version" # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Build Time"       # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Git Commit ID"    # DefaultStepDefinitions.the_response_should_contain(String)

277 Scenarios (277 passed)
1832 Steps (1832 passed)
2m40.105s

Tests run: 2109, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 163.878 sec - in org.locationtech.geogig.cli.test.functional.RunPorcelainFunctionalTest

Results :

Tests run: 3409, Failures: 0, Errors: 0, Skipped: 0

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-cli ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-cli ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-cli >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-cli ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-cli <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-cli ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-cli >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-cli ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-cli <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-cli ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-cli ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-cli/1.1-SNAPSHOT/geogig-cli-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-cli/1.1-SNAPSHOT/geogig-cli-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-cli/1.1-SNAPSHOT/geogig-cli-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-cli/1.1-SNAPSHOT/geogig-cli-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/cli/target/geogig-cli-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-cli/1.1-SNAPSHOT/geogig-cli-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building PostgreSQL Storage Backend 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-postgres ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-postgres ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-postgres ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-postgres ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 17 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/src/main/java/org/locationtech/geogig/storage/postgresql/PGRepositoryResolver.java: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/src/main/java/org/locationtech/geogig/storage/postgresql/PGRepositoryResolver.java uses or overrides a deprecated API.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/src/main/java/org/locationtech/geogig/storage/postgresql/PGRepositoryResolver.java: Recompile with -Xlint:deprecation for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-postgres ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-postgres ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 28 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-postgres ---
[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-postgres ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-postgres ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-postgres >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-postgres ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-postgres <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-postgres ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-postgres >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-postgres ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-postgres <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-postgres ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-postgres ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-postgres/1.1-SNAPSHOT/geogig-postgres-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-postgres/1.1-SNAPSHOT/geogig-postgres-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-postgres/1.1-SNAPSHOT/geogig-postgres-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-postgres/1.1-SNAPSHOT/geogig-postgres-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/storage/postgres/target/geogig-postgres-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-postgres/1.1-SNAPSHOT/geogig-postgres-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoTools Extension 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-geotools ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-geotools ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-geotools ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-geotools ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 62 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/src/main/java/org/locationtech/geogig/geotools/plumbing/ImportOp.java: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/src/main/java/org/locationtech/geogig/geotools/plumbing/ImportOp.java uses unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/src/main/java/org/locationtech/geogig/geotools/plumbing/ImportOp.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-geotools ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 14 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-geotools ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 33 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/src/test/java/org/locationtech/geogig/geotools/test/storage/MemoryDataStoreWithProvidedFIDSupport.java: Some input files use unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/src/test/java/org/locationtech/geogig/geotools/test/storage/MemoryDataStoreWithProvidedFIDSupport.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-geotools ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.geotools.cli.geojson.GeoJsonImportTest
Running org.locationtech.geogig.geotools.cli.geojson.GeoJsonExportTest
Running org.locationtech.geogig.geotools.cli.shp.ShpImportTest
Running org.locationtech.geogig.geotools.cli.shp.RunShpFunctionalTest
Running org.locationtech.geogig.geotools.cli.shp.ShpExportTest
Running org.locationtech.geogig.geotools.cli.geopkg.GeoPkgDescribeTest
Running org.locationtech.geogig.geotools.cli.geopkg.GeoPkgPullTest
Running org.locationtech.geogig.geotools.cli.geopkg.RunGeoPkgFunctionalTest
Running org.locationtech.geogig.geotools.cli.geopkg.GeoPkgImportTest
Running org.locationtech.geogig.geotools.cli.geopkg.GeoPkgListTest
Running org.locationtech.geogig.geotools.cli.geopkg.GeoPkgExportTest
Running org.locationtech.geogig.geotools.cli.oracle.OracleListTest
Running org.locationtech.geogig.geotools.cli.oracle.OracleImportTest
Running org.locationtech.geogig.geotools.cli.oracle.OracleExportTest
Running org.locationtech.geogig.geotools.cli.oracle.OracleDescribeTest
Running org.locationtech.geogig.geotools.cli.postgis.PGImportTest
Running org.locationtech.geogig.geotools.cli.postgis.PGExportTest
Running org.locationtech.geogig.geotools.cli.postgis.PGDescribeTest
Running org.locationtech.geogig.geotools.cli.postgis.PGListTest
Running org.locationtech.geogig.geotools.plumbing.ImportOpTest
Running org.locationtech.geogig.geotools.plumbing.ExportOpTest
Running org.locationtech.geogig.geotools.plumbing.ExportDiffOpTest
Running org.locationtech.geogig.geotools.plumbing.DescribeOpTest
Running org.locationtech.geogig.geotools.plumbing.ListOpTest
Feature: "shp export" command
    In order to export data to Geogig
    As a Geogig User
    I want to export from the repository to a shapefile
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
Usage: geogig describe [options]
  Options:
    --database, -D
       The database to connect to.  Default: database.gpkg
       Default: /opt/public/hipp/ramdisk/geogig/geogig_geopackage_test7883139399670557742.gpkg
  * --table, -t
       Table to describe.
       Default: <empty string>
    --user, -U
       User name.  Default: user
       Default: user

Feature: "geopkg describe" command
    In order to understand the structure of a table in a GeoPackage file
    As a Geogig User
    I want Geogig to describe the table
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try describing a GeoPackage table from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
The GeoJSON file 'file://nonexistent.geojson' could not be found, skipping...
Importing from database database
Importing from database database
Usage: geogig import [options] <geojson> [<geojson>]...
  Options:
    --add
       Do not replace or delete features on the destination path, but just add
       new ones
       Default: false
    --alter
       Set the path default feature type to the the feature type of imported
       features, and modify existing features to match it
       Default: false
    -d, --dest
       Path to import to
    --fid-attrib
       Use the specified attribute to create the feature Id
    --force-featuretype
       Use origin feature type even if it does not match the default destination
       featuretype
       Default: false
    --geom-name
       Name to use for geometry attribute, replacing the default one
       ('geometry')
    --geom-name-auto
       Uses the name of the geometry descriptor in the destination feature type
       Default: false

The shapefile '/home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/shp/shape.shp' could not be found, skipping...
Importing from GeoJSON /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/geojson/sample.geojson

Importing feature          (1/1)... 
Usage: geogig describe [options]
  Options:
    --database, -D
       The database to connect to.  Default: database
       Default: database
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 5432
       Default: 5432
    --schema, -S
       The database schema to access.  Default: public
       Default: public
  * --table, -t
       Table to describe.
       Default: <empty string>
    --user, -U
       User name.  Default: postgres
       Default: postgres

Importing from shapefile /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/shp/shape.shp
0%
Importing table2           (1/2)... 
0%
2 features inserted in 52.70 ms

Building final tree feature...

2 features tree built in 1.159 ms
100%
/home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/geojson/sample.geojson imported successfully.
0%
1 features inserted in 43.24 ms

Building final tree table2...

1 features tree built in 7.073 ms

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.642 sec - in org.locationtech.geogig.geotools.plumbing.ExportDiffOpTest
Importing table1           (2/2)... 
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.017 sec - in org.locationtech.geogig.geotools.cli.geojson.GeoJsonImportTest
Running org.locationtech.geogig.geotools.plumbing.FeatureTypeAdapterFeatureSourceTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.058 sec - in org.locationtech.geogig.geotools.plumbing.FeatureTypeAdapterFeatureSourceTest

Exporting from Points to Points... 
33%
Usage: geogig export [options] <path> <geojson>
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --featuretype
       Export only features with the specified feature type if several types are
       found
    --overwrite, -o
       Overwrite output file
       Default: false

67%
100%
Points exported successfully to Points

Exporting repository metadata from 'HEAD:Points' (commit 1a9549bf5cd68c92a97a5634ef0739f580c09fe5)...

Creating audit metadata for table 'Points'

Exporting from WORK_HEAD:Points to Points... 
33%
100%
WORK_HEAD:Points exported successfully to /opt/public/hipp/ramdisk/geogig/junit1396028574562156896/repo1856311061/TestPoints.geojson
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.659 sec - in org.locationtech.geogig.geotools.plumbing.DescribeOpTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.72 sec - in org.locationtech.geogig.geotools.plumbing.ListOpTest

Importing changes to table Points onto feature tree Points...
0%
Importing from database /opt/public/hipp/ramdisk/geogig/geogig_geopackage_test338366656624219531.gpkg

Importing Lines            (1/2)... 
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.317 sec - in org.locationtech.geogig.geotools.plumbing.ExportOpTest

Exporting from Points to Points... 
Import successful.
Changes committed and merge at 1b2349ec8c147d51447327fb078393a39dbd7856
33%
67%
100%
Points exported successfully to Points

Exporting repository metadata from 'HEAD:Points' (commit 268628aa2d47efbbda5c92075550c69f270f198c)...

Creating audit metadata for table 'Points'

Exporting from Points to Points... 
33%
100%
Points exported successfully to /opt/public/hipp/ramdisk/geogig/junit8307971137405881607/repo-59599542/TestPoints.geojson
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting a feature type': Using URIBuilder DefaultTestRepoURIBuilder
Importing from database database
Importing from database database

Exporting from Points to Points... 
33%
100%
Points exported successfully to Points

Exporting repository metadata from 'HEAD:Points' (commit 1520e94201144cd53d7ec1d5599bd452b6ecb56b)...

Creating audit metadata for table 'Points'
0%
Exporting from Points to Points... 
33%
100%
Points exported successfully to /opt/public/hipp/ramdisk/geogig/junit8602790060841362579/repo-2054815991/TestPoints.geojson

Exporting from Lines to Lines... 
33%
Lines exported successfully to /opt/public/hipp/ramdisk/geogig/junit8602790060841362579/repo-2054815991/TestPoints.geojson
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.43 sec - in org.locationtech.geogig.geotools.cli.geojson.GeoJsonExportTest
0%
Importing changes to table Points onto feature tree Points...
0%
3 features inserted in 160.5 ms

Building final tree Lines...

3 features tree built in 3.023 ms

Importing Points           (2/2)... 
Importing from database database
Import successful.
Changes committed and merge at 0294bbf6dc29577f19e86608c93e8579fca6ac02
Importing from database database
1%
3 features inserted in 18.13 ms

Building final tree Points...

3 features tree built in 11.45 ms
100%
Import successful.
Fetching table...
Importing from database database

  Scenario: Try exporting from an empty directory                    # ShpExport.feature:6
    Given I am in an empty directory                                 # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "shp export Points Points.shp"            # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should start with "Not in a geogig repository" # DefaultStepDefinitions.the_response_should_start_with(String)

Exporting from Points to Points... 
33%
100%
Points exported successfully to Points

Exporting repository metadata from 'HEAD:Points' (commit 63850eb56cb55b98d30d0100f2b114835b999ece)...

Creating audit metadata for table 'Points'
Fetching table...

Importing table2           (1/2)... 
Fetching feature types...
 - table4
 - table3
 - table2
 - table1
 - shpLikeTable2
 - shpLikeTable
 - GeoJsonLikeTable2
 - GeoJsonLikeTable

Importing changes to table Points onto feature tree Points...
0%
Importing from database database
Fetching feature types...

Importing table2           (1/2)... 
Fetching feature types...
Fetching table...
Table : table1
----------------------------------------
	Property  : label
	Type      : String
----------------------------------------
	Property  : geom
	Type      : Point
----------------------------------------
The shapefile 'file://nonexistent.shp' could not be found, skipping...
Usage: geogig list [options]
  Options:
    --database, -D
       The database to connect to. Default: database
       Default: database
    --estimated_extents
       Use spatial index information to quickly get an estimate of the data
       bounds. Default: true
       Default: true
    --geometry_metadata_table
       Geometry metadata table
       Default: <empty string>
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --loose_bbox
       Perform only primary filter on bbox. Default: true
       Default: true
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 1521
       Default: 1521
    --schema, -S
       The database schema to access.  Default: public
       Default: public
    --user, -U
       User name.  Default: oracle
       Default: oracle

Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.797 sec - in org.locationtech.geogig.geotools.cli.oracle.OracleListTest
Importing from database /opt/public/hipp/ramdisk/geogig/geogig_geopackage_test3655847249276355299.gpkg
Fetching feature types...
 - table4
 - table3
 - table2
 - table1
 - shpLikeTable2
 - shpLikeTable
 - GeoJsonLikeTable2
 - GeoJsonLikeTable

Importing Points           (1/1)... 
0%
Fetching table...
Fetching table...
Fetching feature types...
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.992 sec - in org.locationtech.geogig.geotools.cli.oracle.OracleDescribeTest

1 features inserted in 76.45 ms

Building final tree table2...

1 features tree built in 5.102 ms
0%
Fetching table...

3 features inserted in 18.02 ms

Building final tree Points...

3 features tree built in 5.193 ms
0%
Table : table1
----------------------------------------
	Property  : label
	Type      : String
----------------------------------------
	Property  : geom
	Type      : Point
----------------------------------------
Fetching feature types...

Importing table1           (2/2)... 
100%
Import successful.

1 features inserted in 40.29 ms

Building final tree table2...

1 features tree built in 10.50 ms
Importing from shapefile /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/shp/shape.shp

Importing table1           (2/2)... 
0%
Importing from database database
Fetching table...
Importing from database database
Usage: geogig list [options]
  Options:
    --database, -D
       The database to connect to.  Default: database
       Default: database
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 5432
       Default: 5432
    --schema, -S
       The database schema to access.  Default: public
       Default: public
    --user, -U
       User name.  Default: postgres
       Default: postgres

Importing from database database

Importing table1           (1/1)... 
Importing from database database

Importing table1           (1/1)... 
0%
2 features inserted in 5.029 ms

Building final tree table1...

2 features tree built in 3.932 ms
100%
Import successful.
0%
2 features inserted in 4.712 ms

Building final tree table1...

2 features tree built in 3.642 ms
100%
Import successful.
Usage: geogig import [options] <shapefile> [<shapefile>]...
  Options:
    --add
       Do not replace or delete features on the destination path, but just add
       new ones
       Default: false
    --alter
       Set the path default feature type to the the feature type of imported
       features, and modify existing features to match it
       Default: false
    --charset
       Use the specified charset to decode attributes. Default is ISO-8859-1.
       Default: ISO-8859-1
    --create, -c
       Only create the schema, do not actually import its features
       Default: false
    -d, --dest
       Path to import to
    --fid-attrib
       Use the specified attribute to create the feature Id
    --force-featuretype
       Use origin feature type even if it does not match the default destination
       featuretype
       Default: false

Usage: geogig export [options] [<commit-ish>:]<path> <table> (define source feature type tree and target table name)
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --database, -D
       The database to connect to.  Default: database.gpkg
       Default: database.gpkg
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --featuretype
       Export only features with the specified feature type if several types are
       found
    -i, --interchange
       Export as geogig mobile interchange format
       Default: false
    --overwrite, -o
       Overwrite output table
       Default: false
    --user, -U
       User name.  Default: user
       Default: user

Importing from database database
Importing from database database
Importing from shapefile /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/shp/shape.shp
0%
Importing table4           (1/8)... 
Usage: geogig import [options]
  Options:
    --add
       Do not replace or delete features on the destination path, but just add
       new ones
       Default: false
    --all
       Import all tables.
       Default: false
    --alter
       Set the path default feature type to the the feature type of imported
       features, and modify existing features to match it
       Default: false
    --database, -D
       The database to connect to. Default: database
       Default: database
    -d, --dest
       Path to import to
    --estimated_extents
       Use spatial index information to quickly get an estimate of the data
       bounds. Default: true
       Default: true
    --fid-attrib
       Use the specified attribute to create the feature Id
    --force-featuretype
       Use origin feature type even if it does not match the default destination
       featuretype
       Default: false
    --geometry_metadata_table
       Geometry metadata table
       Default: <empty string>
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --loose_bbox
       Perform only primary filter on bbox. Default: true
       Default: true
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 1521
       Default: 1521
    --schema, -S
       The database schema to access.  Default: public
       Default: public
    --table, -t
       Table to import.
       Default: <empty string>
    --user, -U
       User name.  Default: oracle
       Default: oracle

Usage: geogig import [options]
  Options:
    --add
       Do not replace or delete features on the destination path, but just add
       new ones
       Default: false
    --all
       Import all tables.
       Default: false
    --alter
       Set the path default feature type to the the feature type of imported
       features, and modify existing features to match it
       Default: false
    --database, -D
       The database to connect to.  Default: database
       Default: database
    -d, --dest
       Path to import to
    --fid-attrib
       Use the specified attribute to create the feature Id
    --force-featuretype
       Use origin feature type even if it does not match the default destination
       featuretype
       Default: false
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 5432
       Default: 5432
    --schema, -S
       The database schema to access.  Default: public
       Default: public
    --table, -t
       Table to import.
       Default: <empty string>
    --user, -U
       User name.  Default: postgres
       Default: postgres

Importing from database database

Importing table4           (1/8)... 

Importing table3           (2/8)... 
Importing from database database

Importing table4           (1/8)... 
0%
1 features inserted in 3.719 ms

Building final tree table3...

Importing table3           (2/8)... 

1 features tree built in 1.886 ms
Usage: geogig export [options] <path> <shapefile>
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --charset
       Use the specified charset to encode attributes. Default is ISO-8859-1.
       Default: ISO-8859-1
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --featuretype
       Export only features with the specified feature type if several types are
       found
    --overwrite, -o
       Overwrite output file
       Default: false

0%
Importing table2           (3/8)... 

1 features inserted in 3.357 ms

Building final tree table3...

1 features tree built in 790.0 μs

Importing table2           (3/8)... 

1 features inserted in 4.074 ms

Building final tree table2...

1 features tree built in 823.0 μs


Importing table1           (4/8)... 
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Could not find the specified table.
org.locationtech.geogig.cli.CommandFailedException: Could not find the specified table.
	at org.locationtech.geogig.geotools.cli.DataStoreDescribe.runInternal(DataStoreDescribe.java:68)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.geotools.cli.geopkg.GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(GeoPkgStepDefinitions.java:79)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)1 features inserted in 2.848 ms

	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)

	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)Building final tree table2...

	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
1 features tree built in 970.5 μs

	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

Importing table1           (4/8)... 

2 features inserted in 3.363 ms

Building final tree table1...

2 features tree built in 742.1 μs

2 features inserted in 3.984 ms

Building final tree table1...

2 features tree built in 662.0 μs

Importing shpLikeTable2    (5/8)... 

Importing shpLikeTable2    (5/8)... 

1 features inserted in 2.309 ms

Building final tree shpLikeTable2...

1 features tree built in 722.9 μs
0%
1 features inserted in 5.941 ms

Building final tree shpLikeTable2...

1 features tree built in 725.2 μs

Importing shpLikeTable     (6/8)... 

Importing shpLikeTable     (6/8)... 
2017-06-06T19:25:48.433-0400  SEVERE  There's code using JDBC based datastore and not disposing them. This may lead to temporary loss of database connections. Please make sure all data access code calls DataStore.dispose() before freeing all references to it

1 features inserted in 1.636 ms

Building final tree shpLikeTable...

1 features tree built in 8.652 ms

Importing GeoJsonLikeTa... (7/8)... 

Exporting from WORK_HEAD:Points to Points... 
33%
100%
WORK_HEAD:Points exported successfully to Points
2017-06-06T19:25:48.504-0400  SEVERE  There's code using JDBC based datastore and not disposing them. This may lead to temporary loss of database connections. Please make sure all data access code calls DataStore.dispose() before freeing all references to it
1%
1 features inserted in 1.834 ms

Building final tree GeoJsonLikeTable2...

1 features tree built in 586.2 μs
1%
1 features inserted in 2.328 ms

Building final tree shpLikeTable...

1 features tree built in 616.1 μs

Importing GeoJsonLikeTable (8/8)... 

Importing GeoJsonLikeTa... (7/8)... 
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.31 sec - in org.locationtech.geogig.geotools.cli.geopkg.GeoPkgPullTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.366 sec - in org.locationtech.geogig.geotools.cli.postgis.PGListTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.255 sec - in org.locationtech.geogig.geotools.cli.geopkg.GeoPkgImportTest

Importing table3           (2/8)... 
0%
1 features inserted in 3.775 ms

Building final tree table3...
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try describing a GeoPackage table': Using URIBuilder DefaultTestRepoURIBuilder

1 features inserted in 27.26 ms

Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.346 sec - in org.locationtech.geogig.geotools.cli.postgis.PGDescribeTest
Building final tree GeoJsonLikeTable...

1 features tree built in 694.7 μs

1 features tree built in 2.957 ms

Importing table2           (3/8)... 

1 features inserted in 1.879 ms

Building final tree GeoJsonLikeTable2...

Exporting from WORK_HEAD:Lines to Lines... 
33%
1 features tree built in 12.48 ms

Importing GeoJsonLikeTable (8/8)... 
100%
Import successful.
WORK_HEAD:Lines exported successfully to Lines
Fetching feature types...
 - table4
 - table3
 - table2
 - table1
 - shpLikeTable2
 - shpLikeTable
 - GeoJsonLikeTable2
 - GeoJsonLikeTable
1%
1 features inserted in 3.952 ms

Building final tree GeoJsonLikeTable...

1 features tree built in 6.785 ms

1 features inserted in 2.382 ms

Building final tree table2...

1 features tree built in 1.988 ms

Importing table1           (4/8)... 
100%
Fetching feature types...
Import successful.
0%
2 features inserted in 3.356 ms

Building final tree table1...

2 features tree built in 850.7 μs
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.343 sec - in org.locationtech.geogig.geotools.cli.oracle.OracleImportTest

Importing shpLikeTable2    (5/8)... 
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.345 sec - in org.locationtech.geogig.geotools.cli.postgis.PGImportTest

1 features inserted in 4.572 ms

Building final tree shpLikeTable2...

1 features tree built in 649.3 μs
Fetching feature types...

Importing shpLikeTable     (6/8)... 

1 features inserted in 3.074 ms

Building final tree shpLikeTable...

1 features tree built in 10.96 ms
Usage: geogig list [options]
  Options:
    --database, -D
       The database to connect to.  Default: database.gpkg
       Default: database.gpkg
    --user, -U
       User name.  Default: user
       Default: user

Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.562 sec - in org.locationtech.geogig.geotools.cli.geopkg.GeoPkgListTest

Importing GeoJsonLikeTa... (7/8)... 

  Scenario: Try describing a GeoPackage table from an empty directory                    # GeoPkgDescribe.feature:6
    Given I am in an empty directory                                                     # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "geopkg describe --table test" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Could not find the specified table."               # DefaultStepDefinitions.the_response_should_contain(String)
1%
1 features inserted in 1.356 ms

Building final tree GeoJsonLikeTable2...

1 features tree built in 619.7 μs
Fetching table...
Table : table1
----------------------------------------
	Property  : label
	Type      : String
----------------------------------------
	Property  : geom

Importing GeoJsonLikeTable (8/8)... 

1 features inserted in 1.832 ms

Building final tree GeoJsonLikeTable...

1 features tree built in 1.046 ms
	Type      : Point
----------------------------------------
100%
/home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/test-classes/org/locationtech/geogig/geotools/cli/shp/shape.shp imported successfully.
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.983 sec - in org.locationtech.geogig.geotools.cli.shp.ShpImportTest
Usage: geogig export [options] <path> <shapefile>
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --charset
       Use the specified charset to encode attributes. Default is ISO-8859-1.
       Default: ISO-8859-1
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --featuretype
       Export only features with the specified feature type if several types are
       found
    --overwrite, -o
       Overwrite output file
       Default: false

Fetching table...
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.131 sec - in org.locationtech.geogig.geotools.cli.geopkg.GeoPkgDescribeTest

Exporting from Points to Points... 
33%
100%
Points exported successfully to Points

Exporting from WORK_HEAD:Points to TestPoints... 
33%
100%
WORK_HEAD:Points exported successfully to /opt/public/hipp/ramdisk/geogig/junit1628161437516764915/repo795190647/TestPoints.shp

Exporting from Points to Points... 
33%
100%
Points exported successfully to Points

Exporting from WORK_HEAD:Points to testTable... 
33%
100%

Exporting from Points to TestPoints... 
33%
WORK_HEAD:Points exported successfully to testTable

Exporting from Lines to testTable... 
33%
Lines exported successfully to testTable
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to describe a GeoPackage table that doesn't exit in the database': Using URIBuilder DefaultTestRepoURIBuilder

Exporting from Lines to Points... 
33%
Lines exported successfully to Points
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.82 sec - in org.locationtech.geogig.geotools.cli.geopkg.GeoPkgExportTest

Exporting from Points to Points... 
33%
100%
Points exported successfully to Points

  Scenario: Try describing a GeoPackage table                                              # GeoPkgDescribe.feature:11
    Given I have a repository                                                              # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg describe --table Points" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Table : Points"                                      # DefaultStepDefinitions.the_response_should_contain(String)
Usage: geogig export [options] [<commit-ish>:]<path> <table> (define source feature type tree and target table name)
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --database, -D
       The database to connect to. Default: database
       Default: database
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --estimated_extents
       Use spatial index information to quickly get an estimate of the data
       bounds. Default: true
       Default: true
    --featuretype
       Export only features with the specified feature type if several types are
       found
    --geometry_metadata_table
       Geometry metadata table
       Default: <empty string>
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --loose_bbox
       Perform only primary filter on bbox. Default: true
       Default: true
    --overwrite, -o
       Overwrite output table
       Default: false
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 1521
       Default: 1521
    --schema, -S
       The database schema to access.  Default: public
       Default: public
    --user, -U
       User name.  Default: oracle
       Default: oracle

Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.003 sec - in org.locationtech.geogig.geotools.cli.oracle.OracleExportTest
Usage: geogig export [options] <path> <shapefile>
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --charset
       Use the specified charset to encode attributes. Default is ISO-8859-1.
       Default: ISO-8859-1
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --featuretype
       Export only features with the specified feature type if several types are
       found
    --overwrite, -o
       Overwrite output file
       Default: false


Exporting from WORK_HEAD:Points to testTable... 

Exporting from Points to TestPoints... 
33%
33%
100%
Points exported successfully to /opt/public/hipp/ramdisk/geogig/junit7083061583265707209/repo779374716/TestPoints.shp
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Could not find the specified table.
org.locationtech.geogig.cli.CommandFailedException: Could not find the specified table.
	at org.locationtech.geogig.geotools.cli.DataStoreDescribe.runInternal(DataStoreDescribe.java:68)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.geotools.cli.geopkg.GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(GeoPkgStepDefinitions.java:79)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
100%
WORK_HEAD:Points exported successfully to testTable

Exporting from Lines to testTable... 
33%
Lines exported successfully to testTable

  Scenario: Try to describe a GeoPackage table that doesn't exit in the database                      # GeoPkgDescribe.feature:16
    Given I have a repository                                                                         # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg describe --table nonexistant_table" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Could not find the specified table."                            # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "geopkg export" command
    In order to export data to Geogig
    As a Geogig User
    I want to export from the repository into a GeoPackage file
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder

Exporting from Points to TestPoints... 
33%
100%
Points exported successfully to /opt/public/hipp/ramdisk/geogig/junit4008107078554507852/repo949740841/TestPoints.shp

Exporting from Lines to TestPoints... 
33%
Exporting from Points to Points... 
33%
Lines exported successfully to /opt/public/hipp/ramdisk/geogig/junit4008107078554507852/repo949740841/TestPoints.shp
100%
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.531 sec - in org.locationtech.geogig.geotools.cli.shp.ShpExportTest
Points exported successfully to Points
Usage: geogig export [options] [<commit-ish>:]<path> <table> (define source feature type tree and target table name)
  Options:
    --alter
       Export all features if several types are found, altering them to adapt to
       the output feature type
       Default: false
    --database, -D
       The database to connect to.  Default: database
       Default: database
    --defaulttype
       Export only features with the tree default feature type if several types
       are found
       Default: false
    --featuretype
       Export only features with the specified feature type if several types are
       found
    --host, -H
       Machine name or IP address to connect to. Default: localhost
       Default: localhost
    --overwrite, -o
       Overwrite output table
       Default: false
    --password, -W
       Password.  Default: <no password>
       Default: <empty string>
    --port, -P
       Port number to connect to.  Default: 5432
       Default: 5432
    --schema, -S
       The database schema to access.  Default: public
       Default: public
    --user, -U
       User name.  Default: postgres
       Default: postgres

Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.494 sec - in org.locationtech.geogig.geotools.cli.postgis.PGExportTest
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting a feature type': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try exporting from an empty directory                                 # GeoPkgExport.feature:6
    Given I am in an empty directory                                              # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "geopkg export Points Points" on a new GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_a_new_GeoPackage_file(String)
    Then the response should start with "Not in a geogig repository:"             # DefaultStepDefinitions.the_response_should_start_with(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting an inexistent feature type': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try exporting a feature type                                          # ShpExport.feature:11
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                        # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "shp export -o Points Points.shp"                      # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points exported successfully to Points.shp" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting with mixed feature types': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting an inexistent feature type': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try exporting an inexistent feature type                                      # ShpExport.feature:17
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "shp export WRONGTABLE Points.shp"                             # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "pathspec 'WRONGTABLE' did not match any valid path" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try exporting a feature type                                               # GeoPkgExport.feature:11
    Given I have a repository                                                          # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                             # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "geopkg export -o Points MyPoints" on a new GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_a_new_GeoPackage_file(String)
    Then the response should contain "Points exported successfully to MyPoints"        # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting with mixed feature types using the default feature type': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting to a table that already exists': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try exporting with mixed feature types                                                    # ShpExport.feature:23
    Given I have a repository                                                                         # DefaultStepDefinitions.I_have_a_repository()
    And I have several feature types in a path                                                        # GeoToolsStepDefinitions.I_have_several_feature_types_in_a_path()
    When I run the command "shp export -o Points Points.shp"                                          # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "The selected tree contains mixed feature types"                 # DefaultStepDefinitions.the_response_should_contain(String)
    And the response should contain "Use --defaulttype or --featuretype <feature_type_ref> to export" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try exporting an inexistent feature type                                      # GeoPkgExport.feature:17
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "geopkg export WRONGTABLE Points" on a new GeoPackage file     # GeoPkgStepDefinitions.I_run_the_command_on_a_new_GeoPackage_file(String)
    Then the response should contain "pathspec 'WRONGTABLE' did not match any valid path" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting with mixed feature types using --alter': Using URIBuilder DefaultTestRepoURIBuilder
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - The selected table already exists. Use -o to overwrite
org.locationtech.geogig.cli.CommandFailedException: The selected table already exists. Use -o to overwrite
	at org.locationtech.geogig.geotools.cli.DataStoreExport.exportInternal(DataStoreExport.java:134)
	at org.locationtech.geogig.geotools.cli.DataStoreExport.runInternal(DataStoreExport.java:99)
	at org.locationtech.geogig.geotools.cli.geopkg.GeopkgExport.runInternal(GeopkgExport.java:75)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.geotools.cli.geopkg.GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(GeoPkgStepDefinitions.java:79)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

  Scenario: Try exporting with mixed feature types using the default feature type # ShpExport.feature:30
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several feature types in a path                                    # GeoToolsStepDefinitions.I_have_several_feature_types_in_a_path()
    When I run the command "shp export -o --defaulttype Points Points.shp"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points exported successfully to Points.shp" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting a table from HEAD': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try exporting to a table that already exists                                      # GeoPkgExport.feature:23
    Given I have a repository                                                                 # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                    # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "geopkg export Points Points" on an existing GeoPackage file       # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "The selected table already exists. Use -o to overwrite" # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try exporting a table from HEAD': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try exporting with mixed feature types using --alter                  # ShpExport.feature:36
    Given I have a repository                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I have several feature types in a path                                    # GeoToolsStepDefinitions.I_have_several_feature_types_in_a_path()
    When I run the command "shp export -o --defaulttype Points Points.shp"        # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points exported successfully to Points.shp" # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try exporting a table from HEAD                                                       # GeoPkgExport.feature:29
    Given I have a repository                                                                     # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                        # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "commit -m TestCommit"                                                 # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "geopkg export -o HEAD:Points CommitedPoints" on a new GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_a_new_GeoPackage_file(String)
    Then the response should contain "Points exported successfully to CommitedPoints"             # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "geopkg import" command
    In order to import data to Geogig
    As a Geogig User
    I want to import one or more tables from a GeoPackage file
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try importing into an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to import a GeoPackage table': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try importing into an empty directory                                        # GeoPkgImport.feature:6
    Given I am in an empty directory                                                     # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "geopkg import --table Points" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should start with "Not in a geogig repository"                     # DefaultStepDefinitions.the_response_should_start_with(String)

  Scenario: Try exporting a table from HEAD                                               # ShpExport.feature:42
    Given I have a repository                                                             # DefaultStepDefinitions.I_have_a_repository()
    And I stage 6 features                                                                # DefaultStepDefinitions.I_stage_6_features()
    When I run the command "commit -m TestCommit"                                         # DefaultStepDefinitions.I_run_the_command_X(String)
    When I run the command "shp export -o HEAD:Points CommitedPoints.shp"                 # DefaultStepDefinitions.I_run_the_command_X(String)
    Then the response should contain "Points exported successfully to CommitedPoints.shp" # DefaultStepDefinitions.the_response_should_contain(String)

7 Scenarios (7 passed)
29 Steps (29 passed)
0m18.698s

Tests run: 36, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 20.545 sec - in org.locationtech.geogig.geotools.cli.shp.RunShpFunctionalTest
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to import a full GeoPackage file': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to import a GeoPackage table                                             # GeoPkgImport.feature:11
    Given I have a repository                                                            # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg import --table Points" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Import successful."                                # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to import a GeoPackage table that doesn't exit in the file': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to import a full GeoPackage file                                # GeoPkgImport.feature:16
    Given I have a repository                                                   # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg import --all" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Import successful."                       # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to import without specifying table or -all': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to import a GeoPackage table that doesn't exit in the file                          # GeoPkgImport.feature:21
    Given I have a repository                                                                       # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg import --table nonexistant_table" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Could not find the specified table."                          # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to import with table and -all': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to import without specifying table or -all                                               # GeoPkgImport.feature:26
    Given I have a repository                                                                            # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg import" on an existing GeoPackage file                                # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "No tables specified for import. Specify --all or --table <table>." # DefaultStepDefinitions.the_response_should_contain(String)

  Scenario: Try to import with table and -all                                                  # GeoPkgImport.feature:31
    Given I have a repository                                                                  # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg import --table Points --all" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Specify --all or --table <table>, both cannot be set."   # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "geopkg list" command
    In order to know all of the features available in a GeoPackage file
    As a Geogig User
    I want to list all of the features
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try listing from an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try listing from a valid directory': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try listing from an empty directory                         # GeoPkgList.feature:6
    Given I am in an empty directory                                    # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "geopkg list" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should start with "Not in a geogig repository"    # DefaultStepDefinitions.the_response_should_start_with(String)

  Scenario: Try listing from a valid directory                          # GeoPkgList.feature:11
    Given I have a repository                                           # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg list" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should contain "Points"                           # DefaultStepDefinitions.the_response_should_contain(String)
Feature: "geopkg pull" command
    In order to import data to Geogig
    As a Geogig User
    I want to import one or more tables from a GeoPackage file with the interchange format
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try pulling into an empty directory': Using URIBuilder DefaultTestRepoURIBuilder
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull a GeoPackage table without commit message': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try pulling into an empty directory                                        # GeoPkgPull.feature:6
    Given I am in an empty directory                                                   # DefaultStepDefinitions.I_am_in_an_empty_directory()
    When I run the command "geopkg pull --table Points" on an existing GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_GeoPackage_file(String)
    Then the response should start with "Not in a geogig repository"                   # DefaultStepDefinitions.the_response_should_start_with(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Commit message not provided
java.lang.IllegalArgumentException: Commit message not provided
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
	at org.locationtech.geogig.geotools.geopkg.GeopkgAuditImport._call(GeopkgAuditImport.java:64)
	at org.locationtech.geogig.geotools.geopkg.GeopkgAuditImport._call(GeopkgAuditImport.java:23)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.geotools.cli.geopkg.GeopkgPull.runInternal(GeopkgPull.java:67)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.geotools.cli.geopkg.GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file(GeoPkgStepDefinitions.java:116)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull a GeoPackage table': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull a GeoPackage table without commit message                                  # GeoPkgPull.feature:11
    Given I have a repository                                                                      # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg pull --table Points" on an existing interchange GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file(String)
    Then the response should contain "Commit message not provided"                                 # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull a GeoPackage table that doesn't exit in the file': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull a GeoPackage table                                                                            # GeoPkgPull.feature:16
    Given I have a repository                                                                                         # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg pull --table Points --message imported" on an existing interchange GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file(String)
    Then the response should contain "Import successful."                                                             # DefaultStepDefinitions.the_response_should_contain(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - Unable to import: No table to import.
java.lang.IllegalStateException: No table to import.
	at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
	at org.locationtech.geogig.geotools.geopkg.InterchangeFormat.importAuditLog(InterchangeFormat.java:270)
	at org.locationtech.geogig.geotools.geopkg.GeopkgAuditImport._call(GeopkgAuditImport.java:81)
	at org.locationtech.geogig.geotools.geopkg.GeopkgAuditImport._call(GeopkgAuditImport.java:23)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.geotools.cli.geopkg.GeopkgPull.runInternal(GeopkgPull.java:67)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.geotools.cli.geopkg.GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file(GeoPkgStepDefinitions.java:116)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull without specifying table': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull a GeoPackage table that doesn't exit in the file                                                         # GeoPkgPull.feature:21
    Given I have a repository                                                                                                    # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg pull --table nonexistant_table --message imported" on an existing interchange GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file(String)
    Then the response should contain "Unable to import: No table to import."                                                     # DefaultStepDefinitions.the_response_should_contain(String)
[main] INFO org.locationtech.geogig.cli.test.functional.DefaultStepDefinitions - 'Try to pull a GeoPackage table with a conflict': Using URIBuilder DefaultTestRepoURIBuilder

  Scenario: Try to pull without specifying table                                                       # GeoPkgPull.feature:26
    Given I have a repository                                                                          # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg pull --message imported" on an existing interchange GeoPackage file # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file(String)
    Then the response should contain "Import successful."                                              # DefaultStepDefinitions.the_response_should_contain(String)
[main] ERROR org.locationtech.geogig.cli.GeogigCLI - CONFLICT: Merge conflict in Points/Points.1
Automatic merge failed. Fix conflicts and then commit the result.

org.locationtech.geogig.geotools.geopkg.GeopkgMergeConflictsException: CONFLICT: Merge conflict in Points/Points.1
Automatic merge failed. Fix conflicts and then commit the result.

	at org.locationtech.geogig.geotools.geopkg.InterchangeFormat.importAuditLog(InterchangeFormat.java:342)
	at org.locationtech.geogig.geotools.geopkg.GeopkgAuditImport._call(GeopkgAuditImport.java:81)
	at org.locationtech.geogig.geotools.geopkg.GeopkgAuditImport._call(GeopkgAuditImport.java:23)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.geotools.cli.geopkg.GeopkgPull.runInternal(GeopkgPull.java:67)
	at org.locationtech.geogig.cli.AbstractCommand.run(AbstractCommand.java:68)
	at org.locationtech.geogig.cli.GeogigCLI.executeInternal(GeogigCLI.java:530)
	at org.locationtech.geogig.cli.GeogigCLI.execute(GeogigCLI.java:367)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:159)
	at org.locationtech.geogig.cli.test.functional.CLIContext.runCommand(CLIContext.java:153)
	at org.locationtech.geogig.geotools.cli.geopkg.GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file_with_conflict(GeoPkgStepDefinitions.java:157)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at cucumber.runtime.Utils$1.call(Utils.java:37)
	at cucumber.runtime.Timeout.timeout(Timeout.java:13)
	at cucumber.runtime.Utils.invoke(Utils.java:31)
	at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
	at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
	at cucumber.runtime.Runtime.runStep(Runtime.java:299)
	at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
	at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
	at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
	at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
	at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)
	at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at cucumber.api.junit.Cucumber.run(Cucumber.java:98)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

  Scenario: Try to pull a GeoPackage table with a conflict                                                                            # GeoPkgPull.feature:31
    Given I have a repository                                                                                                         # DefaultStepDefinitions.I_have_a_repository()
    When I run the command "geopkg pull --table Points --message imported" on an existing interchange GeoPackage file with a conflict # GeoPkgStepDefinitions.I_run_the_command_on_an_existing_interchange_GeoPackage_file_with_conflict(String)
    Then the response should contain "CONFLICT: Merge conflict in"                                                                    # DefaultStepDefinitions.the_response_should_contain(String)

22 Scenarios (22 passed)
71 Steps (71 passed)
0m23.210s

Tests run: 93, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 25.536 sec - in org.locationtech.geogig.geotools.cli.geopkg.RunGeoPkgFunctionalTest
[main] WARN org.locationtech.geogig.geotools.plumbing.ImportOp - Error looking for known identifier for CRS null
org.locationtech.geogig.porcelain.CRSException: Could not find identifier associated with the defined CRS: 
GEOGCS["GCS_WGS_1985", 
  DATUM["D_WGS_1985", 
    SPHEROID["WGS_1985", 6378137.0, 298.257223563]], 
  PRIMEM["Greenwich", 0.0], 
  UNIT["degree", 0.017453292519943295], 
  AXIS["Longitude", EAST], 
  AXIS["Latitude", NORTH]]
	at org.locationtech.geogig.repository.impl.SpatialOps.findKnownCrs(SpatialOps.java:218)
	at org.locationtech.geogig.repository.impl.SpatialOps.findIdentifier(SpatialOps.java:202)
	at org.locationtech.geogig.geotools.plumbing.ImportOp.tryForceKnownCRS(ImportOp.java:281)
	at org.locationtech.geogig.geotools.plumbing.ImportOp._call(ImportOp.java:221)
	at org.locationtech.geogig.geotools.plumbing.ImportOp._call(ImportOp.java:87)
	at org.locationtech.geogig.repository.AbstractGeoGigOp.call(AbstractGeoGigOp.java:154)
	at org.locationtech.geogig.geotools.plumbing.ImportOpTest.testForcedKnownCrsIdentifierNoMatch(ImportOpTest.java:479)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Tests run: 24, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 25.609 sec - in org.locationtech.geogig.geotools.plumbing.ImportOpTest

Results :

Tests run: 316, Failures: 0, Errors: 0, Skipped: 0

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-geotools ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-geotools ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-geotools >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-geotools ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-geotools <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-geotools ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-geotools >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-geotools ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-geotools <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-geotools ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-geotools ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-geotools/1.1-SNAPSHOT/geogig-geotools-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-geotools/1.1-SNAPSHOT/geogig-geotools-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-geotools/1.1-SNAPSHOT/geogig-geotools-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-geotools/1.1-SNAPSHOT/geogig-geotools-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/geotools/target/geogig-geotools-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-geotools/1.1-SNAPSHOT/geogig-geotools-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Web modules 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ web ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ web ---
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ web ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/target/web-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ web >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ web ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ web <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ web ---
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ web >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ web ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ web <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ web ---
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ web ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/web/1.1-SNAPSHOT/web-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/target/web-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/web/1.1-SNAPSHOT/web-1.1-SNAPSHOT-tests.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig Web API 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-web-api ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-api ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-web-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 7 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-web-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 118 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-web-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-web-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 53 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/test-classes
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/src/test/java/org/locationtech/geogig/rest/geopkg/GeoPackageExportDiffIntegrationTest.java: Some input files use unchecked or unsafe operations.
[WARNING] /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/src/test/java/org/locationtech/geogig/rest/geopkg/GeoPackageExportDiffIntegrationTest.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-web-api ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.locationtech.geogig.web.api.commands.FetchTest
Running org.locationtech.geogig.web.api.commands.ConfigTest
Running org.locationtech.geogig.web.api.commands.RemoveTest
Running org.locationtech.geogig.web.api.commands.LogTest
Running org.locationtech.geogig.web.api.commands.RebuildGraphTest
Running org.locationtech.geogig.web.api.commands.StatusTest
Running org.locationtech.geogig.web.api.commands.VersionTest
Running org.locationtech.geogig.web.api.commands.AddTest
Running org.locationtech.geogig.web.api.commands.PullTest
Running org.locationtech.geogig.web.api.commands.TagTest
Running org.locationtech.geogig.web.api.commands.LsTreeTest
Running org.locationtech.geogig.web.api.commands.CheckoutTest
Running org.locationtech.geogig.web.api.commands.FeatureDiffTest
Running org.locationtech.geogig.web.api.commands.EndTransactionTest
Running org.locationtech.geogig.web.api.commands.RenameRepositoryTest
Running org.locationtech.geogig.web.api.commands.ResolveConflictTest
Running org.locationtech.geogig.web.api.commands.UpdateRefTest
Running org.locationtech.geogig.web.api.commands.RefParseTest
Running org.locationtech.geogig.web.api.commands.DiffTest
Running org.locationtech.geogig.web.api.commands.BlameTest
Running org.locationtech.geogig.web.api.commands.InitTest
Running org.locationtech.geogig.web.api.commands.MergeTest
Running org.locationtech.geogig.web.api.commands.GetCommitGraphTest
Running org.locationtech.geogig.web.api.commands.RequestDeleteRepositoryTokenTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.465 sec - in org.locationtech.geogig.web.api.commands.VersionTest
Running org.locationtech.geogig.web.api.commands.RevertFeatureTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.696 sec - in org.locationtech.geogig.web.api.commands.RequestDeleteRepositoryTokenTest
Running org.locationtech.geogig.web.api.commands.ReportMergeScenarioTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.431 sec - in org.locationtech.geogig.web.api.commands.InitTest
Running org.locationtech.geogig.web.api.commands.BeginTransactionTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.716 sec - in org.locationtech.geogig.web.api.commands.StatusTest
Running org.locationtech.geogig.web.api.commands.CommitTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.775 sec - in org.locationtech.geogig.web.api.commands.RenameRepositoryTest
Running org.locationtech.geogig.web.api.commands.PushTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.688 sec - in org.locationtech.geogig.web.api.commands.BeginTransactionTest
Running org.locationtech.geogig.web.api.commands.BranchTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.893 sec - in org.locationtech.geogig.web.api.commands.AddTest
Running org.locationtech.geogig.web.api.commands.RemoteManagementTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.574 sec - in org.locationtech.geogig.web.api.commands.CommitTest
Running org.locationtech.geogig.web.api.commands.CatTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.72 sec - in org.locationtech.geogig.web.api.commands.ConfigTest
Running org.locationtech.geogig.web.api.commands.StatisticsTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.434 sec - in org.locationtech.geogig.web.api.commands.RefParseTest
Running org.locationtech.geogig.web.api.index.UpdateIndexTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.793 sec - in org.locationtech.geogig.web.api.commands.RebuildGraphTest
Running org.locationtech.geogig.web.api.index.CreateIndexTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.597 sec - in org.locationtech.geogig.web.api.commands.ResolveConflictTest
Running org.locationtech.geogig.web.api.index.ListIndexesTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.336 sec - in org.locationtech.geogig.web.api.commands.GetCommitGraphTest
Running org.locationtech.geogig.web.api.index.RebuildIndexTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.94 sec - in org.locationtech.geogig.web.api.commands.RemoveTest
Running org.locationtech.geogig.web.api.XMLStreamingWriterTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.709 sec - in org.locationtech.geogig.web.api.commands.DiffTest
Running org.locationtech.geogig.web.api.JSONCompareTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.022 sec - in org.locationtech.geogig.web.api.JSONCompareTest
Running org.locationtech.geogig.web.api.JSONStreaminWriterTest
Tests run: 27, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.21 sec - in org.locationtech.geogig.web.api.JSONStreaminWriterTest
Running org.locationtech.geogig.rest.geopkg.GeoPackageExportDiffIntegrationTest
Tests run: 27, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.576 sec - in org.locationtech.geogig.web.api.XMLStreamingWriterTest
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.299 sec - in org.locationtech.geogig.web.api.commands.FeatureDiffTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.515 sec - in org.locationtech.geogig.web.api.commands.EndTransactionTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.11 sec - in org.locationtech.geogig.web.api.commands.RevertFeatureTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.248 sec - in org.locationtech.geogig.web.api.commands.StatisticsTest
Running org.locationtech.geogig.rest.geopkg.GeoPackageImportIntegrationTest
Running org.locationtech.geogig.rest.geopkg.GeoPackageExportIntegrationTest
Running org.locationtech.geogig.rest.geotools.ExportTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.101 sec - in org.locationtech.geogig.web.api.index.RebuildIndexTest
Running org.locationtech.geogig.rest.repository.InitRequestUtilTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.29 sec - in org.locationtech.geogig.rest.repository.InitRequestUtilTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.999 sec - in org.locationtech.geogig.web.api.commands.MergeTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.509 sec - in org.locationtech.geogig.web.api.commands.BranchTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> 25e01e06e6c218d8ed0ac789a3e6937df58e74df] to refs/remotes/origin/master(master)
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.194 sec - in org.locationtech.geogig.web.api.commands.ReportMergeScenarioTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.393 sec - in org.locationtech.geogig.web.api.commands.BlameTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.112 sec - in org.locationtech.geogig.web.api.index.CreateIndexTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.204 sec - in org.locationtech.geogig.web.api.commands.LsTreeTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.948 sec - in org.locationtech.geogig.web.api.commands.FetchTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.038 sec - in org.locationtech.geogig.web.api.commands.CheckoutTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.131 sec - in org.locationtech.geogig.web.api.commands.UpdateRefTest
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/branch1 -> 349c36a74e586dca5db96bb82be0291066f368b8] to refs/remotes/origin/branch1(null)
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/branch2 -> 4a56a6561dc384806f1dd64e2b8a95175e119afe] to refs/remotes/origin/branch2(null)
[main] INFO org.locationtech.geogig.plumbing.SendPack - Pushing Ref[refs/heads/master -> ef59d3f8f622153f1119ecfefda57eaea46398ad] to refs/remotes/origin/master(null)
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.366 sec - in org.locationtech.geogig.rest.geopkg.GeoPackageExportDiffIntegrationTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.461 sec - in org.locationtech.geogig.web.api.index.ListIndexesTest
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.796 sec - in org.locationtech.geogig.web.api.commands.LogTest
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.639 sec - in org.locationtech.geogig.web.api.commands.CatTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.82 sec - in org.locationtech.geogig.web.api.commands.TagTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.9 sec - in org.locationtech.geogig.rest.geotools.ExportTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 21.089 sec - in org.locationtech.geogig.web.api.commands.PullTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.879 sec - in org.locationtech.geogig.web.api.commands.PushTest
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.02 sec - in org.locationtech.geogig.web.api.index.UpdateIndexTest
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.294 sec - in org.locationtech.geogig.rest.geopkg.GeoPackageImportIntegrationTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.334 sec - in org.locationtech.geogig.rest.geopkg.GeoPackageExportIntegrationTest
Tests run: 27, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.976 sec - in org.locationtech.geogig.web.api.commands.RemoteManagementTest

Results :

Tests run: 462, Failures: 0, Errors: 0, Skipped: 0

[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-web-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-web-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-web-api >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-api ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-web-api <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-web-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-web-api >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-api ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-web-api <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-web-api ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT-test-sources.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-web-api ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-api/1.1-SNAPSHOT/geogig-web-api-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-api/1.1-SNAPSHOT/geogig-web-api-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-api/1.1-SNAPSHOT/geogig-web-api-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-api/1.1-SNAPSHOT/geogig-web-api-1.1-SNAPSHOT-sources.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/api/target/geogig-web-api-1.1-SNAPSHOT-test-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-api/1.1-SNAPSHOT/geogig-web-api-1.1-SNAPSHOT-test-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig WebApp 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-web-app ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-app ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-web-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-web-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-web-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-web-app ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-web-app ---
[INFO] No tests to run.
[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ geogig-web-app ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/geogig-web-app-1.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.4:test-jar (default) @ geogig-web-app ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/geogig-web-app-1.1-SNAPSHOT-tests.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:jar (attach-sources) > generate-sources @ geogig-web-app >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-app ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.SourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:jar (attach-sources) < generate-sources @ geogig-web-app <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:jar (attach-sources) @ geogig-web-app ---
[INFO] Building jar: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/geogig-web-app-1.1-SNAPSHOT-sources.jar
[INFO] 
[INFO] >>> maven-source-plugin:2.2.1:test-jar (attach-sources) > generate-sources @ geogig-web-app >>>
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-app ---
[WARNING] Failed to getClass for org.apache.maven.plugin.source.TestSourceJarMojo
[INFO] 
[INFO] <<< maven-source-plugin:2.2.1:test-jar (attach-sources) < generate-sources @ geogig-web-app <<<
[INFO] 
[INFO] --- maven-source-plugin:2.2.1:test-jar (attach-sources) @ geogig-web-app ---
[INFO] No sources in project. Archive not created.
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ geogig-web-app ---
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/geogig-web-app-1.1-SNAPSHOT.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-app/1.1-SNAPSHOT/geogig-web-app-1.1-SNAPSHOT.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/pom.xml to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-app/1.1-SNAPSHOT/geogig-web-app-1.1-SNAPSHOT.pom
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/geogig-web-app-1.1-SNAPSHOT-tests.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-app/1.1-SNAPSHOT/geogig-web-app-1.1-SNAPSHOT-tests.jar
[INFO] Installing /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/app/target/geogig-web-app-1.1-SNAPSHOT-sources.jar to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/.repository/org/locationtech/geogig/geogig-web-app/1.1-SNAPSHOT/geogig-web-app-1.1-SNAPSHOT-sources.jar
[JENKINS] Archiving disabled
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building GeoGig Web API Automated Functional Tests 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ geogig-web-api-functional-tests ---
[INFO] Deleting /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/functional/target
[INFO] 
[INFO] --- git-commit-id-plugin:2.1.8:revision (default) @ geogig-web-api-functional-tests ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ geogig-web-api-functional-tests ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/functional/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ geogig-web-api-functional-tests ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ geogig-web-api-functional-tests ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 48 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ geogig-web-api-functional-tests ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 10 source files to /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/functional/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ geogig-web-api-functional-tests ---
[INFO] Surefire report directory: /home/hudson/genie.geogig/.jenkins/jobs/geogig-1.1.x/workspace/src/web/functional/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.geogig.web.functional.WebAPICucumberHooksTest
Running org.geogig.web.functional.RunFunctionalTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.066 sec - in org.geogig.web.functional.WebAPICucumberHooksTest
@Commands @Add
Feature: Add
  The add command allows a user to stage features in the repository and is supported through the "/repos/{repository}/add" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.mortbay.log - Logging to org.slf4j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf4jLog
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Add.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/add"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Adding outside of a transaction issues 500 "Transaction required"      # Add.feature:12
    Given There is an empty repository named repo1                                 # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/add"                                             # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                       # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "No transaction was specified" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Adding outside of a repository issues 404 "Not found" # Add.feature:18
    Given There is an empty multirepo server                      # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/add"                            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"           # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"   # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Adding with no path filter stages all features                                               # Add.feature:25
    Given There is an empty repository named repo1                                                       # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                              # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And I have unstaged "Point.1" on the "repo1" repo in the "@txId" transaction                         # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And I have unstaged "Point.2" on the "repo1" repo in the "@txId" transaction                         # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And I have unstaged "Line.1" on the "repo1" repo in the "@txId" transaction                          # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And the repo1 repository's "STAGE_HEAD" in the @txId transaction should have the following features: # WebAPICucumberHooks.verifyRepositoryContentsTx(String,String,String,DataTable)
    When I call "GET /repos/repo1/add?transactionId={@txId}"                                             # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Add/text()" equals "Success"                                                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the repo1 repository's "STAGE_HEAD" in the @txId transaction should have the following features: # WebAPICucumberHooks.verifyRepositoryContentsTx(String,String,String,DataTable)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Adding with a path filter stages specified features                                          # Add.feature:42
    Given There is an empty repository named repo1                                                       # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                              # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And I have unstaged "Point.1" on the "repo1" repo in the "@txId" transaction                         # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And I have unstaged "Point.2" on the "repo1" repo in the "@txId" transaction                         # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And I have unstaged "Line.1" on the "repo1" repo in the "@txId" transaction                          # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And the repo1 repository's "STAGE_HEAD" in the @txId transaction should have the following features: # WebAPICucumberHooks.verifyRepositoryContentsTx(String,String,String,DataTable)
    When I call "GET /repos/repo1/add?path=Points/Point.1&transactionId={@txId}"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Add/text()" equals "Success"                                                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the repo1 repository's "STAGE_HEAD" in the @txId transaction should have the following features: # WebAPICucumberHooks.verifyRepositoryContentsTx(String,String,String,DataTable)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Adding on a conflicted path resolves the conflict                     # Add.feature:58
    Given There is an empty repository named repo1                                # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                       # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And There are conflicts on the "repo1" repo in the @txId transaction          # WebAPICucumberHooks.There_are_conflict(String,String)
    When I call "GET /repos/repo1/add?path=Points/Point.1&transactionId={@txId}"  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                        # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Add/text()" equals "Success"                         # WebAPICucumberHooks.checkXPathEquals(String,String)
    And There should be no conflicts on the "repo1" repo in the @txId transaction # WebAPICucumberHooks.There_should_be_no_conflicts(String,String)
@Repo @AffectedFeatures
Feature: AffectedFeatures
  The AffectedFeatures resource provides a list of features changed in a commit and is supported through the "/repos/{repository}/repo/affectedfeatures" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # AffectedFeatures.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/repo/affectedfeatures"             # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: AffectedFeatures outside of a repository issues 404 "Not found" # AffectedFeatures.feature:12
    Given There is an empty multirepo server                                # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/repo/affectedfeatures"                    # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                                # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                     # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"             # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: AffectedFeatures with no commit issues a 400 status code     # AffectedFeatures.feature:19
    Given There is an empty repository named repo1                       # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/repo/affectedfeatures"                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                             # WebAPICucumberHooks.checkStatusCode(int)
    And the response body should contain "You must specify a commit id." # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: AffectedFeatures with an invalid commit issues a 400 status code   # AffectedFeatures.feature:25
    Given There is an empty repository named repo1                             # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/repo/affectedfeatures?commitId=invalid"      # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the response body should contain "You must specify a valid commit id." # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: AffectedFeatures lists all features changed in a commit                        # AffectedFeatures.feature:31
    Given There is a default multirepo server                                              # WebAPICucumberHooks.setUpDefaultMultiRepo()
    And I have committed "Point.1_modified" on the "repo1" repo in the "" transaction      # WebAPICucumberHooks.I_have_committed(String,String,String)
    When I call "GET /repos/repo1/repo/affectedfeatures?commitId={@ObjectId|repo1|master}" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                                    # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "{@ObjectId|repo1|master~1:Points/Point.1}"       # WebAPICucumberHooks.checkResponseTextContains(String)
@Commands @Blame
Feature: Blame
  The blame command allows a user to see who last modified each attribute of a feature and is supported through the "/repos/{repository}/blame" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Blame.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/blame"                             # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling blame without a feature path issues a 500 status code                         # Blame.feature:12
    Given There is an empty repository named repo1                                                # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/blame"                                                          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Required parameter 'path' was not provided." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling blame with an invalid commit issues a 500 status code                # Blame.feature:18
    Given There is an empty repository named repo1                                       # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/blame?commit=nonexistent&path=somePath"                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Could not resolve branch or commit" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling blame with an invalid feature path issues a 500 status code        # Blame.feature:24
    Given There is an empty repository named repo1                                     # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/blame?path=nonexistent"                              # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                           # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "The supplied path does not exist" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling blame with a tree path issues a 500 status code                                   # Blame.feature:30
    Given There is a default multirepo server                                                         # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/blame?path=Points"                                                  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "The supplied path does not resolve to a feature" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling blame with a feature path shows who modified each attribute                            # Blame.feature:36
    Given There is an empty repository named repo1                                                         # WebAPICucumberHooks.setUpEmptyRepo(String)
    And There is a feature with multiple authors on the "repo1" repo                                       # WebAPICucumberHooks.There_is_a_feature_with_multiple_authors(String)
    When I call "GET /repos/repo1/blame?path=Points/Point.1"                                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Blame/Attribute" 3 times                                # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And there is an xpath "/response/Blame/Attribute/commit/author/name/text()" that equals "Author1"      # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Blame/Attribute/commit/message/text()" that equals "Added Point.1"    # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Blame/Attribute/commit/author/name/text()" that equals "Author2"      # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Blame/Attribute/commit/message/text()" that equals "Modified Point.1" # WebAPICucumberHooks.checkOneXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling blame with a feature path and commit shows who modified each attribute # Blame.feature:48
    Given There is an empty repository named repo1                                         # WebAPICucumberHooks.setUpEmptyRepo(String)
    And There is a feature with multiple authors on the "repo1" repo                       # WebAPICucumberHooks.There_is_a_feature_with_multiple_authors(String)
    When I call "GET /repos/repo1/blame?path=Points/Point.1&commit=HEAD~1"                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Blame/Attribute" 3 times                # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xpath "/response/Blame/Attribute/commit/author/name/text()" equals "Author1"   # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Blame/Attribute/commit/message/text()" equals "Added Point.1" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the response body should not contain "Author2"                                     # WebAPICucumberHooks.checkResponseTextNotContains(String)
    And the response body should not contain "Modified Point.1"                            # WebAPICucumberHooks.checkResponseTextNotContains(String)
@Commands @Branch
Feature: Branch
  The branch command allows a user to create and list branches and is supported through the "/repos/{repository}/branch" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Branch.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/branch"                            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling branch without specifying list or a branch name issues a 500 status code # Branch.feature:12
    Given There is an empty repository named repo1                                           # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/branch"                                                    # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                 # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Nothing to do."                         # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling branch with the list parameter lists all local branches          # Branch.feature:18
    Given There is an empty repository named repo1                                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    And There are multiple branches on the "repo1" repo                              # WebAPICucumberHooks.There_are_multiple_branches(String)
    When I call "GET /repos/repo1/branch?list=true"                                  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                         # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                           # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Local/Branch" 3 times             # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Remote/Branch" 0 times            # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And there is an xpath "/response/Local/Branch/name/text()" that equals "master"  # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Local/Branch/name/text()" that equals "branch1" # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Local/Branch/name/text()" that equals "branch2" # WebAPICucumberHooks.checkOneXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling branch with the list and remotes parameters lists all local and remote branches # Branch.feature:30
    Given There is an empty repository named repo1                                                  # WebAPICucumberHooks.setUpEmptyRepo(String)
    And There are multiple branches on the "repo1" repo                                             # WebAPICucumberHooks.There_are_multiple_branches(String)
    When I call "GET /repos/repo1/branch?list=true&remotes=true"                                    # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                        # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                          # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Local/Branch" 3 times                            # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Remote/Branch" 3 times                           # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And there is an xpath "/response/Local/Branch/name/text()" that equals "master"                 # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Local/Branch/name/text()" that equals "branch1"                # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Local/Branch/name/text()" that equals "branch2"                # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Remote/Branch/remoteName/text()" that equals "origin"          # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Remote/Branch/name/text()" that equals "master_remote"         # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Remote/Branch/name/text()" that equals "branch1_remote"        # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And there is an xpath "/response/Remote/Branch/name/text()" that equals "branch2_remote"        # WebAPICucumberHooks.checkOneXPathEquals(String,String)
    And the response body should contain "branch2_remote"                                           # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling branch with a branch name creates a new branch                          # Branch.feature:47
    Given There is a default multirepo server                                               # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/branch?branchName=new_branch"                             # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/BranchCreated/name/text()" equals "new_branch"                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/BranchCreated/source/text()" equals "{@ObjectId|repo1|master}" # WebAPICucumberHooks.checkXPathEquals(String,String)
    When I call "GET /repos/repo1/repo/manifest"                                            # WebAPICucumberHooks.callURL(String)
    Then the response body should contain "new_branch"                                      # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling branch with a branch name and source creates a new branch from the source # Branch.feature:57
    Given There is a default multirepo server                                                 # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/branch?branchName=new_branch&source=branch1"                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                  # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                    # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/BranchCreated/name/text()" equals "new_branch"                   # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/BranchCreated/source/text()" equals "{@ObjectId|repo1|branch1}"  # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/BranchCreated/source" 1 times              # WebAPICucumberHooks.checkXPathCadinality(String,int)
    When I call "GET /repos/repo1/repo/manifest"                                              # WebAPICucumberHooks.callURL(String)
    Then the response body should contain "new_branch"                                        # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling branch with a branch name that already exists issues a 400 status code   # Branch.feature:68
    Given There is a default multirepo server                                                # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/branch?branchName=branch1"                                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                 # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" equals "A branch named 'branch1' already exists." # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling branch with a source that does not exist issues a 400 status code                   # Branch.feature:74
    Given There is a default multirepo server                                                           # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/branch?branchName=new_branch&source=nonexistent"                      # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                            # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" equals "nonexistent does not resolve to a repository object" # WebAPICucumberHooks.checkXPathEquals(String,String)
@Commands @Cat
Feature: Cat
  The cat command allows a user to display the attributes of a repository object and is supported through the "/repos/{repository}/cat" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Cat.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/cat"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling cat without specifying an object id issues a 500 status code                      # Cat.feature:12
    Given There is an empty repository named repo1                                                    # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/cat"                                                                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Required parameter 'objectid' was not provided." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling cat with an invalid object id issues a 400 status code                        # Cat.feature:18
    Given There is an empty repository named repo1                                                # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/cat?objectid=notobjectid"                                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "You must specify a valid non-null ObjectId." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling cat with a nonexistent object id issues a 400 status code                                  # Cat.feature:24
    Given There is an empty repository named repo1                                                             # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/cat?objectid=0123456789012345678901234567890123456789"                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "The specified ObjectId was not found in the respository." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling cat on a commit returns details of that commit                              # Cat.feature:30
    Given There is a default multirepo server                                                   # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/cat?objectid={@ObjectId|repo1|master}"                        # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                    # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/id/text()" equals "{@ObjectId|repo1|master}"                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/parents/id/text()" equals "{@ObjectId|repo1|master~1}"      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/author/name/text()" equals "geogigUser"                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/author/email/text()" equals "repo1_Owner@geogig.org"        # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/committer/name/text()" equals "geogigUser"                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/committer/email/text()" equals "repo1_Owner@geogig.org"     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/message/text()" contains "merge branch branch2 onto master" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling cat on a feature returns details of that feature                             # Cat.feature:43
    Given There is a default multirepo server                                                    # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/cat?objectid={@ObjectId|repo1|master:Points/Point.1}"          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                     # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                       # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/feature/id/text()" equals "{@ObjectId|repo1|master:Points/Point.1}" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/feature/attribute" 3 times                    # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "StringProp1_1"                                         # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "1000"                                                  # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "POINT (0 0)"                                           # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling cat on a feature tree returns details of that tree                # Cat.feature:54
    Given There is a default multirepo server                                         # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/cat?objectid={@ObjectId|repo1|master:Points}"       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tree/id/text()" equals "{@ObjectId|repo1|master:Points}" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tree/size/text()" equals "3"                             # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tree/numtrees/text()" equals "0"                         # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/tree/feature" 3 times              # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "Point.1"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Point.2"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Point.3"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling cat on a tag returns details of that tag                                                              # Cat.feature:67
    Given There is a default multirepo server                                                                             # WebAPICucumberHooks.setUpDefaultMultiRepo()
    And There is a tag called "tag1" on the "repo1" repo pointing to "{@ObjectId|repo1|master}" with the "My tag" message # WebAPICucumberHooks.There_is_a_tag(String,String,String,String)
    When I call "GET /repos/repo1/cat?objectid={@ObjectId|repo1|refs/tags/tag1}"                                          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                              # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tag/id/text()" equals "{@ObjectId|repo1|refs/tags/tag1}"                                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tag/commitid/text()" equals "{@ObjectId|repo1|master}"                                       # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tag/name/text()" equals "tag1"                                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tag/message/text()" equals "My tag"                                                          # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tag/tagger/name/text()" equals "geogigUser"                                                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/tag/tagger/email/text()" equals "repo1_Owner@geogig.org"                                     # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling cat on a feature type returns details of that feature type          # Cat.feature:80
    Given There is a default multirepo server                                           # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/cat?objectid={@PointsTypeID}"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                            # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                              # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/featuretype/id/text()" equals "{@PointsTypeID}"            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/featuretype/name/text()" equals "http://geogig.org:Points" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/featuretype/attribute" 3 times       # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "sp"                                           # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "ip"                                           # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "geom"                                         # WebAPICucumberHooks.checkResponseTextContains(String)
@Commands @Checkout
Feature: Checkout
  The checkout command allows a user to switch branches or resolve conflicts and is supported through the "/repos/{repository}/checkout" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Checkout.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/checkout"                          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Checkout outside of a transaction issues 500 "Transaction required"    # Checkout.feature:12
    Given There is an empty repository named repo1                                 # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/checkout"                                        # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                       # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "No transaction was specified" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Checkout outside of a repository issues 404 "Not found" # Checkout.feature:18
    Given There is an empty multirepo server                        # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/checkout"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                        # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"             # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"     # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling checkout without specifying a branch or path issues a 500 status code         # Checkout.feature:25
    Given There is an empty repository named repo1                                                # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                       # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    When I call "GET /repos/repo1/checkout?transactionId={@txId}"                                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "No branch or commit specified for checkout." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling checkout with a branch name changes the current branch       # Checkout.feature:32
    Given There is a default multirepo server                                    # WebAPICucumberHooks.setUpDefaultMultiRepo()
    And I have a transaction as "@txId" on the "repo1" repo                      # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    When I call "GET /repos/repo1/checkout?transactionId={@txId}&branch=branch1" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                     # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                       # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/OldTarget/text()" equals "refs/heads/master"        # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/NewTarget/text()" equals "branch1"                  # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling checkout with a conflicted path with 'ours' will checkout 'our' version of the feature                     # Checkout.feature:41
    Given There is an empty repository named repo1                                                                             # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                                                    # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And There are conflicts on the "repo1" repo in the @txId transaction                                                       # WebAPICucumberHooks.There_are_conflict(String,String)
    When I call "GET /repos/repo1/checkout?transactionId={@txId}&path=Points/Point.1&ours=true"                                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Path/text()" equals "Points/Point.1"                                                              # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Strategy/text()" equals "ours"                                                                    # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the variable "{@ObjectId|repo1|@txId|WORK_HEAD:Points/Point.1}" equals "{@ObjectId|repo1|@txId|master:Points/Point.1}" # WebAPICucumberHooks.checkVariableEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling checkout with a conflicted path with 'theirs' will checkout 'their' version of the feature                  # Checkout.feature:52
    Given There is an empty repository named repo1                                                                              # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                                                     # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And There are conflicts on the "repo1" repo in the @txId transaction                                                        # WebAPICucumberHooks.There_are_conflict(String,String)
    When I call "GET /repos/repo1/checkout?transactionId={@txId}&path=Points/Point.1&theirs=true"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                                    # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Path/text()" equals "Points/Point.1"                                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Strategy/text()" equals "theirs"                                                                   # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the variable "{@ObjectId|repo1|@txId|WORK_HEAD:Points/Point.1}" equals "{@ObjectId|repo1|@txId|branch1:Points/Point.1}" # WebAPICucumberHooks.checkVariableEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling checkout with a conflicted path with neither 'ours' or 'theirs' issues a 500 status code                   # Checkout.feature:63
    Given There is an empty repository named repo1                                                                             # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                                                    # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And There are conflicts on the "repo1" repo in the @txId transaction                                                       # WebAPICucumberHooks.There_are_conflict(String,String)
    When I call "GET /repos/repo1/checkout?transactionId={@txId}&path=Points/Point.1"                                          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" equals "Please specify either ours or theirs to update the feature path specified." # WebAPICucumberHooks.checkXPathEquals(String,String)
@Commands @Commit
Feature: Commit
  The commit command allows a user to commit staged changes and is supported through the "/repos/{repository}/commit" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Commit.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/commit"                            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Commit outside of a transaction issues 500 "Transaction required"      # Commit.feature:12
    Given There is an empty repository named repo1                                 # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/commit"                                          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                       # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "No transaction was specified" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Commit outside of a repository issues 404 "Not found" # Commit.feature:18
    Given There is an empty multirepo server                      # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/commit"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"           # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"   # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling commit with no changes creates an empty commit                    # Commit.feature:25
    Given There is an empty repository named repo1                                    # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                           # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    When I call "GET /repos/repo1/commit?transactionId={@txId}&message=My%20Message"  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commitId/text()" equals "{@ObjectId|repo1|@txId|master}" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/added/text()" equals "0"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/changed/text()" equals "0"                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/deleted/text()" equals "0"                               # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling commit with unstaged features creates an empty commit             # Commit.feature:36
    Given There is an empty repository named repo1                                    # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                           # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And I have unstaged "Point.1" on the "repo1" repo in the "@txId" transaction      # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And I have unstaged "Point.2" on the "repo1" repo in the "@txId" transaction      # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    And I have unstaged "Line.1" on the "repo1" repo in the "@txId" transaction       # WebAPICucumberHooks.I_have_unstaged(String,String,String)
    When I call "GET /repos/repo1/commit?transactionId={@txId}&message=My%20Message"  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commitId/text()" equals "{@ObjectId|repo1|@txId|master}" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/added/text()" equals "0"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/changed/text()" equals "0"                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/deleted/text()" equals "0"                               # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling commit with staged features commits all staged features           # Commit.feature:51
    Given There is an empty repository named repo1                                    # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                           # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And I have staged "Point.1" on the "repo1" repo in the "@txId" transaction        # WebAPICucumberHooks.I_have_staged(String,String,String)
    And I have staged "Point.2" on the "repo1" repo in the "@txId" transaction        # WebAPICucumberHooks.I_have_staged(String,String,String)
    And I have staged "Line.1" on the "repo1" repo in the "@txId" transaction         # WebAPICucumberHooks.I_have_staged(String,String,String)
    When I call "GET /repos/repo1/commit?transactionId={@txId}&message=My%20Message"  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commitId/text()" equals "{@ObjectId|repo1|@txId|master}" # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/added/text()" equals "3"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/changed/text()" equals "0"                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/deleted/text()" equals "0"                               # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: I should be able supply commit with a different author name and commit message                                               # Commit.feature:65
    Given There is an empty repository named repo1                                                                                       # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                                                                              # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    And I have staged "Point.1" on the "repo1" repo in the "@txId" transaction                                                           # WebAPICucumberHooks.I_have_staged(String,String,String)
    And I have staged "Point.2" on the "repo1" repo in the "@txId" transaction                                                           # WebAPICucumberHooks.I_have_staged(String,String,String)
    And I have staged "Line.1" on the "repo1" repo in the "@txId" transaction                                                            # WebAPICucumberHooks.I_have_staged(String,String,String)
    When I call "GET /repos/repo1/commit?transactionId={@txId}&message=My%20Message&authorName=myAuthor&authorEmail=myAuthor@geogig.org" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commitId/text()" equals "{@ObjectId|repo1|@txId|master}"                                                    # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/added/text()" equals "3"                                                                                    # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/changed/text()" equals "0"                                                                                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/deleted/text()" equals "0"                                                                                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    When I call "GET /repos/repo1/cat?objectid={@ObjectId|repo1|@txId|master}"                                                           # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/author/name/text()" equals "myAuthor"                                                                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/author/email/text()" equals "myAuthor@geogig.org"                                                    # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/commit/message/text()" contains "My Message"                                                                # WebAPICucumberHooks.checkXPathValueContains(String,String)
@Commands @Config
Feature: Config
  The config command allows a user to get and set config values and is supported through the "/repos/{repository}/config" endpoint
  The command must be executed using the HTTP GET or POST methods
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Config.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "DELETE /repos/repo1/config"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET,POST"            # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config outside of a repository issues 404 "Not found" # Config.feature:12
    Given There is an empty multirepo server                      # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/config"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"           # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"   # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config POST without specifying a key issues a 400 status code                                 # Config.feature:19
    Given There is an empty repository named repo1                                                        # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "POST /repos/repo1/config"                                                                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                              # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "You must specify the key when setting a config key." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config POST without specifying a value issues a 400 status code                                 # Config.feature:25
    Given There is an empty repository named repo1                                                          # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "POST /repos/repo1/config?name=user.name"                                                   # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                                # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "You must specify the value when setting a config key." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config POST with a name and value in the url sets the config entry and GET retrieves the set value # Config.feature:31
    Given There is an empty repository named repo1                                                             # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "POST /repos/repo1/config?name=user.name&value=myUser"                                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    When I call "GET /repos/repo1/config?name=user.name"                                                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/value/text()" equals "myUser"                                                     # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config POST with a name and value as json sets the config entry and GET retrieves the set value # Config.feature:40
    Given There is an empty repository named repo1                                                          # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I post content-type "application/json" to "/repos/repo1/config" with                               # WebAPICucumberHooks.post_content(String,String,String)
      """
      {
        "name":"user.name",
        "value":"myUser"
      }
      """
    Then the response status should be '200'                                                                # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    When I call "GET /repos/repo1/config?name=user.name"                                                    # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                                # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/value/text()" equals "myUser"                                                  # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config POST with a name and value as xml sets the config entry and GET retrieves the set value # Config.feature:55
    Given There is an empty repository named repo1                                                         # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I post content-type "application/xml" to "/repos/repo1/config" with                               # WebAPICucumberHooks.post_content(String,String,String)
      """
      <params>
        <name>user.name</name>
        <value>myUser</value>
      </params>
      """
    Then the response status should be '200'                                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    When I call "GET /repos/repo1/config?name=user.name"                                                   # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/value/text()" equals "myUser"                                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Config GET without a name will list all config entries           # Config.feature:70
    Given There is an empty repository named repo1                           # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "POST /repos/repo1/config?name=config.value1&value=myValue1" # WebAPICucumberHooks.callURL(String)
    And I call "POST /repos/repo1/config?name=config.value2&value=myValue2"  # WebAPICucumberHooks.callURL(String)
    When I call "GET /repos/repo1/config"                                    # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                 # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                   # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the response body should contain "config.value1"                     # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "myValue1"                          # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "config.value2"                     # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "myValue2"                          # WebAPICucumberHooks.checkResponseTextContains(String)
@RepositoryManagement @CreateRepository
Feature: Create Repository
  Creating a repository on the server is done through the "/repos/{repository}/init" command
  The command must be executed using the HTTP PUT method
  If a repository with the provided name already exists, then a 409 "Conflict" error code shall be returned
  If the command succeeds, the response status code is 201 "Created"

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # CreateRepository.feature:8
    Given There is an empty multirepo server                         # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/init"                              # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "PUT"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Verify trying to create an existing repo issues 409 "Conflict"                                # CreateRepository.feature:14
    Given There is a default multirepo server                                                             # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "PUT /repos/repo1/init"                                                                   # WebAPICucumberHooks.callURL(String)
    Then the response status should be '409'                                                              # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                                              # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "false"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/error/text()" equals "Cannot run init on an already initialized repository." # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Create repository on empty server                                  # CreateRepository.feature:22
    Given There is an empty multirepo server                                   # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init"                                        # WebAPICucumberHooks.callURL(String)
    Then the response status should be '201'                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                   # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "true"                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/name/text()" equals "repo1"                  # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/atom:link/@href" contains "/repos/repo1.xml" # WebAPICucumberHooks.checkXPathValueContains(String,String)

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed", JSON requested response # CreateRepository.feature:31
    Given There is an empty multirepo server                                                  # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/init.json"                                                  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                                                  # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "PUT"                                          # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Verify trying to create an existing repo issues 409 "Conflict", JSON requested response     # CreateRepository.feature:37
    Given There is a default multirepo server                                                           # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "PUT /repos/repo1/init.json"                                                            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '409'                                                            # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                           # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "false"                                               # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.error" equals "Cannot run init on an already initialized repository." # WebAPICucumberHooks.checkJSONResponse(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Create repository on empty server, JSON requested response     # CreateRepository.feature:45
    Given There is an empty multirepo server                               # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init.json"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '201'                               # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"              # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "true"                   # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.name" equals "repo1"                # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.href" ends with "/repos/repo1.json" # WebAPICucumberHooks.checkJSONResponseEndsWith(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify JSON fomratted response of Init with JSON formatted request parameters          # CreateRepository.feature:54
    Given There is an empty multirepo server                                                       # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init.json" with the System Temp Directory as the parentDirectory # WebAPICucumberHooks.callURLWithJSONPaylod(String)
    Then the response status should be '201'                                                       # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                      # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "true"                                           # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.name" equals "repo1"                                        # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.href" ends with "/repos/repo1.json"                         # WebAPICucumberHooks.checkJSONResponseEndsWith(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                    # WebAPICucumberHooks.checkRepositoryParent(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify XML fomratted response of Init with JSON formatted request parameters      # CreateRepository.feature:64
    Given There is an empty multirepo server                                                  # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init" with the System Temp Directory as the parentDirectory # WebAPICucumberHooks.callURLWithJSONPaylod(String)
    Then the response status should be '201'                                                  # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                                  # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "true"                                    # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/name/text()" equals "repo1"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/atom:link/@href" contains "/repos/repo1.xml"                # WebAPICucumberHooks.checkXPathValueContains(String,String)
    And the parent directory of repository "repo1" equals System Temp directory               # WebAPICucumberHooks.checkRepositoryParent(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify JSON fomratted response of Init with URL Form encoded request parameters                 # CreateRepository.feature:74
    Given There is an empty multirepo server                                                                # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init.json" with a URL encoded Form containing a parentDirectory parameter # WebAPICucumberHooks.callURLWithFormPaylod(String)
    Then the response status should be '201'                                                                # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                               # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "true"                                                    # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.name" equals "repo1"                                                 # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.href" ends with "/repos/repo1.json"                                  # WebAPICucumberHooks.checkJSONResponseEndsWith(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                             # WebAPICucumberHooks.checkRepositoryParent(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify XML fomratted response of Init with URL Form encoded request parameters             # CreateRepository.feature:84
    Given There is an empty multirepo server                                                           # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init" with a URL encoded Form containing a parentDirectory parameter # WebAPICucumberHooks.callURLWithFormPaylod(String)
    Then the response status should be '201'                                                           # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                                           # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "true"                                             # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/name/text()" equals "repo1"                                          # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/atom:link/@href" contains "/repos/repo1.xml"                         # WebAPICucumberHooks.checkXPathValueContains(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                        # WebAPICucumberHooks.checkRepositoryParent(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify JSON fomratted response of Init with already existing repository                     # CreateRepository.feature:94
    Given There is a default multirepo server                                                           # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "PUT /repos/repo1/init.json" with the System Temp Directory as the parentDirectory      # WebAPICucumberHooks.callURLWithJSONPaylod(String)
    Then the response status should be '409'                                                            # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                           # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "false"                                               # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.error" equals "Cannot run init on an already initialized repository." # WebAPICucumberHooks.checkJSONResponse(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify JSON fomratted response of Init with JSON formatted request parameters and Author          # CreateRepository.feature:102
    Given There is an empty multirepo server                                                                  # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init.json" with Author and the System Temp Directory as the parentDirectory # WebAPICucumberHooks.callURLWithJSONPayloadAndAuthor(String)
    Then the response status should be '201'                                                                  # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                                 # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "true"                                                      # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.name" equals "repo1"                                                   # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.href" ends with "/repos/repo1.json"                                    # WebAPICucumberHooks.checkJSONResponseEndsWith(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                               # WebAPICucumberHooks.checkRepositoryParent(String)
    And the Author config of repository "repo1" is set                                                        # WebAPICucumberHooks.checkAuthorConfig(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify XML fomratted response of Init with JSON formatted request parameters and Author      # CreateRepository.feature:113
    Given There is an empty multirepo server                                                             # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init" with Author and the System Temp Directory as the parentDirectory # WebAPICucumberHooks.callURLWithJSONPayloadAndAuthor(String)
    Then the response status should be '201'                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                                             # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "true"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/name/text()" equals "repo1"                                            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/atom:link/@href" contains "/repos/repo1.xml"                           # WebAPICucumberHooks.checkXPathValueContains(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                          # WebAPICucumberHooks.checkRepositoryParent(String)
    And the Author config of repository "repo1" is set                                                   # WebAPICucumberHooks.checkAuthorConfig(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify JSON fomratted response of Init with URL Form encoded request parameters and Author                 # CreateRepository.feature:124
    Given There is an empty multirepo server                                                                           # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init.json" with a URL encoded Form containing a parentDirectory parameter and Author # WebAPICucumberHooks.callURLWithFormPaylodWithAuthor(String)
    Then the response status should be '201'                                                                           # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                                          # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "true"                                                               # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.name" equals "repo1"                                                            # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.repo.href" ends with "/repos/repo1.json"                                             # WebAPICucumberHooks.checkJSONResponseEndsWith(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                                        # WebAPICucumberHooks.checkRepositoryParent(String)
    And the Author config of repository "repo1" is set                                                                 # WebAPICucumberHooks.checkAuthorConfig(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify XML fomratted response of Init with URL Form encoded request parameters and Author             # CreateRepository.feature:135
    Given There is an empty multirepo server                                                                      # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init" with a URL encoded Form containing a parentDirectory parameter and Author # WebAPICucumberHooks.callURLWithFormPaylodWithAuthor(String)
    Then the response status should be '201'                                                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                                                      # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "true"                                                        # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/name/text()" equals "repo1"                                                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/repo/atom:link/@href" contains "/repos/repo1.xml"                                    # WebAPICucumberHooks.checkXPathValueContains(String,String)
    And the parent directory of repository "repo1" equals System Temp directory                                   # WebAPICucumberHooks.checkRepositoryParent(String)
    And the Author config of repository "repo1" is set                                                            # WebAPICucumberHooks.checkAuthorConfig(String)
[Fatal Error] :1:1: Content is not allowed in prolog.

  Scenario: Verify Init with unsupported MediaType does not create a repository with defualt settings # CreateRepository.feature:146
    Given There is an empty multirepo server                                                          # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "PUT /repos/repo1/init.json" with an unsupported media type                           # WebAPICucumberHooks.callURLWithUnsupportedMediaType(String)
    Then the response status should be '400'                                                          # WebAPICucumberHooks.checkStatusCode(int)
    And there should be no "repo1" created                                                            # WebAPICucumberHooks.checkRepoNotInitialized(String)
@RepositoryManagement @DeleteRepository
Feature: Delete Repository
  Deleting a repository through the web API is a non reversible operation.
  * In order to avoid accidental deletion of repositories, it is a two-step process:
  * first a GET call to "/repos/{repository}/delete" returns an automatically generated token with the format:
  * <response><success>true</success><token>d713df9c703733e2</token></response>.
  * To actually delete the repository, a HTTP DELETE method call to "/repos/{repository}?token={token}" must be issued, with a valid and non expired token.
  * An attempt to delete a non existent repository, results in a 404 "Not found" error code.
  * A successfull DELETE operation returns a 200 status code,
  * the XML response body is <deleted>true</deleted>, the JSON response body is '{"deleted":true}'
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Requesting delete token with wrong HTTP Method issues 405 "Method not allowed" # DeleteRepository.feature:12
    Given There is a default multirepo server                                              # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "POST /repos/repo1/delete"                                                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                                       # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository nonExistentRepo
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Requesting a delete token for a non existent repository issues 404 "Not found" # DeleteRepository.feature:18
    Given There is a default multirepo server                                              # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/nonExistentRepo/delete"                                        # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                                    # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"                            # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository nonExistentRepo
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Try deleting a non existent repository issues 404 "Not found" # DeleteRepository.feature:25
    Given There is a default multirepo server                             # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "DELETE /repos/nonExistentRepo?token=someToken"           # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                              # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                   # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "error:No repository to delete." # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Disposing repository {}. Cause: manually removed by remove() or invalidateAll()
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Succesfully delete a repository                       # DeleteRepository.feature:32
    Given There is a default multirepo server                     # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo2/delete"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"      # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "true"        # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/token"         # WebAPICucumberHooks.checkResponseContainsXPath(String)
    Then I save the response "/response/token/text()" as "@token" # WebAPICucumberHooks.saveResponseXPathValueAsVariable(String,String)
    When I call "DELETE /repos/repo2?token={@token}"              # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"      # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/deleted/text()" equals "repo2"                # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Requesting delete token with wrong HTTP Method issues 405 "Method not allowed", JSON requested response # DeleteRepository.feature:45
    Given There is a default multirepo server                                                                       # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "POST /repos/repo1/delete.json"                                                                     # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                                                                        # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                                                                # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository nonExistentRepo
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Requesting a delete token for a non existent repository issues 404 "Not found", JSON requested response # DeleteRepository.feature:51
    Given There is a default multirepo server                                                                       # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/nonExistentRepo/delete.json"                                                            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                                                                        # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                                                             # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"                                                     # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository nonExistentRepo
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Try deleting a non existent repository issues 404 "Not found", JSON requested response # DeleteRepository.feature:58
    Given There is a default multirepo server                                                      # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "DELETE /repos/nonExistentRepo.json?token=someToken"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                                                       # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                                            # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "error:No repository to delete."                          # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Disposing repository {}. Cause: manually removed by remove() or invalidateAll()
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Succesfully delete a repository, JSON requested response # DeleteRepository.feature:65
    Given There is a default multirepo server                        # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo2/delete.json"                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"        # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "true"             # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json response "response" should contain "token"          # WebAPICucumberHooks.checkJSONResponseContains(String,String)
    Then I save the json response "response.token" as "@token"       # WebAPICucumberHooks.saveResponseJSONValueAsVariable(String,String)
    When I call "DELETE /repos/repo2.json?token={@token}"            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"        # WebAPICucumberHooks.checkContentType(String)
    And the json object "deleted" equals "repo2"                     # WebAPICucumberHooks.checkJSONResponse(String,String)
@Repo @Depth
Feature: Depth
  The Depth resource returns the depth of the repository from a specific commit and is supported through the "/repos/{repository}/repo/getdepth" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Depth.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/repo/getdepth"                     # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Depth outside of a repository issues 404 "Not found" # Depth.feature:12
    Given There is an empty multirepo server                     # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/repo/getdepth"                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                     # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"          # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"  # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Depth with an invalid commit issues a 400 status code              # Depth.feature:19
    Given There is a default multirepo server                                  # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/repo/getdepth?commitId=invalid"              # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                        # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "You must specify a valid commit id." # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Depth with no commit returns no depth for a non-shallow repository # Depth.feature:26
    Given There is a default multirepo server                                  # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/repo/getdepth"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                   # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                        # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain ""                                    # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository shallow
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository full

  Scenario: Depth with no commit returns the depth of a shallow repository # Depth.feature:33
    Given There is a default multirepo server with a shallow clone         # WebAPICucumberHooks.setUpDefaultMultiRepoWithShallowClone()
    When I call "GET /repos/shallow/repo/getdepth"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                               # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                    # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "1"                               # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Depth with a commit returns the number of ancestors that commit has     # Depth.feature:40
    Given There is a default multirepo server                                       # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/repo/getdepth?commitId={@ObjectId|repo1|branch1}" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                        # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                             # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "1"                                        # WebAPICucumberHooks.checkResponseTextContains(String)
    When I call "GET /repos/repo1/repo/getdepth?commitId={@ObjectId|repo1|master}"  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                        # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                             # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "2"                                        # WebAPICucumberHooks.checkResponseTextContains(String)
@Commands @Diff
Feature: Diff
  The diff command allows a user to see the difference between two commits and is supported through the "/repos/{repository}/config" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Diff.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/diff"                              # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Diff outside of a repository issues 404 "Not found" # Diff.feature:12
    Given There is an empty multirepo server                    # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/diff?oldRefSpec=someRefSpec"  # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                    # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"         # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found" # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling diff without specifying an old ref spec issues a 500 status code                    # Diff.feature:19
    Given There is an empty repository named repo1                                                      # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/diff"                                                                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                            # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Required parameter 'oldRefSpec' was not provided." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling diff with an empty old ref spec issues a 500 status code # Diff.feature:25
    Given There is an empty repository named repo1                           # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/diff?oldRefSpec=%20"                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                 # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Invalid old ref spec"   # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling diff with an old ref spec returns all of the changes since that commit # Diff.feature:31
    Given There is a default multirepo server                                              # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/diff?oldRefSpec=master~2"                                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 6 times                           # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "Points/Point.2"                                  # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Points/Point.3"                                  # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Lines/Line.2"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Lines/Line.3"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Polygons/Polygon.2"                              # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Polygons/Polygon.3"                              # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Calling diff with two ref specs returns all of the changes since those commits # Diff.feature:44
    Given There is a default multirepo server                                              # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/diff?oldRefSpec=master~2&newRefSpec=master~1"            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                               # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                 # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 3 times                           # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "Points/Point.2"                                  # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Lines/Line.2"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Polygons/Polygon.2"                              # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Diff should support paging results                            # Diff.feature:54
    Given There is a default multirepo server                             # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/diff?oldRefSpec=master~2&page=0&show=2" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                              # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 2 times          # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "Points/Point.2"                 # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Points/Point.3"                 # WebAPICucumberHooks.checkResponseTextContains(String)
    When I call "GET /repos/repo1/diff?oldRefSpec=master~2&page=1&show=2" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                              # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 2 times          # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "Polygons/Polygon.2"             # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Polygons/Polygon.3"             # WebAPICucumberHooks.checkResponseTextContains(String)
    When I call "GET /repos/repo1/diff?oldRefSpec=master~2&page=2&show=2" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                              # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 2 times          # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "Lines/Line.2"                   # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "Lines/Line.3"                   # WebAPICucumberHooks.checkResponseTextContains(String)
@Commands @FeatureDiff
Feature: FeatureDiff
  The feature diff command allows a user to see the difference between two versions of a specific feature and is supported through the "/repos/{repository}/featurediff" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # FeatureDiff.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/featurediff"                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Feature diff outside of a repository issues 404 "Not found" # FeatureDiff.feature:12
    Given There is an empty multirepo server                            # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/featurediff?path=somePath"            # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                            # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                 # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"         # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling feature diff without specifying a path issues a 500 status code               # FeatureDiff.feature:19
    Given There is an empty repository named repo1                                                # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/featurediff"                                                    # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Required parameter 'path' was not provided." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Calling feature diff with an empty path issues a 500 status code     # FeatureDiff.feature:25
    Given There is an empty repository named repo1                               # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/featurediff?path=%20"                          # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                     # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Invalid path was specified" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Feature diff should work for an added feature                                                # FeatureDiff.feature:31
    Given There is a default multirepo server                                                            # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/featurediff?path=Points/Point.3&oldTreeish=master~1&newTreeish=master" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 3 times                                         # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "ADDED"                                                         # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "StringProp1_3"                                                 # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "3000"                                                          # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "POINT (10 10)"                                                 # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should not contain "MODIFIED"                                                  # WebAPICucumberHooks.checkResponseTextNotContains(String)
    And the response body should not contain "REMOVED"                                                   # WebAPICucumberHooks.checkResponseTextNotContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Feature diff should work for a removed feature                                               # FeatureDiff.feature:44
    Given There is a default multirepo server                                                            # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/featurediff?path=Points/Point.3&oldTreeish=master&newTreeish=master~1" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 3 times                                         # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "REMOVED"                                                       # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "StringProp1_3"                                                 # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "3000"                                                          # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "POINT (10 10)"                                                 # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should not contain "MODIFIED"                                                  # WebAPICucumberHooks.checkResponseTextNotContains(String)
    And the response body should not contain "ADDED"                                                     # WebAPICucumberHooks.checkResponseTextNotContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Feature diff should work for a modified feature                                              # FeatureDiff.feature:57
    Given There is an empty repository named repo1                                                       # WebAPICucumberHooks.setUpEmptyRepo(String)
    And There is a feature with multiple authors on the "repo1" repo                                     # WebAPICucumberHooks.There_is_a_feature_with_multiple_authors(String)
    When I call "GET /repos/repo1/featurediff?path=Points/Point.1&oldTreeish=master~1&newTreeish=master" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                             # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                               # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/diff" 1 times                                         # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xpath "/response/diff/attributename/text()" equals "ip"                                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/diff/changetype/text()" equals "MODIFIED"                                   # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/diff/oldvalue/text()" equals "1000"                                         # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/diff/newvalue/text()" equals "1500"                                         # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the response body should not contain "ADDED"                                                     # WebAPICucumberHooks.checkResponseTextNotContains(String)
    And the response body should not contain "REMOVED"                                                   # WebAPICucumberHooks.checkResponseTextNotContains(String)
@Commands @Fetch
Feature: Fetch
  The fetch command allows a user to fetch the changes from a remote repo and is supported through the "/repos/{repository}/featurediff" endpoint
  The command must be executed using the HTTP GET method
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # Fetch.feature:6
    Given There is an empty repository named repo1                   # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "PUT /repos/repo1/fetch"                             # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Fetch outside of a repository issues 404 "Not found" # Fetch.feature:12
    Given There is an empty multirepo server                     # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/fetch"                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                     # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"          # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"  # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Fetching without specifying a remote issues a 500 status code              # Fetch.feature:19
    Given There is an empty repository named repo1                                     # WebAPICucumberHooks.setUpEmptyRepo(String)
    When I call "GET /repos/repo1/fetch"                                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '500'                                           # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/error/text()" contains "Nothing specified to fetch from." # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo3
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo4
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Fetching with a remote name specified should fetch from that remote # Fetch.feature:25
    Given There is a default multirepo server with remotes                      # WebAPICucumberHooks.setUpDefaultMultiRepoWithRemotes()
    When I call "GET /repos/repo3/fetch?remote=repo1"                           # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                    # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Fetch/Remote" 1 times        # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Fetch/Remote/Branch" 2 times # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "branch1"                              # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "master"                               # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.mortbay.log - jetty-6.1.5
[main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8182
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["fa2921e1bef53da858e0f5568b3a917d894b8bcc","258a257a72ae6b4af60db0efb60f4d1fbad5feef"],"have":[]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 18.36 μs for 0 ids: []. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 4.862 ms for 0 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 461.5 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 17.35 ms. Compressed size: 989 bytes. Uncompressed size: 3,179 bytes.
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["b675592382ad46c17d1e6b974fd6c3e55ccd8fba"],"have":["fa2921e1bef53da858e0f5568b3a917d894b8bcc"]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.372 μs for 1 ids: [fa2921e1bef53da858e0f5568b3a917d894b8bcc]. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 901.7 μs for 11 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 11.99 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 8 objects. Inserted: 8. Existing: 0. Time: 2.517 ms. Compressed size: 657 bytes. Uncompressed size: 1,488 bytes.
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["a620884ba90acd817307ef6889c354867866c768","10d0ac1f4ba67ba80f453d4a1c03e132cb22cbdc"],"have":["258a257a72ae6b4af60db0efb60f4d1fbad5feef","fa2921e1bef53da858e0f5568b3a917d894b8bcc","b675592382ad46c17d1e6b974fd6c3e55ccd8fba"]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.139 μs for 3 ids: [258a257a72ae6b4af60db0efb60f4d1fbad5feef, fa2921e1bef53da858e0f5568b3a917d894b8bcc, b675592382ad46c17d1e6b974fd6c3e55ccd8fba]. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 1.778 ms for 27 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 17.10 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 6 objects. Inserted: 6. Existing: 0. Time: 2.155 ms. Compressed size: 777 bytes. Uncompressed size: 1,673 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["fa2921e1bef53da858e0f5568b3a917d894b8bcc","258a257a72ae6b4af60db0efb60f4d1fbad5feef"],"have":[]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.179 μs for 0 ids: []. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 17.75 μs for 0 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 10.32 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 5.861 ms. Compressed size: 989 bytes. Uncompressed size: 3,179 bytes.
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["b675592382ad46c17d1e6b974fd6c3e55ccd8fba","a620884ba90acd817307ef6889c354867866c768","10d0ac1f4ba67ba80f453d4a1c03e132cb22cbdc"],"have":["258a257a72ae6b4af60db0efb60f4d1fbad5feef","fa2921e1bef53da858e0f5568b3a917d894b8bcc"]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.767 μs for 2 ids: [258a257a72ae6b4af60db0efb60f4d1fbad5feef, fa2921e1bef53da858e0f5568b3a917d894b8bcc]. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 1.353 ms for 19 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 23.84 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 14 objects. Inserted: 14. Existing: 0. Time: 4.632 ms. Compressed size: 1,065 bytes. Uncompressed size: 3,161 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo3
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["fa2921e1bef53da858e0f5568b3a917d894b8bcc","258a257a72ae6b4af60db0efb60f4d1fbad5feef"],"have":[]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.447 μs for 0 ids: []. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 21.62 μs for 0 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 11.70 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 5.768 ms. Compressed size: 989 bytes. Uncompressed size: 3,179 bytes.
[btpool3-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["b675592382ad46c17d1e6b974fd6c3e55ccd8fba","a620884ba90acd817307ef6889c354867866c768","10d0ac1f4ba67ba80f453d4a1c03e132cb22cbdc"],"have":["258a257a72ae6b4af60db0efb60f4d1fbad5feef","fa2921e1bef53da858e0f5568b3a917d894b8bcc"]}
[btpool3-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.715 μs for 2 ids: [258a257a72ae6b4af60db0efb60f4d1fbad5feef, fa2921e1bef53da858e0f5568b3a917d894b8bcc]. Calculating reachable content ids...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 844.5 μs for 19 ids
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 127.8 μs
[btpool3-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 14 objects. Inserted: 14. Existing: 0. Time: 6.362 ms. Compressed size: 1,065 bytes. Uncompressed size: 3,161 bytes.
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo4
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  @HttpTest
  Scenario: Fetching with an http remote name specified should fetch from that remote # Fetch.feature:36
    Given There is a default multirepo server with http remotes                       # WebAPICucumberHooks.setUpDefaultMultiRepoWithHttpRemotes()
    When I call "GET /repos/repo3/fetch?remote=repo1"                                 # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                          # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                            # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Fetch/Remote" 1 times              # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Fetch/Remote/Branch" 2 times       # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "branch1"                                    # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "master"                                     # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo3
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo4
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Fetching with all should fetch from all remotes                     # Fetch.feature:46
    Given There is a default multirepo server with remotes                      # WebAPICucumberHooks.setUpDefaultMultiRepoWithRemotes()
    When I call "GET /repos/repo3/fetch?all=true"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                    # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Fetch/Remote" 2 times        # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Fetch/Remote/Branch" 5 times # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "branch1"                              # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "branch2"                              # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "master"                               # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "ADDED_REF"                            # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should not contain "REMOVED_REF"                      # WebAPICucumberHooks.checkResponseTextNotContains(String)
    And the response body should not contain "UPDATED_REF"                      # WebAPICucumberHooks.checkResponseTextNotContains(String)
[main] INFO org.mortbay.log - jetty-6.1.5
[main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8182
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["cb751ca78c9a4cd022be63228c99a6b969709621","484dbee0914142611f283944bd85e8e2f7d9f890"],"have":[]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.796 μs for 0 ids: []. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 17.52 μs for 0 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 8.150 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 4.364 ms. Compressed size: 989 bytes. Uncompressed size: 3,179 bytes.
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["6bc3ba36a460342a47ac5b424b8036d4086dcf6b"],"have":["cb751ca78c9a4cd022be63228c99a6b969709621"]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.617 μs for 1 ids: [cb751ca78c9a4cd022be63228c99a6b969709621]. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 836.0 μs for 11 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 17.50 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 8 objects. Inserted: 8. Existing: 0. Time: 1.804 ms. Compressed size: 656 bytes. Uncompressed size: 1,488 bytes.
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["93f3a18e1d79c6c55764434e9af2b1e7b603705b","70246e21adfdeeee39a5275b1d16bc910c9d2208"],"have":["6bc3ba36a460342a47ac5b424b8036d4086dcf6b","cb751ca78c9a4cd022be63228c99a6b969709621","484dbee0914142611f283944bd85e8e2f7d9f890"]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 13.76 μs for 3 ids: [6bc3ba36a460342a47ac5b424b8036d4086dcf6b, cb751ca78c9a4cd022be63228c99a6b969709621, 484dbee0914142611f283944bd85e8e2f7d9f890]. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 1.441 ms for 27 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 17.82 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 6 objects. Inserted: 6. Existing: 0. Time: 2.138 ms. Compressed size: 777 bytes. Uncompressed size: 1,673 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["cb751ca78c9a4cd022be63228c99a6b969709621","484dbee0914142611f283944bd85e8e2f7d9f890"],"have":[]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.461 μs for 0 ids: []. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 26.88 μs for 0 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 7.865 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 5.900 ms. Compressed size: 989 bytes. Uncompressed size: 3,179 bytes.
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["6bc3ba36a460342a47ac5b424b8036d4086dcf6b","93f3a18e1d79c6c55764434e9af2b1e7b603705b","70246e21adfdeeee39a5275b1d16bc910c9d2208"],"have":["cb751ca78c9a4cd022be63228c99a6b969709621","484dbee0914142611f283944bd85e8e2f7d9f890"]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.339 μs for 2 ids: [cb751ca78c9a4cd022be63228c99a6b969709621, 484dbee0914142611f283944bd85e8e2f7d9f890]. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 837.0 μs for 19 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 15.22 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 14 objects. Inserted: 14. Existing: 0. Time: 3.001 ms. Compressed size: 1,066 bytes. Uncompressed size: 3,161 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo3
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["cb751ca78c9a4cd022be63228c99a6b969709621","484dbee0914142611f283944bd85e8e2f7d9f890"],"have":[]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.092 μs for 0 ids: []. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 18.72 μs for 0 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 10.67 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 4.938 ms. Compressed size: 989 bytes. Uncompressed size: 3,179 bytes.
[btpool4-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["6bc3ba36a460342a47ac5b424b8036d4086dcf6b","93f3a18e1d79c6c55764434e9af2b1e7b603705b","70246e21adfdeeee39a5275b1d16bc910c9d2208"],"have":["cb751ca78c9a4cd022be63228c99a6b969709621","484dbee0914142611f283944bd85e8e2f7d9f890"]}
[btpool4-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.130 μs for 2 ids: [cb751ca78c9a4cd022be63228c99a6b969709621, 484dbee0914142611f283944bd85e8e2f7d9f890]. Calculating reachable content ids...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 647.3 μs for 19 ids
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 15.98 μs
[btpool4-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 14 objects. Inserted: 14. Existing: 0. Time: 3.124 ms. Compressed size: 1,066 bytes. Uncompressed size: 3,161 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool4-1] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo4

  @HttpTest
  Scenario: Fetching with all should fetch from all http remotes                # Fetch.feature:61
    Given There is a default multirepo server with http remotes                 # WebAPICucumberHooks.setUpDefaultMultiRepoWithHttpRemotes()
    When I call "GET /repos/repo3/fetch?all=true"                               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                    # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Fetch/Remote" 2 times        # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Fetch/Remote/Branch" 5 times # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the response body should contain "branch1"                              # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "branch2"                              # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "master"                               # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should contain "ADDED_REF"                            # WebAPICucumberHooks.checkResponseTextContains(String)
    And the response body should not contain "REMOVED_REF"                      # WebAPICucumberHooks.checkResponseTextNotContains(String)
    And the response body should not contain "UPDATED_REF"                      # WebAPICucumberHooks.checkResponseTextNotContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo4
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo3
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Fetching with prune should prune remote branches that were deleted                       # Fetch.feature:75
    Given There is a default multirepo server with remotes                                           # WebAPICucumberHooks.setUpDefaultMultiRepoWithRemotes()
    When I call "GET /repos/repo2/fetch?all=true&prune=true"                                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                         # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                           # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Fetch/Remote" 1 times                             # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Fetch/Remote/Branch" 1 times                      # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xpath "/response/Fetch/Remote/Branch/changeType/text()" equals "REMOVED_REF"             # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Fetch/Remote/Branch/name/text()" equals "branch2"                       # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Fetch/Remote/Branch/oldValue/text()" equals "{@ObjectId|repo2|branch2}" # WebAPICucumberHooks.checkXPathEquals(String,String)
[main] INFO org.mortbay.log - jetty-6.1.5
[main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8182
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["f2cca58a29ce3db7ec55b2f0e475130b5978d534","6dd6fa841f235b80a5c82ec040225ffe02705853"],"have":[]}
[btpool5-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.488 μs for 0 ids: []. Calculating reachable content ids...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 15.04 μs for 0 ids
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 7.863 μs
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 4.743 ms. Compressed size: 988 bytes. Uncompressed size: 3,179 bytes.
[btpool5-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["79bacb762d23ee6a948b39fffdd7e9a01dbf2aa4"],"have":["f2cca58a29ce3db7ec55b2f0e475130b5978d534"]}
[btpool5-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.916 μs for 1 ids: [f2cca58a29ce3db7ec55b2f0e475130b5978d534]. Calculating reachable content ids...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 716.2 μs for 11 ids
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 16.02 μs
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 8 objects. Inserted: 8. Existing: 0. Time: 1.859 ms. Compressed size: 657 bytes. Uncompressed size: 1,488 bytes.
[btpool5-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["b75f3e0d01f852a037ea154bbe08c49d2ded7634","3422e59ceb5232ef967f4d95e54385bbe997c8c4"],"have":["79bacb762d23ee6a948b39fffdd7e9a01dbf2aa4","f2cca58a29ce3db7ec55b2f0e475130b5978d534","6dd6fa841f235b80a5c82ec040225ffe02705853"]}
[btpool5-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 3.050 μs for 3 ids: [79bacb762d23ee6a948b39fffdd7e9a01dbf2aa4, f2cca58a29ce3db7ec55b2f0e475130b5978d534, 6dd6fa841f235b80a5c82ec040225ffe02705853]. Calculating reachable content ids...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 937.2 μs for 27 ids
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 12.14 μs
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 6 objects. Inserted: 6. Existing: 0. Time: 1.181 ms. Compressed size: 778 bytes. Uncompressed size: 1,673 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["f2cca58a29ce3db7ec55b2f0e475130b5978d534","6dd6fa841f235b80a5c82ec040225ffe02705853"],"have":[]}
[btpool5-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.342 μs for 0 ids: []. Calculating reachable content ids...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 18.39 μs for 0 ids
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 8.361 μs
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 19 objects. Inserted: 19. Existing: 0. Time: 4.630 ms. Compressed size: 988 bytes. Uncompressed size: 3,179 bytes.
[btpool5-1] INFO org.locationtech.geogig.rest.repository.BatchedObjectResource - Serving request to send objects based on message {"want":["79bacb762d23ee6a948b39fffdd7e9a01dbf2aa4","b75f3e0d01f852a037ea154bbe08c49d2ded7634","3422e59ceb5232ef967f4d95e54385bbe997c8c4"],"have":["6dd6fa841f235b80a5c82ec040225ffe02705853","f2cca58a29ce3db7ec55b2f0e475130b5978d534"]}
[btpool5-1] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - scanning for previsit list...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - Previsit list built in 2.224 μs for 2 ids: [6dd6fa841f235b80a5c82ec040225ffe02705853, f2cca58a29ce3db7ec55b2f0e475130b5978d534]. Calculating reachable content ids...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - reachableContentIds took 530.0 μs for 19 ids
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - obtaining post order iterator on range...
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - PostOrderIterator.range took 11.76 μs
[btpool5-1] INFO org.locationtech.geogig.remote.BinaryPackedObjects - writing objects to remote...
[main] INFO org.locationtech.geogig.remote.HttpRemoteRepo - Processed 14 objects. Inserted: 14. Existing: 0. Time: 3.944 ms. Compressed size: 1,066 bytes. Uncompressed size: 3,161 bytes.
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.plumbing.CreateDeduplicator - No DeduplicationService service found, using default heap based one
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo4
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo3

  @HttpTest
  Scenario: Fetching with prune should prune remote branches that were deleted from http remote      # Fetch.feature:87
    Given There is a default multirepo server with http remotes                                      # WebAPICucumberHooks.setUpDefaultMultiRepoWithHttpRemotes()
    When I call "GET /repos/repo2/fetch?all=true&prune=true"                                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '200'                                                         # WebAPICucumberHooks.checkStatusCode(int)
    And the xpath "/response/success/text()" equals "true"                                           # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xml response should contain "/response/Fetch/Remote" 1 times                             # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xml response should contain "/response/Fetch/Remote/Branch" 1 times                      # WebAPICucumberHooks.checkXPathCadinality(String,int)
    And the xpath "/response/Fetch/Remote/Branch/changeType/text()" equals "REMOVED_REF"             # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Fetch/Remote/Branch/name/text()" equals "branch2"                       # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/Fetch/Remote/Branch/oldValue/text()" equals "{@ObjectId|repo2|branch2}" # WebAPICucumberHooks.checkXPathEquals(String,String)
@GeopackageSupport @GeoPackageExport
Feature: Export GeoPackage
  The GeoPackage export Web-API allows for downloading a repository snapshot or a subset of it as a GeoPackage file.
  It is possible to filter out the downloaded content indicating the names of the layers to include from a given
  root tree, and to specify a bounding box to filter out the included features.
  Also, a flag can be passed as argument to indicate the generated geopackage shall include the Geogig GeoPackage
  extension, allowing to transparently log every change to a tracked layer in an audit table that can later be
  replyed on top of the repository.  
  
  API Spec: GET /repos/<repo>/export[.xml|.json]?format=gpkg[&root=<refspec>][&path=<layerName>[,<layerName>]+][&bbox=<boundingBox>][&interchange=<true|false>]

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # GeoPackageExport.feature:12
    Given There is an empty multirepo server                         # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "POST /repos/repo1/export?format=gpkg"               # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                 # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Verify missing "format=gpkg" argument issues 400 "Bad request"       # GeoPackageExport.feature:18
    Given There is a default multirepo server                                    # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/export"                                        # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                     # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                     # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "false"                      # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/error/text()" contains "output format not provided" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Verify unsupported output format argument issues 400 "Bad request"  # GeoPackageExport.feature:26
    Given There is a default multirepo server                                   # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/export?format=badFormat"                      # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                    # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                    # WebAPICucumberHooks.checkContentType(String)
    And the xpath "/response/success/text()" equals "false"                     # WebAPICucumberHooks.checkXPathEquals(String,String)
    And the xpath "/response/error/text()" contains "Unsupported output format" # WebAPICucumberHooks.checkXPathValueContains(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository badRepo

  Scenario: Verify export on a non existent repository issues 404 "Not found" # GeoPackageExport.feature:34
    Given There is an empty multirepo server                                  # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/badRepo/export?format=gpkg"                       # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                                  # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                       # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"               # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.mortbay.log - Task %s finished: %s
Found gpkg tables: [Polygons, Lines, Points]
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Export defaults: all layers from current head                                         # GeoPackageExport.feature:41
    Given There is a default multirepo server                                                     # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/export?format=gpkg"                                             # WebAPICucumberHooks.callURL(String)
    Then the response is an XML async task @taskId                                                # WebAPICucumberHooks.checkResponseIsAnXMLAsyncTask(String)
    And the task @taskId description contains "Export to Geopackage database"                     # WebAPICucumberHooks.the_task_taskId_description_contains(String,String)
    And when the task @taskId finishes                                                            # WebAPICucumberHooks.waitForAsyncTaskToFinish(String)
    Then the task @taskId status is FINISHED                                                      # WebAPICucumberHooks.checkAsyncTaskStatus(String,AsyncContext$Status)
    And the task @taskId result contains "atom:link/@href" with value "/tasks/{@taskId}/download" # WebAPICucumberHooks.the_task_taskId_result_contains_with_value(String,String,String)
    When I call "GET /tasks/{@taskId}/download"                                                   # WebAPICucumberHooks.callURL(String)
    Then the result is a valid GeoPackage file                                                    # WebAPICucumberHooks.gpkg_CheckResponseIsGeoPackage()

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed", JSON requested response # GeoPackageExport.feature:52
    Given There is an empty multirepo server                                                  # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "POST /repos/repo1/export.json?format=gpkg"                                   # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                                                  # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "GET"                                          # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Verify missing "format=gpkg" argument issues 400 "Bad request", JSON requested response # GeoPackageExport.feature:58
    Given There is a default multirepo server                                                       # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/export.json"                                                      # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                        # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                       # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "false"                                           # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.error" equals "output format not provided"                        # WebAPICucumberHooks.checkJSONResponse(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Verify unsupported output format argument issues 400 "Bad request", JSON requested response # GeoPackageExport.feature:66
    Given There is a default multirepo server                                                           # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/export.json?format=badFormat"                                         # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                                            # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/json"                                           # WebAPICucumberHooks.checkContentType(String)
    And the json object "response.success" equals "false"                                               # WebAPICucumberHooks.checkJSONResponse(String,String)
    And the json object "response.error" equals "Unsupported output format: badFormat"                  # WebAPICucumberHooks.checkJSONResponse(String,String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository badRepo

  Scenario: Verify export on a non existent repository issues 404 "Not found", JSON requested response # GeoPackageExport.feature:74
    Given There is an empty multirepo server                                                           # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/badRepo/export.json?format=gpkg"                                           # WebAPICucumberHooks.callURL(String)
    Then the response status should be '404'                                                           # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                                                # WebAPICucumberHooks.checkContentType(String)
    And the response body should contain "Repository not found"                                        # WebAPICucumberHooks.checkResponseTextContains(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1
[main] INFO org.mortbay.log - Task %s finished: %s
Found gpkg tables: [Polygons, Lines, Points]
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo2

  Scenario: Export defaults: all layers from current head, JSON requested response                                # GeoPackageExport.feature:81
    Given There is a default multirepo server                                                                     # WebAPICucumberHooks.setUpDefaultMultiRepo()
    When I call "GET /repos/repo1/export.json?format=gpkg"                                                        # WebAPICucumberHooks.callURL(String)
    Then the response is a JSON async task @taskId                                                                # WebAPICucumberHooks.checkResponseIsAJsonAsyncTask(String)
    And the JSON task @taskId description contains "Export to Geopackage database"                                # WebAPICucumberHooks.theJsonTaskTaskIdDescriptionContains(String,String)
    And when the JSON task @taskId finishes                                                                       # WebAPICucumberHooks.waitForAsyncJsonTaskToFinish(String)
    Then the JSON task @taskId status is FINISHED                                                                 # WebAPICucumberHooks.checkAsyncJsonTaskStatus(String,AsyncContext$Status)
    And the JSON task @taskId result contains "task.result.atom:link.href" with value "/tasks/{@taskId}/download" # WebAPICucumberHooks.theJsonTaskTaskIdResultContainsWithValue(String,String,String)
    When I call "GET /tasks/{@taskId}/download"                                                                   # WebAPICucumberHooks.callURL(String)
    Then the result is a valid GeoPackage file                                                                    # WebAPICucumberHooks.gpkg_CheckResponseIsGeoPackage()
@GeopackageSupport @GeoPackageImport
Feature: Import GeoPackage
  The GeoPackage import Web-API allows for uploading a set of layers from a GeoPackage file
  onto a repository snapshot and create a new commit reflecting the imported contents. 
  The GeoPackage file is sent as a POST form arument named "fileUpload". 
  Other URL arguments can be used to control some aspects of the import.
  
  API Spec: POST /repos/<repo>/import?format=gpkg[&add=<true|false>][&alter=<true|false>]

  Scenario: Verify wrong HTTP method issues 405 "Method not allowed" # GeoPackageImport.feature:10
    Given There is an empty multirepo server                         # WebAPICucumberHooks.setUpEmptyMultiRepo()
    When I call "GET /repos/repo1/import?format=gpkg"                # WebAPICucumberHooks.callURL(String)
    Then the response status should be '405'                         # WebAPICucumberHooks.checkStatusCode(int)
    And the response allowed methods should be "POST"                # WebAPICucumberHooks.checkResponseAllowedMethods(String)
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify missing "format=gpkg" argument issues 400 "Bad request" # GeoPackageImport.feature:16
    Given There is an empty repository named repo1                         # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    When I call "POST /repos/repo1/import?transactionId={@txId}"           # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                               # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"               # WebAPICucumberHooks.checkContentType(String)
    And the response xml matches                                           # WebAPICucumberHooks.checkXmlResponseMatches(String)
      """
      <response><success>false</success><error>missing required 'format' parameter</error></response>
      """
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository repo1

  Scenario: Verify unsupported output format argument issues 400 "Bad request"    # GeoPackageImport.feature:27
    Given There is an empty repository named repo1                                # WebAPICucumberHooks.setUpEmptyRepo(String)
    And I have a transaction as "@txId" on the "repo1" repo                       # WebAPICucumberHooks.beginTransactionAsVariable(String,String)
    When I call "POST /repos/repo1/import?format=badFormat&transactionId={@txId}" # WebAPICucumberHooks.callURL(String)
    Then the response status should be '400'                                      # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "application/xml"                      # WebAPICucumberHooks.checkContentType(String)
    And the response xml matches                                                  # WebAPICucumberHooks.checkXmlResponseMatches(String)
      """
      <response><success>false</success><error>Unsupported input format: 'badFormat'</error></response>
      """
[main] INFO org.locationtech.geogig.web.MultiRepositoryProvider - Loading repository badRepo

  Scenario: Verify import to a non existent repository issues 404 "Not found"    # GeoPackageImport.feature:38
    Given There is an empty multirepo server                                     # WebAPICucumberHooks.setUpEmptyMultiRepo()
    And I have a geopackage file @gpkgFile                                       # WebAPICucumberHooks.gpkg_CreateSampleGeopackage(String)
    When I post @gpkgFile as "fileUpload" to "/repos/badRepo/import?format=gpkg" # WebAPICucumberHooks.gpkg_UploadFile(String,String,String)
    Then the response status should be '404'                                     # WebAPICucumberHooks.checkStatusCode(int)
    And the response ContentType should be "text/plain"                          # WebAPICucumberHooks.checkContentType(String)
    And th