From 0b9ba0dbfa3ddfa7a921e130843fb3cc98c702e5 Mon Sep 17 00:00:00 2001 From: Alexander Krasnukhin Date: Tue, 7 Feb 2017 00:38:22 +0100 Subject: [PATCH 1/6] Add cmd/edit.go --- cmd/edit.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 cmd/edit.go diff --git a/cmd/edit.go b/cmd/edit.go new file mode 100644 index 00000000..310b3030 --- /dev/null +++ b/cmd/edit.go @@ -0,0 +1,54 @@ +package cmd + +import ( + "os" + "os/exec" + "syscall" + "path" + + "github.com/bfirsh/whalebrew/packages" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func init() { + RootCmd.AddCommand(editCommand) +} + +var editCommand = &cobra.Command{ + Use: "edit PACKAGEPATH", + Short: "Edit a package executable", + 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()) + }, +} From 0dfb90b9adb8949e08c0c8aadbaf54ccb1483277 Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Tue, 7 Feb 2017 14:11:56 +0100 Subject: [PATCH 2/6] Use older Engine API version for compatibility Fixes #5 --- client/client.go | 18 ++++++++++++++++++ cmd/install.go | 7 ++++--- cmd/search.go | 4 ++-- 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 client/client.go 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/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/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 } From 8c45e5ebf15c3301a5fe21a4f42d52af0d0532ae Mon Sep 17 00:00:00 2001 From: Ollie Snowden Date: Tue, 7 Feb 2017 11:17:13 +0000 Subject: [PATCH 3/6] Use executing users' permissions (for files etc.) Set the uid and primary gid as the user executing the command. For example, if the "ubuntu" user is a member of the docker group, then the permissions one might expect with "whalebrew/wget" might be ubuntu:ubuntu rather than root:root. --- cmd/run.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/run.go b/cmd/run.go index dfdf55eb..581af953 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -70,6 +70,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:]...) From 62eeb16bd3b08bea316241771f57f6776eedc583 Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Tue, 7 Feb 2017 19:32:44 +0100 Subject: [PATCH 4/6] Update docs for edit --- cmd/edit.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cmd/edit.go b/cmd/edit.go index 310b3030..51e5b72b 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -3,8 +3,8 @@ package cmd import ( "os" "os/exec" - "syscall" "path" + "syscall" "github.com/bfirsh/whalebrew/packages" "github.com/spf13/cobra" @@ -16,8 +16,9 @@ func init() { } var editCommand = &cobra.Command{ - Use: "edit PACKAGEPATH", - Short: "Edit a package executable", + 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 { From a48818763d06001ac2c3f347bc8330b96afe0e7c Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Tue, 7 Feb 2017 20:11:10 +0100 Subject: [PATCH 5/6] Release 0.0.4 --- CHANGELOG.md | 8 +++++++- version/version.go | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) 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/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" From e7e64279266fc2166bac6e1c6bcee1cd8e16b0ac Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Tue, 7 Feb 2017 20:13:10 +0100 Subject: [PATCH 6/6] Update readme to 0.0.4 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0fb8284c..df5e24a6 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.