From 863ca2e36ac05b500ff19f709084dd472271be65 Mon Sep 17 00:00:00 2001 From: Lingchao Xin Date: Wed, 18 Dec 2013 10:53:42 +0800 Subject: [PATCH] Split vcs into git_path and commit_id Now vcs will hide, we provide git_path and commit_id instead. And a little more, I reformat json dict structure, more beautiful than before even though it can not satisfy me, maybe a new way should be found to take a more pythonic writing. Change-Id: Id6c065bf99519879f6c796eb23440e50c286b0f5 --- snapdiff/__init__.py | 104 +++++++++++++++++++++++++---------- snapdiff/image.py | 4 +- snapdiff/repo.py | 2 + snapdiff/templates/diff.html | 27 ++++++--- 4 files changed, 99 insertions(+), 38 deletions(-) diff --git a/snapdiff/__init__.py b/snapdiff/__init__.py index 5395bfe..56367af 100644 --- a/snapdiff/__init__.py +++ b/snapdiff/__init__.py @@ -80,34 +80,82 @@ def diff_to_JSON(old_url, new_url, style='repo'): obj = {style: {'old': old_url, 'new': new_url}, 'diff': { - 'added': [{'oldpkg': None, 'newpkg': {'name': _new.name, \ - 'version': {'epoch': _new.version.epoch, \ - 'rel': _new.version.rel, 'ver': _new.version.ver}, \ - 'vcs': _new.version.vcs}, 'codediff': None} \ - for _new in added], - 'removed': [{'oldpkg': {'name': _old.name, \ - 'version': {'epoch': _old.version.epoch, \ - 'rel': _old.version.rel, 'ver': _old.version.ver}, \ - 'vcs': _old.version.vcs}, 'newpkg': None, \ - 'codediff': None} for _old in removed], - 'modified': [{'oldpkg': {'name': _old.name, \ - 'version': {'epoch': _old.version.epoch, \ - 'rel': _old.version.rel, 'ver': _old.version.ver}, \ - 'vcs': _old.version.vcs}, \ - 'newpkg': {'name': _new.name, \ - 'version': {'epoch': _new.version.epoch, \ - 'rel': _new.version.rel, 'ver': _new.version.ver}, - 'vcs': _new.version.vcs}, 'codediff': None} \ - for _old, _new in modified], - 'rebuilded': [{'oldpkg': {'name': _old.name, \ - 'version': {'epoch': _old.version.epoch, \ - 'rel': _old.version.rel, 'ver': _old.version.ver}, \ - 'vcs': _old.version.vcs}, \ - 'newpkg': {'name': _new.name, \ - 'version': {'epoch': _new.version.epoch, \ - 'rel': _new.version.rel, 'ver': _new.version.ver}, - 'vcs': _new.version.vcs}, 'codediff': None} \ - for _old, _new in rebuilded], + 'added': [ + {'oldpkg': None, + 'newpkg': { + 'name': _new.name, + 'version': { + 'epoch': _new.version.epoch, + 'rel': _new.version.rel, + 'ver': _new.version.ver, + }, + # we use '#' to split vcs into git_path and commit_id, + # but commit_id maybe contains '#', so split the 1st. + 'git_path': _new.version.vcs.split('#', 1)[0], + 'commit_id': _new.version.vcs.split('#', 1)[1], + }, + 'codediff': None, + } for _new in added], + 'removed': [ + {'oldpkg': { + 'name': _old.name, + 'version': { + 'epoch': _old.version.epoch, + 'rel': _old.version.rel, + 'ver': _old.version.ver, + }, + 'git_path': _old.version.vcs.split('#', 1)[0], + 'commit_id': _old.version.vcs.split('#', 1)[1], + }, + 'newpkg': None, + 'codediff': None, + } for _old in removed], + 'modified': [ + {'oldpkg': { + 'name': _old.name, + 'version': { + 'epoch': _old.version.epoch, + 'rel': _old.version.rel, + 'ver': _old.version.ver, + }, + 'git_path': _old.version.vcs.split('#', 1)[0], + 'commit_id': _old.version.vcs.split('#', 1)[1], + }, + 'newpkg': { + 'name': _new.name, + 'version': { + 'epoch': _new.version.epoch, + 'rel': _new.version.rel, + 'ver': _new.version.ver, + }, + 'git_path': _new.version.vcs.split('#', 1)[0], + 'commit_id': _new.version.vcs.split('#', 1)[1], + }, + 'codediff': None, + } for _old, _new in modified], + 'rebuilded': [{ + 'oldpkg': { + 'name': _old.name, + 'version': { + 'epoch': _old.version.epoch, + 'rel': _old.version.rel, + 'ver': _old.version.ver, + }, + 'git_path': _old.version.vcs.split('#', 1)[0], + 'commit_id': _old.version.vcs.split('#', 1)[1], + }, + 'newpkg': { + 'name': _new.name, + 'version': { + 'epoch': _new.version.epoch, + 'rel': _new.version.rel, + 'ver': _new.version.ver, + }, + 'git_path': _new.version.vcs.split('#', 1)[0], + 'commit_id': _new.version.vcs.split('#', 1)[1], + }, + 'codediff': None, + } for _old, _new in rebuilded], } } diff --git a/snapdiff/image.py b/snapdiff/image.py index 3146768..c22efc0 100644 --- a/snapdiff/image.py +++ b/snapdiff/image.py @@ -58,7 +58,9 @@ def packages(url): package_info.version.epoch = epoch package_info.version.ver = ver package_info.version.rel = rel - package_info.version.vcs = vcs + # maybe it occurs no vcs tag or vcs tag is 'None' not None in + # rpm package, so give it a '#' to split it into ['', ''] later. + package_info.version.vcs = ['#', vcs][vcs and vcs != 'None'] packages_info[name].append(package_info) return packages_info diff --git a/snapdiff/repo.py b/snapdiff/repo.py index 60429e5..2ab0270 100644 --- a/snapdiff/repo.py +++ b/snapdiff/repo.py @@ -64,6 +64,8 @@ class Repo(object): packages_info = JsonDict() for package in self._primary.package: + # vcs may be None, then give it a '#'. + package.version.vcs = package.version.vcs or '#' if packages_info[package.name] is None: setattr(packages_info, package.name, [package]) else: diff --git a/snapdiff/templates/diff.html b/snapdiff/templates/diff.html index 968ae95..708e6d6 100644 --- a/snapdiff/templates/diff.html +++ b/snapdiff/templates/diff.html @@ -39,13 +39,14 @@ {% if diff['added'] %} - + {% for item in diff['added'] %} - + + {% endfor %}
PackageVersionVCSPackageVersionGitPathCommitId
{{ item['newpkg']['name'] }} {{ item['newpkg']['version']['ver'] }}-{{item['newpkg']['version']['rel']}}{{ item['newpkg']['vcs'] }}{{ item['newpkg']['git_path'] }}{{ item['newpkg']['commit_id'] }}
@@ -54,13 +55,14 @@ {% if diff['removed'] %} - + {% for item in diff['removed'] %} - + + {% endfor %}
PackageVersionVCSPackageVersionGitPathCommitId
{{ item['oldpkg']['name'] }} {{ item['oldpkg']['version']['ver'] }}-{{item['oldpkg']['version']['rel']}}{{ item['oldpkg']['vcs'] }}{{ item['oldpkg']['git_path'] }}{{ item['oldpkg']['commit_id'] }}
@@ -69,7 +71,7 @@ {% if diff['modified'] %} - + {% for item in diff['modified'] %} @@ -77,8 +79,14 @@ + @@ -89,13 +97,14 @@ {% if diff['rebuilded'] %}
PackageVersionVCSPackageVersionGitPathCommitId
{{ item['oldpkg']['version']['ver'] }}-{{item['oldpkg']['version']['rel']}}~{{ item['newpkg']['version']['ver'] }}-{{item['newpkg']['version']['rel']}}
    -
  • {{ item['oldpkg']['vcs'] }}
  • -
  • {{ item['newpkg']['vcs'] }}
  • +
  • {{ item['oldpkg']['git_path'] }}
  • +
  • {{ item['newpkg']['git_path'] }}
  • +
+
+
    +
  • {{ item['oldpkg']['commit_id'] }}
  • +
  • {{ item['newpkg']['commit_id'] }}
- + {% for item in diff['rebuilded'] %} - + + {% endfor %}
PackageVersionVCSPackageVersionGitPathCommitId
{{ item['oldpkg']['name'] }} {{ item['oldpkg']['version']['ver'] }}-{{item['oldpkg']['version']['rel']}}~{{ item['newpkg']['version']['ver'] }}-{{item['newpkg']['version']['rel']}}{{ item['oldpkg']['vcs'] }}{{ item['oldpkg']['git_path'] }}{{ item['oldpkg']['commit_id'] }}
-- 2.34.1