GradleでSVNチェックアウトするだけのサンプル(完全版)
前回のエントリでkimukou_26さんから動くソースが見たいとコメント頂いたので書いてみました。
前回のコード例だと、「XmlParser().parseText('svnlist.log')」で落ちますね...orz ここはファイル名を渡しているので、「XmlParser().parse('svnlist.log')」が正しいです。すいませんでしたm(__)m
また、ant.svnを使うためにはAntのtaskdefとJARの配置も実際は必要なのでそこも書いておきました。
動くbuild.gradleは以下のようになります。Liferayのソースをチェックアウトするコードになっているので適当に変えてください。ただし以下の注意点があります。
- svn listはantのsvnタスクではサポートされていません。なので、nativeのsvnコマンドをantのexecタスクで呼び出しています。ということは、svnコマンドが実行できるよう、svnクライアントが別途インストールされている必要があります。
- 一方、チェックアウト時はantのsvnタスクを使っています。なので、svnantが必要です。libフォルダ以下にsvnantのJARを配置することを前提としています。(別にここもnativeのsvn coをexecタスクでも呼んでもいいですが)
SVN_USER = 'guest' SVN_PASS = '' SVN_USER_OPT = "--username ${SVN_USER}" SVN_PASS_OPT = SVN_PASS.length() > 0 ? "--password ${SVN_PASS}" : '' workDir = 'tmp' moduleName = 'portal' trunkBaseUrl = "http://svn.liferay.com/repos/public/${moduleName}/trunk" tagBaseUrl = "http://svn.liferay.com/repos/public/${moduleName}/tags" //Task Def for svnant (http://subclipse.tigris.org/svnant.html) ant.taskdef(resource: 'org/tigris/subversion/svnant/svnantlib.xml') { classpath { fileset(dir: 'lib', includes: '*.jar') } } task checkout << { //svn listでタグ一覧を取得(残念ながらantタスクでは未実装なのでexecタスクで) ant.exec(executable: "svn", dir: ".", output: 'svnlist.log') { arg(line: "list --xml ${SVN_USER_OPT} ${SVN_PASS_OPT} ${tagBaseUrl}") } //svn listの結果をパース root = new XmlParser().parse('svnlist.log') entries = root.list.entry.collect{ [it.name.text(), it.commit.date.text()] } //日付でソート tagNames = entries.sort{ x, y -> y[1] <=> x[1] }.collect{ it[0] } //最新のタグURL latestTagName = tagNames[0] //タグをチェックアウト ant.svn(username: SVN_USER, password: SVN_PASS) { checkout(url: "${tagBaseUrl}/${latestTagName}", revision: 'HEAD', destPath: "${workDir}/${latestTagName}/${moduleName}") } //trunkをチェックアウト ant.svn(username: SVN_USER, password: SVN_PASS) { checkout(url: "${trunkBaseUrl}", revision: 'HEAD', destPath: "${workDir}/latest/${moduleName}") } }
上記ファイルを置いたところで、下記コマンドで実行します。
gradle checkout