// +build norwfs package dotgit import ( "fmt" "gopkg.in/src-d/go-git.v4/plumbing" ) // There are some filesystems that don't support opening files in RDWD mode. // In these filesystems the standard SetRef function can not be used as i // reads the reference file to check that it's not modified before updating it. // // This version of the function writes the reference without extra checks // making it compatible with these simple filesystems. This is usually not // a problem as they should be accessed by only one process at a time. func (d *DotGit) setRef(fileName, content string, old *plumbing.Reference) error { _, err := d.fs.Stat(fileName) if err == nil && old != nil { fRead, err := d.fs.Open(fileName) if err != nil { return err } ref, err := d.readReferenceFrom(fRead, old.Name().String()) fRead.Close() if err != nil { return err } if ref.Hash() != old.Hash() { return fmt.Errorf("reference has changed concurrently") } } f, err := d.fs.Create(fileName) if err != nil { return err } defer f.Close() _, err = f.Write([]byte(content)) return err }