packages feed

dl-fedora 0.7 → 0.7.1

raw patch · 3 files changed

+46/−22 lines, 3 filesdep +time

Dependencies added: time

Files

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)