diff --git a/missing-translations.sh b/missing-translations.sh index afaed1073..8206fe5fc 100755 --- a/missing-translations.sh +++ b/missing-translations.sh @@ -92,6 +92,10 @@ for msgDirectory (${msgDirectories}); do return ${diffStatus} ) || msgDifference=1 + + if [[ $fix == 0 && $msgDifference != 0 ]]; then + exit 1 + fi done diff --git a/translate.hs b/translate.hs index 36270305b..eadb44621 100755 --- a/translate.hs +++ b/translate.hs @@ -16,7 +16,6 @@ import Data.Text (Text) import qualified Data.Text.IO as Text import qualified Data.Text as Text -import qualified Data.Text.Encoding as Text import Data.HashSet (HashSet) import qualified Data.HashSet as HashSet @@ -24,7 +23,7 @@ import qualified Data.HashSet as HashSet import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap -import Text.Editor (mkTemplate, runUserEditorDWIM, userEditorDefault, _default_editor) +import Text.Editor (Template, mkTemplate, userEditorDefault, _default_editor) import Numeric.Natural @@ -50,9 +49,9 @@ import System.FilePath hiding (combine) import System.Directory import System.Process -import System.IO (hPutStrLn, stderr) +import System.IO import System.Exit -import System.IO.Temp (writeSystemTempFile) +import System.IO.Temp (withSystemTempFile, writeSystemTempFile) import Data.Ord (Down(..)) @@ -251,10 +250,10 @@ combine f1 f2 = insertMissing f1 f2 >> insertMissing f2 f1 [ "# Translate from: " <> Text.pack (msgFile f1') , "# Target: " <> Text.pack (msgFile f2') ] - queryBS = Text.encodeUtf8 . (Text.unlines . (header :) . pure) . Text.unlines $ map renderMsg missing + query = (Text.unlines . (header :) . pure) . Text.unlines $ map renderMsg missing unless (null missing) $ do - responseBS <- runUserEditorDWIM (mkTemplate "msg") queryBS - let responseMsgs = readMsgText "" $ Text.decodeUtf8 responseBS + response <- runUserEditor (mkTemplate "msg") query + let responseMsgs = readMsgText "" response insertIntoFile f2' f1' responseMsgs @@ -299,3 +298,13 @@ translateFrom from to = do flip onError (removeFile to) $ do copyFile from to callProcess editor [to] + + +runUserEditor :: Template -> Text -> IO Text +runUserEditor templ initialContents = withSystemTempFile templ $ \filePath hdl -> do + editor <- userEditorDefault _default_editor + hSetBuffering hdl NoBuffering + Text.hPutStr hdl initialContents + hClose hdl + callProcess editor [filePath] + Text.readFile filePath