aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c>2009-10-04 16:09:00 +0000
committerhisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c>2009-10-04 16:09:00 +0000
commitd339f03ff7e8c7b1ca922aa75bb1461fb5faa97d (patch)
tree4c6b5250c5f5c73d8574f3aba9fd9242de2feca0 /src
parent34131f1c7f6740f87f4f3120ee7142b07d25bbf3 (diff)
downloadluarocks-d339f03ff7e8c7b1ca922aa75bb1461fb5faa97d.tar.gz
luarocks-d339f03ff7e8c7b1ca922aa75bb1461fb5faa97d.tar.bz2
luarocks-d339f03ff7e8c7b1ca922aa75bb1461fb5faa97d.zip
Separate index.html generation in its own module
git-svn-id: http://luarocks.org/svn/luarocks/trunk@59 9ca3f7c1-7366-0410-b1a3-b5c78f85698c
Diffstat (limited to 'src')
-rw-r--r--src/luarocks/add.lua3
-rw-r--r--src/luarocks/index.lua139
2 files changed, 141 insertions, 1 deletions
diff --git a/src/luarocks/add.lua b/src/luarocks/add.lua
index 66afe1f3..ed995d98 100644
--- a/src/luarocks/add.lua
+++ b/src/luarocks/add.lua
@@ -8,6 +8,7 @@ local util = require("luarocks.util")
8local fetch = require("luarocks.fetch") 8local fetch = require("luarocks.fetch")
9local dir = require("luarocks.dir") 9local dir = require("luarocks.dir")
10local manif = require("luarocks.manif") 10local manif = require("luarocks.manif")
11local index = require("luarocks.index")
11local fs = require("luarocks.fs") 12local fs = require("luarocks.fs")
12 13
13help_summary = "Add a rock or rockpec to a rocks server." 14help_summary = "Add a rock or rockpec to a rocks server."
@@ -83,7 +84,7 @@ local function add_file_to_server(refresh, rockfile, server)
83 print("Updating manifest...") 84 print("Updating manifest...")
84 manif.make_manifest(local_cache) 85 manif.make_manifest(local_cache)
85 print("Updating index.html...") 86 print("Updating index.html...")
86 manif.make_index(local_cache) 87 index.make_index(local_cache)
87 88
88 local login_info = "" 89 local login_info = ""
89 if user then login_info = " -u "..user end 90 if user then login_info = " -u "..user end
diff --git a/src/luarocks/index.lua b/src/luarocks/index.lua
new file mode 100644
index 00000000..1ea18b6c
--- /dev/null
+++ b/src/luarocks/index.lua
@@ -0,0 +1,139 @@
1
2module("luarocks.index", package.seeall)
3
4local util = require("luarocks.util")
5local fs = require("luarocks.fs")
6local deps = require("luarocks.deps")
7local persist = require("luarocks.persist")
8local dir = require("luarocks.dir")
9local manif = require("luarocks.manif")
10
11local index_header = [[
12<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
13<html>
14<head>
15<title>Available rocks</title>
16<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
17<style>
18body {
19 background-color: white;
20 font-family: "bitstream vera sans", "verdana", "sans";
21 font-size: 14px;
22}
23a {
24 color: #0000c0;
25 text-decoration: none;
26}
27a:hover {
28 text-decoration: underline;
29}
30td.main {
31 border-style: none;
32}
33blockquote {
34 font-size: 12px;
35}
36td.package {
37 background-color: #f0f0f0;
38 vertical-align: top;
39}
40td.spacer {
41 height: 5px;
42}
43td.version {
44 background-color: #d0d0d0;
45 vertical-align: top;
46 text-align: left;
47 padding: 5px;
48 width: 100px;
49}
50p.manifest {
51 font-size: 8px;
52}
53</style>
54</head>
55<body>
56<h1>Available rocks</h1>
57<p>
58Lua modules avaliable from this location for use with <a href="http://www.luarocks.org">LuaRocks</a>:
59</p>
60<table class="main">
61]]
62
63local index_package_start = [[
64<td class="package">
65<p><a name="$anchor"></a><b>$package</b> - $summary<br/>
66</p><blockquote><p>$detailed<br/>
67<font size="-1"><a href="$original">latest sources</a> $homepage | License: $license</font></p>
68</blockquote></a></td>
69<td class="version">
70]]
71
72local index_package_end = [[
73</td></tr>
74<tr><td colspan="2" class="spacer"></td></tr>
75]]
76
77local index_footer = [[
78</table>
79<p class="manifest">
80<a href="manifest">manifest file</a>
81</p>
82</body>
83</html>
84]]
85
86function make_index(repo)
87 if not fs.is_dir(repo) then
88 return nil, "Cannot access repository at "..repo
89 end
90 local manifest = manif.load_manifest(repo)
91 local out = io.open(dir.path(repo, "index.html"), "w")
92
93 out:write(index_header)
94 for package, version_list in util.sortedpairs(manifest.repository) do
95 local latest_rockspec = nil
96 local output = index_package_start
97 for version, data in util.sortedpairs(version_list, deps.compare_versions) do
98 local out_versions = {}
99 local arches = 0
100 output = output..version
101 local sep = ':&nbsp;'
102 for _, item in ipairs(data) do
103 output = output .. sep .. '<a href="$url">'..item.arch..'</a>'
104 sep = ',&nbsp;'
105 if item.arch == 'rockspec' then
106 local rs = ("%s-%s.rockspec"):format(package, version)
107 if not latest_rockspec then latest_rockspec = rs end
108 output = output:gsub("$url", rs)
109 else
110 output = output:gsub("$url", ("%s-%s.%s.rock"):format(package, version, item.arch))
111 end
112 end
113 output = output .. '<br/>'
114 output = output:gsub("$na", arches)
115 end
116 output = output .. index_package_end
117 if latest_rockspec then
118 local rockspec = persist.load_into_table(dir.path(repo, latest_rockspec))
119 local vars = {
120 anchor = package,
121 package = rockspec.package,
122 original = rockspec.source.url,
123 summary = rockspec.description.summary or "",
124 detailed = rockspec.description.detailed or "",
125 license = rockspec.description.license or "N/A",
126 homepage = rockspec.description.homepage and ("| <a href="..rockspec.description.homepage..">project homepage</a>") or ""
127 }
128 vars.detailed = vars.detailed:gsub("\n\n", "</p><p>"):gsub("%s+", " ")
129 output = output:gsub("$(%w+)", vars)
130 else
131 output = output:gsub("$anchor", package)
132 output = output:gsub("$package", package)
133 output = output:gsub("$(%w+)", "")
134 end
135 out:write(output)
136 end
137 out:write(index_footer)
138 out:close()
139end