示例#1
0
文件: repos.py 项目: Tvaske/sponge
def diff(request, repo_id=None, repo_id2=None):
    repoapi = RepositoryAPI()
    if request.GET:
        mode = request.GET.get("mode", "all")
    else:
        mode = "all"
    
    repo1 = repo_utils.get_repo(repo_id)
    repo2 = repo_utils.get_repo(repo_id2)
    packages1 = dict([("%s.%s" % (p['name'], p['arch']), p)
                      for p in repoapi.packages(repo_id)])
    packages2 = dict([("%s.%s" % (p['name'], p['arch']), p)
                      for p in repoapi.packages(repo_id2)])
    pkg_names = set(packages1.keys() + packages2.keys())
    allpackages = dict()
    for pkg in pkg_names:
        if pkg in packages1:
            nevra1 = repo_utils.get_nevra(packages1[pkg])
        else:
            nevra1 = None
        if pkg in packages2:
            nevra2 = repo_utils.get_nevra(packages2[pkg])
        else:
            nevra2 = None
        if nevra1 == nevra2 and mode == "diff":
            continue
        
        allpackages[pkg] = dict()
        allpackages[pkg]["repo1"] = nevra1
        allpackages[pkg]["repo2"] = nevra2

    return dict(repo1=repo1, repo2=repo2, mode=mode,
                packages1=packages1, packages2=packages2,
                allpackages=allpackages)
示例#2
0
文件: repo.py 项目: stpierre/sponge
def get_updates(repo):
    """ return a list of updated packages available to a child repo """
    if not repo["parent"]:
        return None

    repoapi = RepositoryAPI()
    child_nevras = [get_nevra(p) for p in repoapi.packages(repo["id"])]

    rv = []
    for pkg in repoapi.packages(repo["parent"]["id"]):
        if get_nevra(pkg) not in child_nevras:
            rv.append(pkg)

    return rv
示例#3
0
文件: repos.py 项目: Tvaske/sponge
def promote_select(request, repo_id=None):
    repo = repo_utils.get_repo(repo_id)
    form = PromotePackageSelectionForm(request.POST or None, repo=repo)
    if request.method == 'POST' and form.is_valid():
        repoapi = RepositoryAPI()
        pset = PackageSet.objects.create(stype="promote")
        pset.save()
        prepo = PackageSetRepo.objects.create(packageset=pset,
                                              repoid=repo['id'],
                                              name=repo['name'])
        prepo.save()
        packages = []
        for pkg in repoapi.packages(repo['parent']['id']):
            if pkg['id'] in form.cleaned_data['packages']:
                packages.append(pkg)
                pspkg = \
                    PackageSetPackage.objects.create(packageset=pset,
                                                     packageid=pkg['id'],
                                                     pkgobj=cPickle.dumps(pkg))
                pspkg.save()

        deps = repo_utils.resolve_deps(packages,
                                       [repo['parent']['id']],
                                       pkgfilter=repoapi.packages(repo['id']))
        for pkg in deps:
            pspkg = PackageSetPackage.objects.create(packageset=pset,
                                                     packageid=pkg['id'],
                                                     pkgobj=cPickle.dumps(pkg))
            pspkg.save()
        return HttpResponseRedirect(reverse('sponge.views.repos.promote_ok',
                                            kwargs=dict(pid=pset.pk)))
    packages = repo_utils.get_updates(repo)
    if packages:
        return dict(repo=repo, form=form)
    else:
        messages.info(request,
                      "No packages available to be promoted from %s to %s" %
                      (repo['parent']['name'], repo['name']))
        return HttpResponseRedirect(reverse('sponge.views.repos.list'))
示例#4
0
文件: repo.py 项目: stpierre/sponge
def get_package(repo, name=None, id=None):
    if not isinstance(repo, dict):
        repo = get_repo(repo)
    repoapi = RepositoryAPI()
    for pkg in repoapi.packages(repo["id"]):
        if (
            pkg["id"] == id
            or pkg["name"] == name
            or get_nevra(pkg) == name
            or get_nevra(pkg, arch=repo["arch"]) == name
            or "%s-%s" % (pkg["name"], pkg["version"]) == name
        ):
            return pkg
    return None
示例#5
0
文件: repos.py 项目: Tvaske/sponge
def view(request, repo_id=None):
    repoapi = RepositoryAPI()
    repo = repo_utils.get_repo(repo_id)
    packages = repoapi.packages(repo_id)
    for pkg in packages:
        pkg['nevra'] = repo_utils.get_nevra(pkg, repo['arch'])
    editform = RepoEditForm(request.POST or None, repo=repo)
    diffform = DiffSelectForm(request.POST or None, repo=repo)
    if request.method == 'POST' and "repoedit" in request.POST:
        if editform.is_valid():
            success = True
            if editform.cleaned_data['name'] != repo['name']:
                try:
                    repoapi.update(repo['id'],
                                   dict(name=editform.cleaned_data['name'],
                                        checksum_type=editform.cleaned_data['cksum']))
                    messages.debug(request,
                                   "Updated repository name for %s" %
                                   repo['id'])
                except ServerRequestError, err:
                    success = False
                    messages.error(request,
                                   "Could not update repository info for %s: "
                                   "%s" % (repo['id'], err[1]))

            groups = filter(lambda s: s != '',
                            editform.cleaned_data['groups'] + \
                            re.split(r'\s*,\s*',
                                     editform.cleaned_data['newgroups']))
            success &= repo_utils.set_groups(repo, groups, request=request)

            success &= repo_utils.set_gpgkeys(repo,
                                              editform.cleaned_data['gpgkeys'].splitlines(),
                                              request=request)
            success &= repo_utils.set_filters(repo,
                                              editform.cleaned_data['filters'],
                                              request=request)

            if success:
                messages.success(request, "Updated repository %s" % repo['id'])
            else:
                messages.warning(request,
                                 "Errors encountered while updating repository "
                                 "%s" % repo['id'])
            repo = repo_utils.reload_repo(repo['id'])
示例#6
0
文件: repos.py 项目: Tvaske/sponge
def demote_select(request, repo_id=None):
    repo = repo_utils.get_repo(repo_id)
    form = DemotePackageSelectionForm(request.POST or None, repo=repo)
    if request.method == 'POST' and form.is_valid():
        pset = PackageSet.objects.create(stype="demote")
        pset.save()
        prepo = PackageSetRepo.objects.create(packageset=pset,
                                              repoid=repo['id'],
                                              name=repo['name'])
        prepo.save()
        repoapi = RepositoryAPI()
        for pkg in repoapi.packages(repo['id']):
            if pkg['id'] in form.cleaned_data['packages']:
                pspkg = \
                    PackageSetPackage.objects.create(packageset=pset,
                                                     packageid=pkg['id'],
                                                     pkgobj=cPickle.dumps(pkg))
                pspkg.save()
        return HttpResponseRedirect(reverse('sponge.views.repos.demote_ok',
                                            kwargs=dict(pid=pset.pk)))
    else:
        packages = repo_utils.get_updates(repo)
        return dict(repo=repo, form=form)
示例#7
0
文件: package.py 项目: Tvaske/sponge
 def get_packages(self, repo):
     repoapi = RepositoryAPI()
     return repoapi.packages(repo['id'])