dl-fedora 0.7 → 0.7.1
raw patch · 3 files changed
+46/−22 lines, 3 filesdep +time
Dependencies added: time
Files
- CHANGELOG.md +6/−1
- Main.hs +37/−19
- dl-fedora.cabal +3/−2
CHANGELOG.md view
@@ -1,10 +1,15 @@ # Changelog +## 0.7.1 (2019-09-25)+- print datestamp beside filesize+- show directory correctly with ~/+- use a subdirectory for checksum files+ ## 0.7 (2019-09-12) - add --checksum to always do checksum when possible - add --run to run image in qemu-kvm if available - rework algorithms- - check local filesize earlier: don't even check mirror if always downloaded+ - check local filesize earlier: don't even check mirror if already downloaded - for partial local file output percentage already downloaded - otherwise show filesize - show dir for symlink: so one knows location
Main.hs view
@@ -14,6 +14,7 @@ import Data.Maybe import Data.Semigroup ((<>)) import qualified Data.Text as T+import Data.Time.LocalTime (utcToLocalZonedTime) import Network.HTTP.Directory @@ -22,16 +23,17 @@ import Paths_dl_fedora (version) -import SimpleCmd (cmd_, error', grep_, pipe_, pipeBool, pipeFile_)+import SimpleCmd (cmd_, cmdN, error', grep_, pipe_, pipeBool, pipeFile_) import SimpleCmdArgs -import System.Directory (createDirectoryIfMissing, doesDirectoryExist,- doesFileExist, findExecutable, getHomeDirectory,- getPermissions, listDirectory, removeFile,- setCurrentDirectory, writable)+import System.Directory (createDirectory, createDirectoryIfMissing,+ doesDirectoryExist, doesFileExist, findExecutable,+ getHomeDirectory, getPermissions, listDirectory,+ removeFile, setCurrentDirectory, withCurrentDirectory,+ writable) import System.Environment.XDG.UserDir (getUserDir)-import System.FilePath (dropFileName, joinPath, makeRelative, takeExtension,- takeFileName, (<.>))+import System.FilePath (dropFileName, isRelative , joinPath, makeRelative,+ takeExtension, takeFileName, (<.>)) import System.Posix.Files (createSymbolicLink, fileSize, getFileStatus, readSymbolicLink) @@ -119,16 +121,18 @@ unless dryrun $ do let localfile = takeFileName fileurl symlink = filenamePrefix <> "-latest" <.> takeExtension fileurl- showdestdir = "~" </> makeRelative home dlDir+ showdestdir =+ let path = makeRelative home dlDir in+ if isRelative path then "~" </> path else path updateSymlink localfile symlink showdestdir- when run $ bootImage localfile+ when run $ bootImage localfile showdestdir where setDownloadDir dlDir home = do dirExists <- doesDirectoryExist dlDir unless (dryrun || dirExists) $ when (home == dlDir) $ error' "HOME directory does not exist!"- unless (dirExists || dryrun) $ createDirectoryIfMissing False dlDir+ unless (dirExists || dryrun) $ createDirectoryIfMissing True dlDir dirExists' <- if dirExists then return True else doesDirectoryExist dlDir when dirExists' $ setCurrentDirectory dlDir@@ -153,6 +157,12 @@ else prefixPat masterUrl = masterDir </> file masterSize <- httpFileSize mgr masterUrl+ mlocaltime <- do+ mUtc <- httpLastModified mgr masterUrl+ case mUtc of+ Nothing -> return Nothing+ Just u -> Just <$> utcToLocalZonedTime u+ maybe (return ()) putStrLn $ showMSize masterSize <> showMDate mlocaltime (finalurl, already) <- do let localfile = takeFileName masterUrl exists <- doesFileExist localfile@@ -166,13 +176,14 @@ unless canwrite $ error' $ localfile <> " does have write permission, aborting!" findMirror masterUrl path file- else do- maybe (return ()) (\ s -> putStrLn $ "size " <> show s) masterSize- findMirror masterUrl path file+ else findMirror masterUrl path file let finalDir = dropFileName finalurl putStrLn finalurl return (finalurl, prefix, (masterUrl,masterSize), (finalDir </>) . T.unpack <$> mchecksum, already) where+ showMSize = fmap (\ s -> "size " <> show s <> " ")+ showMDate = fmap (\ s -> "(" <> show s <> ")")+ findMirror masterUrl path file = do url <- if mirror == dlFpo then return masterUrl@@ -269,10 +280,15 @@ fileChecksum Nothing _ = return () fileChecksum (Just url) needChecksum = when ((needChecksum && checksum /= NoCheckSum) || checksum == CheckSum) $ do- let checksumfile = takeFileName url- exists <- doesFileExist checksumfile+ let checksumdir = ".dl-fedora-checksums"+ checksumfile = checksumdir </> takeFileName url+ exists <- do+ dirExists <- doesDirectoryExist checksumdir+ if dirExists then doesFileExist checksumfile+ else createDirectory checksumdir >> return False putStrLn "" unless exists $+ withCurrentDirectory checksumdir $ cmd_ "curl" ["-C", "-", "-s", "-S", "-O", url] pgp <- grep_ "PGP" checksumfile when (gpg && pgp) $ do@@ -344,14 +360,16 @@ | head t == '/' = s </> tail t s </> t = s <> "/" <> t -bootImage :: FilePath -> IO ()-bootImage img = do+bootImage :: FilePath -> String -> IO ()+bootImage img showdir = do let fileopts = case takeExtension img of ".iso" -> ["-boot", "d", "-cdrom"] _ -> [] mQemu <- findExecutable "qemu-kvm" case mQemu of- Just qemu ->- cmd_ qemu (["-m", "2048", "-usb", "-rtc", "base=localtime"] ++ fileopts ++ [img])+ Just qemu -> do+ let args = ["-m", "2048", "-rtc", "base=localtime"] ++ fileopts+ cmdN qemu (args ++ [showdir </> img])+ cmd_ qemu (args ++ [img]) Nothing -> error' "Need qemu to run image"
dl-fedora.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: dl-fedora-version: 0.7+version: 0.7.1 synopsis: Fedora image download tool description: Tool to download Fedora iso and image files -- can change to GPL-3.0-or-later with Cabal-2.2@@ -28,7 +28,7 @@ build-depends: base < 5, bytestring,- directory,+ directory >= 1.2.5.0, filepath, http-directory >= 0.1.5, http-types,@@ -37,6 +37,7 @@ simple-cmd >= 0.2.0, simple-cmd-args >= 0.1.2, text,+ time, unix, xdg-userdirs if impl(ghc<8.0)