This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

What The Patch!?

What The Patch!? is a library for parsing patch files. Its only purpose is to read a patch file and get it into some usable form by other programs.

Features

  • Parsing of almost all diff formats (except forwarded ed):
    • normal (default, –normal)
    • copied context (-c, –context)
    • unified context (-u, –unified)
    • ed script (-e, –ed)
    • rcs ed script (-n, –rcs)
  • Parsing of several SCM patches:
    • CVS
    • SVN
    • Git

Installation

To install What The Patch!?, simply:

$ pip install whatthepatch

Usage

Let us say we have a patch file containing some changes, aptly named ‘somechanges.patch’:

--- lao     2012-12-26 23:16:54.000000000 -0600
+++ tzu     2012-12-26 23:16:50.000000000 -0600
@@ -1,7 +1,6 @@
-The Way that can be told of is not the eternal Way;
-The name that can be named is not the eternal name.
 The Nameless is the origin of Heaven and Earth;
-The Named is the mother of all things.
+The named is the mother of all things.
+
 Therefore let there always be non-being,
   so we may see their subtlety,
  And let there always be being,
@@ -9,3 +8,6 @@
 The two are the same,
 But after they are produced,
   they have different names.
+They both may be called deep and profound.
+Deeper and more profound,
+The door of all subtleties!

Parsing

Here is how we would use What The Patch!? in Python to get the changeset for each diff in the patch:

>>> import whatthepatch
>>> with open('somechanges.patch') as f:
...     text = f.read()
...
>>> for diff in whatthepatch.parse_patch(text):
...     print(diff)
...
diff(header=header(
                    index_path=None,
                    old_path='lao',
                    old_version='2012-12-26 23:16:54.000000000 -0600',
                    new_path='tzu',
                    new_version='2012-12-26 23:16:50.000000000 -0600'
                    ),
    changes=[
        (1, None,   'The Way that can be told of is not the eternal Way;'),
        (2, None,   'The name that can be named is not the eternal name.'),
        (3, 1,      'The Nameless is the origin of Heaven and Earth;'),
        (4, None,   'The Named is the mother of all things.'),
        (None, 2,   'The named is the mother of all things.'),
        (None, 3,   ''),
        (5, 4,      'Therefore let there always be non-being,'),
        (6, 5,      '  so we may see their subtlety,'),
        (7, 6,      'And let there always be being,'),
        (9, 8,      'The two are the same,'),
        (10, 9,     'But after they are produced,'),
        (11, 10,    '  they have different names.'),
        (None, 11,  'They both may be called deep and profound.'),
        (None, 12,  'Deeper and more profound,'),
        (None, 13,  'The door of all subtleties!')
        ]
    )

Edited to show structure of the results

The changes are listed as they are in the patch, but instead of the +/- syntax of the patch, we get a tuple of two numbers and the text of the line. What these numbers indicate are as follows:

  1. ( 1, None, ... ) indicates line 1 of the file lao was removed.
  2. ( None, 2, ... ) indicates line 2 of the file tzu was inserted.
  3. ( 5, 4, ... ) indicates that line 5 of lao and line 4 of tzu are equal.

Please note that not all patch formats provide the actual lines modified, so some results will have the text portion of the tuple set to None.

Applying

To apply a diff to some lines of text, first read the patch and parse it.

>>> import whatthepatch
>>> with open('somechanges.patch') as f:
...     text = f.read()
...
>>> with open('lao') as f:
...     lao = f.read()
...
>>> diff = [x for x in whatthepatch.parse_patch(text)]
>>> diff = diff[0]
>>> tzu = whatthepatch.apply_diff(diff, lao)

Contribute

  1. Fork this repository
  2. Create a new branch to work on
  3. Commit your tests and/or changes
  4. Push and create a pull request here!
Release History

Release History

0.0.4

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.0.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.0.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.0.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
whatthepatch-0.0.4-py2.py3-none-any.whl (12.0 kB) Copy SHA256 Checksum SHA256 2.7 Wheel Dec 25, 2015
whatthepatch-0.0.4.tar.gz (11.3 kB) Copy SHA256 Checksum SHA256 Source Dec 25, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting