diff --git a/atlasexec/atlas.go b/atlasexec/atlas.go index ec27380..92ff5d9 100644 --- a/atlasexec/atlas.go +++ b/atlasexec/atlas.go @@ -189,6 +189,8 @@ func NewClient(workingDir, execPath string) (_ *Client, err error) { // return err // }) 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) } 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") +}