Mercurial > hg > CommitWatcher
diff commitwatcher/agent.py @ 15:77118f83b5b7
almost does somethign
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Sat, 28 Sep 2013 09:20:14 -0700 |
parents | a0ff003319ec |
children | 59c94aaf311c |
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): """