Exemplo n.º 1
0
    def compatibleWithBase(self, base):
        if self.name != base.name:
            # this should never happen in real life because of the
            # way Template matches up messages by name
            return Incompatible("has different name: %s vs. %s in base" %
                                (self.name, base.name))
        if self.priority != base.priority:
            return Incompatible("has different priority: %s vs. %s in base" %
                                (self.priority, base.priority))
        if self.trust != base.trust:
            return Incompatible("has different trust: %s vs. %s in base" %
                                (self.trust, base.trust))
        if self.coding != base.coding:
            return Incompatible("has different coding: %s vs. %s in base" %
                                (self.coding, base.coding))
        if self.number != base.number:
            return Incompatible("has different number: %s vs. %s in base" %
                                (self.number, base.number))

        compatibility = Same()

        if self.deprecateLevel != base.deprecateLevel:
            if self.deprecateLevel < base.deprecateLevel:
                c = Older("is less deprecated: %s vs. %s in base" %
                          (self.deprecations[self.deprecateLevel],
                           self.deprecations[base.deprecateLevel]))
            else:
                c = Newer("is more deprecated: %s vs. %s in base" %
                          (self.deprecations[self.deprecateLevel],
                           self.deprecations[base.deprecateLevel]))
            compatibility = compatibility.combine(c)

        selflen = len(self.blocks)
        baselen = len(base.blocks)
        samelen = min(selflen, baselen)

        for i in xrange(0, samelen):
            selfblock = self.blocks[i]
            baseblock = base.blocks[i]

            c = selfblock.compatibleWithBase(baseblock)
            if not c.same():
                c = Incompatible("block %d isn't identical" % i)
            compatibility = compatibility.combine(c)

        if selflen > baselen:
            c = Newer("has %d extra blocks" % (selflen - baselen))
        elif selflen < baselen:
            c = Older("missing %d extra blocks" % (baselen - selflen))
        else:
            c = Same()

        compatibility = compatibility.combine(c)
        return compatibility
Exemplo n.º 2
0
    def compatibleWithBase(self, base):
        if self.name != base.name:
            # this should never happen in real life because of the
            # way Template matches up messages by name
            return Incompatible("has different name: %s vs. %s in base"
                               % (self.name, base.name)) 
        if self.priority != base.priority:
            return Incompatible("has different priority: %s vs. %s in base"
                                % (self.priority, base.priority)) 
        if self.trust != base.trust:
            return Incompatible("has different trust: %s vs. %s in base"
                                % (self.trust, base.trust)) 
        if self.coding != base.coding:
            return Incompatible("has different coding: %s vs. %s in base"
                                % (self.coding, base.coding)) 
        if self.number != base.number:
            return Incompatible("has different number: %s vs. %s in base"
                                % (self.number, base.number))
        
        compatibility = Same()

        if self.deprecateLevel != base.deprecateLevel:
            if self.deprecateLevel < base.deprecateLevel:
                c = Older("is less deprecated: %s vs. %s in base" % (
                    self.deprecations[self.deprecateLevel],
                    self.deprecations[base.deprecateLevel]))
            else:
                c = Newer("is more deprecated: %s vs. %s in base" % (
                    self.deprecations[self.deprecateLevel],
                    self.deprecations[base.deprecateLevel]))
            compatibility = compatibility.combine(c)
        
        selflen = len(self.blocks)
        baselen = len(base.blocks)
        samelen = min(selflen, baselen)
            
        for i in xrange(0, samelen):
            selfblock = self.blocks[i]
            baseblock = base.blocks[i]
            
            c = selfblock.compatibleWithBase(baseblock)
            if not c.same():
                c = Incompatible("block %d isn't identical" % i)
            compatibility = compatibility.combine(c)
        
        if selflen > baselen:
            c = Newer("has %d extra blocks" % (selflen - baselen))
        elif selflen < baselen:
            c = Older("missing %d extra blocks" % (baselen - selflen))
        else:
            c = Same()
        
        compatibility = compatibility.combine(c)
        return compatibility