【问题标题】:Excecuting svn commit during SBT build在 SBT 构建期间执行 svn commit
【发布时间】:2016-12-19 15:46:02
【问题描述】:

我正在考虑使用 sbt 发布插件提出一个发布过程,但是当我尝试将 SVN 作为发布步骤提交时出现错误。

svn:提交失败(详情如下): svn: '/tmp/checkout/svn-test/commit' 不受版本控制

"/tmp/checkout/svn-test/" 是我项目的正确路径。我怀疑我在定义 ReleaseStep 以提交到 SVN 时做错了什么:

我的 build.sbt 发布配置如下:

lazy val execScript = taskKey[Unit]("Commit to Subversion")

execScript := {
  "svn commit -m 'test commit from release plugin'" !
}

val commitToSVN = () => ReleaseStep(
  action = releaseStepTask(execScript)
)

releaseProcess := Seq[ReleaseStep](
  ReleaseTransformations.checkSnapshotDependencies,
  ReleaseTransformations.inquireVersions,
  ReleaseTransformations.setReleaseVersion,
  commitToSVN()
)

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 你确定你的项目在/tmp吗?如果是这样,我会把它移出那里,it is often cleaned out on every boot.
  • 它现在就在那里,我在那里进行了新的检查,然后在 SBT 中运行了发布目标。我也尝试在不同的目录中,但我仍然收到“[project-path]/commit is not under version control”错误
  • 我强烈怀疑问题出在! 中使用了shell 语法(即使用单引号)。如果您改为使用Seq("svn", "commit", "-m", ...),它会起作用吗?正如你所拥有的,我认为它认为'testcommitfromreleaseplugin' 都是独立的参数。
  • @SethTisue 就是这样。刚刚用一个单词提交消息对其进行了测试,它运行良好。谢谢,你是救命稻草

标签: scala svn sbt


【解决方案1】:

问题似乎是使用 shell 语法,即使用单引号,!。正如你所拥有的,它认为'testcommitfromreleaseplugin' 都是单独的参数。

Java Process 的东西,像 ! 这样的 Scala 方法只是瘦包装器,不要使用 shell 运行进程,因此 shell 语法不适用。

如果您改为使用Seq("svn", "commit", "-m", ...),它应该可以工作。单独传递参数意味着您不需要单引号来分隔参数。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2016-08-04
    相关资源
    最近更新 更多