diff options
| author | Joey Hess <joey@kitenet.net> | 2014-05-14 19:41:05 -0400 |
|---|---|---|
| committer | Joey Hess <joey@kitenet.net> | 2014-05-14 19:41:05 -0400 |
| commit | 7115d1ec162b4059b3e8e8f84bd8d5898c1db025 (patch) | |
| tree | 42c1cce54e890e1d56484794ab33129132d8fee2 /Propellor/Property/File.hs | |
| parent | ffe371a9d42cded461236e972a24a142419d7fc4 (diff) | |
moved source code to src
This is to work around OSX's brain-damange regarding filename case
insensitivity.
Avoided moving config.hs, because it's a config file. Put in a symlink to
make build work.
Diffstat (limited to 'Propellor/Property/File.hs')
| -rw-r--r-- | Propellor/Property/File.hs | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/Propellor/Property/File.hs b/Propellor/Property/File.hs deleted file mode 100644 index 0b060177..00000000 --- a/Propellor/Property/File.hs +++ /dev/null @@ -1,94 +0,0 @@ -module Propellor.Property.File where - -import Propellor -import Utility.FileMode - -import System.Posix.Files -import System.PosixCompat.Types - -type Line = String - --- | Replaces all the content of a file. -hasContent :: FilePath -> [Line] -> Property -f `hasContent` newcontent = fileProperty ("replace " ++ f) - (\_oldcontent -> newcontent) f - --- | Ensures a file has contents that comes from PrivData. --- --- The file's permissions are preserved if the file already existed. --- Otherwise, they're set to 600. -hasPrivContent :: FilePath -> Property -hasPrivContent f = property desc $ withPrivData (PrivFile f) $ \privcontent -> - ensureProperty $ fileProperty' writeFileProtected desc - (\_oldcontent -> lines privcontent) f - where - desc = "privcontent " ++ f - --- | Leaves the file world-readable. -hasPrivContentExposed :: FilePath -> Property -hasPrivContentExposed f = hasPrivContent f `onChange` - mode f (combineModes (ownerWriteMode:readModes)) - --- | Ensures that a line is present in a file, adding it to the end if not. -containsLine :: FilePath -> Line -> Property -f `containsLine` l = f `containsLines` [l] - -containsLines :: FilePath -> [Line] -> Property -f `containsLines` l = fileProperty (f ++ " contains:" ++ show l) go f - where - go ls - | all (`elem` ls) l = ls - | otherwise = ls++l - --- | Ensures that a line is not present in a file. --- Note that the file is ensured to exist, so if it doesn't, an empty --- file will be written. -lacksLine :: FilePath -> Line -> Property -f `lacksLine` l = fileProperty (f ++ " remove: " ++ l) (filter (/= l)) f - --- | Removes a file. Does not remove symlinks or non-plain-files. -notPresent :: FilePath -> Property -notPresent f = check (doesFileExist f) $ property (f ++ " not present") $ - makeChange $ nukeFile f - -fileProperty :: Desc -> ([Line] -> [Line]) -> FilePath -> Property -fileProperty = fileProperty' writeFile -fileProperty' :: (FilePath -> String -> IO ()) -> Desc -> ([Line] -> [Line]) -> FilePath -> Property -fileProperty' writer desc a f = property desc $ go =<< liftIO (doesFileExist f) - where - go True = do - ls <- liftIO $ lines <$> readFile f - let ls' = a ls - if ls' == ls - then noChange - else makeChange $ viaTmp updatefile f (unlines ls') - go False = makeChange $ writer f (unlines $ a []) - - -- viaTmp makes the temp file mode 600. - -- Replicate the original file's owner and mode. - updatefile f' content = do - writer f' content - s <- getFileStatus f - setFileMode f' (fileMode s) - setOwnerAndGroup f' (fileOwner s) (fileGroup s) - --- | Ensures a directory exists. -dirExists :: FilePath -> Property -dirExists d = check (not <$> doesDirectoryExist d) $ property (d ++ " exists") $ - makeChange $ createDirectoryIfMissing True d - --- | Ensures that a file/dir has the specified owner and group. -ownerGroup :: FilePath -> UserName -> GroupName -> Property -ownerGroup f owner group = property (f ++ " owner " ++ og) $ do - r <- ensureProperty $ cmdProperty "chown" [og, f] - if r == FailedChange - then return r - else noChange - where - og = owner ++ ":" ++ group - --- | Ensures that a file/dir has the specfied mode. -mode :: FilePath -> FileMode -> Property -mode f v = property (f ++ " mode " ++ show v) $ do - liftIO $ modifyFileMode f (\_old -> v) - noChange |
