diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2019-04-02 17:25:53 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2019-04-03 10:44:51 -0300 |
| commit | f5eef8f276b86654a21cb80f5b8e28028abcd5fa (patch) | |
| tree | 271eaa134929f2d05cbccb7003d54724be9106a0 | |
| parent | b3d36513baa15b5c7b4c1ad24f655e3469b83dc5 (diff) | |
| download | luarocks-f5eef8f276b86654a21cb80f5b8e28028abcd5fa.tar.gz luarocks-f5eef8f276b86654a21cb80f5b8e28028abcd5fa.tar.bz2 luarocks-f5eef8f276b86654a21cb80f5b8e28028abcd5fa.zip | |
fs.lua: cache failures as well
| -rw-r--r-- | src/luarocks/fs/lua.lua | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 313204b9..c3bf87e3 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua | |||
| @@ -670,6 +670,10 @@ local redirect_protocols = { | |||
| 670 | 670 | ||
| 671 | local function request(url, method, http, loop_control) | 671 | local function request(url, method, http, loop_control) |
| 672 | local result = {} | 672 | local result = {} |
| 673 | |||
| 674 | if cfg.verbose then | ||
| 675 | print(method, url) | ||
| 676 | end | ||
| 673 | 677 | ||
| 674 | local proxy = os.getenv("http_proxy") | 678 | local proxy = os.getenv("http_proxy") |
| 675 | if type(proxy) ~= "string" then proxy = nil end | 679 | if type(proxy) ~= "string" then proxy = nil end |
| @@ -735,13 +739,28 @@ local function request(url, method, http, loop_control) | |||
| 735 | end | 739 | end |
| 736 | 740 | ||
| 737 | local function write_timestamp(filename, data) | 741 | local function write_timestamp(filename, data) |
| 738 | local utfd = io.open(filename, "w") | 742 | local fd = io.open(filename, "w") |
| 739 | if utfd then | 743 | if fd then |
| 740 | utfd:write(data) | 744 | fd:write(data) |
| 741 | utfd:close() | 745 | fd:close() |
| 746 | end | ||
| 747 | end | ||
| 748 | |||
| 749 | local function read_timestamp(filename) | ||
| 750 | local fd = io.open(filename, "r") | ||
| 751 | if fd then | ||
| 752 | local data = fd:read("*a") | ||
| 753 | fd:close() | ||
| 754 | return data | ||
| 742 | end | 755 | end |
| 743 | end | 756 | end |
| 744 | 757 | ||
| 758 | local function fail_with_status(filename, status, headers) | ||
| 759 | write_timestamp(filename .. ".unixtime", os.time()) | ||
| 760 | write_timestamp(filename .. ".status", status) | ||
| 761 | return nil, status, headers | ||
| 762 | end | ||
| 763 | |||
| 745 | -- @param url string: URL to fetch. | 764 | -- @param url string: URL to fetch. |
| 746 | -- @param filename string: local filename of the file to fetch. | 765 | -- @param filename string: local filename of the file to fetch. |
| 747 | -- @param http table: The library to use (http from LuaSocket or LuaSec) | 766 | -- @param http table: The library to use (http from LuaSocket or LuaSec) |
| @@ -751,25 +770,22 @@ end | |||
| 751 | -- nil, error message and optionally HTTPS error in case of errors. | 770 | -- nil, error message and optionally HTTPS error in case of errors. |
| 752 | local function http_request(url, filename, http, cache) | 771 | local function http_request(url, filename, http, cache) |
| 753 | if cache then | 772 | if cache then |
| 754 | local tsfd = io.open(filename..".timestamp", "r") | 773 | local status = read_timestamp(filename..".status") |
| 755 | if tsfd then | 774 | local timestamp = read_timestamp(filename..".timestamp") |
| 756 | local timestamp = tsfd:read("*a") | 775 | if status or timestamp then |
| 757 | tsfd:close() | 776 | local unixtime = read_timestamp(filename..".unixtime") |
| 758 | local unixtime | ||
| 759 | local utfd = io.open(filename..".unixtime", "r") | ||
| 760 | if utfd then | ||
| 761 | unixtime = tonumber(utfd:read("*a")) | ||
| 762 | utfd:close() | ||
| 763 | end | ||
| 764 | if unixtime then | 777 | if unixtime then |
| 765 | if os.time() - unixtime < cfg.cache_timeout then | 778 | if os.time() - unixtime < cfg.cache_timeout then |
| 779 | if status then | ||
| 780 | return nil, status, {} | ||
| 781 | end | ||
| 766 | return true, nil, nil, true | 782 | return true, nil, nil, true |
| 767 | end | 783 | end |
| 768 | end | 784 | end |
| 769 | 785 | ||
| 770 | local result, status, headers, err = request(url, "HEAD", http) | 786 | local result, status, headers, err = request(url, "HEAD", http) |
| 771 | if not result then | 787 | if not result then |
| 772 | return nil, status, headers | 788 | return fail_with_status(filename, status, headers) |
| 773 | end | 789 | end |
| 774 | if status == 200 and headers["last-modified"] == timestamp then | 790 | if status == 200 and headers["last-modified"] == timestamp then |
| 775 | write_timestamp(filename .. ".unixtime", os.time()) | 791 | write_timestamp(filename .. ".unixtime", os.time()) |
| @@ -779,7 +795,9 @@ local function http_request(url, filename, http, cache) | |||
| 779 | end | 795 | end |
| 780 | local result, status, headers, err = request(url, "GET", http) | 796 | local result, status, headers, err = request(url, "GET", http) |
| 781 | if not result then | 797 | if not result then |
| 782 | return nil, status, headers | 798 | if status then |
| 799 | return fail_with_status(filename, status, headers) | ||
| 800 | end | ||
| 783 | end | 801 | end |
| 784 | if cache and headers["last-modified"] then | 802 | if cache and headers["last-modified"] then |
| 785 | write_timestamp(filename .. ".timestamp", headers["last-modified"]) | 803 | write_timestamp(filename .. ".timestamp", headers["last-modified"]) |
