32 plugin.ImplBase.__init__(self, resource_ref, configuration) |
32 plugin.ImplBase.__init__(self, resource_ref, configuration) |
33 self.resource_ref = resource_ref |
33 self.resource_ref = resource_ref |
34 self.configuration = configuration |
34 self.configuration = configuration |
35 self.logger = logging.getLogger('cone.crml(%s)' % self.resource_ref) |
35 self.logger = logging.getLogger('cone.crml(%s)' % self.resource_ref) |
36 self.repository = repository |
36 self.repository = repository |
37 |
37 |
|
38 def __getstate__(self): |
|
39 state = super(CrmlImpl, self).__getstate__() |
|
40 state['repository'] = self.__dict__.get('repository',None) |
|
41 return state |
|
42 |
|
43 |
38 def generate(self, context=None): |
44 def generate(self, context=None): |
39 # Quick fix |
45 # Quick fix |
40 if context: |
46 if context: |
41 self.generation_context = context |
47 self.generation_context = context |
|
48 |
|
49 # See if delta CenReps should be generated |
|
50 delta_cenrep = context and context.changed_refs is not None \ |
|
51 and 'deltacenrep' in context.tags.get('crml', []) |
|
52 |
|
53 changed_refs = None |
|
54 if delta_cenrep: |
|
55 changed_refs = context.changed_refs |
|
56 |
|
57 # Hard-coded output for delta CenReps for now |
|
58 self.output_subdir = 'deltacenreps' |
|
59 self.plugin_output = '' |
|
60 |
42 file_path = self._get_cenrep_txt_file_path() |
61 file_path = self._get_cenrep_txt_file_path() |
43 self.logger.debug("Generating file '%s'..." % file_path) |
62 self.logger.debug("Generating file '%s'..." % file_path) |
44 |
63 |
45 # Generate CenRep text data and write it to the output file |
64 # Generate CenRep text data and write it to the output file |
46 writer = crml_writer.CrmlTxtWriter(self.configuration, self.logger) |
65 writer = crml_writer.CrmlTxtWriter(context, self.logger) |
47 data = writer.get_cenrep_txt_data(self.repository).encode('UTF-16') |
66 data = writer.get_cenrep_txt_data(self.repository, changed_refs).encode('UTF-16') |
48 self._write_to_file(file_path, data) |
67 self._write_to_file(file_path, data) |
|
68 |
|
69 # Add to the generated files list |
|
70 KEY = 'crml_generated_cenrep_files' |
|
71 lst = context.impl_data_dict.setdefault(KEY, []) |
|
72 lst.append((os.path.basename(file_path), os.path.abspath(file_path))) |
49 |
73 |
50 |
74 |
51 # Collect the record for cenrep_rfs.txt generation in post_generate() |
75 # Collect the record for cenrep_rfs.txt generation in post_generate() |
52 if self.generation_context is not None: |
76 if self.generation_context is not None: |
53 rfs_record = writer.get_cenrep_rfs_record(self.repository) |
77 rfs_record = writer.get_cenrep_rfs_record(self.repository) |
135 |
159 |
136 targets = self.generation_context.tags.get('target', []) |
160 targets = self.generation_context.tags.get('target', []) |
137 return 'core' in targets or 'rofs2' in targets |
161 return 'core' in targets or 'rofs2' in targets |
138 |
162 |
139 def _write_to_file(self, file_path, data): |
163 def _write_to_file(self, file_path, data): |
140 # Create directories for the file if necessary |
|
141 file_dir = os.path.dirname(file_path) |
|
142 if file_dir != '' and not os.path.exists(file_dir): |
|
143 os.makedirs(file_dir) |
|
144 |
164 |
145 # Write data |
165 # Write data |
146 f = open(file_path, "wb") |
166 f = self.generation_context.create_file(file_path, implementation=self) |
147 try: f.write(data) |
167 try: f.write(data) |
148 finally: f.close() |
168 finally: f.close() |