# HG changeset patch # User Connor Sheehan # Date 1521726502 14400 # Node ID f8e1f48de118e71c4be26d7f9e8953f65979b60c # Parent f51c2780db3ae7df4a899f97b9816f85f675a527 stringutil: add isauthorwellformed function The regular expression for this function formerly lived at https://hg.mozilla.org/hgcustom/version-control-tools/file/tip/hghooks/mozhghooks/author_format.py#l13 Differential Revision: https://phab.mercurial-scm.org/D2959 diff -r f51c2780db3a -r f8e1f48de118 mercurial/utils/stringutil.py --- a/mercurial/utils/stringutil.py Sat Mar 17 02:37:46 2018 -0400 +++ b/mercurial/utils/stringutil.py Thu Mar 22 09:48:22 2018 -0400 @@ -131,6 +131,29 @@ r = None return author[author.find('<') + 1:r] +_correctauthorformat = remod.compile(br'^[^<]+\s\<[^<>]+@[^<>]+\>$') + +def isauthorwellformed(author): + '''Return True if the author field is well formed + (ie "Contributor Name ") + + >>> isauthorwellformed(b'Good Author ') + True + >>> isauthorwellformed(b'Author ') + True + >>> isauthorwellformed(b'Bad Author') + False + >>> isauthorwellformed(b'Bad Author >> isauthorwellformed(b'Bad Author author@author.com') + False + >>> isauthorwellformed(b'') + False + >>> isauthorwellformed(b'Bad Author ') + False + ''' + return _correctauthorformat.match(author) is not None + def ellipsis(text, maxlength=400): """Trim string to at most maxlength (default: 400) columns in display.""" return encoding.trim(text, maxlength, ellipsis='...')