@@ -34,28 +34,41 @@ type ResolveDependenciesResult
3434 member _.Roots = roots
3535
3636type Configuration =
37- { Verbose: bool
37+ { IsDefault: bool
38+ Verbose: bool
3839 Logger: ( string -> unit ) option
3940 OutputRootDir: string
4041 ScriptOutputRootDir: string option
4142 ScriptOutputVersionDir: string option }
4243
43- module Configure =
44- let mutable private data =
45-
46- let outputRootDir = Path.Combine( Path.GetTempPath(), " .fsch" )
47-
48- { Verbose = false
44+ static member Default =
45+ { IsDefault = true
46+ Verbose = false
4947 Logger = None
50- OutputRootDir = outputRootDir
48+ OutputRootDir = Path.Combine ( Path.GetTempPath (), " .fsch " )
5149 ScriptOutputRootDir = None
5250 ScriptOutputVersionDir = None }
5351
54- let private lockObj = obj ()
52+ module Configure =
53+
54+ let private data : ConcurrentDictionary < string , Configuration > =
55+ ConcurrentDictionary< string, Configuration>()
56+
57+ let update ( key : string ) ( update : Configuration -> Configuration ) : unit =
58+
59+ data.AddOrUpdate(
60+ key,
61+ ( fun _ ->
62+ { update Configuration.Default with
63+ IsDefault = false }),
64+ ( fun _ old -> { update old with IsDefault = false })
65+ )
5566
56- let update f = lock lockObj ( fun () -> data <- f data )
67+ |> ignore
5768
58- let internal render () = data
69+ let internal render key =
70+ let exists , value = data.TryGetValue key
71+ if exists then value else Configuration.Default
5972
6073
6174[<RequireQualifiedAccess>]
@@ -72,10 +85,6 @@ module PaketPaths =
7285type PaketDependencyManager ( outputDirectory : string option , useResultsCache : bool ) =
7386
7487 let resultCache = ConcurrentDictionary< string, ResolveDependenciesResult>()
75-
76- let config = Configure.render()
77- let log = config.Logger |> Option.defaultValue ignore
78-
7988
8089 member _.Name = " paket"
8190 member _.Key = " paket"
@@ -96,10 +105,20 @@ type PaketDependencyManager(outputDirectory: string option, useResultsCache: boo
96105 timeout : int
97106 ) : obj =
98107
108+ let config = Configure.render scriptName
109+ let log = config.Logger |> Option.defaultValue ignore
110+
111+ if config.IsDefault then
112+ log " Using default config"
113+ else
114+ log " Using config override"
99115
100116 Logging.verbose <- config.Verbose
101117 Logging.verboseWarnings <- config.Verbose
102- use _ = Paket.Logging.event.Publish |> Observable.subscribe ( fun ( e : Logging.Trace ) -> log e.Text)
118+
119+ use _ =
120+ Paket.Logging.event.Publish
121+ |> Observable.subscribe ( fun ( e : Logging.Trace ) -> log e.Text)
103122
104123 let getCacheKey ( packageManagerTextLines : ( string * string ) seq ) ( tfm : string ) ( rid : string ) =
105124 let content =
@@ -117,18 +136,19 @@ type PaketDependencyManager(outputDirectory: string option, useResultsCache: boo
117136 let hashes = Hash.fileHash scriptName None
118137 hashes.HashedScriptDir config.OutputRootDir)
119138
120- let resultCacheDir = Path.Combine( workDir, " resolve-cache" );
121-
139+ let resultCacheDir = Path.Combine( workDir, " resolve-cache" )
140+
122141 Directory.CreateDirectory resultCacheDir |> ignore
123142
124143 Directory.EnumerateFiles resultCacheDir
125- |> Seq.map ( fun f -> Path.GetFileNameWithoutExtension f, File.ReadAllText f)
126- |> Seq.iter ( fun ( key , content ) ->
127- let entry = JsonSerializer.Deserialize< ResolveDependenciesResult> content
128- match entry with
129- | null -> ()
130- | validEntry -> resultCache.TryAdd( key, validEntry) |> ignore)
131-
144+ |> Seq.map ( fun f -> Path.GetFileNameWithoutExtension f, File.ReadAllText f)
145+ |> Seq.iter ( fun ( key , content ) ->
146+ let entry = JsonSerializer.Deserialize< ResolveDependenciesResult> content
147+
148+ match entry with
149+ | null -> ()
150+ | validEntry -> resultCache.TryAdd( key, validEntry) |> ignore)
151+
132152 let mutable isCached = true
133153 let cacheKey = getCacheKey packageManagerTextLines tfm runtimeIdentifier
134154
0 commit comments