# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 2015-10-07 08:20:49
# Node ID 23f3f1cbd53b6d80def2dacfbd5c1123038dd9fd
# Parent  2bef84fad19f0eaec54041e535526d6b547cb613

extract: add some facility for extensible header parsing

We need a way for extension to extend the header we can parse. We start with a
very simple mechanism that will be used in the next changeset.

diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -151,6 +151,10 @@ def split(stream):
     # if we are here, we have a very plain patch
     return remainder(cur)
 
+## Some facility for extensible patch parsing:
+# list of pairs ("header to match", "data key")
+patchheadermap = []
+
 def extract(ui, fileobj):
     '''extract patch from data read from fileobj.
 
@@ -238,7 +242,12 @@ def extract(ui, fileobj):
                             data['nodeid'] = line[10:]
                         elif line.startswith("# Parent "):
                             parents.append(line[9:].lstrip())
-                        elif not line.startswith("# "):
+                        elif line.startswith("# "):
+                            for header, key in patchheadermap:
+                                prefix = '# %s ' % header
+                                if line.startswith(prefix):
+                                    data[key] = line[len(prefix):]
+                        else:
                             hgpatchheader = False
                     elif line == '---':
                         ignoretext = True