github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/repo/fsrepo/migrations/mfsr.go (about)

     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  }