From a099acf5f59a2b849a192f562562b47c1463aaa8 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Mon, 17 Feb 2020 09:12:32 -0300 Subject: [PATCH] fix: snap autocompletions (#1346) closes #1343 Signed-off-by: Carlos Alexandro Becker --- internal/pipe/snapcraft/snapcraft.go | 29 +++++++++---------- internal/pipe/snapcraft/snapcraft_test.go | 11 +++++-- .../{ => testdata}/mybin-completer.bash | 0 3 files changed, 23 insertions(+), 17 deletions(-) rename internal/pipe/snapcraft/{ => testdata}/mybin-completer.bash (100%) diff --git a/internal/pipe/snapcraft/snapcraft.go b/internal/pipe/snapcraft/snapcraft.go index 93ac5a4d6c3..2c3d197a201 100644 --- a/internal/pipe/snapcraft/snapcraft.go +++ b/internal/pipe/snapcraft/snapcraft.go @@ -210,7 +210,6 @@ func create(ctx *context.Context, snap config.Snapcraft, arch string, binaries [ for _, binary := range binaries { // build the binaries and link resources - completerPath := "" destBinaryPath := filepath.Join(primeDir, filepath.Base(binary.Path)) log.WithField("src", binary.Path). WithField("dst", destBinaryPath). @@ -223,19 +222,6 @@ func create(ctx *context.Context, snap config.Snapcraft, arch string, binaries [ return errors.Wrap(err, "failed to change binary permissions") } - if completerPath != "" { - destCompleterPath := filepath.Join(primeDir, filepath.Base(completerPath)) - log.WithField("src", completerPath). - WithField("dst", destCompleterPath). - Debug("linking") - if err := os.Link(completerPath, destCompleterPath); err != nil { - return errors.Wrap(err, "failed to link completer") - } - if err := os.Chmod(destCompleterPath, 0444); err != nil { - return errors.Wrap(err, "failed to change completer permissions") - } - } - // setup the apps: directive for each binary for name, config := range snap.Apps { log.WithField("path", binary.Path). @@ -252,7 +238,20 @@ func create(ctx *context.Context, snap config.Snapcraft, arch string, binaries [ } if config.Completer != "" { - appMetadata.Completer = filepath.Base(config.Completer) + destCompleterPath := filepath.Join(primeDir, config.Completer) + if err := os.MkdirAll(filepath.Dir(destCompleterPath), 0755); err != nil { + return errors.Wrapf(err, "failed to create folder") + } + log.WithField("src", config.Completer). + WithField("dst", destCompleterPath). + Debug("linking") + if err := os.Link(config.Completer, destCompleterPath); err != nil { + return errors.Wrap(err, "failed to link completer") + } + if err := os.Chmod(destCompleterPath, 0444); err != nil { + return errors.Wrap(err, "failed to change completer permissions") + } + appMetadata.Completer = config.Completer } metadata.Apps[name] = appMetadata diff --git a/internal/pipe/snapcraft/snapcraft_test.go b/internal/pipe/snapcraft/snapcraft_test.go index 9263dd73667..d191f444653 100644 --- a/internal/pipe/snapcraft/snapcraft_test.go +++ b/internal/pipe/snapcraft/snapcraft_test.go @@ -46,6 +46,7 @@ func TestRunPipeMissingInfo(t *testing.T) { func TestRunPipe(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") assert.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") assert.NoError(t, os.Mkdir(dist, 0755)) assert.NoError(t, err) @@ -88,6 +89,7 @@ func TestRunPipe(t *testing.T) { func TestRunPipeInvalidNameTemplate(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") assert.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") assert.NoError(t, os.Mkdir(dist, 0755)) assert.NoError(t, err) @@ -112,6 +114,7 @@ func TestRunPipeInvalidNameTemplate(t *testing.T) { func TestRunPipeWithName(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") assert.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") assert.NoError(t, os.Mkdir(dist, 0755)) assert.NoError(t, err) @@ -148,6 +151,7 @@ func TestRunPipeWithName(t *testing.T) { func TestRunPipeWithBinaryInDir(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") assert.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") assert.NoError(t, os.Mkdir(dist, 0755)) assert.NoError(t, err) @@ -182,6 +186,7 @@ func TestRunPipeWithBinaryInDir(t *testing.T) { func TestRunPipeMetadata(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") assert.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") assert.NoError(t, os.Mkdir(dist, 0755)) assert.NoError(t, err) @@ -248,6 +253,7 @@ func TestNoSnapcraftInPath(t *testing.T) { func TestRunNoArguments(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") assert.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") assert.NoError(t, os.Mkdir(dist, 0755)) assert.NoError(t, err) @@ -284,6 +290,7 @@ func TestRunNoArguments(t *testing.T) { func TestCompleter(t *testing.T) { folder, err := ioutil.TempDir("", "archivetest") require.NoError(t, err) + defer os.RemoveAll(folder) var dist = filepath.Join(folder, "dist") require.NoError(t, os.Mkdir(dist, 0755)) require.NoError(t, err) @@ -299,7 +306,7 @@ func TestCompleter(t *testing.T) { "mybin": { Daemon: "simple", Args: "", - Completer: "mybin-completer.bash", + Completer: "testdata/mybin-completer.bash", }, }, Builds: []string{"foo"}, @@ -316,7 +323,7 @@ func TestCompleter(t *testing.T) { err = yaml.Unmarshal(yamlFile, &metadata) require.NoError(t, err) assert.Equal(t, "mybin", metadata.Apps["mybin"].Command) - assert.Equal(t, "mybin-completer.bash", metadata.Apps["mybin"].Completer) + assert.Equal(t, "testdata/mybin-completer.bash", metadata.Apps["mybin"].Completer) } func TestDefault(t *testing.T) { diff --git a/internal/pipe/snapcraft/mybin-completer.bash b/internal/pipe/snapcraft/testdata/mybin-completer.bash similarity index 100% rename from internal/pipe/snapcraft/mybin-completer.bash rename to internal/pipe/snapcraft/testdata/mybin-completer.bash