import os
import json
+from collections import namedtuple
+
import xml.etree.ElementTree as ET
from repa.common import RepaException, Colorizer, get_prerelease
from repa.obs import OBS
from repa.main import sub_main
-
def gen_data(manifest):
"""Parse manifest. Yield git path and revision for every entry."""
try:
return None
-def diff(obs, cmp_project, target_project, cmp_manifest,
- target_manifest, is_colorize=False):
+def diff(obs, cmpinfo, targetinfo, is_colorize=False):
"""
Show the difference between two projects in terms of
revisions and tags.
+ cmpinfo and target info are named tuples: (project, manifest)
"""
colorizer = Colorizer(is_colorize)
- target_data = dict(gen_data(target_manifest))
- cmp_data = dict(gen_data(cmp_manifest))
+ target_data = dict(gen_data(targetinfo.manifest))
+ cmp_data = dict(gen_data(cmpinfo.manifest))
for path in sorted(cmp_data):
rev_target = target_data.get(path)
package = os.path.basename(path)
# Get tag, accepted to cmp_project
- cmp_tag = get_tag(obs, cmp_project, package)
+ cmp_tag = get_tag(obs, cmpinfo.project, package)
status = ''
# Colorize tag if it's pending in target project
if cmp_tag:
try:
- prerelease = get_prerelease(cmp_tag, target_project)
+ prerelease = get_prerelease(cmp_tag, targetinfo.project)
if obs.exists(prerelease):
if is_colorize:
cmp_tag = colorizer.green(cmp_tag)
def run(argv):
"""Command line entry point. Called from [sub_]main."""
obs = OBS(argv.apiurl, argv.apiuser, argv.apipasswd)
- return diff(obs, argv.cmp_project, argv.project,
- argv.cmp_manifest, argv.manifest, argv.colorize)
+ difftype = namedtuple('diff', ['project', 'manifest'])
+ return diff(obs, difftype(argv.cmp_project, argv.cmp_manifest),
+ difftype(argv.project, argv.manifest), argv.colorize)
if __name__ == '__main__':
sys.exit(sub_main(sys.argv[1:], Diff()))