[SCM] ci-tooling packaging branch, master, updated. 569b3ca0d1ab57271dae2d0f08fabbc2e43b700a
Harald Sitter
apachelogger-guest at moszumanska.debian.org
Tue Mar 24 14:20:56 UTC 2015
Gitweb-URL: http://git.debian.org/?p=pkg-kde/ci-tooling.git;a=commitdiff;h=569b3ca
The following commit has been merged in the master branch:
commit 569b3ca0d1ab57271dae2d0f08fabbc2e43b700a
Author: Harald Sitter <sitter at kde.org>
Date: Tue Mar 24 15:20:50 2015 +0100
add a qml ignorerule class implementing a per-package ignore rule format
this is currently not wired up to the verifier
ignore rules are of the format NAME\s+VERSION, where version is in fact
optional. ignore rules are read from path via IgnoreRule.read returning
an array. it is the class consumer's responsibility to check ignoriyness
via rule.ignore?(qml_module). rule matching is as dynamic as possibly
a) names can include wildcarding as per File.fnmatch e.g. org.kde.* matches
all org.kde modules
b) since version is optional in the format a nil version matches everything
in the future this might change to support more precise matching with
~> >= <= = etc (no use case for it right now)
---
lib/qml_ignore_rule.rb | 43 +++++++++++++++
test/data/test_qml_ignore_rule/test_read | 4 ++
test/test_qml_ignore_rule.rb | 90 ++++++++++++++++++++++++++++++++
3 files changed, 137 insertions(+)
diff --git a/lib/qml_ignore_rule.rb b/lib/qml_ignore_rule.rb
new file mode 100644
index 0000000..374168d
--- /dev/null
+++ b/lib/qml_ignore_rule.rb
@@ -0,0 +1,43 @@
+require_relative 'qml'
+
+module QML
+ # Sepcifies an ignore rule for a qml module.
+ class IgnoreRule
+ attr_reader :identifier
+ attr_reader :version
+
+ def ignore?(qml_module)
+ return false unless match_version?(qml_module)
+ match_identifier?(qml_module)
+ end
+
+ # @return [Array<IgnoreRule>] array of ignore rules read from path
+ def self.read(path)
+ rules = File.read(path).split($/)
+ rules.collect! do |line|
+ new(*line.split(/\s+/))
+ end
+ rules.compact
+ end
+
+ private
+
+ def initialize(identifier, version = nil)
+ @identifier = identifier
+ @version = version
+ unless @version.nil? || @version.is_a?(String)
+ fail 'Version must either be nil or a string'
+ end
+ return unless @identifier.nil? || @identifier.empty?
+ fail 'No valid identifier set. Needs to be a string and not empty'
+ end
+
+ def match_version?(qml_module)
+ @version.nil? || @version == qml_module.version
+ end
+
+ def match_identifier?(qml_module)
+ File.fnmatch(@identifier, qml_module.identifier)
+ end
+ end
+end
diff --git a/test/data/test_qml_ignore_rule/test_read b/test/data/test_qml_ignore_rule/test_read
new file mode 100644
index 0000000..7145e20
--- /dev/null
+++ b/test/data/test_qml_ignore_rule/test_read
@@ -0,0 +1,4 @@
+org.kde.kwin 1.0
+org.kde.plasma
+org.kde.plasma.abc 2.0
+org.kde.plasma.* 1.0
diff --git a/test/test_qml_ignore_rule.rb b/test/test_qml_ignore_rule.rb
new file mode 100644
index 0000000..c52c438
--- /dev/null
+++ b/test/test_qml_ignore_rule.rb
@@ -0,0 +1,90 @@
+require_relative '../lib/qml_ignore_rule'
+require_relative 'lib/testcase'
+
+# Test qml ignore rules
+class QMLIgnoreRuleTest < TestCase
+ def new_rule(identifier, version = nil)
+ QML::IgnoreRule.send(:new, identifier, version)
+ end
+
+ def new_mod(id, version = nil)
+ QML::Module.new(id, version)
+ end
+
+ def test_init
+ assert_raise RuntimeError do
+ new_rule(nil, nil)
+ end
+ assert_raise RuntimeError do
+ new_rule('id', 1.0) # Float version
+ end
+ r = new_rule('id', 'version')
+ assert_equal('id', r.identifier)
+ assert_equal('version', r.version)
+ end
+
+ # @return [Array] used as send_array for assert_send
+ def send_identifier(id, mod)
+ [new_rule(id), :match_identifier?, mod]
+ end
+
+ def assert_identifier(id, mod, message = nil)
+ assert_send(send_identifier(id, mod), message)
+ end
+
+ def assert_not_identifier(id, mod, message = nil)
+ assert_not_send(send_identifier(id, mod), message)
+ end
+
+ def test_match_id
+ mod = QML::Module.new('org.kde.plasma.abc')
+ truthies = %w(
+ org.kde.plasma.*
+ org.kde.plasma.abc
+ org.kde.plasma.abc*
+ )
+ truthies.each { |t| assert_identifier(t, mod) }
+ falsies = %w(
+ org.kde.plasma
+ org.kde.plasma.abc.*
+ )
+ falsies.each { |f| assert_not_identifier(f, mod) }
+ end
+
+ def test_match_version
+ id = 'org.kde.plasma.abc'
+ mod = QML::Module.new(id, '1.0')
+ assert_send([new_rule(id, '1.0'), :match_version?, mod])
+ assert_send([new_rule(id, nil), :match_version?, mod])
+ assert_not_send([new_rule(id, '2.0'), :match_version?, mod])
+ end
+
+ def test_ignore
+ id = 'org.kde.plasma'
+ version = '2.0'
+ r = new_rule(id, version)
+ assert_false(r.ignore?(new_mod('org.kde', version)))
+ assert_false(r.ignore?(new_mod(id, '1.0')))
+ assert_true(r.ignore?(new_mod(id, version)))
+ r = new_rule(id, nil) # nil version should match anything
+ assert_true(r.ignore?(new_mod(id, version)))
+ assert_true(r.ignore?(new_mod(id, '1.0')))
+ assert_true(r.ignore?(new_mod(id, nil)))
+ end
+
+ def test_read
+ r = QML::IgnoreRule.read(data)
+ expected = {
+ 'org.kde.kwin' => '1.0',
+ 'org.kde.plasma' => nil,
+ 'org.kde.plasma.abc' => '2.0',
+ 'org.kde.plasma.*' => '1.0'
+ }
+ r.each do |rule|
+ next unless expected.keys.include?(rule.identifier)
+ version = expected.delete(rule.identifier)
+ assert_equal(version, rule.version, 'Versions do not match')
+ end
+ assert_empty(expected, "Did not get all expected rules")
+ end
+end
--
ci-tooling packaging
More information about the pkg-kde-commits
mailing list