##// END OF EJS Templates
phabricator: combine commit messages into the review when folding commits...
phabricator: combine commit messages into the review when folding commits No visible changes here, until an option to enable it is added to `phabsend`. This combines the Differential fields like Arcanist does, rather than simply concatenating the text blocks. Aside from populating everything properly in the web interface, Phabricator fails the review create/update if repeated fields are seen as would happen with simple concatenation. On the flip side, now that the Summary and Test Plan fields can contain data from multiple commits, we can't just join these fields together to determine if an amend is needed. If that were to happen, every single commit in the folded range would get amended with the combined commit message, which seems clearly wrong. Aside from making a minor assumption about the content of the Differential Revision field (it seems they allow some minor variances with spacing), this means that for folded reviews, you can't post it, go to the web page add a missing Test Plan, and then get it added to the commit message by re-posting it. I don't think that's a big deal. Differential Revision: https://phab.mercurial-scm.org/D8309

File last commit:

r43812:2fe6121c default
r45134:dbe9182c default
Show More
commitextras.py
89 lines | 2.4 KiB | text/x-python | PythonLexer
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546 # commitextras.py
#
# Copyright 2013 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Pulkit Goyal
commitextras: mark the extension as ADVANCED
r33562 '''adds a new flag extras to commit (ADVANCED)'''
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546
from __future__ import absolute_import
Pulkit Goyal
commitextras: make sure keys contains ascii letters, numbers, '_' and '-' only
r33603 import re
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546 from mercurial.i18n import _
from mercurial import (
commands,
Pulkit Goyal
commitextras: check the format of the arguments and no internal key is used...
r33547 error,
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546 extensions,
registrar,
Valentin Gatien-Baron
commitextras: work nicely with other extensions...
r39330 util,
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546 )
cmdtable = {}
command = registrar.command(cmdtable)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 testedwith = b'ships-with-hg-core'
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546
Pulkit Goyal
commitextras: check the format of the arguments and no internal key is used...
r33547 usedinternally = {
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'amend_source',
b'branch',
b'close',
b'histedit_source',
b'topic',
b'rebase_source',
b'intermediate-source',
b'__touch-noise__',
b'source',
b'transplant_source',
Pulkit Goyal
commitextras: check the format of the arguments and no internal key is used...
r33547 }
Augie Fackler
formatting: blacken the codebase...
r43346
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546 def extsetup(ui):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 entry = extensions.wrapcommand(commands.table, b'commit', _commit)
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546 options = entry[1]
Augie Fackler
formatting: blacken the codebase...
r43346 options.append(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 (
b'',
b'extra',
[],
_(b'set a changeset\'s extra values'),
_(b"KEY=VALUE"),
)
Augie Fackler
formatting: blacken the codebase...
r43346 )
Pulkit Goyal
commitextras: move fb extension to core which add extras to a commit...
r33546
def _commit(orig, ui, repo, *pats, **opts):
Martin von Zweigbergk
py3: delete b'' prefix from safehasattr arguments...
r43385 if util.safehasattr(repo, 'unfiltered'):
Valentin Gatien-Baron
commitextras: work nicely with other extensions...
r39330 repo = repo.unfiltered()
Augie Fackler
formatting: blacken the codebase...
r43346
Valentin Gatien-Baron
commitextras: work nicely with other extensions...
r39330 class repoextra(repo.__class__):
def commit(self, *innerpats, **inneropts):
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 extras = opts.get('extra')
Valentin Gatien-Baron
commitextras: no need to special case extras=[]...
r39331 for raw in extras:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if b'=' not in raw:
Augie Fackler
formatting: blacken the codebase...
r43346 msg = _(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"unable to parse '%s', should follow "
b"KEY=VALUE format"
Augie Fackler
formatting: blacken the codebase...
r43346 )
Valentin Gatien-Baron
commitextras: no need to special case extras=[]...
r39331 raise error.Abort(msg % raw)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 k, v = raw.split(b'=', 1)
Valentin Gatien-Baron
commitextras: no need to special case extras=[]...
r39331 if not k:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 msg = _(b"unable to parse '%s', keys can't be empty")
Valentin Gatien-Baron
commitextras: no need to special case extras=[]...
r39331 raise error.Abort(msg % raw)
Gregory Szorc
global: use raw strings for regular expressions with escapes...
r41673 if re.search(br'[^\w-]', k):
Augie Fackler
formatting: blacken the codebase...
r43346 msg = _(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"keys can only contain ascii letters, digits,"
b" '_' and '-'"
Augie Fackler
formatting: blacken the codebase...
r43346 )
Valentin Gatien-Baron
commitextras: no need to special case extras=[]...
r39331 raise error.Abort(msg)
if k in usedinternally:
Augie Fackler
formatting: blacken the codebase...
r43346 msg = _(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"key '%s' is used internally, can't be set "
b"manually"
Augie Fackler
formatting: blacken the codebase...
r43346 )
Valentin Gatien-Baron
commitextras: no need to special case extras=[]...
r39331 raise error.Abort(msg % k)
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 inneropts['extra'][k] = v
Valentin Gatien-Baron
commitextras: work nicely with other extensions...
r39330 return super(repoextra, self).commit(*innerpats, **inneropts)
Augie Fackler
formatting: blacken the codebase...
r43346
Valentin Gatien-Baron
commitextras: work nicely with other extensions...
r39330 repo.__class__ = repoextra
return orig(ui, repo, *pats, **opts)