Skip to content

Commit 5d340a1

Browse files
committed
address PR comments
1 parent 0ee6c95 commit 5d340a1

File tree

4 files changed

+34
-10
lines changed

4 files changed

+34
-10
lines changed

pkg/localnet/tmpnet.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,13 +376,18 @@ func TmpNetSetDefaultAliases(ctx context.Context, networkDir string) error {
376376

377377
// Install the given VM binary into the appropriate location with the
378378
// appropriate name
379-
func TmpNetInstallVM(network *tmpnet.Network, binaryPath string, vmID ids.ID) error {
379+
func TmpNetInstallVM(
380+
log logging.Logger,
381+
network *tmpnet.Network,
382+
binaryPath string,
383+
vmID ids.ID,
384+
) error {
380385
pluginDir, err := network.DefaultFlags.GetStringVal(config.PluginDirKey)
381386
if err != nil {
382387
return err
383388
}
384389
pluginPath := filepath.Join(pluginDir, vmID.String())
385-
return utils.SetupExecFile(binaryPath, pluginPath)
390+
return utils.SetupExecFile(log, binaryPath, pluginPath)
386391
}
387392

388393
// Set up blockchain config for all nodes in the network
@@ -583,7 +588,7 @@ func TmpNetTrackSubnet(
583588
if err != nil {
584589
return err
585590
}
586-
if err := TmpNetInstallVM(network, vmBinaryPath, vmID); err != nil {
591+
if err := TmpNetInstallVM(log, network, vmBinaryPath, vmID); err != nil {
587592
return err
588593
}
589594
// Configs

pkg/node/local.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func TrackSubnetWithLocalMachine(
7979
rootDir := app.GetLocalDir(clusterName)
8080

8181
pluginPath := filepath.Join(rootDir, "node1", "plugins", vmID.String())
82-
if err := utils.SetupExecFile(vmBin, pluginPath); err != nil {
82+
if err := utils.SetupExecFile(app.Log, vmBin, pluginPath); err != nil {
8383
return err
8484
}
8585

pkg/utils/file.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import (
99

1010
"github.com/ava-labs/avalanche-cli/pkg/constants"
1111
sdkutils "github.com/ava-labs/avalanche-cli/sdk/utils"
12+
"github.com/ava-labs/avalanchego/utils/logging"
13+
14+
"go.uber.org/zap"
1215
"golang.org/x/mod/modfile"
1316
)
1417

@@ -38,7 +41,11 @@ func IsExecutable(filename string) bool {
3841
return false
3942
}
4043
info, _ := os.Stat(filename)
41-
return info.Mode()&0o0100 != 0
44+
// A file perm can be seen as a 9-bit sequence mapping to: rwxrwxrwx
45+
// read-write-execute for owner, group and everybody.
46+
// 0o100 is the bit mask that, when applied with the bitwise-AND operator &,
47+
// results in != 0 state whenever the file can be executed by the owner.
48+
return info.Mode()&0o100 != 0
4249
}
4350

4451
// UserHomePath returns the absolute path of a file located in the user's home directory.
@@ -79,8 +86,18 @@ func FileCopy(src string, dst string) error {
7986

8087
// SetupExecFile copies a file into destination and set it to have exec perms,
8188
// if destination either does not exists, or is not executable
82-
func SetupExecFile(src string, dst string) error {
89+
func SetupExecFile(
90+
log logging.Logger,
91+
src string,
92+
dst string,
93+
) error {
8394
if !IsExecutable(dst) {
95+
if FileExists(dst) {
96+
log.Error(
97+
"binary was not properly installed on a previous CLI execution",
98+
zap.String("binary-path", dst),
99+
)
100+
}
84101
// Either it was never installed, or it was partially done (copy or chmod
85102
// failure)
86103
// As the file is not executable, there is no risk of encountering text file busy

pkg/utils/file_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"testing"
99

1010
"github.com/ava-labs/avalanche-cli/pkg/constants"
11+
"github.com/ava-labs/avalanchego/utils/logging"
12+
1113
"github.com/stretchr/testify/require"
1214
)
1315

@@ -110,7 +112,7 @@ func TestSetupExecFile(t *testing.T) {
110112
require.Equal(t, false, FileExists(src))
111113
require.Equal(t, true, FileExists(dest))
112114
require.Equal(t, false, IsExecutable(dest))
113-
err = SetupExecFile(src, dest)
115+
err = SetupExecFile(logging.NoLog{}, src, dest)
114116
require.Error(t, err)
115117
content, err := os.ReadFile(dest)
116118
require.NoError(t, err)
@@ -125,7 +127,7 @@ func TestSetupExecFile(t *testing.T) {
125127
require.NoError(t, err)
126128
require.Equal(t, false, FileExists(dest))
127129
require.Equal(t, false, IsExecutable(dest))
128-
err = SetupExecFile(src, dest)
130+
err = SetupExecFile(logging.NoLog{}, src, dest)
129131
require.NoError(t, err)
130132
content, err := os.ReadFile(dest)
131133
require.NoError(t, err)
@@ -138,7 +140,7 @@ func TestSetupExecFile(t *testing.T) {
138140
dest := createTemp(t, "testexecfile", destContent)
139141
require.Equal(t, true, FileExists(dest))
140142
require.Equal(t, false, IsExecutable(dest))
141-
err := SetupExecFile(src, dest)
143+
err := SetupExecFile(logging.NoLog{}, src, dest)
142144
require.NoError(t, err)
143145
content, err := os.ReadFile(dest)
144146
require.NoError(t, err)
@@ -153,7 +155,7 @@ func TestSetupExecFile(t *testing.T) {
153155
require.NoError(t, err)
154156
require.Equal(t, true, FileExists(dest))
155157
require.Equal(t, true, IsExecutable(dest))
156-
err = SetupExecFile(src, dest)
158+
err = SetupExecFile(logging.NoLog{}, src, dest)
157159
require.NoError(t, err)
158160
content, err := os.ReadFile(dest)
159161
require.NoError(t, err)

0 commit comments

Comments
 (0)