I modified the build.xml to allow for a build.properties file. Now you
can specify
agavi.webapp.dir = /RelativePathOffProjectDir
agavi.www.dir = /RelativePathOffProjectDir
agavi.tests.dir = /RelativePathOffProjectDir
the change is backward compatible, if no build.properties file exists
then the standard "webapp", "www", and "tests" directories are used
the Patch is Attached.
Jeremy Perrin
Index: build.xml
===================================================================
--- build.xml (revision 261)
+++ build.xml (working copy)
@@ -19,63 +19,74 @@
<taskdef classname="${agavi.dir}.buildtools.phing.AgaviFixPathsTask"
name="fixpaths"/>
<taskdef classname="${agavi.dir}.buildtools.phing.AgaviListModulesTask"
name="listModules"/>
- <property name="webapp.dir" value=""/>
- <property name="tests.dir" value=""/>
+ <target name="buildpropescheck">
+ <available file="${project.dir}/build.properties"
property="configure.check"/>
+ </target>
- <!-- fileset for -dist files -->
- <fileset dir="." id="distfiles">
+ <target name="configure" depends="buildpropescheck">
+ <echo msg="Loading project-specific properties from
${project.dir}/build.properties"/>
+ <property file="${project.dir}/build.properties"/>
+ <property name="agavi.webapp.dir" value="/webapp"
override="false"/>
+ <property name="agavi.www.dir" value="/www" override="false"/>
+ <property name="agavi.tests.dir" value="/tests"
override="false"/>
+ </target>
+
+ <!-- fileset for -dist files-->
+ <fileset dir="." id="distfiles">
<include name="**/*-dist"/>
- </fileset>
-
+ </fileset>
+
<!-- Unit Testing -->
<target name="test" description="run unit tests">
- <fixpaths base="${project.dir}" testing="true"/>
+ <fixpaths base="${project.dir}" webapp="${agavi.webapp.dir}"
testing="true"/>
<property name="agavidir" value="${agavi.dir}" />
- <property name="testdir" value="${tests.dir}" />
- <property name="from" value="" />
- <property name="reporter" value="text" />
- <property name="outfile" value="" />
- <agavitest exit="true" testdir="${tests.dir}"
agavidir="${agavi.dir}" startpoint="${from}" reporter="${reporter}"
outfile="${outfile}"/>
+ <property name="testdir" value="${agavi.tests.dir}" />
+ <property name="from" value="" />
+ <property name="reporter" value="text" />
+ <property name="outfile" value="" />
+ <agavitest exit="true" testdir="${agavi.tests.dir}"
agavidir="${agavi.dir}" startpoint="${from}" reporter="${reporter}"
outfile="${outfile}"/>
</target>
<!-- Project creation -->
- <target name="project" description="create a new project">
+ <target name="project" depends="configure" description="create a new
project">
<input propertyname="project.dir" promptChar="?" message="Full
path to your new project (no trailing slash!)"/>
<mkdir dir="${project.dir}"/>
- <fixpaths base="${project.dir}" new="true"/>
- <echo msg="project dir: ${project.dir}, webapp dir:
${webapp.dir}, tests dir: ${tests.dir}"/>
+ <fixpaths base="${project.dir}" webapp="${agavi.webapp.dir}"
tests="${agavi.tests.dir}" new="true"/>
+ <echo msg="project dir: ${project.dir}"/>
+ <echo msg="webapp dir: ${agavi.webapp.dir}"/>
+ <echo msg="tests dir: ${agavi.tests.dir}"/>
<mkdir dir="${project.dir}"/>
- <mkdir dir="${webapp.dir}"/>
- <mkdir dir="${project.dir}/www"/>
- <copy file="buildtools/code_templates/index.php.tmpl"
tofile="${project.dir}/www/index.php">
+ <mkdir dir="${agavi.webapp.dir}"/>
+ <mkdir dir="${project.dir}/${agavi.www.dir}"/>
+ <copy file="buildtools/code_templates/index.php.tmpl"
tofile="${project.dir}/${agavi.www.dir}/index.php">
<filterchain>
<replacetokens begintoken="%%" endtoken="%%">
- <token key="PATH_TO_AGAVI"
value="${agavi.dir}"/> <!-- was project.basedir -->
- <token key="PATH_TO_PROJECT"
value="${webapp.dir}"/>
+ <token key="PATH_TO_AGAVI"
value="${agavi.dir}"/>
+ <token key="PATH_TO_PROJECT"
value="${agavi.webapp.dir}"/>
</replacetokens>
</filterchain>
</copy>
- <mkdir dir="${project.dir}/www/modpub"/>
- <mkdir dir="${webapp.dir}/cache"/>
- <copy file="buildtools/code_templates/config.php.tmpl"
tofile="${webapp.dir}/config.php">
+ <mkdir dir="${project.dir}/${agavi.www.dir}/modpub"/>
+ <mkdir dir="${agavi.webapp.dir}/cache"/>
+ <copy file="buildtools/code_templates/config.php.tmpl"
tofile="${agavi.webapp.dir}/config.php">
<filterchain>
<replacetokens begintoken="%%" endtoken="%%">
<token key="PATH_TO_AGAVI"
value="${agavi.dir}"/>
- <token key="PATH_TO_PROJECT"
value="${webapp.dir}"/>
+ <token key="PATH_TO_PROJECT"
value="${agavi.webapp.dir}"/>
</replacetokens>
</filterchain>
</copy>
- <mkdir dir="${webapp.dir}/config"/>
- <copy todir="${webapp.dir}/config">
+ <mkdir dir="${agavi.webapp.dir}/config"/>
+ <copy todir="${agavi.webapp.dir}/config">
<fileset dir="buildtools/code_templates/config">
<include name="*.ini"/>
<include name="*.conf"/>
</fileset>
</copy>
- <mkdir dir="${webapp.dir}/lib"/>
- <mkdir dir="${webapp.dir}/lib/models"/>
- <mkdir dir="${webapp.dir}/modules"/>
- <mkdir dir="${webapp.dir}/templates"/>
+ <mkdir dir="${agavi.webapp.dir}/lib"/>
+ <mkdir dir="${agavi.webapp.dir}/lib/models"/>
+ <mkdir dir="${agavi.webapp.dir}/modules"/>
+ <mkdir dir="${agavi.webapp.dir}/templates"/>
<phingcall target="projecttests" />
@@ -85,26 +96,25 @@
<!-- create tests directory structure which mimics the webapp structure
-->
<target name="projecttests" description="create tests structure for
project">
- <fixpaths base="${project.dir}"/>
- <mkdir dir="${tests.dir}" />
- <mkdir dir="${tests.dir}/lib" />
- <mkdir dir="${tests.dir}/lib/models" />
- <mkdir dir="${tests.dir}/modules" />
- <copy file="buildtools/test_setup.php"
tofile="${tests.dir}/test_setup.php" overwrite="true"/>
+ <mkdir dir="${agavi.tests.dir}" />
+ <mkdir dir="${agavi.tests.dir}/lib" />
+ <mkdir dir="${agavi.tests.dir}/lib/models" />
+ <mkdir dir="${agavi.tests.dir}/modules" />
+ <copy file="buildtools/test_setup.php"
tofile="${agavi.tests.dir}/test_setup.php" overwrite="true"/>
</target>
<!-- Module creation -->
<!-- create a new module in an existing project -->
- <target name="module" description="create a new module in an existing
project.">
- <fixpaths base="${project.dir}"/>
- <available file="${webapp.dir}/modules" type="dir"
property="is_webapp" value="true"/>
- <fail unless="is_webapp" message="Must be called in the root of
a webapp directory. (${webapp.dir})"/>
+ <target name="module" depends="configure" description="create a new
module in an existing project.">
+ <fixpaths base="${project.dir}" webapp="${agavi.webapp.dir}"
tests="${agavi.tests.dir}"/>
+ <available file="${agavi.webapp.dir}/modules" type="dir"
property="is_webapp" value="true"/>
+ <fail unless="is_webapp" message="Must be called in the root of
a webapp directory. (${agavi.webapp.dir})"/>
<input propertyname="module" promptChar="?" message="Module
Name"/>
<phingcall target="buildmodule"/>
</target>
<target name="buildmodule">
- <property name="module.dir"
value="${webapp.dir}/modules/${module}"/>
+ <property name="module.dir"
value="${agavi.webapp.dir}/modules/${module}"/>
<mkdir dir="${module.dir}"/>
<mkdir dir="${module.dir}/actions"/>
<mkdir dir="${module.dir}/config"/>
@@ -130,8 +140,8 @@
</target>
<target name="buildmoduletests">
- <fixpaths base="${project.dir}"/>
- <property name="moduletests.dir"
value="${tests.dir}/modules/${module}"/>
+ <fixpaths base="${project.dir}" webapp="${agavi.webapp.dir}"/>
+ <property name="moduletests.dir"
value="${agavi.tests.dir}/modules/${module}"/>
<mkdir dir="${moduletests.dir}"/>
<available file="${moduletests.dir}" type="dir"
property="has_tests" value="true"/>
<fail unless="has_tests" message="Project's tests directory not
found."/>
@@ -142,19 +152,19 @@
</target>
<!-- Action creation -->
- <target name="action" description="create a new action">
- <fixpaths base="${project.dir}" defaultmodule="true"/>
+ <target name="action" depends="configure" description="create a new
action">
+ <fixpaths base="${project.dir}" webapp="${agavi.webapp.dir}"
tests="${agavi.tests.dir}" defaultmodule="true"/>
<!--
<available file="${module.dir}/config/module.ini"
property="is_module" value="true"/>
<fail unless="is_module" message="Must be called in the root of
a module directory."/>
-->
- <listModules webapp="${webapp.dir}" property="current.modules"/>
+ <listModules webapp="${agavi.webapp.dir}"
property="current.modules"/>
<input propertyname="module" promptChar="?"
validArgs="${current.modules}" defaultValue="${default.module}" message="Make
the action for which module? "/>
<input propertyname="action" promptChar="?"
defaultValue="Index" message="Action Name"/>
<phingcall target="buildaction">
- <property name="module.dir"
value="${webapp.dir}/modules/${module}"/>
- <property name="moduletests.dir"
value="${tests.dir}/modules/${module}"/>
+ <property name="module.dir"
value="${agavi.webapp.dir}/modules/${module}"/>
+ <property name="moduletests.dir"
value="${agavi.tests.dir}/modules/${module}"/>
</phingcall>
</target>
@@ -168,7 +178,7 @@
</filterchain>
</copy>
<phingcall target="buildactiontests">
- <property name="moduletests.dir"
value="${tests.dir}/modules/${module}"/>
+ <property name="moduletests.dir"
value="${agavi.tests.dir}/modules/${module}"/>
</phingcall>
<input propertyname="views" promptChar="?"
defaultValue="Success,Error" message="Views for ${action} (no whitespace, comma
seperated)"/>
<foreach list="${views}" param="view" target="buildview"/>
@@ -190,7 +200,7 @@
</target>
<!-- View creation -->
- <target name="buildview">
+ <target name="buildview" depends="configure">
<copy file="buildtools/code_templates/View.class.php.tmpl"
tofile="${module.dir}/views/${action}${view}View.class.php">
<filterchain>
<replacetokens begintoken="%%" endtoken="%%">
@@ -202,7 +212,7 @@
</copy>
<touch file="${module.dir}/templates/${action}${view}.php"/>
<phingcall target="buildviewtests">
- <property name="moduletests.dir"
value="${tests.dir}/modules/${module}"/>
+ <property name="moduletests.dir"
value="${agavi.tests.dir}/modules/${module}"/>
</phingcall>
</target>
@@ -223,7 +233,7 @@
</target>
<!-- Model creation -->
- <target name="model" description="create a new model">
+ <target name="model" depends="configure" description="create a new
model">
<input propertyname="model" promptChar="?"
defaultValue="${module}" message="Model Name"/>
<phingcall target="buildmodel"/>
</target>
@@ -238,7 +248,7 @@
</filterchain>
</copy>
<phingcall target="buildmodeltests">
- <property name="moduletests.dir"
value="${tests.dir}/modules/${module}"/>
+ <property name="moduletests.dir"
value="${agavi.tests.dir}/modules/${module}"/>
</phingcall>
</target>
Index: buildtools/phing/AgaviFixPathsTask.php
===================================================================
--- buildtools/phing/AgaviFixPathsTask.php (revision 261)
+++ buildtools/phing/AgaviFixPathsTask.php (working copy)
@@ -1,6 +1,8 @@
<?php
class AgaviFixPathsTask extends Task {
private $base,
+ $webapp = '/webapp',
+ $tests = '/tests',
$depth=5,
$newproject = false,
$parseModulePath = false,
@@ -9,7 +11,15 @@
public function setBase($base) {
$this->base = $base;
}
-
+
+ public function setWebapp($dir) {
+ $this->webapp = $dir;
+ }
+
+ public function setTests($dir) {
+ $this->tests = $dir;
+ }
+
public function setDepth($depth) {
$this->depth = (int) $depth;
}
@@ -39,7 +49,11 @@
return $module;
}
- private function getDir($pattern = '/webapp') {
+ private function getDir($pattern = '') {
+ //Because the Webapp.Dir Property is change during execution,
only grab the last directory
+ //It is changed from a relative path to a exact path. This is
only done if the $pattern isn't
+ //passed into the function
+ $pattern = (strlen($pattern) <= 0) ? substr($this->webapp,
strrpos($this->webapp, '/')) : $pattern;
if ($this->newproject || file_exists($this->base . $pattern)) {
return realpath($this->base);
}
@@ -48,7 +62,7 @@
return realpath($this->base .
str_repeat('/../',$i));
}
}
- return ($this->testing && $pattern == '/webapp' ?
$this->getDir('/src/agavi.php') : false);
+ return ($this->testing && $pattern == $this->webapp ?
$this->getDir('/src/agavi.php') : false);
}
public function main() {
@@ -56,8 +70,8 @@
if ($pdir) {
echo "Project dir: $pdir\n";
$this->project->setProperty('project.dir', $pdir);
- $this->project->setProperty('webapp.dir',
realpath($pdir) . '/webapp');
- $this->project->setProperty('tests.dir',
realpath($pdir) . '/tests');
+ $this->project->setProperty('agavi.webapp.dir',
realpath($pdir) . $this->webapp);
+ $this->project->setProperty('agavi.tests.dir',
realpath($pdir) . $this->tests);
if ($this->parseModulePath) {
$this->project->setProperty('default.module',
$this->getModule());
}
Index: buildtools/phing/AgaviTestTask.php
===================================================================
--- buildtools/phing/AgaviTestTask.php (revision 261)
+++ buildtools/phing/AgaviTestTask.php (working copy)
@@ -1,6 +1,7 @@
<?php
class AgaviTestTask extends Task {
+
private $agavidir,
$testdir = 'tests',
$reporter = 'text',
@@ -9,6 +10,10 @@
$outfile = '',
$exit = false;
+ public function setWebapp($dir = 'webapp') {
+ $this->base_include[1] = $dir;
+ }
+
public function setAgavidir($dir)
{
$this->agavidir = (string) $dir;
_______________________________________________
agavi-dev mailing list
[email protected]
http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev