aboutsummaryrefslogtreecommitdiff
path: root/serialize.go
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-05-20 16:42:59 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-05-20 16:42:59 +0900
commitb0d2e2f5b02f1b2cb4490852d7178c4642bddc09 (patch)
tree99cdfa71f84d88119d77881040d9d594ba65d8ab /serialize.go
parent750ae2ef5ac4a5f3ac23e35e58001273e8f837c1 (diff)
downloadkati-b0d2e2f5b02f1b2cb4490852d7178c4642bddc09.tar.gz
Add --use_cache flag
Diffstat (limited to 'serialize.go')
-rw-r--r--serialize.go38
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
+}