Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100755 221 lines (187 sloc) 9.816 kb
3e17890 1.1 branch is now trunk
graeme authored
1 /*
2 * Copyright 2004-2005 the original author or authors.
835947f @burtbeckwith cleanup
burtbeckwith authored
3 *
3e17890 1.1 branch is now trunk
graeme authored
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
835947f @burtbeckwith cleanup
burtbeckwith authored
7 *
3e17890 1.1 branch is now trunk
graeme authored
8 * http://www.apache.org/licenses/LICENSE-2.0
835947f @burtbeckwith cleanup
burtbeckwith authored
9 *
3e17890 1.1 branch is now trunk
graeme authored
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /**
18 * Gant script that handles upgrading of a Grails applications
19 *
20 * @author Graeme Rocher
21 * @author Sergey Nebolsin
22 *
23 * @since 0.4
24 */
25
26 import grails.util.Metadata
27
28 includeTargets << grailsScript("_GrailsPlugins")
29
30 target(upgrade: "main upgrade target") {
31
32 depends(createStructure, parseArguments)
33
34 boolean force = argsMap.force || !isInteractive ?: false
35
36 if (appGrailsVersion != grailsVersion) {
37 def gv = appGrailsVersion == null ? "pre-0.5" : appGrailsVersion
38 event("StatusUpdate", ["NOTE: Your application currently expects grails version [$gv], " +
835947f @burtbeckwith cleanup
burtbeckwith authored
39 "this target will upgrade it to Grails ${grailsVersion}"])
3e17890 1.1 branch is now trunk
graeme authored
40 }
41
42 if (!force) {
43 ant.input(message: """
835947f @burtbeckwith cleanup
burtbeckwith authored
44 WARNING: This target will upgrade an older Grails application to ${grailsVersion}.
45 Are you sure you want to continue?
46 """,
47 validargs: "y,n",
48 addproperty: "grails.upgrade.warning")
3e17890 1.1 branch is now trunk
graeme authored
49
50 def answer = ant.antProject.properties."grails.upgrade.warning"
51
52 if (answer == "n") exit(0)
53
54 if ((grailsVersion.startsWith("1.0")) &&
55 !(['utf-8', 'us-ascii'].contains(System.getProperty('file.encoding')?.toLowerCase()))) {
56 ant.input(message: """
835947f @burtbeckwith cleanup
burtbeckwith authored
57 WARNING: This version of Grails requires all source code to be encoded in UTF-8.
58 Your system file encoding indicates that your source code may not be saved in UTF-8.
59 You can re-encode your source code manually after upgrading, but if you have used any
60 non-ASCII chars in your source or GSPs your application may not operate correctly until
61 you re-encode the files as UTF-8.
62
63 Are you sure you want to upgrade your project now?
64 """,
65 validargs: "y,n",
66 addproperty: "grails.src.encoding.warning")
3e17890 1.1 branch is now trunk
graeme authored
67 answer = ant.antProject.properties."grails.src.encoding.warning"
68 if (answer == "n") exit(0)
69 }
70 }
71
72 clean()
73
74 def coreTaglibs = new File("${basedir}/plugins/core")
75
76 ant.delete(dir: "${coreTaglibs}", failonerror: false)
77
78 ant.sequential {
79 def testDir = "${basedir}/grails-tests"
80 if (new File("${testDir}/CVS").exists()) {
81 println """
82 WARNING: Your Grails tests directory '${testDir}' is currently under CVS control so the upgrade script cannot
83 move it to the new location of '${basedir}/test/integration'. Please move the directory using the relevant CVS commands."""
84 }
85 else if (new File("${testDir}/.svn").exists()) {
86 println """
87 WARNING: Your Grails tests directory '${testDir}' is currently under SVN control so the upgrade script cannot
88 move it to the new location of '${basedir}/test/integration'. Please move the directory using the relevant SVN commands."""
89 }
90 else {
91 if (new File(testDir).exists()) {
92 move(todir: "${basedir}/test/integration") {
93 fileset(dir: testDir, includes: "**")
94 }
95 delete(dir: testDir)
96 }
97 }
98 delete(dir: "${basedir}/tmp", failonerror: false)
99
100 copy(todir: "${basedir}/web-app") {
101 fileset(dir: "${grailsHome}/src/war") {
102 include(name: "**/**")
103 exclude(name: "WEB-INF/**")
104 present(present: "srconly", targetdir: "${basedir}/web-app")
105 }
106 }
107 copy(file: "${grailsHome}/src/war/WEB-INF/sitemesh.xml",
835947f @burtbeckwith cleanup
burtbeckwith authored
108 tofile: "${basedir}/web-app/WEB-INF/sitemesh.xml", overwrite: true)
3e17890 1.1 branch is now trunk
graeme authored
109 copy(file: "${grailsHome}/src/war/WEB-INF/applicationContext.xml",
835947f @burtbeckwith cleanup
burtbeckwith authored
110 tofile: "${basedir}/web-app/WEB-INF/applicationContext.xml", overwrite: true)
3e17890 1.1 branch is now trunk
graeme authored
111
112 if (!isPluginProject) {
113 // Install application-only files if needed, exact "one file only" matches
114 ['Config.groovy'].each() {template ->
115 if (!new File(baseFile, '/grails-app/conf').listFiles().find { it.name.equals(template) }) {
116 copy(tofile: "${basedir}/grails-app/conf/${template}") {
117 fileset(file: "${grailsHome}/src/grails/grails-app/conf/${template}") {
118 present(present: "srconly", targetdir: "${basedir}/grails-app/conf")
119 }
120 }
121 }
122 }
123
124 // Install application-only files if needed, with suffix matching
125 ['DataSource.groovy'].each() {template ->
126 if (!new File(baseFile, '/grails-app/conf').listFiles().find { it.name.startsWith(template) }) {
127 copy(tofile: "${basedir}/grails-app/conf/${template}") {
128 fileset(file: "${grailsHome}/src/grails/grails-app/conf/${template}") {
129 present(present: "srconly", targetdir: "${basedir}/grails-app/conf")
130 }
131 }
132 }
133 }
134 }
135
136 // Both applications and plugins can have UrlMappings, but only install default if there is nothing already
137 ['UrlMappings.groovy'].each() {template ->
138 if (!new File(baseFile, '/grails-app/conf').listFiles().find { it.name.endsWith(template) }) {
139 copy(tofile: "${basedir}/grails-app/conf/${template}") {
140 fileset(file: "${grailsHome}/src/grails/grails-app/conf/${template}") {
141 present(present: "srconly", targetdir: "${basedir}/grails-app/conf")
142 }
143 }
144 }
145 }
146
147 // if Config.groovy exists and it does not contain values for
148 // grails.views.default.codec or grails.views.gsp.encoding then
149 // add reasonable defaults for them
150 def configFile = new File(baseFile, '/grails-app/conf/Config.groovy')
151 if (configFile.exists()) {
152 def configSlurper = new ConfigSlurper()
153 def configObject = configSlurper.parse(configFile.toURI().toURL())
154 def defaultCodec = configObject.grails.views.default.codec
155 def gspEncoding = configObject.grails.views.gsp.encoding
156
157 if (!defaultCodec || !gspEncoding) {
158 configFile.withWriterAppend {
159 it.writeLine '\n// The following properties have been added by the Upgrade process...'
160 if (!defaultCodec) it.writeLine 'grails.views.default.codec="none" // none, html, base64'
161 if (!gspEncoding) it.writeLine 'grails.views.gsp.encoding="UTF-8"'
162 }
163 }
164 }
165
166 if (new File("${basedir}/spring").exists()) {
167 move(file: "${basedir}/spring", todir: "${basedir}/grails-app/conf")
168 }
169 if (new File("${basedir}/hibernate").exists()) {
170 move(file: "${basedir}/hibernate", todir: "${basedir}/grails-app/conf")
171 }
172
173 def appKey = baseName.replaceAll(/\s/, '.').toLowerCase()
174
175 replace(dir: "${basedir}/web-app/WEB-INF", includes: "**/*.*",
176 token: "@grails.project.key@", value: "${appKey}")
177
178 copy(todir: "${basedir}/web-app/WEB-INF/tld", overwrite: true) {
179 fileset(dir: "${grailsHome}/src/war/WEB-INF/tld/${servletVersion}")
180 fileset(dir: "${grailsHome}/src/war/WEB-INF/tld", includes: "spring.tld")
181 fileset(dir: "${grailsHome}/src/war/WEB-INF/tld", includes: "grails.tld")
182 }
183 touch(file: "${basedir}/grails-app/i18n/messages.properties")
184 }
185
186 // Add the app name and Grails version to the metadata.
187 updateMetadata("app.name": "$grailsAppName", "app.grails.version": "$grailsVersion")
188
189 // proceed plugin-specific upgrade logic contained in 'scripts/_Upgrade.groovy' under plugin's root
881a417 @pledbrook This ostensibly fixes a problem with the _GrailsWar script which was
pledbrook authored
190 def plugins = pluginSettings.pluginBaseDirectories
3e17890 1.1 branch is now trunk
graeme authored
191 if (plugins) {
192 for (pluginDir in plugins) {
193 def f = new File(pluginDir)
194 if (f.isDirectory() && f.name != 'core') {
195 // fix for Windows-style path with backslashes
196
197 def pluginBase = "${basedir}/plugins/${f.name}".toString().replaceAll("\\\\", "/")
198 // proceed _Upgrade.groovy plugin script if exists
199 def upgradeScript = new File("${pluginBase}/scripts/_Upgrade.groovy")
200 if (upgradeScript.exists()) {
201 event("StatusUpdate", ["Executing ${f.name} plugin upgrade script"])
202 // instrumenting plugin scripts adding 'pluginBasedir' variable
203 def instrumentedUpgradeScript = "def pluginBasedir = '${pluginBase}'\n" + upgradeScript.text
204 // we are using text form of script here to prevent Gant caching
205 includeTargets << instrumentedUpgradeScript
206 }
207 }
208 }
209 }
210
211 installDefaultPluginSet()
212
213 event("StatusUpdate", ["Please make sure you view the README for important information about changes to your source code."])
214
215 event("StatusFinal", ["Project upgraded"])
216 }
217
218 target("default": "Upgrades a Grails application from a previous version of Grails") {
219 depends(upgrade)
835947f @burtbeckwith cleanup
burtbeckwith authored
220 }
Something went wrong with that request. Please try again.