# HG changeset patch # User Pierre-Yves David # Date 1444122113 25200 # Node ID b9be8ab6e628eada5a9a4ce55fa281bc1aa8c6bb # Parent 500386e65759c665752beb67a98a029f32db1309 patch: move 'extract' return to a dictionnary The final goal here is to be able to parse, return and process arbitrary data from patch. This mirror the recently added ability to add arbitrary data to patch headers. The first step is to return something more flexible, so we return a dict without changing any other logic. diff -r 500386e65759 -r b9be8ab6e628 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Tue Oct 06 01:49:04 2015 -0700 +++ b/mercurial/cmdutil.py Tue Oct 06 02:01:53 2015 -0700 @@ -850,8 +850,15 @@ """ # avoid cycle context -> subrepo -> cmdutil import context - tmpname, message, user, date, branch, nodeid, p1, p2 = \ - patch.extract(ui, hunk) + extractdata = patch.extract(ui, hunk) + tmpname = extractdata.get('filename') + message = extractdata.get('message') + user = extractdata.get('user') + date = extractdata.get('date') + branch = extractdata.get('branch') + nodeid = extractdata.get('nodeid') + p1 = extractdata.get('p1') + p2 = extractdata.get('p2') update = not opts.get('bypass') strip = opts["strip"] diff -r 500386e65759 -r b9be8ab6e628 mercurial/patch.py --- a/mercurial/patch.py Tue Oct 06 01:49:04 2015 -0700 +++ b/mercurial/patch.py Tue Oct 06 02:01:53 2015 -0700 @@ -156,8 +156,16 @@ patch can be a normal patch or contained in an email message. - return tuple (filename, message, user, date, branch, node, p1, p2). - Any item in the returned tuple can be None. If filename is None, + return a dictionnary. Standard keys are: + - filename, + - message, + - user, + - date, + - branch, + - node, + - p1, + - p2. + Any item can be missing from the dictionary. If filename is mising, fileobj did not contain a patch. Caller must unlink filename when done.''' # attempt to detect the start of a patch @@ -167,6 +175,7 @@ r'---[ \t].*?^\+\+\+[ \t]|' r'\*\*\*[ \t].*?^---[ \t])', re.MULTILINE|re.DOTALL) + data = {} fd, tmpname = tempfile.mkstemp(prefix='hg-patch-') tmpfp = os.fdopen(fd, 'w') try: @@ -256,7 +265,11 @@ tmpfp.close() if not diffs_seen: os.unlink(tmpname) - return None, message, user, date, branch, None, None, None + data['message'] = message + data['user'] = user + data['date'] = date + data['branch'] = branch + return data if parents: p1 = parents.pop(0) @@ -268,7 +281,15 @@ else: p2 = None - return tmpname, message, user, date, branch, nodeid, p1, p2 + data['filename'] = tmpname + data['message'] = message + data['user'] = user + data['date'] = date + data['branch'] = branch + data['nodeid'] = nodeid + data['p1'] = p1 + data['p2'] = p2 + return data class patchmeta(object): """Patched file metadata