Mercurial > hg
comparison mercurial/cmdutil.py @ 26742:bec1a579ebc4
commit: abort when a committemplate is not changed
If a committemplate is provided and no message is provided on the
command line, and no edits are made to the commit template, then abort
the commit.
author | Tony Tung <tonytung@fb.com> |
---|---|
date | Fri, 09 Oct 2015 21:44:54 -0700 |
parents | 92d67e5729b9 |
children | 3c1d297fe929 |
comparison
equal
deleted
inserted
replaced
26741:e1568d5eb052 | 26742:bec1a579ebc4 |
---|---|
2689 return newid | 2689 return newid |
2690 | 2690 |
2691 def commiteditor(repo, ctx, subs, editform=''): | 2691 def commiteditor(repo, ctx, subs, editform=''): |
2692 if ctx.description(): | 2692 if ctx.description(): |
2693 return ctx.description() | 2693 return ctx.description() |
2694 return commitforceeditor(repo, ctx, subs, editform=editform) | 2694 return commitforceeditor(repo, ctx, subs, editform=editform, |
2695 unchangedmessagedetection=True) | |
2695 | 2696 |
2696 def commitforceeditor(repo, ctx, subs, finishdesc=None, extramsg=None, | 2697 def commitforceeditor(repo, ctx, subs, finishdesc=None, extramsg=None, |
2697 editform=''): | 2698 editform='', unchangedmessagedetection=False): |
2698 if not extramsg: | 2699 if not extramsg: |
2699 extramsg = _("Leave message empty to abort commit.") | 2700 extramsg = _("Leave message empty to abort commit.") |
2700 | 2701 |
2701 forms = [e for e in editform.split('.') if e] | 2702 forms = [e for e in editform.split('.') if e] |
2702 forms.insert(0, 'changeset') | 2703 forms.insert(0, 'changeset') |
2704 templatetext = None | |
2703 while forms: | 2705 while forms: |
2704 tmpl = repo.ui.config('committemplate', '.'.join(forms)) | 2706 tmpl = repo.ui.config('committemplate', '.'.join(forms)) |
2705 if tmpl: | 2707 if tmpl: |
2706 committext = buildcommittemplate(repo, ctx, subs, extramsg, tmpl) | 2708 templatetext = committext = buildcommittemplate( |
2709 repo, ctx, subs, extramsg, tmpl) | |
2707 break | 2710 break |
2708 forms.pop() | 2711 forms.pop() |
2709 else: | 2712 else: |
2710 committext = buildcommittext(repo, ctx, subs, extramsg) | 2713 committext = buildcommittext(repo, ctx, subs, extramsg) |
2711 | 2714 |
2712 # run editor in the repository root | 2715 # run editor in the repository root |
2713 olddir = os.getcwd() | 2716 olddir = os.getcwd() |
2714 os.chdir(repo.root) | 2717 os.chdir(repo.root) |
2715 text = repo.ui.edit(committext, ctx.user(), ctx.extra(), editform=editform) | 2718 editortext = repo.ui.edit(committext, ctx.user(), ctx.extra(), |
2716 text = re.sub("(?m)^HG:.*(\n|$)", "", text) | 2719 editform=editform) |
2720 | |
2721 text = re.sub("(?m)^HG:.*(\n|$)", "", editortext) | |
2717 os.chdir(olddir) | 2722 os.chdir(olddir) |
2718 | 2723 |
2719 if finishdesc: | 2724 if finishdesc: |
2720 text = finishdesc(text) | 2725 text = finishdesc(text) |
2721 if not text.strip(): | 2726 if not text.strip(): |
2722 raise error.Abort(_("empty commit message")) | 2727 raise error.Abort(_("empty commit message")) |
2728 if unchangedmessagedetection and editortext == templatetext: | |
2729 raise error.Abort(_("commit message unchanged")) | |
2723 | 2730 |
2724 return text | 2731 return text |
2725 | 2732 |
2726 def buildcommittemplate(repo, ctx, subs, extramsg, tmpl): | 2733 def buildcommittemplate(repo, ctx, subs, extramsg, tmpl): |
2727 ui = repo.ui | 2734 ui = repo.ui |