Skip to content

Commit 6483e23

Browse files
authored
Fix symlink creation for mounted directories (#54)
* Fix symlink creation for mounted directories The previous symlink creation could fail when target directories already exist (e.g., in dev mode where code is extracted and mounted). Changes: - Remove existing directories before creating symlinks - Use ln -sfn for all symlink operations to properly replace symlinks to directories - Apply fix to bundled extensions/skins, not just user extensions/skins * Switch to relative symlinks for portability
1 parent bb56e34 commit 6483e23

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed
Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,52 @@
11
#!/bin/bash
22

3+
# Use relative symlinks so they work both inside the container and when
4+
# code is extracted to the host for development/debugging
5+
36
echo "Symlinking bundled extensions..."
47
for bundled_extension_path in $(find $MW_HOME/canasta-extensions/ -maxdepth 1 -mindepth 1 -type d)
58
do
69
bundled_extension_id=$(basename $bundled_extension_path)
7-
ln -s $MW_HOME/canasta-extensions/$bundled_extension_id/ $MW_HOME/extensions/$bundled_extension_id
10+
target="$MW_HOME/extensions/$bundled_extension_id"
11+
# Remove existing directory (not symlink) before creating symlink
12+
if [ -d "$target" ] && [ ! -L "$target" ]; then
13+
rm -rf "$target"
14+
fi
15+
ln -sfn ../canasta-extensions/$bundled_extension_id $target
816
done
917

1018
echo "Symlinking bundled skins..."
1119
for bundled_skin_path in $(find $MW_HOME/canasta-skins/ -maxdepth 1 -mindepth 1 -type d)
1220
do
1321
bundled_skin_id=$(basename $bundled_skin_path)
14-
ln -s $MW_HOME/canasta-skins/$bundled_skin_id/ $MW_HOME/skins/$bundled_skin_id
22+
target="$MW_HOME/skins/$bundled_skin_id"
23+
# Remove existing directory (not symlink) before creating symlink
24+
if [ -d "$target" ] && [ ! -L "$target" ]; then
25+
rm -rf "$target"
26+
fi
27+
ln -sfn ../canasta-skins/$bundled_skin_id $target
1528
done
1629

1730
echo "Symlinking user extensions and overwriting any redundant bundled extensions..."
1831
for user_extension_path in $(find $MW_HOME/user-extensions/ -maxdepth 1 -mindepth 1 \( -type d -o -type l \))
1932
do
2033
user_extension_id=$(basename $user_extension_path)
21-
ln -sfn $MW_HOME/user-extensions/$user_extension_id/ $MW_HOME/extensions/$user_extension_id
34+
target="$MW_HOME/extensions/$user_extension_id"
35+
# Remove existing directory (not symlink) before creating symlink
36+
if [ -d "$target" ] && [ ! -L "$target" ]; then
37+
rm -rf "$target"
38+
fi
39+
ln -sfn ../user-extensions/$user_extension_id $target
2240
done
2341

2442
echo "Symlinking user skins and overwriting any redundant bundled skins..."
2543
for user_skin_path in $(find $MW_HOME/user-skins/ -maxdepth 1 -mindepth 1 \( -type d -o -type l \))
2644
do
2745
user_skin_id=$(basename $user_skin_path)
28-
ln -sfn $MW_HOME/user-skins/$user_skin_id/ $MW_HOME/skins/$user_skin_id
46+
target="$MW_HOME/skins/$user_skin_id"
47+
# Remove existing directory (not symlink) before creating symlink
48+
if [ -d "$target" ] && [ ! -L "$target" ]; then
49+
rm -rf "$target"
50+
fi
51+
ln -sfn ../user-skins/$user_skin_id $target
2952
done

0 commit comments

Comments
 (0)