#79 Added feature to be able to diff a new compose againts a rpms.json file.
Merged 5 years ago by lsedlar. Opened 5 years ago by mcurlej.
mcurlej/compose-utils diff_input  into  master

file modified
+25 -5
@@ -5,6 +5,7 @@ 

  import copy

  import json

  import os

+ from collections import namedtuple

  

  import productmd

  from kobo.rpmlib import parse_nvra
@@ -41,15 +42,31 @@ 

                          )

          return result

  

+     def get_diff_rpms_file(self, rpms_file_path, new_compose_path):

+         """

+         Diffs rpms from a new compose againts an rpms.json file

+         """

+         old_rm = productmd.Rpms()

+         old_rm.load(rpms_file_path)

+ 

+         new_rm = productmd.compose.Compose(new_compose_path).rpms

+ 

+         result = self._make_diff(old_rm, new_rm)

+ 

+         return result

+ 

      def get_diff(self, old_compose_path, new_compose_path):

          """Compare composes and produce a dict with difference information"""

-         result = {}

- 

          old_rm = productmd.compose.Compose(old_compose_path).rpms

-         result["old_compose"] = old_rm.compose.id

- 

          new_rm = productmd.compose.Compose(new_compose_path).rpms

-         result["new_compose"] = new_rm.compose.id

+ 

+         result = self._make_diff(old_rm, new_rm)

+ 

+         return result

+ 

+     def _make_diff(self, old_rm, new_rm):

+         """ Creates a diff between two productmd Rpms objects. """

+         result = {}

  

          srpms_old = self.get_srpms(old_rm)

          srpms_new = self.get_srpms(new_rm)
@@ -57,6 +74,9 @@ 

          rpms_old = self.get_rpms(old_rm)

          rpms_new = self.get_rpms(new_rm)

  

+         result["old_compose"] = old_rm.compose.id

+         result["new_compose"] = new_rm.compose.id

+ 

          for i in (

              list(srpms_old.keys())

              + list(srpms_new.keys())

file modified
+7
@@ -11,6 +11,13 @@ 

      return pth

  

  

+ def get_rpms_json_path(ident):

+     """Given a compose ID, return path to the rpms.json file of that compose."""

+     base = os.path.dirname(__file__)

+     pth = os.path.join(base, 'composes', ident, 'compose', 'metadata', 'rpms.json')

+     return pth

+ 

+ 

  def get_compose(ident, path=None):

      """Load a test compose and return the Compose instance."""

      path = path or get_compose_path(ident)

file modified
+10 -1
@@ -7,7 +7,7 @@ 

  except ImportError:

      import unittest

  

- from .helpers import get_compose_path

+ from .helpers import get_compose_path, get_rpms_json_path

  

  from compose_utils import diff

  
@@ -56,3 +56,12 @@ 

          data = cdiff.get_diff(old_compose, new_compose)

          self.maxDiff = None

          self.assertEqual(data["diff"], EXPECTED_DIFF)

+ 

+     def test_diff_with_rpms_json_file(self):

+         rpms_file_path = get_rpms_json_path("DP-1.0-20160315.t.0")

+         new_compose = get_compose_path("DP-1.0-20160315.t.1")

+         cdiff = diff.ComposeRpmsDiff()

+ 

+         data = cdiff.get_diff_rpms_file(rpms_file_path, new_compose)

+         self.maxDiff = None

+         self.assertEqual(data["diff"], EXPECTED_DIFF)

@lsedlar can you take look?

Signed-off-by: Martin Curlej mcurlej@redhat.com

rebased onto ff8f75140a9c3a1ef863f959127904e18441614a

5 years ago

This is too complicated. Can you just do:

old_rm = productmd.Rpms()
old_rm.load(rpms_file_path)

rebased onto 9efe711d9cb9e89b16cdca1d9280e50e42cb5adb

5 years ago

@lsedlar Thanks didn't know you can do that.. ;)

rebased onto 6e2eb2a

5 years ago

Pull-Request has been merged by lsedlar

5 years ago