packages feed

group-by-date 0.0.1 → 0.1

raw patch · 3 files changed

+41/−26 lines, 3 filesdep +pathtypedep −directorydep −filepath

Dependencies added: pathtype

Dependencies removed: directory, filepath

Files

group-by-date.cabal view
@@ -1,5 +1,5 @@ Name:           group-by-date-Version:        0.0.1+Version:        0.1 License:        BSD3 License-File:   LICENSE Author:         Henning Thielemann <haskell@henning-thielemann.de>@@ -49,7 +49,7 @@ Build-Type:     Simple  Source-Repository this-  Tag:         0.0.1+  Tag:         0.1   Type:        darcs   Location:    http://hub.darcs.net/thielema/group-by-date/ @@ -61,9 +61,7 @@   Build-Depends:     hsshellscript >=3.1.0 && <3.4,     filemanip >=0.3.5 && <0.4,-    filepath >=1.3 && <1.5,-    -- version for directory needed for getModificationTime returning UTCTime-    directory >=1.2 && <1.4,+    pathtype >=0.8 && <0.9,     time >=1.5 && <1.9,     unix-compat >=0.3 && <0.5,     explicit-exception >=0.1 && <0.2,
src/GroupByDate.hs view
@@ -1,9 +1,10 @@ module GroupByDate where -import qualified System.Directory as Dir import qualified System.PosixCompat.Files as Files-import qualified System.FilePath as FilePath-import System.FilePath ((</>), )+import qualified System.Path.Directory as Dir+import qualified System.Path.PartClass as PartClass+import qualified System.Path as Path+import System.Path ((</>), ) import HsShellScript.Shell (shell_quote, )  import qualified Data.Time.Format as Time@@ -11,56 +12,71 @@  import Text.Printf (printf, ) +import Control.Monad.HT ((<=<), ) import Control.Monad (when, )  -folderFromStatus :: String -> Files.FileStatus -> FilePath+folderFromStatus :: String -> Files.FileStatus -> Either String Path.AbsRelDir folderFromStatus fmt =+   Path.parse .    Time.formatTime Time.defaultTimeLocale fmt .    posixSecondsToUTCTime . realToFrac .    Files.modificationTime -folderFromPath :: String -> FilePath -> IO FilePath+parsePathIO :: (PartClass.FileDir fd) => FilePath -> IO (Path.AbsRel fd)+parsePathIO = either (ioError . userError) return . Path.parse++folderFromPath ::+   (PartClass.AbsRel ar) => String -> Path.File ar -> IO Path.AbsRelDir folderFromPath fmt =-   fmap (Time.formatTime Time.defaultTimeLocale fmt) .+   parsePathIO . Time.formatTime Time.defaultTimeLocale fmt <=<    Dir.getModificationTime  -makeDstPath :: FilePath -> FilePath -> FilePath-makeDstPath src dst = dst </> FilePath.takeFileName src+makeDstPath :: Path.File ar0 -> Path.Dir ar1 -> Path.File ar1+makeDstPath src dst = dst </> Path.takeFileName src -commandFromPath :: Bool -> String -> String -> FilePath -> IO ()+infixl 0 $/++($/) ::+   (PartClass.AbsRel ar, PartClass.FileDir fd) =>+   (FilePath -> a) -> (Path.Path ar fd -> a)+f $/ path = f $ Path.toString path++commandFromPath ::+   (PartClass.AbsRel ar) => Bool -> String -> String -> Path.File ar -> IO () commandFromPath fullDst cmd fmt src = do    dst <- folderFromPath fmt src    printf "mkdir -p %s && %s %s %s\n"-      (shell_quote dst)+      (shell_quote $/ dst)       cmd-      (shell_quote src)-      (shell_quote $-       if fullDst then makeDstPath src dst else dst)+      (shell_quote $/ src)+      (if fullDst+         then shell_quote $/ makeDstPath src dst+         else shell_quote $/ dst) -movePath :: String -> FilePath -> IO ()+movePath :: (PartClass.AbsRel ar) => String -> Path.File ar -> IO () movePath fmt src = do    dst <- folderFromPath fmt src    Dir.createDirectoryIfMissing True dst    Dir.renameFile src (makeDstPath src dst) -copyPath :: String -> FilePath -> IO ()+copyPath :: (PartClass.AbsRel ar) => String -> Path.File ar -> IO () copyPath fmt src = do    dstDir <- folderFromPath fmt src    Dir.createDirectoryIfMissing True dstDir    let dst = makeDstPath src dstDir    Dir.copyFile src dst-   status <- Files.getFileStatus src-   Files.setFileTimes dst+   status <- Files.getFileStatus $/ src+   (Files.setFileTimes $/ dst)       (Files.accessTime status) (Files.modificationTime status)    when False $       -- this could fail, if the owner is 'root' e.g. for data on removeable media-      Files.setOwnerAndGroup dst+      (Files.setOwnerAndGroup $/ dst)          (Files.fileOwner status) (Files.fileGroup status) -symLinkPath :: String -> FilePath -> IO ()+symLinkPath :: (PartClass.AbsRel ar) => String -> Path.File ar -> IO () symLinkPath fmt src = do    dst <- folderFromPath fmt src    Dir.createDirectoryIfMissing True dst-   Files.createSymbolicLink src (makeDstPath src dst)+   Files.createSymbolicLink $/ src $/ makeDstPath src dst
src/Main.hs view
@@ -11,6 +11,7 @@  import qualified Control.Monad.Exception.Synchronous as Exc import Control.Monad.Trans.Class (lift, )+import Control.Monad.HT ((<=<), ) import Control.Monad (liftM, when, )  import Data.Foldable (forM_, )@@ -122,4 +123,4 @@                Copy -> GroupByDate.copyPath (optFormat flags)                SymLink -> GroupByDate.symLinkPath (optFormat flags) -      forM_ files $ lift . process+      forM_ files $ lift . (process <=< GroupByDate.parsePathIO)