VirtusLab / scala-cli

Scala CLI is a command-line tool to interact with the Scala language. It lets you compile, run, test, and package your Scala code (and more!)
https://scala-cli.virtuslab.org
Apache License 2.0
544 stars 128 forks source link

Add extra try-catch clause + extra logging in `LocalRepo` #3114

Closed Gedochao closed 1 month ago

Gedochao commented 1 month ago

Closes #3110

@SpriteOvO @sequencer I have no idea under what circumstances this would fail, as we have no minimization/reproduction, but since the stacktrace points here, maybe this'd be sufficient. Feel free to try and let me know if this fixes it.

SpriteOvO commented 1 month ago

Error message with the artifact of this commit:

Error removing /home/runner/.cache/scalacli/local-repo/.1.4.3-41-8ceaf1.tmp: /home/runner/.cache/scalacli/local-repo/.1.4.3-41-8ceaf1.tmp
Error: java.nio.file.FileAlreadyExistsException: /home/runner/.cache/scalacli/local-repo/1.4.3-41-8ceaf1
For more details, please see '[...]/.scala-build/stacktraces/1724173030-4202049434537684376.log'

1724173030-4202049434537684376.log:

 java.nio.file.FileAlreadyExistsException: /home/runner/.cache/scalacli/local-repo/1.4.3-41-8ceaf1
  java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:449)
  java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:267)
  java.base/java.nio.file.Files.move(Files.java:1432)
  os.move$.apply(FileOps.scala:98)
  scala.build.LocalRepo$.localRepo$$anonfun$1(LocalRepo.scala:91)
  scala.build.LocalRepo$.localRepo$$anonfun$adapted$1(LocalRepo.scala:92)
  scala.build.LocalRepo$.withLock(LocalRepo.scala:118)
  scala.build.LocalRepo$.localRepo(LocalRepo.scala:92)
  scala.cli.commands.shared.SharedOptions.buildOptions$$anonfun$1(SharedOptions.scala:433)
  scala.build.EitherCps$Helper.apply(EitherCps.scala:19)
  scala.cli.commands.shared.SharedOptions.buildOptions(SharedOptions.scala:449)
  scala.cli.commands.ScalaCommand.buildOptions$$anonfun$1(ScalaCommand.scala:329)
  scala.Option.map(Option.scala:242)
  scala.cli.commands.ScalaCommand.buildOptions(ScalaCommand.scala:329)
  scala.cli.commands.ScalaCommand.run(ScalaCommand.scala:382)
  scala.cli.commands.ScalaCommand.run(ScalaCommand.scala:369)
  caseapp.core.app.CaseApp.main(CaseApp.scala:157)
  scala.cli.commands.ScalaCommand.main(ScalaCommand.scala:354)
  caseapp.core.app.CommandsEntryPoint.main(CommandsEntryPoint.scala:169)
  scala.cli.ScalaCliCommands.main(ScalaCliCommands.scala:125)
  scala.cli.ScalaCli$.main0(ScalaCli.scala:296)
  scala.cli.ScalaCli$.main(ScalaCli.scala:119)
  scala.cli.ScalaCli.main(ScalaCli.scala)
  java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
  java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  java.base/java.lang.reflect.Method.invoke(Method.java:568)
  coursier.bootstrap.launcher.a.a(Unknown Source)
  coursier.bootstrap.launcher.ResourcesLauncher.main(Unknown Source)

Sorry, I've been busy with other things recently and will try to provide a reproducible CI script sometime later.