on master help sign in
Merge pull request #3871 from jfdm/make-ipkg-reading-robust

Add check for ipkg existence and correct extension.

commitc1329d7790ab73154b3d7b3d44a99348e996daa1 authorNiklas Larsson <metaniklas@gmail.com> dateSun 25 Jun 2017, 17:58 (9 years ago) parentda363c2c96fa48
3 files changed+22−5
src/Idris/Package/Parser.hs+16−5 test/pkg001/expected+3 test/pkg001/run+3
src/Idris/Package/Parser.hs+16−5
@@ -24,7 +24,9 @@ import Control.Applicative
2424import Control.Monad.State.Strict
2525import Data.List (union)
2626import Data.Maybe (fromJust, isNothing)
27−import System.FilePath (isValid, takeFileName)
27+import System.Directory (doesFileExist)
28+import System.Exit
29+import System.FilePath (isValid, takeExtension, takeFileName)
2830import qualified Text.PrettyPrint.ANSI.Leijen as PP
2931import Text.Trifecta hiding (char, charLiteral, natural, span, string, symbol,
3032 whiteSpace)
@@ -58,10 +60,19 @@ instance TokenParsing PParser where
5860
5961parseDesc :: FilePath -> IO PkgDesc
6062parseDesc fp = do
61− p <- readFile fp
62− case runparser pPkg defaultPkg fp p of
63− Failure (ErrInfo err _) -> fail (show $ PP.plain err)
64− Success x -> return x
63+ when (not $ takeExtension fp == ".ipkg") $ do
64+ putStrLn $ unwords ["The presented iPKG file does not have a '.ipkg' extension:", show fp]
65+ exitWith (ExitFailure 1)
66+ res <- doesFileExist fp
67+ if res
68+ then do
69+ p <- readFile fp
70+ case runparser pPkg defaultPkg fp p of
71+ Failure (ErrInfo err _) -> fail (show $ PP.plain err)
72+ Success x -> return x
73+ else do
74+ putStrLn $ unwords [ "The presented iPKG file does not exist:", show fp]
75+ exitWith (ExitFailure 1)
6576
6677pPkg :: PParser PkgDesc
6778pPkg = do
test/pkg001/expected+3
@@ -18,3 +18,6 @@ builtin
1818Elaborating type decl Main.main[]
1919Elaborating clause Main.main
2020Rechecking for positivity []
21+The presented iPKG file does not have a '.ipkg' extension: "malformed-package-name"
22+The presented iPKG file does not exist: "non-existent-package.ipkg"
23+The presented iPKG file does not have a '.ipkg' extension: "non-existent-package-with-malformed-name"
test/pkg001/run+3
@@ -3,3 +3,6 @@ ${IDRIS:-idris} $@ --build test-pkg.ipkg
33rm -f *.ibc
44${IDRIS:-idris} $@ --build test-pkg.ipkg --quiet
55${IDRIS:-idris} $@ --build test-pkg.ipkg --logging-categories "elab" --log 1
6+${IDRIS:-idris} $@ --build malformed-package-name
7+${IDRIS:-idris} $@ --build non-existent-package.ipkg
8+${IDRIS:-idris} $@ --build non-existent-package-with-malformed-name