scan.lua

Tue, 17 Mar 2009 21:39:41 +0200

author
Tuomo Valkonen <tuomov@iki.fi>
date
Tue, 17 Mar 2009 21:39:41 +0200
changeset 1
e2face1be50e
child 2
3975fa5ed630
permissions
-rw-r--r--

Basic directory scanner

1
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 require('lfs')
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
2
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
3 local function filtered_dir(d)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
4 local f, s_, v_ = lfs.dir(d)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
5 local function g(s, v)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
6 while true do
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
7 local vn=f(s, v)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
8 if vn~='.' and vn~='..' then
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
9 return vn
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
10 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
11 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
12 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
13 return g, s_, v_
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
14 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
15
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
16
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
17 function scan(d)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
18 local h={}
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
19 for f in filtered_dir(d) do
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20 local n=d..'/'..f
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
21 local a=lfs.attributes(n)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
22 if a.mode=='directory' then
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23 local nh=scan(n)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24 h[n]=nh
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
25 elseif a.mode=='file' then
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
26 h[n]=true
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
27 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
28 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
29 return h
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
30 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
31
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
32 function hfold(h, a, f, g)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
33 for n, c in pairs(h) do
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
34 if type(c)=='table' then
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
35 hfold(c, f(a, n), f, g)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
36 else
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
37 g(a, n)
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
38 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
39 end
e2face1be50e Basic directory scanner
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
40 end

mercurial