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  }