comparison mercurial/patch.py @ 26557:23f3f1cbd53b

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.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 07 Oct 2015 01:20:49 -0700
parents 2bef84fad19f
children fe52cd049f01
comparison
equal deleted inserted replaced
26556:2bef84fad19f 26557:23f3f1cbd53b
148 return headersplit(stream, cur) 148 return headersplit(stream, cur)
149 # Not enough info, keep reading 149 # Not enough info, keep reading
150 150
151 # if we are here, we have a very plain patch 151 # if we are here, we have a very plain patch
152 return remainder(cur) 152 return remainder(cur)
153
154 ## Some facility for extensible patch parsing:
155 # list of pairs ("header to match", "data key")
156 patchheadermap = []
153 157
154 def extract(ui, fileobj): 158 def extract(ui, fileobj):
155 '''extract patch from data read from fileobj. 159 '''extract patch from data read from fileobj.
156 160
157 patch can be a normal patch or contained in an email message. 161 patch can be a normal patch or contained in an email message.
236 data['branch'] = line[9:] 240 data['branch'] = line[9:]
237 elif line.startswith("# Node ID "): 241 elif line.startswith("# Node ID "):
238 data['nodeid'] = line[10:] 242 data['nodeid'] = line[10:]
239 elif line.startswith("# Parent "): 243 elif line.startswith("# Parent "):
240 parents.append(line[9:].lstrip()) 244 parents.append(line[9:].lstrip())
241 elif not line.startswith("# "): 245 elif line.startswith("# "):
246 for header, key in patchheadermap:
247 prefix = '# %s ' % header
248 if line.startswith(prefix):
249 data[key] = line[len(prefix):]
250 else:
242 hgpatchheader = False 251 hgpatchheader = False
243 elif line == '---': 252 elif line == '---':
244 ignoretext = True 253 ignoretext = True
245 if not hgpatchheader and not ignoretext: 254 if not hgpatchheader and not ignoretext:
246 cfp.write(line) 255 cfp.write(line)