Skip to content

Commit 952ed26

Browse files
author
Devon Stewart
committed
Add ensureExecutable to FileAlg
1 parent 98a386c commit 952ed26

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

modules/core/src/main/scala/org/scalasteward/core/io/FileAlg.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.http4s.Uri
2626
import org.http4s.implicits.http4sLiteralsSyntax
2727
import org.typelevel.log4cats.Logger
2828
import scala.io.Source
29+
import java.nio.file.attribute.PosixFilePermission
2930

3031
trait FileAlg[F[_]] {
3132
def deleteForce(file: File): F[Unit]
@@ -50,6 +51,8 @@ trait FileAlg[F[_]] {
5051

5152
def writeFile(file: File, content: String): F[Unit]
5253

54+
def ensureExecutable(file: File): F[Unit]
55+
5356
final def createTemporarily[A, E](file: File, content: String)(
5457
fa: F[A]
5558
)(implicit F: Bracket[F, E]): F[A] = {
@@ -147,5 +150,16 @@ object FileAlg {
147150
logger.debug(s"Write $file") >>
148151
file.parentOption.fold(F.unit)(ensureExists(_).void) >>
149152
F.delay(file.write(content)).void
153+
154+
override def ensureExecutable(file: File): F[Unit] =
155+
F.delay(
156+
file.setPermissions(
157+
file.permissions ++ Set(
158+
PosixFilePermission.OWNER_EXECUTE,
159+
PosixFilePermission.GROUP_EXECUTE,
160+
PosixFilePermission.OTHERS_EXECUTE
161+
)
162+
)
163+
)
150164
}
151165
}

modules/core/src/test/scala/org/scalasteward/core/io/MockFileAlg.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,9 @@ class MockFileAlg extends FileAlg[MockEff] {
6666
StateT.modifyF[IO, MockState](
6767
_.exec(List("write", file.pathAsString)).addFiles(file -> content)
6868
)
69+
70+
override def ensureExecutable(file: File): MockEff[Unit] =
71+
StateT.modify[IO, MockState](
72+
_.exec(List("chmod", "u+x,g+x,o+x", file.pathAsString))
73+
) >> StateT.liftF(ioFileAlg.ensureExecutable(file))
6974
}

0 commit comments

Comments
 (0)