From 2279313eb9559f1b0f1731f2146f155bcb5ae839 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Mon, 17 Feb 2020 12:07:04 -0600 Subject: [PATCH] Move binaries to be stored inside of the HOME/.bitcoin-s/binaries instead of usrdir/binaries. This makes it so different projects that use bitcoin-s can re-use binaries instead of having to download them for every project (#1128) --- bitcoind-rpc/bitcoind-rpc.sbt | 3 ++- eclair-rpc/eclair-rpc.sbt | 4 +++- .../eclair/rpc/client/EclairRpcClient.scala | 2 +- project/CommonSettings.scala | 4 ++++ .../eclair/rpc/EclairRpcTestUtil.scala | 3 ++- .../testkit/rpc/BitcoindRpcTestUtil.scala | 20 ++----------------- .../testkit/util/TestkitBinaries.scala | 16 +++++++++++++++ 7 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/util/TestkitBinaries.scala diff --git a/bitcoind-rpc/bitcoind-rpc.sbt b/bitcoind-rpc/bitcoind-rpc.sbt index 1d8c45c02e..286c9e1621 100644 --- a/bitcoind-rpc/bitcoind-rpc.sbt +++ b/bitcoind-rpc/bitcoind-rpc.sbt @@ -17,7 +17,8 @@ TaskKeys.downloadBitcoind := { val logger = streams.value.log import scala.sys.process._ - val binaryDir = Paths.get("binaries", "bitcoind") + val binaryDir = CommonSettings.binariesPath.resolve("bitcoind") + if (Files.notExists(binaryDir)) { logger.info(s"Creating directory for bitcoind binaries: $binaryDir") diff --git a/eclair-rpc/eclair-rpc.sbt b/eclair-rpc/eclair-rpc.sbt index 702570139b..bd198a685f 100644 --- a/eclair-rpc/eclair-rpc.sbt +++ b/eclair-rpc/eclair-rpc.sbt @@ -1,5 +1,7 @@ import java.nio.file._ +import scala.util.Properties + name := "bitcoin-s-eclair-rpc" libraryDependencies ++= Deps.eclairRpc @@ -12,7 +14,7 @@ TaskKeys.downloadEclair := { val logger = streams.value.log import scala.sys.process._ - val binaryDir = Paths.get("binaries", "eclair") + val binaryDir = CommonSettings.binariesPath.resolve("eclair") if (Files.notExists(binaryDir)) { logger.info(s"Creating directory for Eclair binaires: $binaryDir") diff --git a/eclair-rpc/src/main/scala/org/bitcoins/eclair/rpc/client/EclairRpcClient.scala b/eclair-rpc/src/main/scala/org/bitcoins/eclair/rpc/client/EclairRpcClient.scala index 093bbc10f1..1742f3abfa 100644 --- a/eclair-rpc/src/main/scala/org/bitcoins/eclair/rpc/client/EclairRpcClient.scala +++ b/eclair-rpc/src/main/scala/org/bitcoins/eclair/rpc/client/EclairRpcClient.scala @@ -700,7 +700,7 @@ class EclairRpcClient(val instance: EclairInstance, binary: Option[File] = None) } case (None, Some(path)) => val eclairV = - s"/eclair-node-${EclairRpcClient.version}-${EclairRpcClient.commit}.jar" + s"eclair-node-${EclairRpcClient.version}-${EclairRpcClient.commit}.jar" val fullPath = path + eclairV val jar = new File(fullPath) diff --git a/project/CommonSettings.scala b/project/CommonSettings.scala index c6e9b863da..cd5c39a7e3 100644 --- a/project/CommonSettings.scala +++ b/project/CommonSettings.scala @@ -1,4 +1,6 @@ // these two imports are needed for sbt syntax to work +import java.nio.file.Paths + import sbt._ import sbt.Keys._ @@ -116,4 +118,6 @@ object CommonSettings { ) ++ testSettings lazy val prodSettings: Seq[Setting[_]] = settings + + lazy val binariesPath = Paths.get(Properties.userHome, ".bitcoin-s", "binaries") } diff --git a/testkit/src/main/scala/org/bitcoins/testkit/eclair/rpc/EclairRpcTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/eclair/rpc/EclairRpcTestUtil.scala index eeb9266bba..f696229ce9 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/eclair/rpc/EclairRpcTestUtil.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/eclair/rpc/EclairRpcTestUtil.scala @@ -26,6 +26,7 @@ import org.bitcoins.rpc.config.{BitcoindAuthCredentials, BitcoindInstance} import org.bitcoins.rpc.util.RpcUtil import org.bitcoins.testkit.async.TestAsyncUtil import org.bitcoins.testkit.rpc.{BitcoindRpcTestUtil, TestRpcUtil} +import org.bitcoins.testkit.util.TestkitBinaries import scala.concurrent.duration.{DurationInt, FiniteDuration} import scala.concurrent.{ExecutionContext, Future} @@ -47,7 +48,7 @@ trait EclairRpcTestUtil extends BitcoinSLogger { /** Directory where sbt downloads Eclair binaries */ private[bitcoins] val binaryDirectory = - BitcoindRpcTestUtil.baseBinaryDirectory.resolve("eclair") + TestkitBinaries.baseBinaryDirectory.resolve("eclair") /** Path to Jar downloaded by Eclair, if it exists */ private[bitcoins] def binary( diff --git a/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala index 3b06e5af53..7344dd636f 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala @@ -53,7 +53,7 @@ import org.bitcoins.rpc.jsonmodels.{ SignRawTransactionResult } import org.bitcoins.rpc.util.{AsyncUtil, RpcUtil} -import org.bitcoins.testkit.util.FileUtil +import org.bitcoins.testkit.util.{FileUtil, TestkitBinaries} import org.bitcoins.util.ListUtil import scala.annotation.tailrec @@ -156,25 +156,9 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger { lazy val network: RegTest.type = RegTest - /** The base directory where binaries needed in tests - * are located. */ - private[bitcoins] val baseBinaryDirectory = { - val cwd = Paths.get(Properties.userDir) - val pathsToGoBackFrom = List("eclair-rpc-test", - "bitcoind-rpc-test", - "node-test", - "wallet-test", - "chain-test") - - val rootDir = if (pathsToGoBackFrom.exists(cwd.endsWith)) { - cwd.getParent() - } else cwd - rootDir.resolve("binaries") - } - /** The directory that sbt downloads bitcoind binaries into */ private[bitcoins] val binaryDirectory = { - baseBinaryDirectory.resolve("bitcoind") + TestkitBinaries.baseBinaryDirectory.resolve("bitcoind") } def newestBitcoindBinary: File = getBinary(BitcoindVersion.newest) diff --git a/testkit/src/main/scala/org/bitcoins/testkit/util/TestkitBinaries.scala b/testkit/src/main/scala/org/bitcoins/testkit/util/TestkitBinaries.scala new file mode 100644 index 0000000000..a3d3ad0c60 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/util/TestkitBinaries.scala @@ -0,0 +1,16 @@ +package org.bitcoins.testkit.util + +import java.nio.file.{Path, Paths} + +import scala.util.Properties + +object TestkitBinaries { + + /** The base directory where binaries needed in tests + * are located. */ + lazy val baseBinaryDirectory: Path = { + val home = Paths.get(Properties.userHome, ".bitcoin-s", "binaries") + home + } + +}