def trigger_if_necessary(da, pkg, rosdistro, jenkins_instance, missing_by_arch):
    if da[1] != 'SRPMS' and da in missing_by_arch and pkg in missing_by_arch[(da[0], 'SRPMS')]:
        print ("  Skipping trigger of binaryrpm job for package '%s' on arch '%s' as the sourcerpm job will trigger them automatically" % (pkg, '_'.join(da)))
        return False

    if da[1] == 'SRPMS':
        job_name = '%s_sourcerpm_%s' % (redhatify_package_name(rosdistro, pkg), da[0])
    else:
        job_name = '%s_binaryrpm_%s' % (redhatify_package_name(rosdistro, pkg), '_'.join(da))
    job_info = jenkins_instance.get_job_info(job_name)

    if 'color' in job_info and 'anime' in job_info['color']:
        print ("  Skipping trigger of job %s because it's already running" % job_name)
        return False

    if 'inQueue' in job_info and job_info['inQueue']:
        print ("  Skipping trigger of job '%s' because it's already queued" % job_name)
        return False

    if da[1] != 'SRPMS' and 'upstreamProjects' in job_info:
        upstream = job_info['upstreamProjects']
        for p in missing_by_arch[da]:
            p_name = '%s_binaryrpm_%s' % (redhatify_package_name(rosdistro, p), '_'.join(da))
            for u in upstream:
                if u['name'] == p_name:
                    print ("  Skipping trigger of job '%s' because the upstream job '%s' is also triggered" % (job_name, p_name))
                    return False

    print ("Triggering '%s'" % (job_name))
    #return jenkins_instance.build_job(job_name)
    # replicate internal implementation of Jenkins.build_job()
    import urllib2
    if not jenkins_instance.job_exists(job_name):
        raise jenkins.JenkinsException('no such job[%s]' % (job_name))
    # pass parameters to create a POST request instead of GET
    return jenkins_instance.jenkins_open(urllib2.Request(jenkins_instance.build_job_url(job_name), ''))
        stacks = dependency_walker_fuerte.get_stacks(workspace, rd._repoinfo, args.rosdistro, skip_update=args.skip_update)
        dependencies = dependency_walker_fuerte.get_dependencies(args.rosdistro, stacks)
        packages = stacks

    # even for wet_only the dry packages need to be consider, else they are not added as downstream dependencies for the wet jobs
    stack_depends, dry_maintainers = release_jobs.dry_get_stack_dependencies(args.rosdistro)
    dry_jobgraph = release_jobs.dry_generate_jobgraph(args.rosdistro, dependencies, stack_depends)

    combined_jobgraph = {}
    for k, v in dependencies.iteritems():
        combined_jobgraph[k] = v
    for k, v in dry_jobgraph.iteritems():
        combined_jobgraph[k] = v

    # setup a job triggered by all other rpmjobs
    combined_jobgraph[redhatify_package_name(args.rosdistro, 'metapackages')] = combined_jobgraph.keys()

    results_map = doit(
        rd,
        args.distros,
        args.arches,
        args.fqdn,
        combined_jobgraph,
        rosdistro=args.rosdistro,
        packages=packages,
        dry_maintainers=dry_maintainers,
        commit=args.commit,
        delete_extra_jobs=args.delete,
        whitelist_repos=args.repos)

    if not args.commit: