diff --git a/conf/trigger.cfg.example b/conf/trigger.cfg.example
--- a/conf/trigger.cfg.example
+++ b/conf/trigger.cfg.example
@@ -14,3 +14,8 @@
 job_logging = False
 joblog_file = /var/log/taskotron-trigger/jobs.csv
 fuse_delay = 1000 ; seconds
+
+[distgit]
+cache_dir = /var/lib/taskotron-trigger
+repo_url = http://pkgs.fedoraproject.org/git
+namespace = rpms-checks
diff --git a/jobtriggers/__init__.py b/jobtriggers/__init__.py
--- a/jobtriggers/__init__.py
+++ b/jobtriggers/__init__.py
@@ -3,16 +3,12 @@
 from . import config, triggers, utils
 
 
-class TriggerMsgError(Exception):
-    pass
-
-
 class JobTrigger(fedmsg.consumers.FedmsgConsumer):
     def __init__(self, *args, **kw):
         super(JobTrigger, self).__init__(*args, **kw)
         self.trigger = triggers.get_trigger(config.trigger_type)
 
-    def trigger_tasks(self, item, item_type, tasks, arches):
+    def trigger_tasks(self, item, item_type, tasks, arches, **kwargs):
         for task, arch in itertools.product(tasks, arches):
             self.log.info('triggering %s for %s on %s', task, item, arch)
 
@@ -22,6 +18,6 @@
                 except IOError, e:
                     self.log.exception(e)
 
-            output = self.trigger.trigger_job(item, item_type, task, arch)
+            output = self.trigger.trigger_job(item, item_type, task, arch, **kwargs)
             for line in output:
                 self.log.info(line)
diff --git a/jobtriggers/config.py b/jobtriggers/config.py
--- a/jobtriggers/config.py
+++ b/jobtriggers/config.py
@@ -18,6 +18,11 @@
 job_logging = False
 joblog_file = /var/log/taskotron-trigger/jobs.csv
 fuse_delay = 1000 ; seconds
+
+[distgit]
+cache_dir = /var/lib/taskotron-trigger
+repo_url = http://pkgs.fedoraproject.org/git
+namespace = rpms-checks
 """
 
 config = ConfigParser.ConfigParser()
@@ -39,3 +44,8 @@
 job_logging = True if config.get('trigger', 'job_logging') == 'True' else False
 joblog_file = config.get('trigger', 'joblog_file')
 fuse_delay = int(config.get('trigger', 'fuse_delay'))  # seconds
+
+
+distgit_cache_dir = config.get('distgit', 'cache_dir')
+distgit_repo_url = config.get('distgit', 'repo_url')
+distgit_namespace = config.get('distgit', 'namespace')
diff --git a/jobtriggers/exceptions.py b/jobtriggers/exceptions.py
new file mode 100644
--- /dev/null
+++ b/jobtriggers/exceptions.py
@@ -0,0 +1,6 @@
+class TriggerError(Exception):
+    pass
+
+
+class TriggerMsgError(Exception):
+    pass
diff --git a/jobtriggers/jobrunner.py b/jobtriggers/jobrunner.py
--- a/jobtriggers/jobrunner.py
+++ b/jobtriggers/jobrunner.py
@@ -8,7 +8,7 @@
 from . import config
 from . import koji_build_msg
 from . import koji_tag_msg
-from . import TriggerMsgError
+from . import exceptions as exc
 from .triggers import get_trigger
 
 
@@ -23,17 +23,17 @@
 logger.addHandler(sh)
 
 
-def trigger_task(item, item_type, task, arch):
+def trigger_task(item, item_type, task, arch, **kwargs):
     logger.debug('triggering %s for %s on %s' % (task, item, arch))
 
-    output = trigger.trigger_job(item, item_type, task, arch)
+    output = trigger.trigger_job(item, item_type, task, arch, **kwargs)
     for line in output:
         logger.info(line)
 
 
-def trigger_tasks(item, item_type, tasks, arches):
+def trigger_tasks(item, item_type, tasks, arches, **kwargs):
     for task, arch in itertools.product(tasks, arches):
-        trigger_task(item, item_type, task, arch)
+        trigger_task(item, item_type, task, arch, **kwargs)
 
 
 def file_jobs(jobsfile):
@@ -58,16 +58,15 @@
     for msg in r.json()['raw_messages']:
         if msg['topic'].endswith('build.state.change'):
             try:
-                n, v, r = koji_build_msg.get_nvr(msg)
-                item_type = koji_build_msg.ITEM_TYPE
-                tasks = config.koji_build_completed_tasks
-                trigger_tasks('-'.join((n, v, r)), item_type, tasks, config.valid_arches)
-            except TriggerMsgError, e:
+                koji_build_msg.trigger_tasks(msg, trigger_tasks)
+            except exc.TriggerMsgError, e:
                 logger.debug(e)
+            except exc.TriggerError, e:
+                logger.error(e)
         elif msg['topic'].endswith('tag'):
             try:
                 koji_tag_items.add(koji_tag_msg.get_item(msg))
-            except TriggerMsgError, e:
+            except exc.TriggerMsgError, e:
                 logger.debug(e)
         else:
             logger.warning('Got an unexpected topic %s', msg['topic'])
diff --git a/jobtriggers/koji_build_msg.py b/jobtriggers/koji_build_msg.py
--- a/jobtriggers/koji_build_msg.py
+++ b/jobtriggers/koji_build_msg.py
@@ -2,7 +2,8 @@
 import fedmsg
 import fedmsg.encoding
 
-from . import config, JobTrigger, TriggerMsgError
+from jobtriggers import config, utils, JobTrigger
+from jobtriggers import exceptions as exc
 
 ITEM_TYPE = 'koji_build'
 
@@ -18,19 +19,48 @@
     nvr = '-'.join((name, version, release))
 
     if not instance == 'primary':
-        raise TriggerMsgError('rejecting message not from primary koji instance (%s from %s)' %
-                              (nvr, instance))
+        raise exc.TriggerMsgError('rejecting message not from primary koji instance (%s from %s)' %
+                                  (nvr, instance))
 
     if state != koji.BUILD_STATES['COMPLETE']:
-        raise TriggerMsgError('rejecting message for not being a build complete message '
-                              '(%s, status %s)' % (nvr, state))
+        raise exc.TriggerMsgError('rejecting message for not being a build complete message '
+                                  '(%s, status %s)' % (nvr, state))
 
     if 'fc' not in release:
-        raise TriggerMsgError('rejecting message for not containing "fc" in release (%s)' % nvr)
+        raise exc.TriggerMsgError('rejecting message for not containing "fc" in release (%s)' %
+                                  nvr)
 
     return name, version, release
 
 
+def trigger_tasks(msg, f):
+    name, version, release = get_nvr(msg)
+
+    # run dist-git package-specific
+    branch = utils.get_branch(release)
+    repo = utils.get_repo(name)
+    distgit_tasks = utils.get_distgit_tasks(name, ITEM_TYPE, repo, branch)
+    f('-'.join((name, version, release)),
+      ITEM_TYPE,
+      distgit_tasks,
+      config.valid_arches,
+      branch=branch,
+      repo=repo)
+
+    # run general qa tasks
+    f('-'.join((name, version, release)),
+      ITEM_TYPE,
+      config.koji_build_completed_tasks,
+      config.valid_arches)
+
+    # run docker-specific tasks here - e. g. dockerautotest
+    if name == "docker":
+        f('-'.join((name, version, release)),
+          ITEM_TYPE,
+          config.docker_build_tasks,
+          config.valid_arches)
+
+
 class KojiBuildCompletedJobTrigger(JobTrigger):
     topic = "org.fedoraproject.prod.buildsys.build.state.change"
     jsonify = False
@@ -43,17 +73,8 @@
         msg = fedmsg.encoding.loads(message.body)
 
         try:
-            name, version, release = get_nvr(msg)
-            self.trigger_tasks('-'.join((name, version, release)),
-                               ITEM_TYPE,
-                               config.koji_build_completed_tasks,
-                               config.valid_arches)
-
-            # run docker-specific tasks here - e. g. dockerautotest
-            if name == "docker":
-                self.trigger_tasks('-'.join((name, version, release)),
-                                   ITEM_TYPE,
-                                   config.docker_build_tasks,
-                                   config.valid_arches)
-        except TriggerMsgError, e:
+            trigger_tasks(msg, self.trigger_tasks)
+        except exc.TriggerMsgError, e:
             self.log.debug(e)
+        except exc.TriggerError, e:
+            self.log.error(e)
diff --git a/jobtriggers/koji_tag_msg.py b/jobtriggers/koji_tag_msg.py
--- a/jobtriggers/koji_tag_msg.py
+++ b/jobtriggers/koji_tag_msg.py
@@ -6,7 +6,8 @@
 
 from twisted.internet.task import LoopingCall
 
-from . import config, JobTrigger, TriggerMsgError
+from jobtriggers import config, JobTrigger
+from jobtriggers import exceptions as exc
 
 ITEM_TYPE = 'koji_tag'
 
@@ -16,16 +17,16 @@
     instance = msg['msg']['instance']
 
     if not instance == 'primary':
-        raise TriggerMsgError('rejecting message not from primary koji instance (%s from %s)'
-                              % (koji_tag, instance))
+        raise exc.TriggerMsgError('rejecting message not from primary koji instance (%s from %s)'
+                                  % (koji_tag, instance))
 
     if not koji_tag.endswith('pending'):
-        raise TriggerMsgError('rejecting message for not being a pending tag (%s)' % koji_tag)
+        raise exc.TriggerMsgError('rejecting message for not being a pending tag (%s)' % koji_tag)
 
     m = re.match(r'^f\d\d-.*', koji_tag)
     if m is None:
-        raise TriggerMsgError('rejecting message for not starting with fedora version (e.g. f22) '
-                              '(%s)' % koji_tag)
+        raise exc.TriggerMsgError('rejecting message for not starting with fedora version '
+                                  '(e.g. f22) (%s)' % koji_tag)
 
     return koji_tag
 
@@ -70,5 +71,5 @@
                 self.log.info('adding koji_tag %s to the fuse queue', item)
 
             self.queued_tags.add(item)
-        except TriggerMsgError, e:
+        except exc.TriggerMsgError, e:
             self.log.debug(e)
diff --git a/jobtriggers/triggers.py b/jobtriggers/triggers.py
--- a/jobtriggers/triggers.py
+++ b/jobtriggers/triggers.py
@@ -7,6 +7,7 @@
 class TriggerException(Exception):
     pass
 
+
 class BaseTrigger(object):
     """
     Format:
@@ -17,37 +18,39 @@
         'arch': <arch needed for execution, x86_64, i386 etc.>
     }
     """
-    def trigger_job(self, item, item_type, taskname, arch):
+    def trigger_job(self, item, item_type, taskname, arch, **kwargs):
         raise NotImplementedError
 
 
 class StreamTrigger(BaseTrigger):
-    def trigger_job(self, item, item_type, taskname, arch):
+    def trigger_job(self, item, item_type, taskname, arch, **kwargs):
         output = ["StreamTrigger received:",
-                    "item: %s" % item,
-                    "item_type: %s" % item_type,
-                    "taskname: %s" % taskname,
-                    "arch: %s" % arch]
+                  "item: %s" % item,
+                  "item_type: %s" % item_type,
+                  "taskname: %s" % taskname,
+                  "arch: %s" % arch]
 
+        output += ["%s: %s" % (k, w) for k, w in kwargs.iteritems()]
         yield '\n'.join(output)
 
 
 class BuildbotTrigger(BaseTrigger):
-    def trigger_job(self, item, item_type, taskname, arch):
+    def trigger_job(self, item, item_type, taskname, arch, **kwargs):
         output = ["Buildbot received:",
-                    "item: %s" % item,
-                    "item_type: %s" % item_type,
-                    "taskname: %s" % taskname,
-                    "arch: %s" % arch]
+                  "item: %s" % item,
+                  "item_type: %s" % item_type,
+                  "taskname: %s" % taskname,
+                  "arch: %s" % arch]
 
         yield '\n'.join(output)
 
         properties = {
-                    'item': item,
-                    'item_type': item_type,
-                    'taskname': taskname,
-                    'arch': arch,
-                    }
+            'item': item,
+            'item_type': item_type,
+            'taskname': taskname,
+            'arch': arch,
+        }
+        properties.update(kwargs)
 
         try:
             # Create new job in ExecDB
@@ -71,17 +74,18 @@
             properties['uuid'] = uuid
 
             r = requests.post(config.buildbot_url,
-                        data={'author': 'taskotron',
-                                'project': 'rpmcheck',
-                                'category': arch,
-                                'repository': '',
-                                'comments': 'build request from taskotron-trigger',
-                                'properties': json.dumps(properties)})
+                              data={'author': 'taskotron',
+                                    'project': 'rpmcheck',
+                                    'category': arch,
+                                    'repository': '',
+                                    'comments': 'build request from taskotron-trigger',
+                                    'properties': json.dumps(properties)})
 
             yield "post-hook build request status: %s" % str(r.status_code)
 
 
 _triggers = {'StreamTrigger': StreamTrigger, 'BuildbotTrigger': BuildbotTrigger}
 
+
 def get_trigger(trigger_type):
     return _triggers[trigger_type]()
diff --git a/jobtriggers/utils.py b/jobtriggers/utils.py
--- a/jobtriggers/utils.py
+++ b/jobtriggers/utils.py
@@ -1,10 +1,77 @@
+import os
+import re
+import subprocess
 import csv
 import datetime
+import shutil
+
+import yaml
+
+from jobtriggers import config
+from jobtriggers import exceptions as exc
 
 
 def log_job(logname, item, item_type, task, arch):
     now = datetime.datetime.now()
 
     with open(logname, 'a') as csvfile:
         writer = csv.writer(csvfile, delimiter=';')
         writer.writerow([now, item, item_type, task, arch])
+
+
+def parse_yaml_from_file(filename):
+    with open(filename, 'r') as datafile:
+        try:
+            return yaml.safe_load(datafile.read())
+        except yaml.YAMLError, e:
+            raise exc.TriggerError(e)
+
+
+def should_schedule(formula_file, item_type):
+    formula = parse_yaml_from_file(formula_file)
+    try:
+        run = formula['scheduling']['run']
+    except KeyError:
+        run = True
+
+    return run and item_type in formula['input']['args']
+
+
+def get_branch(release):
+    matches = re.findall(r'\.(fc\d{1,2})\.?', release)
+    if not matches:
+        raise exc.TriggerMsgError('Could not parse disttag from %s' % release)
+
+    return matches[-1].replace('c', '')
+
+
+def get_repo(pkgname):
+    return '/'.join([config.distgit_repo_url, config.distgit_namespace, '%s.git' % pkgname])
+
+
+def get_distgit_tasks(pkgname, item_type, repo, branch='master'):
+    tasks_dir = os.path.join(config.distgit_cache_dir, pkgname)
+
+    # for now, just delete the repo and make a new shallow copy
+    if os.path.exists(tasks_dir):
+        shutil.rmtree(tasks_dir)
+
+    cmd = ['git', 'clone', '--branch', branch, '--depth', '1', repo, tasks_dir]
+
+    try:
+        subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+    except subprocess.CalledProcessError as e:
+        if 'Could not find remote branch' in e.output and branch != 'master':
+            return get_distgit_tasks(pkgname, item_type, repo, branch='master')
+        raise exc.TriggerError(e.output)
+
+    tasks = []
+    for task in os.listdir(tasks_dir):
+        if task.startswith('.'):
+            continue
+        taskdir = os.path.join(tasks_dir, task)
+        formula_file = os.path.join(taskdir, 'runtask.yml')
+        if os.path.isdir(taskdir) and should_schedule(formula_file, item_type):
+            tasks.append(task)
+
+    return tasks
diff --git a/requirements.txt b/requirements.txt
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,8 +1,10 @@
 daemon == 1.1
 dingus == 0.3.4
+mock==1.3.0
 moksha.hub == 1.4.6
 munch == 2.0.2
 psutil == 3.2.1
 Pygments == 2.1.3
 pytest == 2.7.3
 pytest-cov == 2.2.1
+PyYAML == 3.11
diff --git a/taskotron-trigger.spec b/taskotron-trigger.spec
--- a/taskotron-trigger.spec
+++ b/taskotron-trigger.spec
@@ -9,14 +9,17 @@
 
 BuildArch:      noarch
 
+Requires:       git
 Requires:       koji
 Requires:       python-munch
 Requires:       python-requests
 Requires:       python-twisted
+Requires:       PyYAML
 Requires:       fedmsg
 Requires:       fedmsg-hub
 BuildRequires:  python-setuptools
 
+
 %description
 Triggering Taskotron jobs via fedmsg.
 
@@ -44,6 +47,8 @@
 install conf/logrotate.d/taskotron-trigger %{buildroot}%{_sysconfdir}/logrotate.d/taskotron-trigger
 
 mkdir -p %{buildroot}%{_localstatedir}/log/taskotron-trigger/
+mkdir -p %{buildroot}%{_sharedstatedir}/taskotron-trigger/
+
 
 %files
 %doc readme.rst
@@ -55,12 +60,14 @@
 %attr(644,root,root) %{_sysconfdir}/logrotate.d/taskotron-trigger
 
 %dir %attr(755,fedmsg,fedmsg) %{_localstatedir}/log/taskotron-trigger
+%dir %attr(755,fedmsg,fedmsg) %{_sharedstatedir}/taskotron-trigger
 
 %dir %{_sysconfdir}/taskotron
 %{_sysconfdir}/fedmsg.d/taskotron-trigger.py*
 
 %config(noreplace) %{_sysconfdir}/taskotron/trigger.cfg
 
+
 %changelog
 * Wed Mar 30 2016 Martin Krizek <mkrizek@redhat.com> - 0.3.14-1
 - Add triggering for dockerautotest check
diff --git a/testing/test_koji_build_trigger.py b/testing/test_koji_build_trigger.py
--- a/testing/test_koji_build_trigger.py
+++ b/testing/test_koji_build_trigger.py
@@ -1,9 +1,11 @@
 import koji
 import pytest
+import mock
 from dingus import Dingus
 from munch import Munch
 
 from jobtriggers import koji_build_msg
+from jobtriggers import utils
 
 
 @pytest.mark.usefixtures('prepare')
@@ -34,6 +36,9 @@
         koji_build_msg.config.valid_arches = self.ref_validarches
         koji_build_msg.config.job_logging = False
 
+        mock_get_distgit_tasks = mock.Mock(return_value=[])
+        monkeypatch.setattr(utils, 'get_distgit_tasks', mock_get_distgit_tasks)
+
     def _create_msg(self, ref_instance, ref_new, ref_name, ref_release, ref_version):
         self.ref_message = Munch(body='{"i": 1,\
                                         "msg": {"build_id": 221146,\
@@ -76,6 +81,23 @@
         assert trigger_calls[4][1] == (self.ref_nvr_docker, koji_build_msg.ITEM_TYPE, self.ref_tasks_docker[0], self.ref_validarches[0])
         assert trigger_calls[5][1] == (self.ref_nvr_docker, koji_build_msg.ITEM_TYPE, self.ref_tasks_docker[0], self.ref_validarches[1])
 
+    def test_consume_distgit(self, monkeypatch):
+        ref_distgit_task = 'distgit_task'
+        mock_get_distgit_tasks = mock.Mock(return_value=[ref_distgit_task])
+        monkeypatch.setattr(utils, 'get_distgit_tasks', mock_get_distgit_tasks)
+        self.helper.consume(self.ref_message)
+
+        trigger_calls = self.helper.trigger.trigger_job.calls()
+
+        assert len(trigger_calls) == 6
+
+        assert trigger_calls[0][1] == (self.ref_nvr, koji_build_msg.ITEM_TYPE, ref_distgit_task, self.ref_validarches[0])
+        assert trigger_calls[1][1] == (self.ref_nvr, koji_build_msg.ITEM_TYPE, ref_distgit_task, self.ref_validarches[1])
+        assert trigger_calls[2][1] == (self.ref_nvr, koji_build_msg.ITEM_TYPE, self.ref_tasks[0], self.ref_validarches[0])
+        assert trigger_calls[3][1] == (self.ref_nvr, koji_build_msg.ITEM_TYPE, self.ref_tasks[0], self.ref_validarches[1])
+        assert trigger_calls[4][1] == (self.ref_nvr, koji_build_msg.ITEM_TYPE, self.ref_tasks[1], self.ref_validarches[0])
+        assert trigger_calls[5][1] == (self.ref_nvr, koji_build_msg.ITEM_TYPE, self.ref_tasks[1], self.ref_validarches[1])
+
     def test_consume_not_primary_instance(self):
         ref_instance = 'ppc'
         self._create_msg(ref_instance, self.ref_new, self.ref_name, self.ref_release, self.ref_version)
diff --git a/testing/test_utils.py b/testing/test_utils.py
new file mode 100644
--- /dev/null
+++ b/testing/test_utils.py
@@ -0,0 +1,118 @@
+import os
+import subprocess
+
+import pytest
+import mock
+
+from jobtriggers import utils
+from jobtriggers import config
+from jobtriggers import exceptions as exc
+
+
+@pytest.mark.usefixtures('prepare')
+class TestUtils():
+    @pytest.fixture
+    def prepare(self, monkeypatch):
+        pass
+
+    def test_check_yaml_scanning_error(self):
+        file_data = '%'
+        mocked_open = mock.mock_open(read_data=file_data)
+
+        with mock.patch('__builtin__.open', mocked_open):
+            with pytest.raises(exc.TriggerError):
+                utils.parse_yaml_from_file('mocked_filename')
+
+    def test_check_yaml_parsing_error(self):
+        file_data = ':'
+        mocked_open = mock.mock_open(read_data=file_data)
+
+        with mock.patch('__builtin__.open', mocked_open):
+            with pytest.raises(exc.TriggerError):
+                utils.parse_yaml_from_file('mocked_filename')
+
+    def test_check_should_schedule_true(self):
+        file_data = '''
+            scheduling:
+                run: True
+
+            input:
+                args:
+                    - koji_build
+            '''
+        mocked_open = mock.mock_open(read_data=file_data)
+
+        with mock.patch('__builtin__.open', mocked_open):
+            assert utils.should_schedule('mocked_filename', 'koji_build')
+
+    def test_check_should_schedule_false(self):
+        file_data = '''
+            scheduling:
+                run: False
+
+            input:
+                args:
+                    - koji_build
+            '''
+        mocked_open = mock.mock_open(read_data=file_data)
+
+        with mock.patch('__builtin__.open', mocked_open):
+            assert not utils.should_schedule('mocked_filename', 'koji_build')
+
+    def test_check_should_schedule_default(self):
+        file_data = '''
+            input:
+                args:
+                    - koji_build
+            '''
+        mocked_open = mock.mock_open(read_data=file_data)
+
+        with mock.patch('__builtin__.open', mocked_open):
+            assert utils.should_schedule('mocked_filename', 'koji_build')
+
+    def test_check_should_schedule_false_item_type(self):
+        file_data = '''
+            input:
+                args:
+                    - koji_tag
+            '''
+        mocked_open = mock.mock_open(read_data=file_data)
+
+        with mock.patch('__builtin__.open', mocked_open):
+            assert not utils.should_schedule('mocked_filename', 'koji_build')
+
+    def test_distgit_tasks(self, monkeypatch):
+        mock_check_output = mock.Mock(return_value='')
+        mock_should_schedule = mock.Mock(return_value=True)
+        monkeypatch.setattr(subprocess, 'check_output', mock_check_output)
+        monkeypatch.setattr(utils, 'should_schedule', mock_should_schedule)
+        monkeypatch.setattr(os, 'listdir', lambda x: ['rpmlint'])
+        monkeypatch.setattr(os.path, 'isdir', lambda x: True)
+        monkeypatch.setattr(config, 'distgit_repo_url', 'http://repos.com')
+        monkeypatch.setattr(config, 'distgit_cache_dir', '/path/to')
+        monkeypatch.setattr(config, 'distgit_namespace', 'qa')
+
+        repo = utils.get_repo('firefox')
+        tasks = utils.get_distgit_tasks('firefox', 'koji_build', repo)
+        assert mock_check_output.call_args[0][0][6] == os.path.join('http://repos.com',
+                                                                    'qa',
+                                                                    'firefox.git')
+        assert mock_check_output.call_args[0][0][7] == os.path.join('/path/to', 'firefox')
+        assert mock_should_schedule.call_args[0][0] == os.path.join('/path/to',
+                                                                    'firefox',
+                                                                    'rpmlint',
+                                                                    'runtask.yml')
+        assert mock_should_schedule.call_args[0][1] == 'koji_build'
+        assert tasks == ['rpmlint']
+
+
+class TestGetBranch(object):
+    def test_nvrs(self):
+        assert utils.get_branch('foo-1.2-3.fc20') == 'f20'
+        assert utils.get_branch('foo-1.2-3.fc20.1') == 'f20'
+        assert utils.get_branch('foo-1.2-3.fc22hashgit.fc20') == 'f20'
+        assert utils.get_branch('foo-1.2-3.fc22hashgit.fc20.1') == 'f20'
+
+    def test_unsupported_dist_tag(self):
+        with pytest.raises(exc.TriggerMsgError):
+            utils.get_branch('foo-1.2-3.el7')

