Skip to content
Snippets Groups Projects
Select Git revision
  • 18b3d8b135df700cd2fe360cbaa43fa410ed95b5
  • develop default protected
  • ical-export
  • feature/audit_log
  • fix/index
  • badge-redeem-404
  • 720-schedule_source
  • room-docu
  • chore/event-views
  • 511-schedule-foo-fixed
  • 607-schedule-versions
  • deploy/curl-verbose
  • fix/public-badge-access-rights
  • 445-schedule-redirects
  • 623-wiki-im-baustellenmodus-sollte-mal-als-wiki-admin-trotzdem-seiten-anlegen-bearbeiten-konnen
  • fix/registration_mail_subject
  • feature/conference-query-set
  • feature/568-habitatmanagement
  • feat/unit-integration-tests
  • camp23-prod
  • production
  • prod-2024-12-27_20-15
  • prod-2024-12-27_16-37
  • prod-2024-12-27_16-01
  • prod-2024-12-27_13-29
  • prod-2024-12-27_00-34
  • prod-2024-12-26_21-45
  • prod-2024-12-26_13-12
  • prod-2024-12-26_00-21
  • prod-2024-12-25_21-04
  • prod-2024-12-25_15-54
  • prod-2024-12-25_01-29
  • prod-2024-12-24_14-48
  • prod-2024-12-23_23-39
  • prod-2024-12-22_21-12
  • prod-2024-12-22_17-25
  • prod-2024-12-22_01-34
  • prod-2024-12-22_00-55
  • prod-2024-12-21_13-42
  • prod-2024-12-21_10-44
  • prod-2024-12-20_12-25
41 results

__init__.py

Blame
  • Forked from hub / hub
    Source project has a limited visibility.
    WriteRepo.hs 2.68 KiB
    {-# LANGUAGE LambdaCase          #-}
    {-# LANGUAGE ScopedTypeVariables #-}
    
    
    -- | Module for writing an already linted map Repository back out again.
    module WriteRepo where
    
    import           CheckDir               (DirResult (..), resultIsFatal)
    import           CheckMap               (MapResult (..))
    import           Control.Monad          (forM_, unless)
    import           Control.Monad.Extra    (ifM)
    import           Data.Aeson             (encodeFile)
    import           Data.Map.Strict        (toList)
    import           Data.Maybe             (mapMaybe)
    import           Data.Set               (Set)
    import qualified Data.Set               as S
    import           LintConfig             (LintConfig (configDontCopyAssets),
                                             LintConfig')
    import           Paths                  (normalise)
    import           System.Directory.Extra (copyFile, createDirectoryIfMissing,
                                             doesDirectoryExist)
    import           System.Exit            (ExitCode (..))
    import           System.FilePath        (takeDirectory)
    import qualified System.FilePath        as FP
    import           System.FilePath.Posix  ((</>))
    import           Types                  (Dep (Local))
    
    
    
    writeAdjustedRepository :: LintConfig' -> FilePath -> FilePath -> DirResult -> IO ExitCode
    writeAdjustedRepository config inPath outPath result
      | resultIsFatal config result =
          pure (ExitFailure 1)
      | otherwise = do
          ifM (doesDirectoryExist outPath) (pure (ExitFailure 2)) $ do
            createDirectoryIfMissing True outPath
    
            -- write out all maps
            forM_ (toList $ dirresultMaps result) $ \(path,out) -> do
              createDirectoryIfMissing True (takeDirectory (outPath </> path))
              encodeFile (outPath </> path) $ mapresultAdjusted out
    
            unless (configDontCopyAssets config) $ do
              -- collect asset dependencies of maps
              -- TODO: its kinda weird doing that here, tbh
              let localdeps :: Set FilePath =
                    S.fromList . concatMap
                      (\(mappath,mapresult) ->
                         let mapdir = takeDirectory mappath in
                         mapMaybe (\case
                           Local path -> Just . normalise mapdir $ path
                           _          -> Nothing)
                         $ mapresultDepends mapresult)
                    . toList $ dirresultMaps result
    
              -- copy all assets
              forM_ localdeps $ \path ->
                let
                  assetPath = FP.normalise $ inPath </> path
                  newPath = FP.normalise $ outPath </> path
                in do
                  createDirectoryIfMissing True (takeDirectory newPath)
                  copyFile assetPath newPath
    
            pure ExitSuccess