github.com/jbendotnet/noms@v0.0.0-20190904222105-c43e4293ea92/go/nbs/test/manifest_clobber.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 package main 6 7 import ( 8 "flag" 9 "log" 10 "os" 11 12 "golang.org/x/sys/unix" 13 ) 14 15 func main() { 16 flag.Parse() 17 18 if flag.NArg() < 3 { 19 log.Fatalln("Not enough arguments") 20 } 21 22 l, err := os.Create(flag.Arg(0)) 23 if err != nil { 24 log.Fatalln(err) 25 } 26 defer l.Close() 27 // lock released by closing l. 28 err = unix.Flock(int(l.Fd()), unix.LOCK_EX|unix.LOCK_NB) 29 if err == unix.EWOULDBLOCK { 30 return 31 } 32 if err != nil { 33 log.Fatalln(err) 34 } 35 36 // Clobber manifest file at flag.Arg(1) with contents at flag.Arg(2) 37 m, err := os.Create(flag.Arg(1)) 38 if err != nil { 39 log.Fatalln(err) 40 } 41 defer m.Close() 42 if _, err = m.WriteString(flag.Arg(2)); err != nil { 43 log.Fatalln(err) 44 } 45 }