import os
import logging
-import shutil
from tic.dependency import analyze_dependency, get_installed_packages
from tic.parser.recipe_parser import get_default_recipe, convert_recipe_to_yaml
from tic.parser.repo_parser import RepodataParser
from tic.parser.view_parser import make_view_data
from tic.utils.error import TICError
+from tic.utils.file import copyfile
from tic.repo import get_repodata_from_repos
from tic.pykickstarter import KSoption, kswriter
return result
-def exports(export_type, recipe, packages, output):
+def exports(export_type, recipe, packages, outdir):
logger = logging.getLogger(__name__)
if not export_type:
export_type='ks'
raise TICError('No ks file was created from kickstarter')
# copy the ks to output directory
- shutil.copy(kspath, output)
+ output=copyfile(kspath, outdir)
logger.info('copy the ks file from %s to dst:%s', kspath, output)
return output
from lxml import etree
from tic.utils.error import TICError
+import os
import logging
import re
def __init__(self, repodata_list):
self.repodata_list = repodata_list
- def _xml_parse(self, pkg_group, tree, tag_dic):
+ def _xml_parse(self, pkg_group, root, tag_dic):
logger = logging.getLogger(__name__)
meta_prefix = 'building-block'
meta_prefix_root = 'building-block-root-'
meta_sub1_pattern = re.compile("(?P<root>.+)-(?P<sub1>.+)")
meta_sub2_pattern = re.compile("(?P<root>.+)-(?P<sub1>.+)-(?P<sub2>.+)")
- root = tree.getroot()
-
pkg_list = pkg_group.get('pkg_list')
pkg2id = pkg_group.get('pkg2id')
provides2id = pkg_group.get('provides2id')
# the dependent package does not exist.
logger.warning('"%s" required by "%s" does not exist.', req_name, pkg_list[pkg_id].get('name'))
- def _get_tagname(self, tree):
- root = tree.getroot()
+ def _get_tagname(self, root):
tags = {}
# xmlns = re.sub('metadata$', '', root.tag)
tags['metadata'] = '{%s}metadata' % root.nsmap[None]
if not self.repodata_list:
return None
- tree_list = []
+ xml_list = []
try:
for repodata in self.repodata_list:
tree = etree.parse(repodata['primary'])
- tree_list.append(tree)
+ xml_list.append(tree.getroot())
except etree.XMLSyntaxError as e:
raise TICError('primary.xml syntax error. %s', e)
- tag_dic = self._get_tagname(tree_list[0])
+ tag_dic = self._get_tagname(xml_list[0])
+
+ #TODO: temporary code (should be deleted)
+ meta_string='<?xml version="1.0" encoding="UTF-8"?><metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="1467"><package type="rpm"><name>building-block-root-metapkg</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>Simple DirectMedia Layer</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /><rpm:requires><rpm:entry name="building-block-sub1-metapkg-extsub1" /><rpm:entry name="building-block-sub1-metapkg-extsub2" /></rpm:requires></format></package><package type="rpm"><name>building-block-sub1-metapkg-extsub1</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>sub1-extension</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /><rpm:requires><rpm:entry name="building-block-sub2-metapkg-extsub1-exts1sub1" /></rpm:requires></format></package><package type="rpm"><name>building-block-sub2-metapkg-extsub1-exts1sub1</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>sub2-extension</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /></format></package><package type="rpm"><name>building-block-sub2-metapkg-extsub1-exts1sub2</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>sub2-extension</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /></format></package><package type="rpm"><name>building-block-sub1-metapkg-extsub2</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>sub1-extension</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /><rpm:requires><rpm:entry name="building-block-sub2-metapkg-extsub2-exts2sub1" /></rpm:requires></format></package><package type="rpm"><name>building-block-sub2-metapkg-extsub2-exts2sub1</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>sub2-extension</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /></format></package><package type="rpm"><name>building-block-sub2-metapkg-extsub2-exts2sub2</name><arch>aarch64</arch><version epoch="0" ver="2.0.4" rel="4.2" vcs="platform/upstream/SDL#5f9405ba696ad79a0e05150430fe69e874f8280d" /><checksum type="sha256" pkgid="YES">6f74666eb89e1addc4ce75e25f3e639bbfdd8798fc848a6b7027501070567dcf</checksum><summary>sub2-extension</summary><description>This is the Simple DirectMedia Layer, a generic API that provides low level access to audio, keyboard, mouse, and display framebuffer across multiple platforms.</description><packager /><url>http://www.libsdl.org/</url><time file="1476718677" build="1476718668" /><size package="264245" installed="956696" archive="957124" /><location href="aarch64/SDL2-2.0.4-4.2.aarch64.rpm" /><format><rpm:license>Zlib and SGI-B-2.0</rpm:license><rpm:vendor>tizen</rpm:vendor><rpm:group>System Environment/Libraries</rpm:group><rpm:buildhost>w36</rpm:buildhost><rpm:sourcerpm>SDL2-2.0.4-4.2.src.rpm</rpm:sourcerpm><rpm:header-range start="280" end="5958" /></format></package></metadata>'
+ xml_list.append(etree.fromstring(meta_string))
pkg_group = dict(pkg_list=[],
pkg2id={},
meta_info=dict(root=[], sub1=[], sub2=[]))
# parses the repodata (primary.xml)
- for tree in tree_list:
- self._xml_parse(pkg_group, tree, tag_dic)
+ for xml_root in xml_list:
+ self._xml_parse(pkg_group, xml_root, tag_dic)
# set the requires id
self._prepare_requires_id(pkg_group)
with app.test_request_context():
print(url_for('index'))
print(url_for('analysis'))
+ print(url_for('exports'))
app.run(host='0.0.0.0', threaded=True, port=port_num)
import errno
import gzip
import os
-
+import shutil
def make_dirs(dirname):
try:
f.write(fobj.read())
f.close()
return output_path
-
-# def decompress_bunzip(intput_path, output_path):
-# with open(output_path, 'wb') as new_file, bz2.BZ2File(intput_path, 'rb') as file:
-# for data in iter(lambda : file.read(100 * 1024), b''):
-# new_file.write(data)
-
-
\ No newline at end of file
+def copyfile(src, dst):
+ abs_dst=os.path.abspath(os.path.expanduser(dst))
+ make_dirs(abs_dst)
+ shutil.copy(src, abs_dst)
+ return os.path.join(abs_dst, os.path.basename(src))
\ No newline at end of file
subparsers = parser.add_subparsers(dest='subparser_name', help='sub-command help')
# create the parser for the 'analyze' command
- parser_analyze = subparsers.add_parser('analysis', help='analyze install-dependency of packages')
- parser_analyze.add_argument('-r', "--repo", dest="repos", metavar="urls", nargs='+', help="The URL of repository [default: %(default)s]", required=True)
- parser_analyze.add_argument('-o', "--output", dest="output", action="store", help="The result file is distributed in the output path", default=os.getcwd())
-
- parser_download = subparsers.add_parser('download', help='download repodata from repositories')
- parser_download.add_argument('-r', "--repo", dest="repos", metavar="urls", nargs='+', help="The URL of repository [default: %(default)s]", required=True)
- parser_download.add_argument('-o', "--output", dest="output", action="store", help="The result file is distributed in the output path [default: %(default)s]")
+ parser_analyze = subparsers.add_parser('analyze', help='analyze install-dependency of packages')
+ parser_analyze.add_argument('-r', "--repos", dest="repos", metavar="urls", nargs='+', help="The URL of repository [default: %(default)s]")
+ parser_analyze.add_argument('-c', "--recipes", dest="recipes", metavar="paths", nargs='+', help="The path of recipe")
+ parser_analyze.add_argument('-o', "--outdir", dest="outdir", action="store", help="The result file is distributed in the outdir path", default=os.getcwd())
+ # create the parser for the 'export' command
+ parser_export = subparsers.add_parser('export', help='export files')
+ parser_export.add_argument('-f', "--format", dest="format", metavar="recipe/ks", help="exports file foramt", required=True)
+ parser_export.add_argument('-c', "--recipes", dest="recipes", metavar="paths", nargs='+', help="The path of recipe")
+ parser_export.add_argument('-o', "--outdir", dest="outdir", action="store", help="The result file is distributed in the outdir path", default=os.getcwd())
+ # create the parser for the 'create' command
+ parser_create = subparsers.add_parser('create', help='create an image for tizen')
+ parser_create.add_argument('-r', "--input", dest="input", metavar="data", nargs='+', help="Input data files (kickstart/recipes)", required=True)
+ parser_create.add_argument('-o', "--outdir", dest="outdir", action="store", help="The result file is distributed in the output path", default=os.getcwd())
parser_start = subparsers.add_parser('start', help='start the tic-core demon on system. port 59001 is used by default ')
parser_start.add_argument('-p', "--port", dest="port", action="store", help="port number", default=59001)
# Process arguments
args = parser.parse_args(argv[1:])
- if args.subparser_name == 'analysis':
- view_data = command.analyze(args.repos, None)
- file.write(args.output, json.dumps(view_data))
- elif args.subparser_name == 'download':
+ if args.subparser_name == 'analyze':
+ view_data = command.analyze(args.repos, args.recipes)
+ output_dir=os.path.abspath(os.path.expanduser(args.outdir))
+ file.write(os.path.join(output_dir, 'viewdata.json'), json.dumps(view_data))
+ elif args.subparser_name == 'export':
+ output=command.exports(args.format, args.recipes, None, args.outdir)
+ logger.info("export the %s file: %s", args.format, output)
+ elif args.subparser_name == 'create':
+ logger.info('create command is yet available')
pass
elif args.subparser_name == 'start':
tic_server.start(args.port)