changeset 15:77118f83b5b7

almost does somethign
author Jeff Hammel <jhammel@mozilla.com>
date Sat, 28 Sep 2013 09:20:14 -0700
parents 8a02f209992f
children 59c94aaf311c
files commitwatcher/agent.py tests/unit.py
diffstat 2 files changed, 36 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/commitwatcher/agent.py	Sat Sep 28 07:13:01 2013 -0700
+++ b/commitwatcher/agent.py	Sat Sep 28 09:20:14 2013 -0700
@@ -3,11 +3,13 @@
 """
 
 import feedparser
+import os
 from abc import abstractmethod
 from pypatch import patch
 from .commit import Commit
 from .store import MemoryStore
 
+
 class Agent(object):
     """abstract base class"""
 
@@ -51,7 +53,37 @@
 
     @staticmethod
     def lsdiff(diff):
-        import pdb; pdb.set_trace()
+
+        if '://' in diff:
+            factory = patch.fromurl
+        elif os.path.exists(diff):
+            factory = patch.fromfile
+        else:
+            factory = patch.fromstring
+        patchset = factory(diff)
+
+        files = {}
+        for p in patchset.items:
+
+            # before, after
+            a_b = {}
+            for i in ('source', 'target'):
+                a_b[i] = getattr(p, i)
+
+                # strip 'a/', 'b/' from front, just to make sure
+                # XXX because 
+                for prefix in ('a/', 'b/'):
+                    if a_b[i].startswith(prefix):
+                        a_b[i] = a_b[i][len(prefix):]
+                        break
+
+            # TODO: could break this in to added, modified, removed, renamed
+            if a_b['source'] == a_b['target']:
+                files.setdefault('modified', set()).add(a_b['source'])
+            else:
+                raise NotImplementedError("%s %s" % (a_b['source'], a_b['target']))
+
+        return files
 
     def diff_url(self, link):
         """
--- a/tests/unit.py	Sat Sep 28 07:13:01 2013 -0700
+++ b/tests/unit.py	Sat Sep 28 09:20:14 2013 -0700
@@ -41,8 +41,9 @@
     def test_patch(self):
         """test parsing the files from a patch"""
 
-        diff = os.path.join(here, '41701d2c0341.diff')
-        files = FeedAgentDiff.lsdiff(diff)
+        for diff, filenames in self.diff_files:
+            diff = os.path.join(here, diff)
+            files = FeedAgentDiff.lsdiff(diff)
 
 if __name__ == '__main__':
     unittest.main()