svn-gvsig-desktop / branches / v2_0_0_prep / build / buildman / bin / bmplugins / DepManExtractPlugIn.py @ 27642
History | View | Annotate | Download (4.08 KB)
1 |
from bmbase.IPlugIn import IPlugIn |
---|---|
2 |
from bmbase.PlugInManager import PlugInManager |
3 |
from bmcore.BMUtil import BMUtil |
4 |
from xml.dom import minidom |
5 |
import os |
6 |
|
7 |
class DepManExtractPlugIn(IPlugIn): |
8 |
def __init__(self): |
9 |
IPlugIn.__init__(self)
|
10 |
self._xmlFile = "depman.xml" |
11 |
self._destDir = "." |
12 |
self._filter = "*"
|
13 |
self._isFromCache=False |
14 |
self._isInteractive=True |
15 |
self._depmanNode = None |
16 |
|
17 |
def init(self): |
18 |
self.addGoal("extract", "Extract the files of dependencies and package sections of a depman xml file.") |
19 |
self.addGoalOption("extract","--file", "Sets an alternate xml file. Default: depman.xml") |
20 |
self.addGoalOption("extract","--destdir", "Sets the destination directory of the extraction. Default: `.`") |
21 |
self.addGoalOption("extract","--filter", "Sets the the filter of the files to extract. Default: `*`") |
22 |
self.addGoalOption("extract","--cache", "Cache is preferred") |
23 |
self.addGoalOption("extract","--remote", "Remote repository is preferred") |
24 |
|
25 |
isExtract = False
|
26 |
if self._arguments.read("extract"): |
27 |
self.setExecute(True) |
28 |
isExtract = True
|
29 |
|
30 |
if not isExtract: |
31 |
return
|
32 |
|
33 |
args = [""]
|
34 |
if self._arguments.read("--file", args): |
35 |
self._xmlFile = args[0] |
36 |
|
37 |
args = [""]
|
38 |
if self._arguments.read("--destdir", args): |
39 |
self._destDir = args[0] |
40 |
|
41 |
args = [""]
|
42 |
if self._arguments.read("--filter", args): |
43 |
self._filter = args[0] |
44 |
|
45 |
if self._arguments.read("--cache"): |
46 |
self._isFromCache = True |
47 |
self._isInteractive = False |
48 |
|
49 |
if self._arguments.read("--remote"): |
50 |
self._isFromCache = False |
51 |
self._isInteractive = False |
52 |
|
53 |
def initFromXML(self,node): |
54 |
if node.localName=="extract": |
55 |
if node.hasAttributes():
|
56 |
if node.attributes.has_key("file"): |
57 |
elf._xmlFile = node.attributes.get("file").value
|
58 |
if node.attributes.has_key("destdir"): |
59 |
elf._destDir = node.attributes.get("destdir").value
|
60 |
if node.attributes.has_key("filter"): |
61 |
elf._filter = node.attributes.get("filter").value
|
62 |
foundCache = False
|
63 |
if node.attributes.has_key("cache"): |
64 |
value = node.attributes.get("cache").value
|
65 |
if value == "True" or value == "true": |
66 |
self._isFromCache = True |
67 |
self._isInteractive = False |
68 |
if node.attributes.has_key("remote") and not foundCache: |
69 |
value = node.attributes.get("remote").value
|
70 |
if value == "True" or value == "true": |
71 |
self._isFromCache = False |
72 |
self._isInteractive = False |
73 |
else:
|
74 |
self._depmanNode = node
|
75 |
|
76 |
def execute(self): |
77 |
print "Executing Plugin:" + str(self.__class__) |
78 |
return self.extract() |
79 |
|
80 |
def extract(self): |
81 |
self._dmupdate = PlugInManager().getPlugInInstance("DepManUpdatePlugIn") |
82 |
if self._dmupdate == None: |
83 |
self.reportError("PlugIn `depman update` not found") |
84 |
return
|
85 |
|
86 |
if self._depmanNode == None: |
87 |
self.loadXMLFile(self._xmlFile) |
88 |
|
89 |
if not self._isInteractive: |
90 |
if self._isFromCache: |
91 |
self._dmupdate.setForceCache()
|
92 |
else:
|
93 |
self._dmupdate.setForceRemote()
|
94 |
|
95 |
dependency_filenamepaths = self._dmupdate.getDependencies(self._depmanNode) |
96 |
package_namepath = self.parsePackage(self._depmanNode) |
97 |
print dependency_filenamepaths, self._destDir, self._filter |
98 |
|
99 |
bmutil = BMUtil() |
100 |
for file in dependency_filenamepaths: |
101 |
bmutil.untargzFiltered(file, self._destDir, self._filter) |
102 |
|
103 |
|
104 |
def parsePackage(self,node): |
105 |
return "" |
106 |
|
107 |
|
108 |
PlugInManager().registerPlugIn("DepManExtractPlugIn",DepManExtractPlugIn())
|
109 |
|
110 |
|