mirror of
				https://git.launchpad.net/livecd-rootfs
				synced 2025-10-25 22:14:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python3
 | |
| 
 | |
| import argparse
 | |
| import gettext
 | |
| import glob
 | |
| import os
 | |
| import sys
 | |
| import yaml
 | |
| 
 | |
| parser = argparse.ArgumentParser()
 | |
| parser.add_argument('--output', required=True)
 | |
| parser.add_argument('--size', required=True)
 | |
| parser.add_argument('--squashfs', required=True)
 | |
| parser.add_argument('--translations', required=True)
 | |
| parser.add_argument('--template', required=True)
 | |
| parser.add_argument('--langs', default=None)
 | |
| 
 | |
| opts = parser.parse_args(sys.argv[1:])
 | |
| 
 | |
| if os.path.exists(opts.output):
 | |
|     with open(opts.output) as fp:
 | |
|         output = yaml.safe_load(fp)
 | |
| else:
 | |
|     output = []
 | |
| 
 | |
| 
 | |
| with open(opts.template) as fp:
 | |
|     template = yaml.safe_load(fp)
 | |
| 
 | |
| 
 | |
| id = template['id']
 | |
| for entry in output:
 | |
|     # First, look if this source catalogue template id is already present.
 | |
|     # If so, use the template to extend the existing entry with additional
 | |
|     # variations.
 | |
|     if entry['id'] == id:
 | |
|         if 'variations' not in template:
 | |
|             print("Non unique id in source catalog but no variations!")
 | |
|             sys.exit(1)
 | |
|         for k, variation in template['variations'].items():
 | |
|             variation['size'] = int(opts.size)
 | |
|         entry.setdefault('variations', {}).update(template['variations'])
 | |
|         break
 | |
| else:
 | |
|     # No entry with this id found, so add a new one.
 | |
|     template['size'] = int(opts.size)
 | |
|     template['path'] = opts.squashfs
 | |
| 
 | |
|     en_name = template['name']
 | |
|     en_description = template['description']
 | |
| 
 | |
|     template['name'] = {'en': en_name}
 | |
|     template['description'] = {'en': en_description}
 | |
| 
 | |
|     for mo in glob.glob(os.path.join(opts.translations, '*.mo')):
 | |
|         with open(mo, 'rb') as fp:
 | |
|             t = gettext.GNUTranslations(fp=fp)
 | |
|         t_name = t.gettext(en_name)
 | |
|         if t_name != en_name:
 | |
|             lang = os.path.splitext(os.path.basename(mo))[0]
 | |
|             template['name'][lang] = t_name
 | |
|         t_description = t.gettext(en_description)
 | |
|         if t_description != en_description:
 | |
|             lang = os.path.splitext(os.path.basedescription(mo))[0]
 | |
|             template['description'][lang] = t_description
 | |
|         if opts.langs is not None:
 | |
|             template['preinstalled_langs'] = opts.langs.split(',')
 | |
| 
 | |
|     output.append(template)
 | |
| 
 | |
| default_count = 0
 | |
| for entry in output:
 | |
|     if entry.get('default', False):
 | |
|         default_count += 1
 | |
| 
 | |
| if default_count > 1:
 | |
|     print("Too many defaults in source catalog!")
 | |
|     sys.exit(1)
 | |
| 
 | |
| with open(opts.output, 'w') as fp:
 | |
|     yaml.dump(output, fp)
 |