Advertisement
Cukor

Untitled

Jun 2nd, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 3.69 KB | None | 0 0
  1. // include Fake lib
  2. #r @"..\FAKE\tools\FakeLib.dll"
  3. #load @"..\fsharplibs\IniReader.fsx"
  4.  
  5. open System
  6. open System.Runtime
  7. open System.Text
  8. open System.Text.RegularExpressions
  9. open System.IO
  10. open System.Linq
  11.  
  12. open Core.Printf
  13. open Microsoft.FSharp.Reflection
  14.  
  15. open Fake
  16.  
  17. let (|?) lhs rhs = (if lhs = null then rhs else lhs)
  18. let fileToProcess = (Environment.GetCommandLineArgs().FirstOrDefault()) |? "deployment_plan.ini"
  19.  
  20. let fstArg = Environment.GetCommandLineArgs().ElementAtOrDefault(1)
  21. let config = if fstArg = null then None else Some fstArg
  22.  
  23. let sndArg = Environment.GetCommandLineArgs().ElementAtOrDefault(2)
  24. let folder = if sndArg = null then None else Some sndArg
  25.  
  26. let simpleTemplatingEngine
  27.     (openingSep: string)
  28.     (closingSep: string)
  29.     (data: Map<string, string>)
  30.     (file: string) =
  31.         printf "%s" (openingSep + "\s*\"([^\"]+)\"\s*,\s*\"([^\"]+)\"\s*" + closingSep)
  32.         let searchFor = new Regex(openingSep + "\"(\w+)\",\"(\w+)\"" + closingSep, RegexOptions.Compiled ||| RegexOptions.CultureInvariant)
  33.  
  34.         let me (mtch: Match) =
  35.             let key = mtch.Captures.[1].Value
  36.             let defaults = mtch.Captures.[2].Value
  37.  
  38.             let newValue = Map.tryFind key data
  39.             match newValue with
  40.                 | Some(found) -> found
  41.                 | _ -> defaults
  42.  
  43.         searchFor.Replace(file, new MatchEvaluator(me))
  44.  
  45. let processTemplate templateFile data outputFileName = File.WriteAllText( outputFileName, simpleTemplatingEngine (@"%%\(") (@"\)%%") data (File.ReadAllText(templateFile)) )
  46.  
  47. let parseList (str: string) =
  48.     str.Trim().Trim('"').Split(',').Select( fun f -> f.Trim().Trim('"') )
  49.  
  50. let clearGlobal (str: string) =
  51.     str.Trim().Trim('"')
  52.  
  53. //main essentialy...
  54. let build_folder_structure (config: IniReader.IniFile) (configOverride: string option) (folderSuffixOverride: string option)=
  55.     let getGlobal kv = config.Globals.FirstOrDefault((fun k v -> k.Trim().Compare(kv, StringComparer.OrdinalIgnoreCase))) |? failwithf "Missing global option: %s" kv
  56.     let getLocal sect kv =
  57.         config.Sections.FirstOrDefault(
  58.             (fun s k v -> s.Trim().Compare(sect, StringComparer.OrdinalIgnoreCase) && k.Trim().Compare(kv, StringComparer.OrdinalIgnoreCase) )
  59.         ) |? failwithf "Missing section %s option %s" sect kv
  60.  
  61.     let getOGlobal = config.Globals.FirstOrDefault((fun k v -> k.Trim().Compare(kv, StringComparer.OrdinalIgnoreCase))) |? ""
  62.     let getOLocal sect kv =
  63.         config.Sections.FirstOrDefault(
  64.             (fun s k v -> s.Trim().Compare(sect, StringComparer.OrdinalIgnoreCase) && k.Trim().Compare(kv, StringComparer.OrdinalIgnoreCase) )
  65.         ) |? ""
  66.  
  67.     let pages =  getGlobal "pages" |> parseList
  68.     let services = getGlobal "services" |> parseList
  69.  
  70.     if (List.isEmpty pages && List.isEmpty services) then
  71.         failwith "No pages or services are defined"
  72.  
  73.     let configuration = getGlobal "configuration" |> clearGlobal
  74.     let configurationfoldersuffix = getGlobal "configurationfoldersuffix" |> clearGlobal
  75.     let pagesfolder = getGlobal "configuration" |> clearGlobal
  76.     let servicesfolder = getGlobal "configuration" |> clearGlobal
  77.  
  78.     let pagespool= getOGlobal "pagespool" |> clearGlobal
  79.     let pagespoolusername= getOGlobal "pagespoolusername" |> clearGlobal
  80.     let pagespoolpassword= getOGlobal "pagespoolpassword" |> clearGlobal
  81.  
  82.     let defaultserviceboot= getOGlobal "defaultserviceboot" |> clearGlobal
  83.     let defaultserviceusername= getOGlobal "defaultserviceusername" |> clearGlobal
  84.     let defaultserviceuserpassword= getOGlobal "defaultserviceuserpassword" |> clearGlobal
  85.  
  86.    
  87.  
  88.  
  89. build_folder_structure (IniReader.readIni(fileToProcess)) config folder
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement