aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2013-05-24 21:11:06 -0300
committerHisham Muhammad <hisham@gobolinux.org>2013-05-24 21:11:06 -0300
commita26699651c869ac7a47fb579727cc8ec93bcf97c (patch)
tree2336c577b08f8b8cdb9398c2943c3f0035e6cce1
parentfb8112dd63514bd25db5c655580bed5e7585d186 (diff)
downloadluarocks-a26699651c869ac7a47fb579727cc8ec93bcf97c.tar.gz
luarocks-a26699651c869ac7a47fb579727cc8ec93bcf97c.tar.bz2
luarocks-a26699651c869ac7a47fb579727cc8ec93bcf97c.zip
Support for updating versions of packages that remain with the same upstream URL, but only update their contents.
(Case in point: modules by lhf)
-rw-r--r--src/luarocks/new_version.lua97
1 files changed, 58 insertions, 39 deletions
diff --git a/src/luarocks/new_version.lua b/src/luarocks/new_version.lua
index b91f8aed..cb170321 100644
--- a/src/luarocks/new_version.lua
+++ b/src/luarocks/new_version.lua
@@ -55,26 +55,64 @@ local function try_replace(tbl, field, old, new)
55end 55end
56 56
57local function check_url_and_update_md5(out_rs, out_name) 57local function check_url_and_update_md5(out_rs, out_name)
58 local old_md5 = out_rs.source.md5
58 out_rs.source.md5 = nil 59 out_rs.source.md5 = nil
59 local file, temp_dir = fetch.fetch_url_at_temp_dir(out_rs.source.url, "luarocks-new-version-"..out_name) 60 local file, temp_dir = fetch.fetch_url_at_temp_dir(out_rs.source.url, "luarocks-new-version-"..out_name)
60 if file then 61 if not file then
61 util.printout("File successfully downloaded. Updating MD5 checksum...")
62 out_rs.source.md5 = fs.get_md5(file)
63 fs.change_dir(temp_dir)
64 fs.unpack_archive(file)
65 local base_dir = out_rs.source.dir or fetch.url_to_base_dir(out_rs.source.url)
66 if not fs.exists(base_dir) then
67 util.printerr("Directory "..base_dir.." not found")
68 local files = fs.list_dir()
69 if files[1] and fs.is_dir(files[1]) then
70 util.printerr("Found "..files[1])
71 out_rs.source.dir = files[1]
72 end
73 end
74 fs.pop_dir()
75 else
76 util.printerr("Warning: invalid URL - "..temp_dir) 62 util.printerr("Warning: invalid URL - "..temp_dir)
63 return true
64 end
65 util.printout("File successfully downloaded. Updating MD5 checksum...")
66 out_rs.source.md5 = fs.get_md5(file)
67 fs.change_dir(temp_dir)
68 fs.unpack_archive(file)
69 local base_dir = out_rs.source.dir or fetch.url_to_base_dir(out_rs.source.url)
70 if not fs.exists(base_dir) then
71 util.printerr("Directory "..base_dir.." not found")
72 local files = fs.list_dir()
73 if files[1] and fs.is_dir(files[1]) then
74 util.printerr("Found "..files[1])
75 out_rs.source.dir = files[1]
76 end
77 end 77 end
78 fs.pop_dir()
79 return out_rs.source.md5 ~= old_md5
80end
81
82local function update_source_section(out_rs, out_name, url, old_ver, new_ver)
83 if url then
84 out_rs.source.url = url
85 check_url_and_update_md5(out_rs, out_name)
86 return true
87 end
88 if new_ver == old_ver then
89 return true
90 end
91 if not out_rs.source then
92 return nil, "'source' table is missing. Invalid rockspec?"
93 end
94 if out_rs.source.dir then
95 try_replace(out_rs.source, "dir", old_ver, new_ver)
96 end
97 if out_rs.source.file then
98 try_replace(out_rs.source, "file", old_ver, new_ver)
99 end
100 local ok = try_replace(out_rs.source, "url", old_ver, new_ver)
101 if ok then
102 check_url_and_update_md5(out_rs, out_name)
103 return true
104 end
105 ok = try_replace(out_rs.source, "tag", old_ver, new_ver)
106 if not ok then
107 ok = check_url_and_update_md5(out_rs, out_name)
108 if ok then
109 util.printerr("Warning: URL is the same, but MD5 has changed. Old rockspec is broken.")
110 end
111 end
112 if not ok then
113 return nil, "Failed to determine the location of the new version."
114 end
115 return true
78end 116end
79 117
80function run(...) 118function run(...)
@@ -117,29 +155,10 @@ function run(...)
117 local out_rs = persist.load_into_table(filename) 155 local out_rs = persist.load_into_table(filename)
118 local out_name = out_rs.package:lower() 156 local out_name = out_rs.package:lower()
119 out_rs.version = new_rockver.."-"..new_rev 157 out_rs.version = new_rockver.."-"..new_rev
120 if url then 158
121 out_rs.source.url = url 159 local ok, err = update_source_section(out_rs, out_name, url, old_ver, new_ver)
122 check_url_and_update_md5(out_rs, out_name) 160 if not ok then return nil, err end
123 else 161
124 if new_ver ~= old_ver then
125 if out_rs.source and out_rs.source.dir then
126 try_replace(out_rs.source, "dir", old_ver, new_ver)
127 end
128 if out_rs.source and out_rs.source.file then
129 try_replace(out_rs.source, "file", old_ver, new_ver)
130 end
131 local ok = try_replace(out_rs.source, "url", old_ver, new_ver)
132 if ok then
133 check_url_and_update_md5(out_rs, out_name)
134 else
135 ok = try_replace(out_rs.source, "tag", old_ver, new_ver)
136 if not ok then
137 return nil, "Failed to determine the location of the new version."
138 end
139 end
140 end
141 end
142
143 if out_rs.build and out_rs.build.type == "module" then 162 if out_rs.build and out_rs.build.type == "module" then
144 out_rs.build.type = "builtin" 163 out_rs.build.type = "builtin"
145 end 164 end