--- a/mercurial/obsutil.py Thu Jul 06 14:56:16 2017 +0200
+++ b/mercurial/obsutil.py Thu Jul 06 14:58:44 2017 +0200
@@ -7,6 +7,8 @@
from __future__ import absolute_import
+import re
+
from . import (
phases,
util
@@ -309,11 +311,27 @@
EFFECTFLAGFIELD = "ef1"
DESCCHANGED = 1 << 0 # action changed the description
+METACHANGED = 1 << 1 # action change the meta
PARENTCHANGED = 1 << 2 # action change the parent
USERCHANGED = 1 << 4 # the user changed
DATECHANGED = 1 << 5 # the date changed
BRANCHCHANGED = 1 << 6 # the branch changed
+METABLACKLIST = [
+ re.compile('^branch$'),
+ re.compile('^.*-source$'),
+ re.compile('^.*_source$'),
+ re.compile('^source$'),
+]
+
+def metanotblacklisted(metaitem):
+ """ Check that the key of a meta item (extrakey, extravalue) does not
+ match at least one of the blacklist pattern
+ """
+ metakey = metaitem[0]
+
+ return not any(pattern.match(metakey) for pattern in METABLACKLIST)
+
def geteffectflag(relation):
""" From an obs-marker relation, compute what changed between the
predecessor and the successor.
@@ -343,6 +361,16 @@
if changectx.parents() != source.parents():
effects |= PARENTCHANGED
+ # Check if other meta has changed
+ changeextra = changectx.extra().items()
+ ctxmeta = filter(metanotblacklisted, changeextra)
+
+ sourceextra = source.extra().items()
+ srcmeta = filter(metanotblacklisted, sourceextra)
+
+ if ctxmeta != srcmeta:
+ effects |= METACHANGED
+
return effects
def getobsoleted(repo, tr):