I need to use NAnt to update one specific line in a .js file. The line will be something like:
global.ServerPath = 'http://server-path/';
I need a way to update the "server-path" part of that line with that of the destination server.
ReplaceString is no good, since I won't know what the path in the file is when I update it.
Any help?
Thanks in advance
If string::replace
doesn't work <regex>
can do the job. This is it:
<?xml version="1.0" encoding="utf-8" ?>
<project name="replace.line" default="replace">
<target name="replace" descripton="replaces a line">
<property
name="js.file"
value="C:\foo.js" />
<loadfile file="${js.file}" property="js.file.content" />
<regex
input="${js.file.content}"
pattern="(?'BEFORE'.*)global\.ServerPath\s*=\s*'[^']*';(?'AFTER'.*)" />
<echo
file="${js.file}"
message="${BEFORE}global.ServerPath = 'http://bla/';${AFTER}"
append="false" />
</target>
</project>
shouldn't it be [\w\s\W]* instead of .* in AFTER and BEFORE to be able to capture all the lines?
in my case .* was capturing only line, whereas [\w\s\W]* worked for entire file
can also use the copy task along with filterchain and replacetokens filter.
Here's an example:
<token key="WebConfig.EnvironmentName" value="${env_webconfig_EnvironmentName}" />
<token key="WebConfig.SMTPServerName" value="${env_webconfig_SMTPServerName}" />
<token key="WebConfig.DatabaseConnectionString" value="${env_drmportal_webconfig_DatabaseConnectionString}" />
</replacetokens>
</filterchain>
</copy>
I retain all my template files in a /config/ folder (e.g. web.config.template) and my use of the copy task replaces the values when copying to the same /config/ folder but without the ".template" file extension. I then do what's needed afterwards...\
I will admit that it is a bit cumbersome using properties in the way that you have to for this, but you have flexibility in that you can load different sets of property values by environment (e.g. local, staging, production, etc.) but that's a little more than I think you're asking.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With