public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/
Date: Tue,  5 Jun 2012 15:49:36 +0000 (UTC)	[thread overview]
Message-ID: <1338911369.bd97f3271c9287902bf8d3c2a2e5c39d310aad20.bacher09@gentoo> (raw)

commit:     bd97f3271c9287902bf8d3c2a2e5c39d310aad20
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jun  5 15:49:29 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jun  5 15:49:29 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=bd97f327

Change in updating info

---
 gpackages/apps/packages/managers.py |   72 +++++++++++++++---------------
 gpackages/apps/packages/models.py   |   12 +++---
 gpackages/apps/packages/scan.py     |   82 ++++++++++++++++++++++++++--------
 3 files changed, 104 insertions(+), 62 deletions(-)

diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
index 27136f8..cfde91e 100644
--- a/gpackages/apps/packages/managers.py
+++ b/gpackages/apps/packages/managers.py
@@ -53,42 +53,42 @@ class KeywordMixin(object):#{{{
 
 
 class EbuildMixin(object):#{{{
-    def create(self, **kwargs):
-        if 'ebuild' in kwargs:
-            obj = self.model(**kwargs)
-        else:
-            obj = super(EbuildMixin, self).create(**kwargs)
-        return obj
-
-    def get_or_create(self, **kwargs):
-        assert kwargs, \
-                'get_or_create() must be passed at least one keyword argument'
-        defaults = kwargs.pop('defaults', {})
-        lookup = kwargs.copy()
-        for f in self.model._meta.fields:
-            if f.attname in lookup:
-                lookup[f.name] = lookup.pop(f.attname)
-        try:
-            self._for_write = True
-            return self.get(**lookup), False
-        except self.model.DoesNotExist:
-            try:
-                params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
-                params.update(defaults)
-                sid = transaction.savepoint(using=self.db)
-                obj = self.model(**params)
-                if 'ebuild' not in kwargs:
-                    obj.save(force_insert=True, using=self.db)
-                transaction.savepoint_commit(sid, using=self.db)
-                return obj, True
-            except IntegrityError as e:
-                transaction.savepoint_rollback(sid, using=self.db)
-                exc_info = sys.exc_info()
-                try:
-                    return self.get(**lookup), False
-                except self.model.DoesNotExist:
-                    # Re-raise the IntegrityError with its original traceback.
-                    raise exc_info[1], None, exc_info[2]
+    #def create(self, **kwargs):
+        #if 'ebuild' in kwargs:
+            #obj = self.model(**kwargs)
+        #else:
+            #obj = super(EbuildMixin, self).create(**kwargs)
+        #return obj
+
+    #def get_or_create(self, **kwargs):
+        #assert kwargs, \
+                #'get_or_create() must be passed at least one keyword argument'
+        #defaults = kwargs.pop('defaults', {})
+        #lookup = kwargs.copy()
+        #for f in self.model._meta.fields:
+            #if f.attname in lookup:
+                #lookup[f.name] = lookup.pop(f.attname)
+        #try:
+            #self._for_write = True
+            #return self.get(**lookup), False
+        #except self.model.DoesNotExist:
+            #try:
+                #params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
+                #params.update(defaults)
+                #sid = transaction.savepoint(using=self.db)
+                #obj = self.model(**params)
+                #if 'ebuild' not in kwargs:
+                    #obj.save(force_insert=True, using=self.db)
+                #transaction.savepoint_commit(sid, using=self.db)
+                #return obj, True
+            #except IntegrityError as e:
+                #transaction.savepoint_rollback(sid, using=self.db)
+                #exc_info = sys.exc_info()
+                #try:
+                    #return self.get(**lookup), False
+                #except self.model.DoesNotExist:
+                    ## Re-raise the IntegrityError with its original traceback.
+                    #raise exc_info[1], None, exc_info[2]
     
     
     def get(self, ebuild=None,package = None, *args, **kwargs):

diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 4326a89..8a52b5d 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -160,9 +160,7 @@ class PackageModel(models.Model):
 
     def check_or_need_update(self, package):
         # Need add metadata check to
-        return not( self.changelog_hash == package.changelog_sha1 and \
-                    self.metadata_hash == package.metadata_sha1 and \
-                    self.manifest_hash == package.manifest_sha1)
+        return self.manifest_hash != package.manifest_sha1
 
     def need_update_metadata(self, package):
         return self.metadata_hash != package.metadata_sha1
@@ -243,23 +241,25 @@ class EbuildModel(models.Model):
             del kwargs['ebuild']
         super(EbuildModel, self).__init__(*args, **kwargs)
         if ebuild is not None and isinstance(ebuild, Ebuild):
-            self.init_with_keywords(ebuild)
+            self.init_by_ebuild(ebuild)
     
     def __unicode__(self):
         return self.cpv
     
     def init_by_ebuild(self, ebuild):
+        self.update_by_ebuild(ebuild)
+
+    def update_by_ebuild(self, ebuild):
         self.is_masked = ebuild.is_masked
         self.version = ebuild.version
         self.revision = ebuild.revision
         self.license = ebuild.license
         self.ebuild_mtime = ebuild.mtime
         self.ebuild_hash = ebuild.sha1
-        #self.homepage = ebuild.homepage
         self.description = ebuild.description
 
     def check_or_need_update(self, ebuild):
-        return not(self.ebuild_hash == ebuild.sha1)
+        return self.ebuild_hash != ebuild.sha1
 
     def init_related(self, ebuild, package = None):
         self.init_by_ebuild(ebuild)

diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 8deb289..994adbf 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -257,39 +257,81 @@ def scanpackages():
                 herds_objects.append(herds_cache[herd])
 
         return herds_objects
+
+    def add_related_to_ebuild(ebuild, ebuild_object):
+        # Add licenses
+        ebuild_object.licenses.add(*get_licenses_objects(ebuild))
+        ebuild_object.use_flags.add(*get_uses_objects(ebuild))
+        ebuild_object.homepages.add(*get_homepages_objects(ebuild))
+        get_keywords_objects(ebuild, ebuild_object)
+        
+    def clear_related_to_ebuild(ebuild_object):
+        ebuild_object.licenses.clear()
+        ebuild_object.use_flags.clear()
+        ebuild_object.homepages.clear()
+        models.Keyword.objects.filter(ebuild = ebuild_object).delete()
+
+    def update_related_to_ebuild(ebuild, ebuild_object):
+        clear_related_to_ebuild(ebuild_object)
+        add_related_to_ebuild(ebuild, ebuild_object)
+
+    def create_ebuilds(package, package_object):
+        for ebuild in package.iter_ebuilds():
+            ebuild_object = models.EbuildModel()
+            ebuild_object.init_by_ebuild(ebuild)
+            ebuild_object.package = package_object
+            # To Add some related objects it should have pk
+            ebuild_object.save(force_insert=True)
+            add_related_to_ebuild(ebuild, ebuild_object)
+
+    def update_ebuilds(package, package_object, delete = True):
+        not_del = []
+        for ebuild in package.iter_ebuilds():
+            ebuild_object, ebuild_created = models.EbuildModel.objects.get_or_create(ebuild = ebuild, package = package_object)
+            not_del.append(ebuild_object.pk)
+            if ebuild_created:
+                add_related_to_ebuild(ebuild, ebuild_object)
+                continue
+            if ebuild_object.check_or_need_update(ebuild):
+                ebuild_object.update_by_ebuild(ebuild)
+                update_related_to_ebuild(ebuild, ebuild_object)
+                ebuild_object.save(force_update = True)
+        if delete:
+            models.EbuildModel.objects.exclude(pk__in = not_del).delete()
+
     # Load homepages to cache
     #for homepage in models.HomepageModel.objects.all():
         #homepages_cache[homepage.url] = homepage
-
+    existend_categorys = []
+    existend_packages = []
     for category in porttree.iter_categories():
         category_object, category_created = models.CategoryModel.objects.get_or_create(category = category)
+        existend_categorys.append(category_object.pk)
         for package in category.iter_packages():
-            print package
+            #print package
             package_object, package_created = models.PackageModel.objects.get_or_create(package = package, category = category_object)
+            existend_packages.append(package_object.pk)
             if not package_created:
                 if package_object.check_or_need_update(package):
+                    print package
                     # need update
-                    pass
+                    if package_object.need_update_metadata(package):
+                        package_object.herds.clear()
+                        package_object.maintainers.clear()
+
+                    if package_object.need_update_ebuilds(package):
+                        update_ebuilds(package, package_object)
+
+                    package_object.update_info(package)
+                    package_object.save(force_update = True)
                 else:
+                    # not need to update, ebuilds too
                     continue
             package_object.herds.add(*get_herds_objects(package))
             package_object.maintainers.add(*get_maintainers_objects(package))
-            for ebuild in package.iter_ebuilds():
-                ebuild_object = models.EbuildModel()
-                ebuild_object.init_by_ebuild(ebuild)
-                ebuild_object.package = package_object
-                # To Add some related objects it should have pk
-                ebuild_object.save(force_insert=True)
-                # Add licenses
-                ebuild_object.licenses.add(*get_licenses_objects(ebuild))
-                ebuild_object.use_flags.add(*get_uses_objects(ebuild))
-                ebuild_object.homepages.add(*get_homepages_objects(ebuild))
-                get_keywords_objects(ebuild, ebuild_object)
-                #homepages_list = []
-                #for homepage in ebuild.homepages:
-                    #homepage_object = models.HomepageModel(url = homepage,
-                                                           #ebuild = ebuild_object)
-                    #homepages_list.append(homepage_object)
-                #models.HomepageModel.objects.bulk_create(homepages_list)
+            if package_created:
+                create_ebuilds(package, package_object)
+    # del 
+    #models.CategoryModel.objects.exclude(pk__in = existend_categorys).delete()
 
 



             reply	other threads:[~2012-06-05 15:50 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-05 15:49 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-09-23 19:35 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/ Slava Bacherikov
2012-09-13 22:17 Slava Bacherikov
2012-08-26 23:00 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-11 22:30 Slava Bacherikov
2012-08-11 22:30 Slava Bacherikov
2012-08-07  0:10 Slava Bacherikov
2012-07-31 23:20 Slava Bacherikov
2012-07-30 23:30 Slava Bacherikov
2012-07-30 12:59 Slava Bacherikov
2012-07-25 22:47 Slava Bacherikov
2012-07-25 22:47 Slava Bacherikov
2012-07-22 23:46 Slava Bacherikov
2012-07-19 23:50 Slava Bacherikov
2012-07-19 23:50 Slava Bacherikov
2012-07-18 23:20 Slava Bacherikov
2012-07-18 23:20 Slava Bacherikov
2012-07-15 23:08 Slava Bacherikov
2012-07-15 23:08 Slava Bacherikov
2012-07-12 22:16 Slava Bacherikov
2012-07-08 19:54 Slava Bacherikov
2012-07-05 23:27 Slava Bacherikov
2012-07-04 22:13 Slava Bacherikov
2012-07-03 21:08 Slava Bacherikov
2012-07-02 22:25 Slava Bacherikov
2012-06-29 17:29 Slava Bacherikov
2012-06-29 17:29 Slava Bacherikov
2012-06-28 23:59 Slava Bacherikov
2012-06-28 23:59 Slava Bacherikov
2012-06-27 22:52 Slava Bacherikov
2012-06-25 22:23 Slava Bacherikov
2012-06-24 23:21 Slava Bacherikov
2012-06-20 23:23 Slava Bacherikov
2012-06-20 23:23 Slava Bacherikov
2012-06-20 23:23 Slava Bacherikov
2012-06-13 22:15 Slava Bacherikov
2012-06-12 18:34 Slava Bacherikov
2012-06-10 22:56 Slava Bacherikov
2012-06-10 17:51 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-07 22:48 Slava Bacherikov
2012-06-07 18:37 Slava Bacherikov
2012-06-07 18:37 Slava Bacherikov
2012-06-07 18:37 Slava Bacherikov
2012-06-07 18:37 Slava Bacherikov
2012-06-07 11:27 Slava Bacherikov
2012-06-06 22:48 Slava Bacherikov
2012-06-05 20:48 Slava Bacherikov
2012-06-05 20:48 Slava Bacherikov
2012-06-05 20:48 Slava Bacherikov
2012-06-05 15:49 Slava Bacherikov
2012-06-03 16:19 Slava Bacherikov
2012-06-03 13:19 Slava Bacherikov
2012-05-31 13:34 Slava Bacherikov
2012-05-29 21:34 Slava Bacherikov
2012-05-29 13:38 Slava Bacherikov
2012-05-29 12:24 Slava Bacherikov
2012-05-29 12:24 Slava Bacherikov
2012-05-29 12:24 Slava Bacherikov
2012-05-28 20:32 Slava Bacherikov
2012-05-28 17:00 Slava Bacherikov
2012-05-28 17:00 Slava Bacherikov
2012-05-28 17:00 Slava Bacherikov
2012-05-28 10:39 Slava Bacherikov
2012-05-28 10:39 Slava Bacherikov
2012-05-27 22:48 Slava Bacherikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1338911369.bd97f3271c9287902bf8d3c2a2e5c39d310aad20.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox