@cryptotaxi247 / kubo / commits / bb7bf8187

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 +}