diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2019-03-28 23:39:53 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2019-04-01 16:29:17 -0300 |
commit | 4e97804fc1b8b47667ec1d8b8f3c473d31c8bb29 (patch) | |
tree | 3d86bf9e1d97365c61928ac59c99ff9e8454a1ec | |
parent | 7e9b7e08a8a31501189a32c60fb9cb7bc6b31b5e (diff) | |
download | luarocks-4e97804fc1b8b47667ec1d8b8f3c473d31c8bb29.tar.gz luarocks-4e97804fc1b8b47667ec1d8b8f3c473d31c8bb29.tar.bz2 luarocks-4e97804fc1b8b47667ec1d8b8f3c473d31c8bb29.zip |
tar: do not attempt to create directory more than once
-rw-r--r-- | src/luarocks/tools/tar.lua | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/luarocks/tools/tar.lua b/src/luarocks/tools/tar.lua index 7828c517..a6a95252 100644 --- a/src/luarocks/tools/tar.lua +++ b/src/luarocks/tools/tar.lua | |||
@@ -4,7 +4,7 @@ local tar = {} | |||
4 | 4 | ||
5 | local fs = require("luarocks.fs") | 5 | local fs = require("luarocks.fs") |
6 | local dir = require("luarocks.dir") | 6 | local dir = require("luarocks.dir") |
7 | local util = require("luarocks.util") | 7 | local fun = require("luarocks.fun") |
8 | 8 | ||
9 | local blocksize = 512 | 9 | local blocksize = 512 |
10 | 10 | ||
@@ -96,6 +96,7 @@ function tar.untar(filename, destdir) | |||
96 | 96 | ||
97 | local long_name, long_link_name | 97 | local long_name, long_link_name |
98 | local ok, err | 98 | local ok, err |
99 | local make_dir = fun.memoize(fs.make_dir) | ||
99 | while true do | 100 | while true do |
100 | local block | 101 | local block |
101 | repeat | 102 | repeat |
@@ -132,14 +133,14 @@ function tar.untar(filename, destdir) | |||
132 | local pathname = dir.path(destdir, header.name) | 133 | local pathname = dir.path(destdir, header.name) |
133 | pathname = fs.absolute_name(pathname) | 134 | pathname = fs.absolute_name(pathname) |
134 | if header.typeflag == "directory" then | 135 | if header.typeflag == "directory" then |
135 | ok, err = fs.make_dir(pathname) | 136 | ok, err = make_dir(pathname) |
136 | if not ok then | 137 | if not ok then |
137 | break | 138 | break |
138 | end | 139 | end |
139 | elseif header.typeflag == "file" then | 140 | elseif header.typeflag == "file" then |
140 | local dirname = dir.dir_name(pathname) | 141 | local dirname = dir.dir_name(pathname) |
141 | if dirname ~= "" then | 142 | if dirname ~= "" then |
142 | ok, err = fs.make_dir(dirname) | 143 | ok, err = make_dir(dirname) |
143 | if not ok then | 144 | if not ok then |
144 | break | 145 | break |
145 | end | 146 | end |