Metadata-Version: 2.0 Name: unidiff Version: 0.5.5 Summary: Unified diff parsing/metadata extraction library. Home-page: http://github.com/matiasb/python-unidiff Author: Matias Bordese Author-email: mbordese@gmail.com License: MIT Description-Content-Type: UNKNOWN Keywords: unified,diff,parse,metadata Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: Development Status :: 4 - Beta Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Unidiff ======= Simple Python library to parse and interact with unified diff data. .. image:: https://travis-ci.org/matiasb/python-unidiff.svg?branch=master :target: https://travis-ci.org/matiasb/python-unidiff Installing unidiff ------------------ :: $ pip install unidiff Quick start ----------- :: >>> import urllib2 >>> from unidiff import PatchSet >>> diff = urllib2.urlopen('https://github.com/matiasb/python-unidiff/pull/3.diff') >>> encoding = diff.headers.getparam('charset') >>> patch = PatchSet(diff, encoding=encoding) >>> patch , , ]> >>> patch[0] >>> patch[0].is_added_file True >>> patch[0].added 6 >>> patch[1] >>> patch[1].added, patch[1].removed (20, 11) >>> len(patch[1]) 6 >>> patch[1][2] >>> patch[2] >>> print patch[2] --- a/unidiff/utils.py +++ b/unidiff/utils.py @@ -37,4 +37,3 @@ # - deleted line # \ No newline case (ignore) RE_HUNK_BODY_LINE = re.compile(r'^([- \+\\])') Load unified diff data by instantiating PatchSet with a file-like object as argument, or using PatchSet.from_filename class method to read diff from file. A PatchSet is a list of files updated by the given patch. For each PatchedFile you can get stats (if it is a new, removed or modified file; the source/target lines; etc), besides having access to each hunk (also like a list) and its respective info. At any point you can get the string representation of the current object, and that will return the unified diff data of it. As a quick example of what can be done, check bin/unidiff file. Also, once installed, unidiff provides a command-line program that displays information from diff data (a file, or stdin). For example: :: $ git diff | unidiff Summary ------- README.md: +6 additions, -0 deletions 1 modified file(s), 0 added file(s), 0 removed file(s) Total: 6 addition(s), 0 deletion(s) Load a local diff file ---------------------- To instantiate PatchSet from a local file, you can use: :: >>> from unidiff import PatchSet >>> patch = PatchSet.from_filename('tests/samples/bzr.diff', encoding='utf-8') >>> patch , , ]> Notice the (optional) encoding parameter. If not specified, unicode input will be expected. Or alternatively: :: >>> import codecs >>> from unidiff import PatchSet >>> with codecs.open('tests/samples/bzr.diff', 'r', encoding='utf-8') as diff: ... patch = PatchSet(diff) ... >>> patch , , ]> Finally, you can also instantiate PatchSet passing any iterable (and encoding, if needed): :: >>> from unidiff import PatchSet >>> with open('tests/samples/bzr.diff', 'r') as diff: ... data = diff.readlines() ... >>> patch = PatchSet(data, encoding='utf-8') >>> patch , , ]> References ---------- * http://en.wikipedia.org/wiki/Diff_utility * http://www.artima.com/weblogs/viewpost.jsp?thread=164293