1 from __future__
import with_statement
5 from django
.conf
import settings
7 os
.environ
['DJANGO_SETTINGS_MODULE'] = 'ebuilds.settings'
9 from layman
.debug
import Message
11 from ebuilds
.ebuildfind
.models
import Ebuild
, Overlay
13 from manage_layman
import LaymanManager
15 OVERLAYS_BASE
= settings
.ROOT_PATH
+ "ebuilds/" + "ebuildfind/commands/var/overlays/"
18 def __init__(self
, overlay
, category
, app
, file_path
):
19 path
, filename
= os
.path
.split(os
.path
.realpath(file_path
))
21 name_version
, ext
= os
.path
.splitext(filename
)
24 version
= name_version
[n
+1:]
27 self
.version
= version
28 self
.category
= category
29 self
.overlay
= overlay
31 with
open(file_path
) as file:
33 regex1
= re
.compile(r
'([a-z_]+\s*\(\))\s*{.*}', re
.DOTALL
)
34 f
= re
.sub(regex1
, r
'', f
)
35 regex2
= re
.compile(r
'(for.*done)', re
.DOTALL
)
36 f
= re
.sub(regex2
, r
'', f
)
37 data
= dict(re
.findall("(DESCRIPTION|HOMEPAGE|KEYWORDS|LICENSE|IUSE)=\"(.+)\"", f
))
45 self
.description
= notnull(data
, "DESCRIPTION")
46 self
.description
= self
.description
.replace("\n"," ")
47 self
.homepage
= notnull(data
, "HOMEPAGE")
48 self
.keywords
= notnull(data
, "KEYWORDS")
49 self
.license
= notnull(data
, "LICENSE")
50 self
.iuse
= notnull(data
, "IUSE")
53 output
= "%s/%s [%s] @ %s" % (self
.category
, self
.name
, self
.version
, self
.overlay
)
54 output
+= " " + self
.description
55 output
+= " " + self
.homepage
56 output
+= " " + self
.keywords
57 output
+= " " + self
.license
58 output
+= " " + self
.iuse
61 def exclude_directory(path
, dir):
62 exclude_dir
= ["eclass", "profiles", "README-TODO", "Documentation", "sets", "index"]
63 return os
.path
.isdir(path
) and dir not in exclude_dir
and not dir.startswith(".")
67 Ebuild
.objects
.all().delete()
68 overlays
= os
.listdir(OVERLAYS_BASE
)
70 for overlay
in overlays
:
71 path_overlay
= os
.path
.join(OVERLAYS_BASE
, overlay
)
73 if exclude_directory(path_overlay
, overlay
):
74 overlay_name
= overlay
75 print "is present", overlay_name
77 overlay
= Overlay
.objects
.get(name
=overlay
)
79 categories
= os
.listdir(path_overlay
)
81 for category
in categories
:
82 path_overlay_category
= os
.path
.join(path_overlay
, category
)
84 if exclude_directory(path_overlay_category
, category
):
85 apps
= os
.listdir(path_overlay_category
)
87 path_overlay_category_app
= os
.path
.join(path_overlay_category
, app
)
88 if exclude_directory(path_overlay_category_app
, app
):
89 ebuilds
= os
.listdir(path_overlay_category_app
)
91 for ebuild
in ebuilds
:
92 if ebuild
.endswith(".ebuild"):
93 if exclude_directory(path_overlay_category_app
, ebuild
):
95 path_ebuild
= os
.path
.join(path_overlay_category_app
, ebuild
)
97 e
= EbuildParser(overlay_name
, category
, app
, path_ebuild
)
101 ebuild
.name
= unicode(e
.name
)
102 ebuild
.category
= unicode(e
.category
)
103 ebuild
.version
= unicode(e
.version
)
104 ebuild
.description
= unicode(e
.description
, errors
="replace")
105 ebuild
.keywords
= unicode(e
.keywords
)
106 ebuild
.license
= unicode(e
.license
)
107 ebuild
.iuse
= unicode(e
.iuse
)
108 ebuild
.homepage
= unicode(e
.homepage
)
109 ebuild
.overlay
= overlay
118 for name
, overlay
in overlays
.items():
119 """ check if new overlay is ready """
120 o
= Overlay
.objects
.all().filter(name
=name
)
121 print "add ? > ", name
123 print "added !", name
126 o
.description
= overlay
["description"]
127 o
.link
= overlay
["link"]
131 print "# >>> Parse Overlays"
133 print "# >>> Parse Ebuilds"
136 if __name__
== "__main__":