/
run_state_to_disk.go
50 lines (44 loc) · 1.24 KB
/
run_state_to_disk.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package steps
import (
"encoding/json"
"io/ioutil"
"os"
"path"
"regexp"
"github.com/Originate/exit"
"github.com/Originate/git-town/src/git"
"github.com/Originate/git-town/src/util"
)
// LoadPreviousRunState loads the run state from disk if it exists or creates a new run state
func LoadPreviousRunState() *RunState {
filename := getRunResultFilename()
if util.DoesFileExist(filename) {
var runState RunState
content, err := ioutil.ReadFile(filename)
exit.If(err)
err = json.Unmarshal(content, &runState)
exit.If(err)
return &runState
}
return nil
}
// DeletePreviousRunState deletes the previous run state from disk
func DeletePreviousRunState() {
filename := getRunResultFilename()
if util.DoesFileExist(filename) {
exit.If(os.Remove(filename))
}
}
// SaveRunState saves the run state to disk
func SaveRunState(runState *RunState) {
content, err := json.MarshalIndent(runState, "", " ")
exit.If(err)
filename := getRunResultFilename()
err = ioutil.WriteFile(filename, content, 0644)
exit.If(err)
}
func getRunResultFilename() string {
replaceCharacterRegexp := regexp.MustCompile("[[:^alnum:]]")
directory := replaceCharacterRegexp.ReplaceAllString(git.GetRootDirectory(), "-")
return path.Join(os.TempDir(), directory)
}