# HG changeset patch # User FUJIWARA Katsunori # Date 2015-12-23 13:28:52 # Node ID 707cdf2c370093601865bc4a489fbc3e1b167aa0 # Parent e47841c8343d06b91637c84866bf1469b835b1f7 mq: use fallback patch name if no alpha-numeric in summary line (issue5025) Before this patch, "hg qimport -r REV" fails, if the summary line of description of REV doesn't contain any alpha-numeric bytes. In this case, all bytes in the summary line 'title' are dropped from 'namebase' by the code path below. namebase = re.sub('[\s\W_]+', '_', title.lower()).strip('_') 'makepatchname()' immediately returns this empty string as valid patch name, because patch name conflicting against empty string never exists. Then, "hg qimport -r REV" is aborted at creation of patch file with empty filename. This situation isn't so rare. For example, ordinary texts in Japanese often consist of non alpha-numeric bytes in UTF-8. This patch makes 'makepatchname()' use fallback patch name if the summary line of imported revision doesn't contain any alpha-numeric bytes. diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -395,10 +395,12 @@ def newcommit(repo, phase, *args, **kwar class AbortNoCleanup(error.Abort): pass -def makepatchname(existing, title): +def makepatchname(existing, title, fallbackname): """Return a suitable filename for title, adding a suffix to make it unique in the existing list""" namebase = re.sub('[\s\W_]+', '_', title.lower()).strip('_') + if not namebase: + namebase = fallbackname name = namebase i = 0 while name in existing: @@ -2101,7 +2103,8 @@ class queue(object): if not patchname: patchname = makepatchname(self.fullseries, - repo[r].description().split('\n', 1)[0]) + repo[r].description().split('\n', 1)[0], + '%d.diff' % r) checkseries(patchname) self.checkpatchname(patchname, force) self.fullseries.insert(0, patchname) diff --git a/tests/test-mq-qimport.t b/tests/test-mq-qimport.t --- a/tests/test-mq-qimport.t +++ b/tests/test-mq-qimport.t @@ -290,3 +290,26 @@ check qimport phase: $ cd .. $ killdaemons.py + +check patch name generation for non-alpha-numeric summary line + + $ cd repo + + $ hg qpop -a -q + patch queue now empty + $ hg qseries -v + 0 U imported_patch_b_diff + 1 U 0 + 2 U this-name-is-better + 3 U url.diff + + $ echo bb >> b + $ hg commit -m '==++--==' + + $ hg qimport -r tip + $ hg qseries -v + 0 A 1.diff + 1 U imported_patch_b_diff + 2 U 0 + 3 U this-name-is-better + 4 U url.diff