Skip to content

Commit 809dfcf

Browse files
committed
Fix archive extraction to ensure it always extracts to the given path
* Fixes #522 * The various functions.sh no longer need to hardcode $ruby_dir_name. * Remove $ruby_dir_name entirely as it is now unused.
1 parent bf2d93b commit 809dfcf

15 files changed

Lines changed: 33 additions & 94 deletions

File tree

share/ruby-install/functions.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function verify_ruby()
4848
function extract_ruby()
4949
{
5050
log "Extracting $ruby_archive to $ruby_build_dir ..."
51-
extract "$src_dir/$ruby_archive" "$src_dir" || return $?
51+
extract "$src_dir/$ruby_archive" "$ruby_build_dir" || return $?
5252
}
5353

5454
#

share/ruby-install/jruby/functions.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env bash
22

33
ruby_archive="${ruby_archive:-jruby-dist-$ruby_version-bin.tar.gz}"
4-
ruby_dir_name="jruby-$ruby_version"
54
ruby_mirror="${ruby_mirror:-https://repo1.maven.org/maven2/org/jruby/jruby-dist}"
65
ruby_url="${ruby_url:-$ruby_mirror/$ruby_version/$ruby_archive}"
76

share/ruby-install/mruby/functions.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env bash
22

33
ruby_archive="${ruby_archive:-mruby-$ruby_version.tar.gz}"
4-
ruby_dir_name="mruby-$ruby_version"
54
ruby_mirror="${ruby_mirror:-https://github.com/mruby/mruby/archive}"
65
ruby_url="${ruby_url:-$ruby_mirror/$ruby_version/$ruby_archive}"
76

share/ruby-install/ruby-install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ function init()
295295

296296
ruby_cache_dir="$ruby_install_cache_dir/$ruby"
297297
install_dir="${install_dir:-$rubies_dir/$ruby-$ruby_version}"
298-
ruby_build_dir="$src_dir/$ruby_dir_name"
298+
ruby_build_dir="$src_dir/$ruby-$ruby_version"
299299

300300
ruby_md5="${ruby_md5:-$(ruby_checksum_for "$ruby" md5 "$ruby_archive")}"
301301
ruby_sha1="${ruby_sha1:-$(ruby_checksum_for "$ruby" sha1 "$ruby_archive")}"

share/ruby-install/ruby/functions.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ else
99
fi
1010

1111
ruby_archive="${ruby_archive:-ruby-$ruby_version.$ruby_archive_ext}"
12-
ruby_dir_name="ruby-$ruby_version"
1312
ruby_mirror="${ruby_mirror:-https://cache.ruby-lang.org/pub/ruby}"
1413
ruby_url="${ruby_url:-$ruby_mirror/$ruby_version_family/$ruby_archive}"
1514

share/ruby-install/truffleruby-graalvm/functions.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,14 @@ if [[ "$ruby_version" == "23.0.0" ]]; then
2121
log "TruffleRuby-GraalVM 23.0 and later installed by ruby-install use the faster Oracle GraalVM distribution"
2222
log "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76"
2323

24-
ruby_dir_name="graalvm-jdk-17.0.7+8.1"
2524
ruby_archive="${ruby_archive:-graalvm-jdk-17.0.7_${graalvm_platform/darwin/macos}-${graalvm_arch/amd64/x64}_bin.tar.gz}"
2625
ruby_mirror="${ruby_mirror:-https://download.oracle.com/graalvm/17/archive}"
2726
ruby_url="${ruby_url:-$ruby_mirror/$ruby_archive}"
2827
elif (( truffleruby_major > 23 || (truffleruby_major == 23 && truffleruby_minor >= 1) )); then # 23.1+
29-
ruby_dir_name="truffleruby-$ruby_version-${graalvm_platform/darwin/macos}-$graalvm_arch"
3028
ruby_archive="${ruby_archive:-truffleruby-jvm-$ruby_version-${graalvm_platform/darwin/macos}-$graalvm_arch.tar.gz}"
3129
ruby_mirror="${ruby_mirror:-https://github.com/truffleruby/truffleruby/releases/download}"
3230
ruby_url="${ruby_url:-$ruby_mirror/graal-$ruby_version/$ruby_archive}"
3331
else
34-
ruby_dir_name="graalvm-ce-java11-$ruby_version"
3532
ruby_archive="${ruby_archive:-graalvm-ce-java11-$graalvm_platform-$graalvm_arch-$ruby_version.tar.gz}"
3633
ruby_mirror="${ruby_mirror:-https://github.com/graalvm/graalvm-ce-builds/releases/download}"
3734
ruby_url="${ruby_url:-$ruby_mirror/vm-$ruby_version/$ruby_archive}"

share/ruby-install/truffleruby/functions.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ case "$os_arch" in
1313
*) fail "Unsupported platform $os_arch" ;;
1414
esac
1515

16-
ruby_dir_name="truffleruby-$ruby_version-$truffleruby_platform-$truffleruby_arch"
17-
ruby_archive="${ruby_archive:-$ruby_dir_name.tar.gz}"
16+
ruby_archive="${ruby_archive:-truffleruby-$ruby_version-$truffleruby_platform-$truffleruby_arch.tar.gz}"
1817
truffleruby_major="${ruby_version%%.*}"
1918

2019
if [[ "$ruby_version" == "23.0.0" ]]; then

share/ruby-install/util.sh

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,29 +74,39 @@ function download()
7474
function extract()
7575
{
7676
local archive="$1"
77-
local dest="${2:-${archive%/*}}"
77+
local dest="$2"
78+
local dest_dir="$(dirname "$2")"
79+
local tmp="$dest_dir/tmp"
7880

79-
mkdir -p "$dest" || return $?
81+
rm -rf "$dest"
82+
mkdir -p "$tmp" || return $?
8083

8184
case "$archive" in
8285
*.tgz|*.tar.gz)
83-
run tar -xzf "$archive" -C "$dest" || return $?
86+
run tar -xzf "$archive" -C "$tmp" || return $?
8487
;;
8588
*.tbz|*.tbz2|*.tar.bz2)
86-
run tar -xjf "$archive" -C "$dest" || return $?
89+
run tar -xjf "$archive" -C "$tmp" || return $?
8790
;;
8891
*.txz|*.tar.xz)
89-
debug "xzcat $archive | tar -xf - -C $dest"
90-
xzcat "$archive" | tar -xf - -C "$dest" || return $?
92+
debug "xzcat $archive | tar -xf - -C $tmp"
93+
xzcat "$archive" | tar -xf - -C "$tmp" || return $?
9194
;;
9295
*.zip)
93-
run unzip "$archive" -d "$dest" || return $?
96+
run unzip "$archive" -d "$tmp" || return $?
9497
;;
9598
*)
9699
error "Unknown archive format: $archive"
97100
return 1
98101
;;
99102
esac
103+
104+
local extracted=("$tmp"/*)
105+
if (( ${#extracted[@]} != 1 )); then
106+
error "Multiple extracted directories under $tmp"
107+
return 1
108+
fi
109+
mv "${extracted[0]}" "$dest"
100110
}
101111

102112
#

test/functions-tests/apply_patches_test.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
. ./share/ruby-install/functions.sh
55

66
src_dir="$test_fixtures_dir/apply_patches_test"
7-
ruby_dir_name="ruby-1.9.3-p448"
8-
ruby_build_dir="$src_dir/$ruby_dir_name"
7+
ruby_and_version="ruby-1.9.3-p448"
8+
ruby_build_dir="$src_dir/$ruby_and_version"
99

1010
patches=("$ruby_build_dir/falcon-gc.diff")
1111

1212
function setUp()
1313
{
1414
mkdir -p "$ruby_build_dir"
15-
echo "diff -Naur $ruby_dir_name.orig/test $ruby_dir_name/test
16-
--- $ruby_dir_name.orig/test 1970-01-01 01:00:00.000000000 +0100
17-
+++ $ruby_dir_name/test 2013-08-02 20:57:08.055843749 +0200
15+
echo "diff -Naur $ruby_and_version.orig/test $ruby_and_version/test
16+
--- $ruby_and_version.orig/test 1970-01-01 01:00:00.000000000 +0100
17+
+++ $ruby_and_version/test 2013-08-02 20:57:08.055843749 +0200
1818
@@ -0,0 +1 @@
1919
+patch
2020
" > "${patches[0]}"

test/functions-tests/download_patches_test.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
. ./share/ruby-install/functions.sh
55

66
src_dir="$test_fixtures_dir/download_patches_test"
7-
ruby_dir_name="ruby-1.9.3-p448"
8-
ruby_build_dir="$src_dir/$ruby_dir_name"
7+
ruby_and_version="ruby-1.9.3-p448"
8+
ruby_build_dir="$src_dir/$ruby_and_version"
99

1010
patches=("https://gist.github.com/funny-falcon/2981959/raw/ary-queue.diff" "local.patch")
1111

@@ -18,7 +18,7 @@ function test_download_patches()
1818
{
1919
download_patches 2>/dev/null
2020

21-
assertTrue "did not download patches to \$src_dir/\$ruby_dir_name" \
21+
assertTrue "did not download patches to \$src_dir/\$ruby_and_version" \
2222
'[[ -f "${ruby_build_dir}/ary-queue.diff" ]]'
2323

2424
assertEquals "did not update \$patches" \

0 commit comments

Comments
 (0)