put mfsr package back
Jeromy committed
Apr 17, 2015 at 02:26 UTC
bb7bf81873a3e9ceeb369d23807594530bd5b009
1 file changed
+61
repo/fsrepo/migrations/mfsr.go
new
+61
@@ -0,0 +1,61 @@
1
+package mfsr
2
+
3
+import (
4
+ "fmt"
5
+ "io/ioutil"
6
+ "os"
7
+ "path"
8
+ "strings"
9
+)
10
+
11
+const VersionFile = "version"
12
+
13
+type RepoPath string
14
+
15
+func (rp RepoPath) VersionFile() string {
16
+ return path.Join(string(rp), VersionFile)
17
+}
18
+
19
+func (rp RepoPath) Version() (string, error) {
20
+ if rp == "" {
21
+ return "", fmt.Errorf("invalid repo path \"%s\"", rp)
22
+ }
23
+
24
+ fn := rp.VersionFile()
25
+ if _, err := os.Stat(fn); os.IsNotExist(err) {
26
+ return "", VersionFileNotFound(rp)
27
+ }
28
+
29
+ c, err := ioutil.ReadFile(fn)
30
+ if err != nil {
31
+ return "", err
32
+ }
33
+
34
+ s := string(c)
35
+ s = strings.TrimSpace(s)
36
+ return s, nil
37
+}
38
+
39
+func (rp RepoPath) CheckVersion(version string) error {
40
+ v, err := rp.Version()
41
+ if err != nil {
42
+ return err
43
+ }
44
+
45
+ if v != version {
46
+ return fmt.Errorf("versions differ (expected: %s, actual:%s)", version, v)
47
+ }
48
+
49
+ return nil
50
+}
51
+
52
+func (rp RepoPath) WriteVersion(version string) error {
53
+ fn := rp.VersionFile()
54
+ return ioutil.WriteFile(fn, []byte(version+"\n"), 0644)
55
+}
56
+
57
+type VersionFileNotFound string
58
+
59
+func (v VersionFileNotFound) Error() string {
60
+ return "no version file in repo at " + string(v)
61
+}