blob: 0ed46a19d1734c9cb98fb06a5aa6ac5e3b133e07 [file] [log] [blame]
Brian O'Connor0167bd42016-04-29 17:09:10 -07001#!/usr/bin/env python
2#FIXME Add license
3
4import re
Brian O'Connor92ec2132016-05-03 17:30:25 -07005import os
Brian O'Connor0167bd42016-04-29 17:09:10 -07006from zipfile import ZipFile
Brian O'Connor92ec2132016-05-03 17:30:25 -07007from tarfile import TarFile, TarInfo
Brian O'Connor65c0bdf2016-05-03 18:40:17 -07008import tarfile
9import time
Brian O'Connor92ec2132016-05-03 17:30:25 -070010from cStringIO import StringIO
11
Brian O'Connor92ec2132016-05-03 17:30:25 -070012
13written_files = set()
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070014now = time.time()
Brian O'Connor92ec2132016-05-03 17:30:25 -070015
16def addFile(tar, dest, file, file_size):
17 if dest not in written_files:
18 info = TarInfo(dest)
19 info.size = file_size
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070020 info.mtime = now
21 info.mode = 0777
Brian O'Connor92ec2132016-05-03 17:30:25 -070022 tar.addfile(info, fileobj=file)
23 written_files.add(dest)
24
25def addString(tar, dest, string):
26 if dest not in written_files:
27 print dest, string
28 info = TarInfo(dest)
29 info.size = len(string)
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070030 info.mtime = now
31 info.mode = 0777
Brian O'Connor92ec2132016-05-03 17:30:25 -070032 file = StringIO(string)
33 tar.addfile(info, fileobj=file)
34 file.close()
35 written_files.add(dest)
Brian O'Connor0167bd42016-04-29 17:09:10 -070036
Brian O'Connora0273922016-09-13 16:24:13 -070037def stageOnos(output, version, files=[]):
38 base = 'onos-%s/' % version
39
Brian O'Connor0167bd42016-04-29 17:09:10 -070040 # Note this is not a compressed zip
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070041 with tarfile.open(output, 'w:gz') as output:
Brian O'Connor0167bd42016-04-29 17:09:10 -070042 for file in files:
43 if '.zip' in file:
44 with ZipFile(file, 'r') as zip_part:
Brian O'Connor92ec2132016-05-03 17:30:25 -070045 for f in zip_part.infolist():
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070046 dest = f.filename
Brian O'Connora0273922016-09-13 16:24:13 -070047 if base not in dest:
48 dest = base + 'apache-karaf-3.0.5/system/' + f.filename
Brian O'Connor92ec2132016-05-03 17:30:25 -070049 addFile(output, dest, zip_part.open(f), f.file_size)
Brian O'Connor0167bd42016-04-29 17:09:10 -070050 elif '.oar' in file:
51 with ZipFile(file, 'r') as oar:
52 app_xml = oar.open('app.xml').read()
53 app_name = re.search('name="([^"]+)"', app_xml).group(1)
Brian O'Connora0273922016-09-13 16:24:13 -070054 dest = base + 'apps/%(name)s/%(name)s.oar' % { 'name': app_name}
Brian O'Connor92ec2132016-05-03 17:30:25 -070055 addFile(output, dest, open(file), os.stat(file).st_size)
Brian O'Connora0273922016-09-13 16:24:13 -070056 dest = base + 'apps/%s/app.xml' % app_name
Brian O'Connor92ec2132016-05-03 17:30:25 -070057 addString(output, dest, app_xml)
58 for f in oar.infolist():
59 filename = f.filename
60 if 'm2' in filename:
Brian O'Connora0273922016-09-13 16:24:13 -070061 dest = base + 'apache-karaf-3.0.5/system/' + filename[3:]
Brian O'Connor0167bd42016-04-29 17:09:10 -070062 if dest not in written_files:
Brian O'Connor92ec2132016-05-03 17:30:25 -070063 addFile(output, dest, oar.open(f), f.file_size)
Brian O'Connor0167bd42016-04-29 17:09:10 -070064 written_files.add(dest)
65 elif 'features.xml' in file:
Brian O'Connora0273922016-09-13 16:24:13 -070066 dest = base + 'apache-karaf-3.0.5/system/org/onosproject/onos-features/%s/' % version
67 dest += 'onos-features-%s-features.xml' % version
Brian O'Connor0167bd42016-04-29 17:09:10 -070068 with open(file) as f:
Brian O'Connor92ec2132016-05-03 17:30:25 -070069 addFile(output, dest, f, os.stat(file).st_size)
Brian O'Connora0273922016-09-13 16:24:13 -070070 addString(output, base + 'apps/org.onosproject.drivers/active', '')
71 addString(output, base + 'VERSION', version)
Brian O'Connor0167bd42016-04-29 17:09:10 -070072
73if __name__ == '__main__':
74 import sys
75
Brian O'Connora0273922016-09-13 16:24:13 -070076 if len(sys.argv) < 3:
77 print 'USAGE' #FIXME
Brian O'Connor0167bd42016-04-29 17:09:10 -070078 sys.exit(1)
79
80 output = sys.argv[1]
Brian O'Connora0273922016-09-13 16:24:13 -070081 version = sys.argv[2]
82 args = sys.argv[3:]
Brian O'Connor0167bd42016-04-29 17:09:10 -070083
Brian O'Connora0273922016-09-13 16:24:13 -070084 stageOnos(output, version, args)