From e8fc70d16ffabc4e9d5c5e28ed6ca746b75bfb6d Mon Sep 17 00:00:00 2001 From: luantranminh Date: Mon, 17 Jun 2024 11:36:27 +0700 Subject: [PATCH 1/4] atlasexec: use value receiver to keep original atlas client --- atlasexec/atlas.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atlasexec/atlas.go b/atlasexec/atlas.go index ec27380..f2f2392 100644 --- a/atlasexec/atlas.go +++ b/atlasexec/atlas.go @@ -188,9 +188,9 @@ func NewClient(workingDir, execPath string) (_ *Client, err error) { // }) // return err // }) -func (c *Client) WithWorkDir(dir string, fn func(*Client) error) error { +func (c Client) WithWorkDir(dir string, fn func(*Client) error) error { c.workingDir = dir - return fn(c) + return fn(&c) } // Login runs the 'login' command. From b26beac011532f90c72a1326ff365c0eae8743d0 Mon Sep 17 00:00:00 2001 From: luantranminh Date: Mon, 17 Jun 2024 16:53:04 +0700 Subject: [PATCH 2/4] atlasexec: add unit test --- atlasexec/working_dir_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/atlasexec/working_dir_test.go b/atlasexec/working_dir_test.go index 9dcfddf..6a79522 100644 --- a/atlasexec/working_dir_test.go +++ b/atlasexec/working_dir_test.go @@ -79,3 +79,15 @@ func TestContextExecer(t *testing.T) { require.Equal(t, "atlas.hcl\nmigrations\n", buf.String()) require.NoError(t, ce.Close()) } + +func TestMaintainOriginalWorkingDir(t *testing.T) { + dir := t.TempDir() + c, err := NewClient(dir, "atlas") + require.NoError(t, err) + require.Equal(t, dir, c.workingDir) + require.NoError(t, c.WithWorkDir("bar", func(c *Client) error { + require.Equal(t, "bar", c.workingDir) + return nil + })) + require.Equal(t, dir, c.workingDir, "The working directory should not be changed") +} From 954d50ab437b3977aa7c4155c2f016c1b79ee171 Mon Sep 17 00:00:00 2001 From: luantranminh Date: Mon, 17 Jun 2024 18:14:03 +0700 Subject: [PATCH 3/4] atlasexec: change workingDir property instead of creating new client --- atlasexec/atlas.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/atlasexec/atlas.go b/atlasexec/atlas.go index f2f2392..5144fc2 100644 --- a/atlasexec/atlas.go +++ b/atlasexec/atlas.go @@ -188,9 +188,12 @@ func NewClient(workingDir, execPath string) (_ *Client, err error) { // }) // return err // }) -func (c Client) WithWorkDir(dir string, fn func(*Client) error) error { +func (c *Client) WithWorkDir(dir string, fn func(*Client) error) error { + wd := c.workingDir + defer func() { c.workingDir = wd }() c.workingDir = dir - return fn(&c) + err := fn(c) + return err } // Login runs the 'login' command. From 2485de4cbeb3b6e3bae04e999c1922076236cb7d Mon Sep 17 00:00:00 2001 From: luantranminh Date: Mon, 17 Jun 2024 18:20:21 +0700 Subject: [PATCH 4/4] atlasexec: typo --- atlasexec/atlas.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/atlasexec/atlas.go b/atlasexec/atlas.go index 5144fc2..92ff5d9 100644 --- a/atlasexec/atlas.go +++ b/atlasexec/atlas.go @@ -192,8 +192,7 @@ func (c *Client) WithWorkDir(dir string, fn func(*Client) error) error { wd := c.workingDir defer func() { c.workingDir = wd }() c.workingDir = dir - err := fn(c) - return err + return fn(c) } // Login runs the 'login' command.