diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-05-20 16:42:59 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-05-20 16:42:59 +0900 |
commit | b0d2e2f5b02f1b2cb4490852d7178c4642bddc09 (patch) | |
tree | 99cdfa71f84d88119d77881040d9d594ba65d8ab /serialize.go | |
parent | 750ae2ef5ac4a5f3ac23e35e58001273e8f837c1 (diff) | |
download | kati-b0d2e2f5b02f1b2cb4490852d7178c4642bddc09.tar.gz |
Add --use_cache flag
Diffstat (limited to 'serialize.go')
-rw-r--r-- | serialize.go | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/serialize.go b/serialize.go index 7bcff03..485ca05 100644 --- a/serialize.go +++ b/serialize.go @@ -7,6 +7,7 @@ import ( "encoding/json" "fmt" "io" + "net/url" "os" "sort" "strconv" @@ -209,7 +210,7 @@ func MakeSerializableVars(vars Vars) (r map[string]SerializableVar) { return r } -func MakeSerializableGraph(g DepGraph, roots []string) SerializableGraph { +func MakeSerializableGraph(g *DepGraph, roots []string) SerializableGraph { ns := NewDepNodesSerializer() ns.SerializeDepNodes(g.nodes) v := MakeSerializableVars(g.vars) @@ -224,7 +225,7 @@ func MakeSerializableGraph(g DepGraph, roots []string) SerializableGraph { } } -func DumpDepGraphAsJson(g DepGraph, filename string, roots []string) { +func DumpDepGraphAsJson(g *DepGraph, filename string, roots []string) { sg := MakeSerializableGraph(g, roots) o, err := json.MarshalIndent(sg, " ", " ") if err != nil { @@ -237,7 +238,7 @@ func DumpDepGraphAsJson(g DepGraph, filename string, roots []string) { f.Write(o) } -func DumpDepGraph(g DepGraph, filename string, roots []string) { +func DumpDepGraph(g *DepGraph, filename string, roots []string) { f, err := os.Create(filename) if err != nil { panic(err) @@ -251,6 +252,21 @@ func DumpDepGraph(g DepGraph, filename string, roots []string) { LogStats("serialize output time: %q", time.Now().Sub(startTime)) } +func GetCacheFilename(mk string, roots []string) string { + filename := ".kati_cache." + mk + for _, r := range roots { + filename += "." + r + } + return url.QueryEscape(filename) +} + +func DumpDepGraphCache(g *DepGraph, roots []string) { + if len(g.readMks) == 0 { + panic("No Makefile is read") + } + DumpDepGraph(g, GetCacheFilename(g.readMks[0], roots), roots) +} + func DeserializeSingleChild(sv SerializableVar) Value { if len(sv.Children) != 1 { panic(fmt.Sprintf("unexpected number of children: %q", sv)) @@ -492,13 +508,13 @@ func showSerializedGraphStats(g SerializableGraph) { showSerializedTargetsStats(g.Targets) } -func DeserializeGraph(g SerializableGraph) DepGraph { +func DeserializeGraph(g SerializableGraph) *DepGraph { if katiLogFlag || katiStatsFlag { showSerializedGraphStats(g) } nodes := DeserializeNodes(g) vars := DeserializeVars(g.Vars) - return DepGraph{ + return &DepGraph{ nodes: nodes, vars: vars, readMks: g.ReadMks, @@ -506,7 +522,7 @@ func DeserializeGraph(g SerializableGraph) DepGraph { } } -func LoadDepGraphFromJson(filename string) DepGraph { +func LoadDepGraphFromJson(filename string) *DepGraph { f, err := os.Open(filename) if err != nil { panic(err) @@ -521,7 +537,7 @@ func LoadDepGraphFromJson(filename string) DepGraph { return DeserializeGraph(g) } -func LoadDepGraph(filename string) DepGraph { +func LoadDepGraph(filename string) *DepGraph { f, err := os.Open(filename) if err != nil { panic(err) @@ -535,3 +551,11 @@ func LoadDepGraph(filename string) DepGraph { } return DeserializeGraph(g) } + +func MaybeLoadDepGraph(makefile string, roots []string) *DepGraph { + filename := GetCacheFilename(makefile, roots) + if exists(filename) { + return LoadDepGraph(filename) + } + return nil +} |