diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b82e6c1..ff79edb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change log +## 0.0.4 - 2017-02-07 +### Added +* `whalebrew edit` command for editing packages + +### Fixed +* Files being written as root + ## 0.0.3 - 2017-01-30 ### Fixed @@ -17,4 +24,3 @@ ## 0.0.1 - 2017-01-26 Initial release. - diff --git a/README.md b/README.md index 8f33bdb0..6ededb8e 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ First, [install Docker](https://docs.docker.com/engine/installation/). The easie Next, on macOS and Linux: - curl -L "https://github.com/bfirsh/whalebrew/releases/download/0.0.3/whalebrew-$(uname -s)-$(uname -m)" -o /usr/local/bin/whalebrew; chmod +x /usr/local/bin/whalebrew + curl -L "https://github.com/bfirsh/whalebrew/releases/download/0.0.4/whalebrew-$(uname -s)-$(uname -m)" -o /usr/local/bin/whalebrew; chmod +x /usr/local/bin/whalebrew Windows support is theoretically possible, but not implemented yet. diff --git a/client/client.go b/client/client.go new file mode 100644 index 00000000..2b683dc0 --- /dev/null +++ b/client/client.go @@ -0,0 +1,18 @@ +package client + +import ( + "github.com/docker/docker/client" +) + +// DefaultVersion is the Engine API version used by Whalebrew +const DefaultVersion string = "1.20" + +// NewClient returns a Docker client configured for Whalebrew +func NewClient() (*client.Client, error) { + cli, err := client.NewEnvClient() + if err != nil { + return cli, err + } + cli.UpdateClientVersion(DefaultVersion) + return cli, nil +} diff --git a/cmd/edit.go b/cmd/edit.go new file mode 100644 index 00000000..51e5b72b --- /dev/null +++ b/cmd/edit.go @@ -0,0 +1,55 @@ +package cmd + +import ( + "os" + "os/exec" + "path" + "syscall" + + "github.com/bfirsh/whalebrew/packages" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func init() { + RootCmd.AddCommand(editCommand) +} + +var editCommand = &cobra.Command{ + Use: "edit PACKAGENAME", + Short: "Edit a package file", + Long: "Edit a package file using your default editor ($EDITOR).", + DisableFlagParsing: true, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return cmd.Help() + } + + pkgName := args[0] + pm := packages.NewPackageManager(viper.GetString("install_path")) + _, err := pm.Load(pkgName) + if err != nil { + return err + } + + editor, ok := os.LookupEnv("EDITOR") + if !ok { + editor, ok = os.LookupEnv("GIT_EDITOR") + if !ok { + editor = "vi" + } + } + + editorPath, err := exec.LookPath(editor) + if err != nil { + return err + } + + editorArgs := []string{ + editorPath, + path.Join(pm.InstallPath, pkgName), + } + + return syscall.Exec(editorPath, editorArgs, os.Environ()) + }, +} diff --git a/cmd/install.go b/cmd/install.go index f46c32c3..0eaad229 100644 --- a/cmd/install.go +++ b/cmd/install.go @@ -7,8 +7,9 @@ import ( "os/exec" "path" + "github.com/bfirsh/whalebrew/client" "github.com/bfirsh/whalebrew/packages" - "github.com/docker/docker/client" + dockerClient "github.com/docker/docker/client" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -34,13 +35,13 @@ var installCommand = &cobra.Command{ imageName := args[0] - cli, err := client.NewEnvClient() + cli, err := client.NewClient() if err != nil { return err } imageInspect, _, err := cli.ImageInspectWithRaw(context.Background(), imageName) if err != nil { - if client.IsErrNotFound(err) { + if dockerClient.IsErrNotFound(err) { fmt.Printf("Unable to find image '%s' locally\n", imageName) if err = pullImage(imageName); err != nil { return err diff --git a/cmd/run.go b/cmd/run.go index 8a049e40..d3ca1873 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -72,6 +72,14 @@ var runCommand = &cobra.Command{ dockerArgs = append(dockerArgs, "-p") dockerArgs = append(dockerArgs, portmap) } + + user, err := user.Current() + if err != nil { + return err + } + dockerArgs = append(dockerArgs, "-u") + dockerArgs = append(dockerArgs, user.Uid + ":" + user.Gid) + dockerArgs = append(dockerArgs, pkg.Image) dockerArgs = append(dockerArgs, args[1:]...) diff --git a/cmd/search.go b/cmd/search.go index 163b2a65..05ea970b 100644 --- a/cmd/search.go +++ b/cmd/search.go @@ -5,8 +5,8 @@ import ( "fmt" "sort" + "github.com/bfirsh/whalebrew/client" "github.com/docker/docker/api/types" - "github.com/docker/docker/client" "github.com/spf13/cobra" ) @@ -23,7 +23,7 @@ var searchCommand = &cobra.Command{ return fmt.Errorf("Only one search term is supported") } - cli, err := client.NewEnvClient() + cli, err := client.NewClient() if err != nil { return err } diff --git a/version/version.go b/version/version.go index 3266104e..473d7ca6 100644 --- a/version/version.go +++ b/version/version.go @@ -1,4 +1,4 @@ package version // Version is the current Whalebrew version -const Version = "0.0.3" +const Version = "0.0.4"