github.com/tilt-dev/wat@v0.0.2-0.20180626175338-9349b638e250/cli/wat/init.go (about) 1 package wat 2 3 import ( 4 "fmt" 5 "os" 6 7 "path/filepath" 8 9 "github.com/spf13/cobra" 10 "github.com/windmilleng/wat/cli/analytics" 11 "github.com/windmilleng/wat/os/ospath" 12 ) 13 14 const kWatDirName = ".wat" 15 16 var initCmd = &cobra.Command{ 17 Use: "init", 18 Short: "Make the current directory into a wat project root", 19 Run: initWat, 20 } 21 22 // Init makes the given directory into a wat project root (i.e. creates a .wat/ directory) 23 func Init(a analytics.Analytics, dir string) error { 24 a.Incr(statInit, map[string]string{tagDir: dir}) 25 path := filepath.Join(dir, kWatDirName) 26 return os.MkdirAll(path, permDir) 27 } 28 29 func initWat(cmd *cobra.Command, args []string) { 30 if ospath.IsDir(kWatDirName) { 31 fmt.Fprintf(os.Stderr, "%s directory already exists here, nothing to do.\n", kWatDirName) 32 return 33 } 34 35 ws, err := GetOrInitWatWorkspace() 36 if err != nil { 37 ws.Fatal("initWat", err) 38 } 39 40 fmt.Fprintln(os.Stderr, "Successfully initialized wat") 41 } 42 43 func GetOrInitWatWorkspace() (WatWorkspace, error) { 44 a := analytics.NewRemoteAnalytics(appNameWat) 45 wd, err := ospath.Realwd() 46 if err != nil { 47 // Even if there's an error, we guarantee that the returned workspace will have a valid Analytics 48 return WatWorkspace{a: a}, err 49 } 50 51 return GetOrInitWatWorkspaceAt(wd, a) 52 53 } 54 55 func GetOrInitWatWorkspaceAt(wd string, a analytics.Analytics) (WatWorkspace, error) { 56 // Even if there's an error, we guarantee that the returned workspace will have a valid Analytics 57 ws := WatWorkspace{a: a} 58 59 root, err := watRoot(wd) 60 if err == nil { 61 ws.root = root 62 return ws, nil 63 } 64 65 if err != ErrNoWatRoot { 66 return ws, err 67 } 68 69 err = Init(a, wd) 70 if err != nil { 71 return ws, err 72 } 73 74 err = MakeWatIgnore(wd) 75 if err != nil { 76 return ws, err 77 } 78 79 ws.root = wd 80 return ws, nil 81 }