diff options
author | nea <nea@nea.moe> | 2023-01-24 22:17:31 +0100 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-01-24 22:17:31 +0100 |
commit | 9981add49d62b039ae61edfece584fe038ef07a5 (patch) | |
tree | e212984f4c70f64601096b8e5de138aadafe31ff /src/main/frege/buildclient/tasks/Executor.fr | |
parent | 00b782440054102c405c2001835cc817c1947037 (diff) | |
download | buildclient-master.tar.gz buildclient-master.tar.bz2 buildclient-master.zip |
Diffstat (limited to 'src/main/frege/buildclient/tasks/Executor.fr')
-rw-r--r-- | src/main/frege/buildclient/tasks/Executor.fr | 88 |
1 files changed, 15 insertions, 73 deletions
diff --git a/src/main/frege/buildclient/tasks/Executor.fr b/src/main/frege/buildclient/tasks/Executor.fr index da17d89..e0f9b20 100644 --- a/src/main/frege/buildclient/tasks/Executor.fr +++ b/src/main/frege/buildclient/tasks/Executor.fr @@ -2,27 +2,12 @@ module buildclient.tasks.Executor where import buildclient.config.BuildConfig +import buildclient.util.IoUtils import frege.java.Net import frege.java.IO -import Data.Array +import frege.java.lang.Processes -data HttpURLConnection = native java.net.HttpURLConnection where - -- Unchecked cast, but who cares - native fromUrlConnection "(java.net.HttpURLConnection)" :: MutableIO URLConnection -> IOMutable HttpURLConnection - native setRequestProperty :: MutableIO HttpURLConnection -> String -> String -> IO () - native getHeaderField :: MutableIO HttpURLConnection -> String -> IO (Maybe String) - native getResponseCode :: MutableIO HttpURLConnection -> IO Int throws IOException - -data ZipEntry = native java.util.zip.ZipEntry where - native getName :: Mutable s ZipEntry -> ST s String - native isDirectory :: Mutable s ZipEntry -> ST s Bool - -data ZipInputStream = native java.util.zip.ZipInputStream where - native new :: MutableIO InputStream -> IOMutable ZipInputStream - native getNextEntry :: MutableIO ZipInputStream -> IO (Maybe (MutableIO ZipEntry)) throws IOException - native closeEntry :: MutableIO ZipInputStream -> IO () throws IOException - bcDownloadSync :: File -> BuildSource -> IO () bcDownloadSync targetDirectory (HttpSource url format archiveRoot skipDirs) = do File.mkdirs targetDirectory @@ -52,60 +37,17 @@ bcDownloadSync targetDirectory (HttpSource url format archiveRoot skipDirs) = do return () -extractZip :: Int -> File -> File -> IO () -extractZip skipDirs archiveFile targetDirectory = - do - File.mkdirs targetDirectory - fis <- FileInputStream.new archiveFile - zis <- ZipInputStream.new fis - extractFiles zis - return () - where - extractFiles zis = do - entry <- ZipInputStream.getNextEntry zis - case entry of - Just n -> extractFile zis n >> extractFiles zis - Nothing -> return () - extractFile zis zentry = do - isdir <- ZipEntry.isDirectory zentry - if isdir - then return () - else do - name <- ZipEntry.getName zentry - let (Right pattern) = Regex.compile "[/\\\\]" - let parts = drop skipDirs $ toList $ Regex.split (pattern) name - let targetFile = fold File.new targetDirectory parts - maybe (return false) File.mkdirs $ File.getParentFile targetFile - saveInputStreamTo zis targetFile - return () +data AFile = native java.io.File where + native setExecutable :: File -> Bool -> Bool -> IO Bool -writeFileStr :: File -> String -> IO () -writeFileStr file text = do - fos <- FileOutputStream.new file - osw <- OutputStreamWriter.new fos "UTF-8" - osw.write text - osw.close - -readFileStr :: File -> IO String -readFileStr file = do - fis <- FileInputStream.new file - isr <- InputStreamReader.new fis "UTF-8" - getContentsOf isr - -saveInputStreamTo :: MutableIO InputStream -> File -> IO () -saveInputStreamTo is file = - do maybe (return false) File.mkdirs $ File.getParentFile file - fos <- FileOutputStream.new file - arr <- newArray 4096 - copyloop arr fos - fos.close - return () - where - copyloop :: ArrayOf RealWorld Byte -> MutableIO FileOutputStream -> IO () - copyloop buf to = do - rc <- InputStream.read is buf - if rc < 0 - then return () - else do - OutputStream.write to buf 0 rc - copyloop buf to +bcExecuteBuild :: BuildSystem -> File -> File -> IO () +bcExecuteBuild (BuildSystem.GradleBuild task project properties) buildDir targetFile = do + AFile.setExecutable (File.new buildDir "gradlew") true true + let commandLine = (["./gradlew", ":buildClientGenerateFile", "-Pbuildclienttarget=" ++ (File.getPath targetFile)] ++ fmap (\(a,b)-> "-P"++a++"="++b) properties) + println commandLine + pb <- ProcessBuilder.new (commandLine) + ProcessBuilder.directory pb buildDir + ProcessBuilder.inheritIO pb + proc <- ProcessBuilder.start pb + void $ Process.waitFor proc + return () |