Subscribed unsubscribe Subscribe Subscribe

GradleでSVNチェックアウトするだけのサンプル(完全版)

Gradle

前回のエントリで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