On 1/23/11 10:12 PM, Michael Ludwig wrote: > Laurence Mills-Gahl schrieb am 23.01.2011 um 21:27 (-0500): >> I have an ant exec task that is behaving inconsistently. >> >> I have a list of centerid's and a "foreach" loop > Red flag goes up …
What is the red flag? >> that calls the following target: >> >> <target name="compile_alert_report" description="compile detail >> report for alerts"> >> <echo>patient detail for patients NOT on alert for center >> ${centerid}</echo> > Alert: Properties aren't variable. They're immutable. Their value does > not change once set. The foreach task (from Ant-Contrib) passes a parameter to the target task. The ${centerid} is echoed on the target of the loop and it is indeed changing as I would expect it to... For example <target name="generate_reports"> <foreach target="generate_reports_for_center" param="centerid" list="${centerlist}" /> </target> <target name="generate_reports_for_center" description="generate reports for a particular centerid"> <echo>generating reports for center ${centerid} through ${report.enddategraphs}</echo> <antcall target="compile_patient_detail_report"> <param name="centerid" value="${centerid}" /> </antcall> [...] </target> <target name="compile_patient_detail_report" depends="render_graphs_for_center"> <antcall target="compile_patients_on_alert"> <param name="centerid" value="${centerid}" /> </antcall> [...] </target> <target name="compile_patients_on_alert" description="compile patient detail report for patients on alert"> <echo>patient detail for alerting patients for center ${centerid}</echo> <echo message=" reportPatientDetail.pl -e ${report.enddate} -c ${centerid} -o ${report.xml}/${BUILDTIME} " /> <exec dir="${center.bin}" executable="${perl}" failonerror="true"> <arg line=" reportPatientDetail.pl -e ${report.enddate} -c ${centerid} -o ${report.xml}/${BUILDTIME} " /> </exec> </target> Where ${centerlist} is "297,298,299,300,301" I get the echo message with the correct ${centerid} as I expect. This is exactly how the foreach task is supposed to behave and exactly the way it does behave in a number of other areas of this project. When it get's down to the "compile_patients_on_alert" target, the arguments echoed to the console are correct (they are the same one's that are used to call this script from the shell). This includes the ${centerid} (The rest of the properties in the command are the same for the entire project run) With the echo tasks showing that the command is forming as I expect, I don't think this is an issue with properties. >> <exec dir="${center.bin}" executable="${perl}" failonerror="true"> >> <arg line=" reportAlertDetail.pl -e ${report.enddate} -c >> ${centerid} -A x -a x -o ${report.xml}/${BUILDTIME}" /> >> </exec> > More properties here. It's the same Perl script invocation each time > around. That's probably not what you intend to do. Actually, it's not the same perl script invocation. The ${centerid} changes with each iteration of the foreach task. Here is the echo output of an invocation to "generate_reports" generate_reports: va_common_targets.generate_reports: [echo] generating reports for center list [mkdir] Created dir: /home/VascAlert/reports/xml/20110124003823 [mkdir] Created dir: /home/VascAlert/reports/pdf/20110124003823 [copy] Copying 1 file to /home/VascAlert/reports/xml/20110124003823 [copy] Copying 1 file to /home/VascAlert/reports/xml/20110124003823 [copy] Copying 1 file to /home/VascAlert/reports/xml/20110124003823 [copy] Copying 1 file to /home/VascAlert/reports/xml/20110124003823 [copy] Copying 1 file to /home/VascAlert/reports/xml/20110124003823 generate_reports_for_center: [echo] generating reports for center 297 through 2011-01-24 compile_patient_detail_report: compile_patients_on_alert: [echo] patient detail for alerting patients for center 297 [echo] reportPatientDetail.pl -e 2011-01-23 -c 297 -o /home/VascAlert/reports/xml/20110124003824 compile_patients_not_on_alert: [echo] patient detail for patients NOT on alert for center 297 compile_access_report: [echo] access report for center 297 compile_alert_list_reports: [echo] VAPR alert list report for center 297 [echo] AAPR alert list report for center 297 generate_reports_for_center: [echo] generating reports for center 298 through 2011-01-24 compile_patient_detail_report: compile_patients_on_alert: [echo] patient detail for alerting patients for center 298 [echo] reportPatientDetail.pl -e 2011-01-23 -c 298 -o /home/VascAlert/reports/xml/20110124003824 compile_patients_not_on_alert: [echo] patient detail for patients NOT on alert for center 298 compile_access_report: [echo] access report for center 298 compile_alert_list_reports: [echo] VAPR alert list report for center 298 [echo] AAPR alert list report for center 298 generate_reports_for_center: [echo] generating reports for center 299 through 2011-01-24 compile_patient_detail_report: compile_patients_on_alert: [echo] patient detail for alerting patients for center 299 [echo] reportPatientDetail.pl -e 2011-01-23 -c 299 -o /home/VascAlert/reports/xml/20110124003824 The script and commandline args are all correct and produce the correct result when called from the shell. The problem is that calling this from ant produces *inconsistent* results. Some of the first report files are written but after two or three iterations, the output that should be going to the file is turning up in standard output. > There are a couple simple things you can do to find out what's going on. > > ant -h # help > ant -v # verbose, some info > ant -d # debug, including properties getting set > ant -diagnostics # also useful to know what info is available here > > Take a look at the <listproperties> task, also occasionally useful to > produce diagnostic output. > The -d switch does provide lots of detail about what is going on at each step and I don't see anything unexpected that would make the output of an (apparently) separate process (the perl process) which is outside the ant execution space, change from a perl file handle to standard out. Thanks for your help, but I'm still on the hunt for why this is happening.