diff options
| author | mpeterv <mpeterval@gmail.com> | 2016-02-11 16:35:25 +0300 |
|---|---|---|
| committer | mpeterv <mpeterval@gmail.com> | 2016-02-11 16:38:14 +0300 |
| commit | 137a78e3997cfb97131956d76ddb6b50bd3f8d24 (patch) | |
| tree | 06dc154973802d015e31e17f0f44232ad16f8d4d | |
| parent | d2991be0d3c03ecc953e9d80a90698397492e215 (diff) | |
| download | luarocks-137a78e3997cfb97131956d76ddb6b50bd3f8d24.tar.gz luarocks-137a78e3997cfb97131956d76ddb6b50bd3f8d24.tar.bz2 luarocks-137a78e3997cfb97131956d76ddb6b50bd3f8d24.zip | |
Fix update_source_section in new_version
* Don't confuse cases "MD5 changed with same URL" and "couldn't fetch"
* Don't check MD5 if it's not present in the old rockspec
* Don't drop errors in fs.get_md5
* Don't drop errors in fetch.find_base_dir
| -rw-r--r-- | src/luarocks/new_version.lua | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/src/luarocks/new_version.lua b/src/luarocks/new_version.lua index 73accf1e..fb813183 100644 --- a/src/luarocks/new_version.lua +++ b/src/luarocks/new_version.lua | |||
| @@ -48,31 +48,47 @@ local function try_replace(tbl, field, old, new) | |||
| 48 | return false | 48 | return false |
| 49 | end | 49 | end |
| 50 | 50 | ||
| 51 | local function check_url_and_update_md5(out_rs, out_name) | 51 | -- Try to download source file using URL from a rockspec. |
| 52 | local old_md5 = out_rs.source.md5 | 52 | -- If it specified MD5, update it. |
| 53 | out_rs.source.md5 = nil | 53 | -- @return (true, false) if MD5 was not specified or it stayed same, |
| 54 | local file, temp_dir = fetch.fetch_url_at_temp_dir(out_rs.source.url, "luarocks-new-version-"..out_name) | 54 | -- (true, true) if MD5 changed, (nil, string) on error. |
| 55 | local function check_url_and_update_md5(out_rs) | ||
| 56 | local file, temp_dir = fetch.fetch_url_at_temp_dir(out_rs.source.url, "luarocks-new-version-"..out_rs.package) | ||
| 55 | if not file then | 57 | if not file then |
| 56 | util.printerr("Warning: invalid URL - "..temp_dir) | 58 | util.printerr("Warning: invalid URL - "..temp_dir) |
| 57 | return true | 59 | return true, false |
| 58 | end | 60 | end |
| 59 | util.printout("File successfully downloaded. Updating MD5 checksum...") | 61 | |
| 60 | out_rs.source.md5 = fs.get_md5(file) | ||
| 61 | local inferred_dir, found_dir = fetch.find_base_dir(file, temp_dir, out_rs.source.url, out_rs.source.dir) | 62 | local inferred_dir, found_dir = fetch.find_base_dir(file, temp_dir, out_rs.source.url, out_rs.source.dir) |
| 62 | if not inferred_dir then | 63 | if not inferred_dir then |
| 63 | return nil, found_dir | 64 | return nil, found_dir |
| 64 | end | 65 | end |
| 66 | |||
| 65 | if found_dir and found_dir ~= inferred_dir then | 67 | if found_dir and found_dir ~= inferred_dir then |
| 66 | out_rs.source.dir = found_dir | 68 | out_rs.source.dir = found_dir |
| 67 | end | 69 | end |
| 68 | return out_rs.source.md5 ~= old_md5 | 70 | |
| 71 | if file then | ||
| 72 | if out_rs.source.md5 then | ||
| 73 | util.printout("File successfully downloaded. Updating MD5 checksum...") | ||
| 74 | local new_md5, err = fs.get_md5(file) | ||
| 75 | if not new_md5 then | ||
| 76 | return nil, err | ||
| 77 | end | ||
| 78 | local old_md5 = out_rs.source.md5 | ||
| 79 | out_rs.source.md5 = new_md5 | ||
| 80 | return true, new_md5 ~= old_md5 | ||
| 81 | else | ||
| 82 | util.printout("File successfully downloaded.") | ||
| 83 | return true, false | ||
| 84 | end | ||
| 85 | end | ||
| 69 | end | 86 | end |
| 70 | 87 | ||
| 71 | local function update_source_section(out_rs, out_name, url, old_ver, new_ver) | 88 | local function update_source_section(out_rs, url, old_ver, new_ver) |
| 72 | if url then | 89 | if url then |
| 73 | out_rs.source.url = url | 90 | out_rs.source.url = url |
| 74 | check_url_and_update_md5(out_rs, out_name) | 91 | return check_url_and_update_md5(out_rs) |
| 75 | return true | ||
| 76 | end | 92 | end |
| 77 | if new_ver == old_ver then | 93 | if new_ver == old_ver then |
| 78 | return true | 94 | return true |
| @@ -83,20 +99,19 @@ local function update_source_section(out_rs, out_name, url, old_ver, new_ver) | |||
| 83 | if out_rs.source.file then | 99 | if out_rs.source.file then |
| 84 | try_replace(out_rs.source, "file", old_ver, new_ver) | 100 | try_replace(out_rs.source, "file", old_ver, new_ver) |
| 85 | end | 101 | end |
| 86 | local ok = try_replace(out_rs.source, "url", old_ver, new_ver) | 102 | if try_replace(out_rs.source, "url", old_ver, new_ver) then |
| 87 | if ok then | 103 | return check_url_and_update_md5(out_rs) |
| 88 | check_url_and_update_md5(out_rs, out_name) | 104 | end |
| 105 | if try_replace(out_rs.source, "tag", old_ver, new_ver) then | ||
| 89 | return true | 106 | return true |
| 90 | end | 107 | end |
| 91 | ok = try_replace(out_rs.source, "tag", old_ver, new_ver) | 108 | -- Couldn't replace anything significant, use the old URL. |
| 109 | local ok, md5_changed = check_url_and_update_md5(out_rs) | ||
| 92 | if not ok then | 110 | if not ok then |
| 93 | ok = check_url_and_update_md5(out_rs, out_name) | 111 | return nil, md5_changed |
| 94 | if ok then | ||
| 95 | util.printerr("Warning: URL is the same, but MD5 has changed. Old rockspec is broken.") | ||
| 96 | end | ||
| 97 | end | 112 | end |
| 98 | if not ok then | 113 | if md5_changed then |
| 99 | return nil, "Failed to determine the location of the new version." | 114 | util.printerr("Warning: URL is the same, but MD5 has changed. Old rockspec is broken.") |
| 100 | end | 115 | end |
| 101 | return true | 116 | return true |
| 102 | end | 117 | end |
| @@ -142,7 +157,7 @@ function new_version.run(...) | |||
| 142 | local out_name = out_rs.package:lower() | 157 | local out_name = out_rs.package:lower() |
| 143 | out_rs.version = new_rockver.."-"..new_rev | 158 | out_rs.version = new_rockver.."-"..new_rev |
| 144 | 159 | ||
| 145 | local ok, err = update_source_section(out_rs, out_name, url, old_ver, new_ver) | 160 | local ok, err = update_source_section(out_rs, url, old_ver, new_ver) |
| 146 | if not ok then return nil, err end | 161 | if not ok then return nil, err end |
| 147 | 162 | ||
| 148 | if out_rs.build and out_rs.build.type == "module" then | 163 | if out_rs.build and out_rs.build.type == "module" then |
