From bb7bf81873a3e9ceeb369d23807594530bd5b009 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Fri, 17 Apr 2015 02:26:53 -0700 Subject: [PATCH] put mfsr package back --- repo/fsrepo/migrations/mfsr.go | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 repo/fsrepo/migrations/mfsr.go diff --git a/repo/fsrepo/migrations/mfsr.go b/repo/fsrepo/migrations/mfsr.go new file mode 100644 index 000000000..c591f67ee --- /dev/null +++ b/repo/fsrepo/migrations/mfsr.go @@ -0,0 +1,61 @@ +package mfsr + +import ( + "fmt" + "io/ioutil" + "os" + "path" + "strings" +) + +const VersionFile = "version" + +type RepoPath string + +func (rp RepoPath) VersionFile() string { + return path.Join(string(rp), VersionFile) +} + +func (rp RepoPath) Version() (string, error) { + if rp == "" { + return "", fmt.Errorf("invalid repo path \"%s\"", rp) + } + + fn := rp.VersionFile() + if _, err := os.Stat(fn); os.IsNotExist(err) { + return "", VersionFileNotFound(rp) + } + + c, err := ioutil.ReadFile(fn) + if err != nil { + return "", err + } + + s := string(c) + s = strings.TrimSpace(s) + return s, nil +} + +func (rp RepoPath) CheckVersion(version string) error { + v, err := rp.Version() + if err != nil { + return err + } + + if v != version { + return fmt.Errorf("versions differ (expected: %s, actual:%s)", version, v) + } + + return nil +} + +func (rp RepoPath) WriteVersion(version string) error { + fn := rp.VersionFile() + return ioutil.WriteFile(fn, []byte(version+"\n"), 0644) +} + +type VersionFileNotFound string + +func (v VersionFileNotFound) Error() string { + return "no version file in repo at " + string(v) +}