@@ -827,51 +827,71 @@ def audit_revision_and_version_scheme
827827 return unless formula . tap . git? # git log is required
828828 return if @new_formula
829829
830- fv = FormulaVersions . new ( formula , max_depth : 1 )
830+ fv = FormulaVersions . new ( formula )
831831 attributes = [ :revision , :version_scheme ]
832-
833832 attributes_map = fv . version_attributes_map ( attributes , "origin/master" )
834833
835- attributes . each do |attribute |
836- stable_attribute_map = attributes_map [ attribute ] [ :stable ]
837- next if stable_attribute_map . nil? || stable_attribute_map . empty?
838-
839- attributes_for_version = stable_attribute_map [ formula . version ]
840- next if attributes_for_version . nil? || attributes_for_version . empty?
841-
842- old_attribute = formula . send ( attribute )
843- max_attribute = attributes_for_version . max
844- if max_attribute && old_attribute < max_attribute
845- problem "#{ attribute } should not decrease (from #{ max_attribute } to #{ old_attribute } )"
846- end
847- end
848-
834+ current_version_scheme = formula . version_scheme
849835 [ :stable , :devel ] . each do |spec |
850836 spec_version_scheme_map = attributes_map [ :version_scheme ] [ spec ]
851837 next if spec_version_scheme_map . nil? || spec_version_scheme_map . empty?
852838
853- max_version_scheme = spec_version_scheme_map . values . flatten . max
839+ version_schemes = spec_version_scheme_map . values . flatten
840+ max_version_scheme = version_schemes . max
854841 max_version = spec_version_scheme_map . select do |_ , version_scheme |
855842 version_scheme . first == max_version_scheme
856843 end . keys . max
857844
858- formula_spec = formula . send ( spec )
859- next if formula_spec . nil?
845+ if max_version_scheme && current_version_scheme < max_version_scheme
846+ problem "version_scheme should not decrease (from #{ max_version_scheme } to #{ current_version_scheme } )"
847+ end
860848
861- if max_version && formula_spec . version < max_version
862- problem "#{ spec } version should not decrease (from #{ max_version } to #{ formula_spec . version } )"
849+ if max_version_scheme && current_version_scheme >= max_version_scheme &&
850+ current_version_scheme > 1 &&
851+ !version_schemes . include? ( current_version_scheme - 1 )
852+ problem "version_schemes should only increment by 1"
863853 end
854+
855+ formula_spec = formula . send ( spec )
856+ next unless formula_spec
857+
858+ spec_version = formula_spec . version
859+ next unless max_version
860+ next if spec_version >= max_version
861+
862+ above_max_version_scheme = current_version_scheme > max_version_scheme
863+ map_includes_version = spec_version_scheme_map . keys . include? ( spec_version )
864+ next if !current_version_scheme . zero? &&
865+ ( above_max_version_scheme || map_includes_version )
866+ problem "#{ spec } version should not decrease (from #{ max_version } to #{ spec_version } )"
864867 end
865868
866- return if formula . revision . zero?
869+ current_revision = formula . revision
867870 if formula . stable
868- revision_map = attributes_map [ :revision ] [ :stable ]
869- stable_revisions = revision_map [ formula . stable . version ] if revision_map
870- if !stable_revisions || stable_revisions . empty?
871- problem "'revision #{ formula . revision } ' should be removed"
871+ if revision_map = attributes_map [ :revision ] [ :stable ]
872+ if !revision_map . nil? && !revision_map . empty?
873+ stable_revisions = revision_map [ formula . stable . version ]
874+ stable_revisions ||= [ ]
875+ current_revision = formula . revision
876+ max_revision = stable_revisions . max || 0
877+
878+ if current_revision < max_revision
879+ problem "revision should not decrease (from #{ max_revision } to #{ current_revision } )"
880+ end
881+
882+ stable_revisions -= [ formula . revision ]
883+ if !current_revision . zero? && stable_revisions . empty? &&
884+ revision_map . keys . length > 1
885+ problem "'revision #{ formula . revision } ' should be removed"
886+ elsif current_revision > 1 &&
887+ current_revision != max_revision &&
888+ !stable_revisions . include? ( current_revision - 1 )
889+ problem "revisions should only increment by 1"
890+ end
891+ end
872892 end
873- else # head/devel-only formula
874- problem "'revision #{ formula . revision } ' should be removed"
893+ elsif ! current_revision . zero? # head/devel-only formula
894+ problem "'revision #{ current_revision } ' should be removed"
875895 end
876896 end
877897
@@ -1211,6 +1231,10 @@ def line_problems(line, _lineno)
12111231 end
12121232 end
12131233
1234+ if line =~ /((revision|version_scheme)\s +0)/
1235+ problem "'#{ $1} ' should be removed"
1236+ end
1237+
12141238 return unless @strict
12151239
12161240 problem "`#{ $1} ` in formulae is deprecated" if line =~ /(env :(std|userpaths))/
0 commit comments