comparison mercurial/commands.py @ 1190:737f9b90c571

Make import command reject patches that resemble email messages. See changeset 120aa5fc7ced1bf765b4f025f5a3a138cd87f49e for an example of why this is a good idea.
author bos@serpentine.internal.keyresearch.com
date Thu, 01 Sep 2005 09:04:18 -0700
parents 4cbcc54695b2
children 77a0c7528c2f
comparison
equal deleted inserted replaced
1189:4cbcc54695b2 1190:737f9b90c571
1007 return 1 1007 return 1
1008 1008
1009 d = opts["base"] 1009 d = opts["base"]
1010 strip = opts["strip"] 1010 strip = opts["strip"]
1011 1011
1012 mailre = re.compile(r'(From |[\w-]+:)')
1013
1012 for patch in patches: 1014 for patch in patches:
1013 ui.status("applying %s\n" % patch) 1015 ui.status("applying %s\n" % patch)
1014 pf = os.path.join(d, patch) 1016 pf = os.path.join(d, patch)
1015 1017
1016 message = [] 1018 message = []
1017 user = None 1019 user = None
1018 hgpatch = False 1020 hgpatch = False
1019 for line in file(pf): 1021 for line in file(pf):
1020 line = line.rstrip() 1022 line = line.rstrip()
1023 if not message and mailre.match(line) and not opts['mail_like']:
1024 if len(line) > 35: line = line[:32] + '...'
1025 raise util.Abort('first line looks like a '
1026 'mail header: ' + line)
1021 if line.startswith("--- ") or line.startswith("diff -r"): 1027 if line.startswith("--- ") or line.startswith("diff -r"):
1022 break 1028 break
1023 elif hgpatch: 1029 elif hgpatch:
1024 # parse values when importing the result of an hg export 1030 # parse values when importing the result of an hg export
1025 if line.startswith("# User "): 1031 if line.startswith("# User "):
1660 "identify|id": (identify, [], 'hg identify'), 1666 "identify|id": (identify, [], 'hg identify'),
1661 "import|patch": 1667 "import|patch":
1662 (import_, 1668 (import_,
1663 [('p', 'strip', 1, 'path strip'), 1669 [('p', 'strip', 1, 'path strip'),
1664 ('f', 'force', None, 'skip check for outstanding changes'), 1670 ('f', 'force', None, 'skip check for outstanding changes'),
1665 ('b', 'base', "", 'base path')], 1671 ('b', 'base', "", 'base path'),
1672 ('m', 'mail-like', None, 'apply a patch that looks like email')],
1666 "hg import [-f] [-p NUM] [-b BASE] PATCH..."), 1673 "hg import [-f] [-p NUM] [-b BASE] PATCH..."),
1667 "incoming|in": (incoming, 1674 "incoming|in": (incoming,
1668 [('p', 'patch', None, 'show patch')], 1675 [('p', 'patch', None, 'show patch')],
1669 'hg incoming [-p] [SOURCE]'), 1676 'hg incoming [-p] [SOURCE]'),
1670 "^init": (init, [], 'hg init [DEST]'), 1677 "^init": (init, [], 'hg init [DEST]'),