@@ -20,34 +20,33 @@ symlink.package() {
20
20
}
21
21
22
22
symlink.bin_strict () {
23
+ unset REPLY; REPLY=' no'
23
24
local install_dir=" $1 " # e.g. "$BASALT_LOCAL_PROJECT_DIR/.basalt"
24
25
local package_id=" $2 "
25
26
26
27
ensure.nonzero ' install_dir'
27
28
ensure.nonzero ' package_id'
28
29
29
- local package_dir=" $BASALT_GLOBAL_DATA_DIR /store/packages/$site / $package @ $version "
30
+ local package_dir=" $BASALT_GLOBAL_DATA_DIR /store/packages/$package_id "
30
31
if [ -f " $package_dir /basalt.toml" ]; then
31
32
if util.get_toml_array " $package_dir /basalt.toml" ' binDirs' ; then
33
+ REPLY=' yes'
34
+
32
35
if (( ${# REPLIES[@]} > 0 )) ; then
33
36
mkdir -p " $install_dir /bin"
34
37
fi
35
38
39
+ local dir=
36
40
for dir in " ${REPLIES[@]} " ; do
37
41
if [ -d " $package_dir /$dir " ]; then
38
- for target in " $package_dir /$dir " /* ; do
39
- local link_name=" $install_dir /bin/${target##*/ } "
40
-
41
- if [ -e " $link_name " ]; then
42
- print-indent ' Warning' " Executable file '${target##*/ } for package $package_id will clobber an identically-named file owned by a different package"
43
- fi
44
-
45
- if ! ln -sf " $target " " $link_name " ; then
46
- print.indent-die " Could not symlink file '${target##*/ } ' for package $site /$package @$version "
47
- fi
48
- done
42
+ local file=
43
+ for file in " $package_dir /$dir " /* ; do
44
+ symlink.bin_util_create_symlink " $install_dir " " $file "
45
+ done ; unset file
46
+ else
47
+ newindent.warn " Package '$package_id ' improperly listed '$dir ' as a directory in 'binDirs'"
49
48
fi
50
- done
49
+ done ; unset dir
51
50
fi
52
51
fi
53
52
}
@@ -59,102 +58,49 @@ symlink.bin_lenient() {
59
58
ensure.nonzero ' install_dir'
60
59
ensure.nonzero ' package_id'
61
60
62
- local -a bins=()
63
- local remove_extensions=' no'
64
- local package_dir=" $BASALT_GLOBAL_DATA_DIR /store/packages/$package_id "
65
- if [ -f " $package_dir /basalt.toml" ]; then
66
- if util.get_toml_string " $package_dir /basalt.toml" ' binRemoveExtensions' ; then
67
- if [ " $REPLY " = ' yes' ]; then
68
- remove_extensions=' yes'
69
- fi
70
- fi
71
-
72
- # TODO: cleanup?
73
- if util.get_toml_array " $package_dir /basalt.toml" ' binDirs' ; then
74
- local dir=
75
- for dir in " ${REPLIES[@]} " ; do
76
- if [ -d " $package_dir /$dir " ]; then
77
- for file in " $package_dir /$dir " /* ; do
78
- symlink.bin_lenient_util_create_symlink " $install_dir " " $file " " $remove_extensions "
79
- done
80
- fi
81
- done
82
- unset dir
83
-
84
- return
85
- fi
86
-
87
- symlink.bin_lenient_util_heuristics " $install_dir " " $package_id " " $remove_extensions "
88
- elif [ -f " $package_dir /package.sh" ]; then
89
- if util.extract_shell_variable " $package_dir /package.sh" ' REMOVE_EXTENSION' ; then
90
- remove_extensions=" $REPLY "
91
- fi
92
-
93
- if util.extract_shell_variable " $package_dir /package.sh" ' BINS' ; then
94
- IFS=' :' read -ra bins <<< " $REPLY"
95
-
96
- local file=
97
- for file in " ${bins[@]} " ; do
98
- if [ -d " $package_dir /$file " ]; then
99
- die " Specified directory '$file ' in package.sh; only files are valid"
100
- elif [ ! -f " $package_dir /$file " ]; then
101
- log.warn " Executable file '$file ' not found. Skipping"
102
- else
103
- symlink.bin_lenient_util_create_symlink " $install_dir " " $package_dir /$file " " $remove_extensions "
104
- fi
105
- done
106
- unset file
107
- else
108
- symlink.bin_lenient_util_heuristics " $install_dir " " $package_id " " $remove_extensions "
109
- fi
110
- else
111
- symlink.bin_lenient_util_heuristics " $install_dir " " $package_id " " $remove_extensions "
61
+ symlink.bin_strict " $install_dir " " $package_id "
62
+ if [ " $REPLY " = ' yes' ]; then
63
+ return
112
64
fi
113
- }
114
-
115
- # @description Use heuristics to locate and symlink the bin files. This is ran when
116
- # the user does not supply any bin files/dirs with any config
117
- # @arg $1 package
118
- # @arg $2 Whether to remove extensions
119
- symlink.bin_lenient_util_heuristics () {
120
- local install_dir=" $1 "
121
- local package_id=" $2 "
122
- local remove_extensions=" $3 "
123
65
66
+ # USE HEURISTICS
124
67
local package_dir=" $BASALT_GLOBAL_DATA_DIR /store/packages/$package_id "
125
68
if [ -d " $package_dir /bin" ]; then
69
+ mkdir -p " $install_dir /bin" # TODO: do this only once
70
+ local file=
126
71
for file in " $package_dir " /bin/* ; do
127
- symlink.bin_lenient_util_create_symlink " $install_dir " " $file " " $remove_extensions "
128
- done
72
+ if [ -f " $file " ]; then
73
+ symlink.bin_util_create_symlink " $install_dir " " $file "
74
+ fi
75
+ done ; unset file
129
76
elif [ -d " $package_dir /bins" ]; then
77
+ mkdir -p " $install_dir /bin" # TODO: do this only once
78
+ local file=
130
79
for file in " $package_dir " /bins/* ; do
131
- symlink.bin_lenient_util_create_symlink " $install_dir " " $file " " $remove_extensions "
132
- done
80
+ if [ -f " $file " ]; then
81
+ symlink.bin_util_create_symlink " $install_dir " " $file "
82
+ fi
83
+ done ; unset file
133
84
else
85
+ mkdir -p " $install_dir /bin" # TODO: do this only once
86
+ local file=
134
87
for file in " $package_dir " /* ; do
135
88
if [ -f " $file " ] && [ -x " $file " ]; then
136
- symlink.bin_lenient_util_create_symlink " $install_dir " " $file " " $remove_extensions "
89
+ symlink.bin_util_create_symlink " $install_dir " " $file "
137
90
fi
138
- done
91
+ done ; unset file
139
92
fi
140
93
}
141
94
142
95
# @description Symlink the bin file to the correct location or
143
96
# remove the symlink
144
97
# @arg $1 The full path of the executable
145
98
# @arg $2 Whether to remove extensions
146
- symlink.bin_lenient_util_create_symlink () {
99
+ symlink.bin_util_create_symlink () {
147
100
local install_dir=" $1 "
148
101
local full_bin_file=" $2 "
149
- local remove_extensions=" $3 "
150
102
151
103
local bin_name=" ${full_bin_file##*/ } "
152
-
153
- if [[ " ${remove_extensions:- no} " == @ (yes| true) ]]; then
154
- bin_name=" ${bin_name%% .* } "
155
- fi
156
-
157
- mkdir -p " $install_dir /bin" # TODO: do this only once
158
104
if [ -L " $install_dir /bin/$bin_name " ]; then
159
105
log.error " Skipping '$bin_name ' since an existing symlink with the same name already exists"
160
106
else
0 commit comments