Exemple #1
0
def fillDB():
    """Veritabanını svn klasörlerinden aldığı bilgiler ile doldurur."""
    ### Toplam süreyi ölç ###
    startTime=time()

    ### Save DB Creation Date ###
    db_creation_date = DBDate()
    db_creation_date.save()

    sayac = 1 # Paket sayısı

    for repo_name, repo_url in svn_repositories:
        for root, dirs, files in os.walk(os.path.join(home, expsvndir, repo_name)):
            for file in files:
                if file == 'pspec.xml':
                    spec = SpecFile(os.path.join(root, file))

                    ### Paket BlackList'te ise atla ###
                    if spec.source.name in package_blacklist:
                        print "%s BlackList'te. Atlanıyor..." % spec.source.name
                        sayac += 1
                        continue

                    ### FIXME: Read from database and retrieve saved package objects,
                    ### FIXME: there should be no need to erase all database everytime.

                    ### Bilgi yaz ###
                    print "\033[01;33m%s\033[0m - %s - (Paket \033[01;33m%d\033[0m)" % (spec.source.name, repo_name, sayac),

                    ### Bir döngü süresi zamanı al ###
                    packStartTime = time()

                    ### Repo ###
                    r, r_created = Repo.objects.get_or_create(name=repo_name, url=repo_url)
                    if r_created:
                        r.save()

                    ### Depoda aynı kaynak varsa (isim ve repo'ya göre) bu paketi atla ###
                    if not repo_name == "playground":
                        try:
                            s = Source.objects.get(name=spec.source.name, repo=r)
                            print "Kaynak mevcut. Atlanıyor..."
                            sayac += 1
                            continue
                        except:
                            pass

                    ### Source nesnesini yarat ###
                    s = Source()
                    s.repo = r

                    ### Source Verileri ###
                    s.name=spec.source.name
                    s.homepage = spec.source.homepage
                    s.version = spec.getSourceVersion()

                    ### Packager nesnesini yarat veya al ###
                    pkgr, pkgr_created = Packager.objects.get_or_create(name=spec.source.packager.name)
                    email, email_created = Email.objects.get_or_create(email=spec.source.packager.email)
                    if email_created:
                        email.save()
                    pkgr.email.add(email)
                    pkgr.save()

                    s.packager = pkgr

                    # Packager nesnesinden önceki durum
                    #s.packager = spec.source.packager.name
                    #s.email = spec.source.packager.email

                    s.archive_name = spec.source.archive.name
                    s.archive_sha1sum = spec.source.archive.sha1sum
                    s.archive_type = spec.source.archive.type
                    s.archive_url = spec.source.archive.uri

                    ### Slug ###
                    s.slug = spec.source.name

                    ### İstatistikler ###
                    s.last_update = spec.history[0].date
                    s.firstReleaseDate = spec.history[-1].date
                    s.buildScriptSize = getFileSize(os.path.join(root, 'actions.py'))
                    s.specScriptSize = getFileSize(os.path.join(root, file))
                    s.updateCount = spec.history.__len__()
                    s.patchCount = spec.source.patches.__len__()

                    ### Component nesnesi ###
                    try: # Component.xml'den almayı dene
                        comp_file = PisiComponent(os.path.join(root, '../component.xml'))
                        component, comp_created = Component.objects.get_or_create(component=comp_file.name)
                        if comp_created:
                            ### Sadece nesne yaratıldığında M2M alanları girmek component.xml bulamayıp
                            ### klasör isminden çıkardığı zaman Component nesnesini diğer bilgilerden
                            ### yoksun bıracak. Buna temiz bir çözüm bulmalı ya da Playground'un en son
                            ### işlendiğinden emin olmalı.
                            ###
                            ### Component nesnesi için Summary döngüsü ###
                            for localname_lang in comp_file.localName.keys():
                                localname = LocalName(lang=localname_lang,
                                                      localname=comp_file.localName[localname_lang])
                                localname.save()
                                component.localname.add(localname)

                            ### Component nesnesi için Summary döngüsü ###
                            for comp_summary_lang in comp_file.summary.keys():
                                comp_summary = Summary(lang=comp_summary_lang,
                                                       summary=comp_file.summary[comp_summary_lang])
                                comp_summary.save()
                                component.summary.add(comp_summary)
                            ### Component nesnesi için Summary döngüsü ###
                            for comp_desc_lang in comp_file.description.keys():
                                comp_desc = Description(lang=comp_desc_lang,
                                                        desc=comp_file.description[comp_desc_lang])
                                comp_desc.save()
                                component.desc.add(comp_desc)
                            ### Döngüler bitince Component nesnesini kaydet ###
                            component.save()
                        ### Source'a bağla ###
                        s.component = component

                    except: # Component.xml yoksa klasör isminden çıkar
                        print "Could not find component.xml, trying to retrieve component from directories"
                        dir_comp = root[:root.rfind('/')].replace(os.path.join(home, expsvndir, repo_name) + '/','').replace("/",".")
                        component, comp_created = Component.objects.get_or_create(component=dir_comp)
                        if comp_created:
                            component.save()
                        s.component = component

                    ### Source kaydet ###
                    s.save()

                    ### License ###
                    for l in spec.source.license:
                        li, li_created = License.objects.get_or_create(license=l)
                        if li_created:
                            li.save()
                        s.license.add(li)

                    ### IsA ###
                    for i in spec.source.isA:
                        isa, isa_created = IsA.objects.get_or_create(isa=i)
                        if isa_created:
                            isa.save()
                        s.isa.add(isa)

                    ### Summary ###
                    for su in spec.source.summary.keys():
                        sum, sum_created = Summary.objects.get_or_create(summary=spec.source.summary[su])
                        if sum_created:
                            sum.lang = su
                            sum.save()
                        s.summary.add(sum)

                    ### Description ###
                    if not spec.source.description.keys():
                        bos, bos_created = Description.objects.get_or_create(desc=" ")
                        if bos_created:
                            bos.lang = " "
                            bos.save()
                        s.desc.add(bos)

                    for de in spec.source.description.keys():
                        des, des_created = Description.objects.get_or_create(desc=spec.source.description[de])
                        if des_created:
                            des.lang = de
                            des.save()
                        s.desc.add(des)

                    ### Build Dependencies ###
                    for bu in spec.source.buildDependencies:
                        bd, bd_created = Dependency.objects.get_or_create(name=bu.package,
                                                                          versionFrom=bu.versionFrom,
                                                                          versionTo=bu.versionTo,
                                                                          version=bu.version,
                                                                          releaseFrom=bu.releaseFrom,
                                                                          releaseTo=bu.releaseTo,
                                                                          release=bu.release,
                                                                          )
                        if bd_created:
                            bd.save()
                        s.build_dep.add(bd)


                    ### Patches ###
                    for pec in spec.source.patches:
                        patch = Patch(name=pec.filename, level=pec.level)
                        patch.save()
                        s.patch.add(patch)

                    ### Updates ###
                    for h in spec.history:
                        updater, updater_created = Packager.objects.get_or_create(name=h.name)
                        u_email, u_email_created = Email.objects.get_or_create(email=h.email)
                        if u_email_created:
                            u_email.save()
                        updater.email.add(u_email)
                        updater.save()

                        history = Update(release=h.release,
                                         type=h.type,
                                         date=h.date,
                                         version=h.version,
                                         comment=h.comment,
                                         packager=updater,
                                         #name=h.name,
                                         #email=h.email,
                                     )
                        history.save()
                        history.email.add(u_email)
                        s.update.add(history)

                    ######### PACKAGE #########
                    ### Package nesneleri için döngü ###
                    for package in spec.packages:
                        ### Package nesnesini yarat ###
                        p = Package(name=package.name, source=s, slug=package.name)
                        #p, p_created = Package.objects.get_or_create(name=package.name, source=s)
                        #if not p_created:
                        #    print "%s paketi mevcut. Atlanıyor..." % p.name
                        p.save()

                        ### Package'ı Source'a bağla
                        s.packages.add(p)

                        ### RuntimeDeps ##
                        for run_dep in package.packageDependencies:
                            runtime_dep, rundep_created = Dependency.objects.get_or_create(name=run_dep.package,
                                                                                           versionFrom=run_dep.versionFrom,
                                                                                           versionTo=run_dep.versionTo,
                                                                                           version=run_dep.version,
                                                                                           releaseFrom=run_dep.releaseFrom,
                                                                                           releaseTo=run_dep.releaseTo,
                                                                                           release=run_dep.release,
                                                                                       )
                            if rundep_created:
                                runtime_dep.save()
                            p.runtime_dep.add(runtime_dep)

                        ### Files ###
                        for fi in package.files:
                            pfile, file_created = Files.objects.get_or_create(path=fi.path, fileType=fi.fileType)
                            if file_created:
                                pfile.save()
                            p.files.add(pfile)

                        ### Additional Files ###
                        for add_file in package.additionalFiles:
                            af = A_files(filename=add_file.filename,
                                         target=add_file.target,
                                         perm=add_file.permission,
                                         owner=add_file.owner,
                                         group=add_file.group,
                                     )
                            af.save()
                            p.a_files.add(af)

                    ### PRINTS ###
                    print "\033[01;33m%.3f s\033[0m" %(time() - packStartTime),
                    print "- %d s" % (time() - startTime)
                    sayac += 1
    ### Veritabanına commit et ###
    print "Döngüler bitti, veritabanına commit ediliyor..."
    trans_time = time()
    transaction.commit()
    print "Veriler girildi. (%f sn)" % (time() - trans_time)
    print "Bitti. Toplam işlem süresi %.2f dakika." % ((time() - startTime)/60)
Exemple #2
0
    def handle(self, *args, **options):

        repositories = (
            # ('core', '2.0', 'https://ciftlik.pisilinux.org/2.0/pisi-index.xml.xz'),
            # ('main', '2.0', 'https://ciftlik.pisilinux.org/2.0/pisi-index.xml.xz'),
            ('contrib', '2.0', 'https://ciftlik.pisilinux.org/2.0/pisi-index.xml.xz'),

        )

        home = os.environ.get('HOME')
        gitdir = 'workspaces/pisi'
        package_blacklist = []

        startTime=time()
        package_counter = 1

        for repo_os, repo_name, repo_url in repositories:
            repo_path = os.path.join(home, gitdir, repo_os)
            repo, created = Repo.objects.get_or_create(name=repo_os, url=repo_url)

            for root, dirs, files in os.walk(repo_path):
                for file in files:
                    if file == 'pspec.xml':
                        print "spec file: %s" % os.path.join(root, file)
                        spec = SpecFile(os.path.join(root, file))

                        if spec.source.name in package_blacklist:
                           print "%s BlackList'te. Atlanıyor..." % spec.source.name
                           package_counter += 1
                           continue



                        packStartTime = time()


                        component, created = (None, None)

                        ### Component ###
                        try:
                            comp_file = PisiComponent(os.path.join(root, '../component.xml'))
                            component, created = Component.objects.get_or_create(component=comp_file.name, repo=repo)
                        except:
                            print "Could not find component.xml, trying to retrieve component from directories"
                            dir_comp = root[:root.rfind('/')].replace(os.path.join(home, gitdir, repo_name) + '/','').replace("/",".")
                            component, created = Component.objects.get_or_create(component=dir_comp, repo=repo)

                        packager, created = Packager.objects.get_or_create(name=spec.source.packager.name, email=spec.source.packager.email)

                        print "\033[01;33m%s\033[0m - %s - %s - (Paket \033[01;33m%d\033[0m)" % (spec.source.name, component.component, repo_name, package_counter)

                        ######### Source #########

                        source_slug = '%s-%s' % (slugify(spec.source.name), repo_os)
                        source, created = Source.objects.get_or_create(name=spec.source.name, slug=source_slug, repo=repo,
                                                                    defaults={
                                                                        'component':component,
                                                                        'packager':packager
                                                                    })
                        #try:
                        source.summary = spec.source.summary
                        source.description = spec.source.description


                        source.homepage = spec.source.homepage
                        source.version = spec.getSourceVersion()
                        source.archive_name = spec.source.archive[0].name
                        source.archive_sha1sum = spec.source.archive[0].sha1sum
                        source.archive_type = spec.source.archive[0].type
                        source.archive_url = spec.source.archive[0].uri

                        ### İstatistikler ###
                        source.created_at = validate_date(spec.history[-1].date, repo_os)
                        source.updated_at = validate_date(spec.history[0].date, repo_os)
                        source.build_script_size = getFileSize(os.path.join(root, 'actions.py'))
                        source.spec_script_size = getFileSize(os.path.join(root, file))
                        source.update_count = spec.history.__len__()
                        source.patch_count = spec.source.patches.__len__()
                        source.save()

                        ### Build Dependencies ###
                        for bu in spec.source.buildDependencies:
                            bd, bd_created = Dependency.objects.get_or_create(name=bu.package,
                                                                              versionFrom=bu.versionFrom,
                                                                              versionTo=bu.versionTo,
                                                                              version=bu.version,
                                                                              releaseFrom=bu.releaseFrom,
                                                                              releaseTo=bu.releaseTo,
                                                                              release=bu.release)
                            source.build_dep.add(bd)

                        ### Patches ###
                        for pec in spec.source.patches:
                            patch, created = Patch.objects.get_or_create(source=source, name=pec.filename, level=pec.level)

                        ######### Package #########
                        for package in spec.packages:
                            package_slug = '%s-%s' % (slugify(package.name), repo_os)
                            p, p_created = Package.objects.get_or_create(slug=package_slug,
                                                                         defaults={
                                                                             'name': package.name,
                                                                             'source': source,
                                                                         })
                            source.packages.add(p)

                            ### RuntimeDeps ##
                            for run_dep in package.packageDependencies:
                                runtime_dep, rundep_created = Dependency.objects.get_or_create(name=run_dep.package,
                                                                                               versionFrom=run_dep.versionFrom,
                                                                                               versionTo=run_dep.versionTo,
                                                                                               version=run_dep.version,
                                                                                               releaseFrom=run_dep.releaseFrom,
                                                                                               releaseTo=run_dep.releaseTo,
                                                                                               release=run_dep.release,)

                                p.runtime_dep.add(runtime_dep)


                            ### Files ###
                            for package_file in package.files:
                                file, created = Files.objects.get_or_create(path=package_file.path, fileType=package_file.fileType)
                                p.files.add(file)

                        ### Additional Files ###
                        for additional_file in package.additionalFiles:
                            a_file, created = A_files.objects.get_or_create(filename=additional_file.filename,
                                         target=additional_file.target,
                                         perm=additional_file.permission,
                                         owner=additional_file.owner,
                                         group=additional_file.group)

                            p.a_files.add(a_file)






                        ### Source kaydet ###
                        source.save()

                        print "\033[01;33m%.3f s\033[0m" %(time() - packStartTime),
                        print "- %d s" % (time() - startTime)
                        package_counter += 1