# Licensed to the Apache Software Foundation (ASF) under the terms of ASLv2 (http://www.apache.org/licenses/LICENSE-2.0).
#
# Creates 10 additional targets, with some tags, and associates them with
# existing distributions (from setup.gogo).
#

# install test bundle with additional Gogo commands needed later on in this script
pwd = (cd) getAbsolutePath
start 'file:'$pwd'/../org.apache.ace.test/generated/org.apache.ace.test.jar'

# create a workspace
w = (cw)

# use timestamp as unique value
t = (currentTimeMillis)

# create targets
each [0 1 2 3 4 5 6 7 8 9] {
	($w ct [id='target-extra-'$t$it] [prop01=test prop02=another prop03=value]) setautoapprove true
	$w cd2t '(name=dist-'$it')' '(id=target-extra-'$t$it')'
}

# commit and delete the workspace
$w commit
rw $w
