diff options
| author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2013-11-26 18:12:43 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-12-10 11:16:12 +0000 |
| commit | 54d0e30433c249604611367cf387bc20721c4523 (patch) | |
| tree | 8f576220f0a4627a763d663089c9ebc0f4b29884 /bitbake/lib/toaster/orm | |
| parent | f8120984f459d193ce5ffa243137baf0e38d223e (diff) | |
| download | poky-54d0e30433c249604611367cf387bc20721c4523.tar.gz | |
bitbake: toaster: change package storage model
Up until this patch, package information lived in two
places - one table for build packages and one table for
target installed packaged. This situation leads to
two problems: there is no direct link between a build
package and a installed package, and a lot of data is duplicated.
This change unifies all package types in a single table.
The SimpleUI remains the same for continuity sake,
but the REST API will be changed in a future patch.
The package dependencies and package files are now
kept in a single table.
Since we collect target installed package information at all times,
we need to expand it to supplement missing information if a
package is not actually built in the current build.
Small changes to the Simple UI reflect the updated database schema.
[YOCTO #5565]
[YOCTO #5269]
(Bitbake rev: f5d655bfaeb349c8680d74530617e34aa389d1f0)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/orm')
| -rw-r--r-- | bitbake/lib/toaster/orm/models.py | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 0bb048c756..b30e405c0e 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
| @@ -130,7 +130,7 @@ class Task_Dependency(models.Model): | |||
| 130 | depends_on = models.ForeignKey(Task, related_name='task_dependencies_depends') | 130 | depends_on = models.ForeignKey(Task, related_name='task_dependencies_depends') |
| 131 | 131 | ||
| 132 | 132 | ||
| 133 | class Build_Package(models.Model): | 133 | class Package(models.Model): |
| 134 | build = models.ForeignKey('Build') | 134 | build = models.ForeignKey('Build') |
| 135 | recipe = models.ForeignKey('Recipe', null=True) | 135 | recipe = models.ForeignKey('Recipe', null=True) |
| 136 | name = models.CharField(max_length=100) | 136 | name = models.CharField(max_length=100) |
| @@ -139,16 +139,19 @@ class Build_Package(models.Model): | |||
| 139 | summary = models.CharField(max_length=200, blank=True) | 139 | summary = models.CharField(max_length=200, blank=True) |
| 140 | description = models.CharField(max_length=200, blank=True) | 140 | description = models.CharField(max_length=200, blank=True) |
| 141 | size = models.IntegerField(default=0) | 141 | size = models.IntegerField(default=0) |
| 142 | installed_size = models.IntegerField(default=0) | ||
| 142 | section = models.CharField(max_length=80, blank=True) | 143 | section = models.CharField(max_length=80, blank=True) |
| 143 | license = models.CharField(max_length=80, blank=True) | 144 | license = models.CharField(max_length=80, blank=True) |
| 144 | 145 | ||
| 145 | class Build_Package_Dependency(models.Model): | 146 | class Package_Dependency(models.Model): |
| 146 | TYPE_RDEPENDS = 0 | 147 | TYPE_RDEPENDS = 0 |
| 147 | TYPE_RPROVIDES = 1 | 148 | TYPE_RPROVIDES = 1 |
| 148 | TYPE_RRECOMMENDS = 2 | 149 | TYPE_RRECOMMENDS = 2 |
| 149 | TYPE_RSUGGESTS = 3 | 150 | TYPE_RSUGGESTS = 3 |
| 150 | TYPE_RREPLACES = 4 | 151 | TYPE_RREPLACES = 4 |
| 151 | TYPE_RCONFLICTS = 5 | 152 | TYPE_RCONFLICTS = 5 |
| 153 | TYPE_TRDEPENDS = 6 | ||
| 154 | TYPE_TRECOMMENDS = 7 | ||
| 152 | DEPENDS_TYPE = ( | 155 | DEPENDS_TYPE = ( |
| 153 | (TYPE_RDEPENDS, "rdepends"), | 156 | (TYPE_RDEPENDS, "rdepends"), |
| 154 | (TYPE_RPROVIDES, "rprovides"), | 157 | (TYPE_RPROVIDES, "rprovides"), |
| @@ -156,46 +159,23 @@ class Build_Package_Dependency(models.Model): | |||
| 156 | (TYPE_RSUGGESTS, "rsuggests"), | 159 | (TYPE_RSUGGESTS, "rsuggests"), |
| 157 | (TYPE_RREPLACES, "rreplaces"), | 160 | (TYPE_RREPLACES, "rreplaces"), |
| 158 | (TYPE_RCONFLICTS, "rconflicts"), | 161 | (TYPE_RCONFLICTS, "rconflicts"), |
| 162 | (TYPE_TRDEPENDS, "trdepends"), | ||
| 163 | (TYPE_TRECOMMENDS, "trecommends"), | ||
| 159 | ) | 164 | ) |
| 160 | package = models.ForeignKey(Build_Package, related_name='bpackage_dependencies_package') | 165 | package = models.ForeignKey(Package, related_name='package_dependencies_source') |
| 161 | depends_on = models.CharField(max_length=100) # soft dependency | 166 | depends_on = models.ForeignKey(Package, related_name='package_dependencies_target') # soft dependency |
| 162 | dep_type = models.IntegerField(choices=DEPENDS_TYPE) | 167 | dep_type = models.IntegerField(choices=DEPENDS_TYPE) |
| 168 | target = models.ForeignKey(Target, null=True) | ||
| 163 | 169 | ||
| 170 | class Target_Installed_Package(models.Model): | ||
| 171 | target = models.ForeignKey(Target) | ||
| 172 | package = models.ForeignKey(Package) | ||
| 164 | 173 | ||
| 165 | class Target_Package(models.Model): | 174 | class Package_File(models.Model): |
| 166 | target = models.ForeignKey('Target') | 175 | package = models.ForeignKey(Package, related_name='buildfilelist_package') |
| 167 | recipe = models.ForeignKey('Recipe', null=True) | ||
| 168 | name = models.CharField(max_length=100) | ||
| 169 | version = models.CharField(max_length=100, blank=True) | ||
| 170 | size = models.IntegerField() | ||
| 171 | |||
| 172 | |||
| 173 | class Target_Package_Dependency(models.Model): | ||
| 174 | TYPE_DEPENDS = 0 | ||
| 175 | TYPE_RDEPENDS = 1 | ||
| 176 | TYPE_RECOMMENDS = 2 | ||
| 177 | |||
| 178 | DEPENDS_TYPE = ( | ||
| 179 | (TYPE_DEPENDS, "depends"), | ||
| 180 | (TYPE_RDEPENDS, "rdepends"), | ||
| 181 | (TYPE_RECOMMENDS, "recommends"), | ||
| 182 | ) | ||
| 183 | package = models.ForeignKey(Target_Package, related_name='tpackage_dependencies_package') | ||
| 184 | depends_on = models.ForeignKey(Target_Package, related_name='tpackage_dependencies_depends') | ||
| 185 | dep_type = models.IntegerField(choices=DEPENDS_TYPE) | ||
| 186 | |||
| 187 | |||
| 188 | class Build_File(models.Model): | ||
| 189 | bpackage = models.ForeignKey(Build_Package, related_name='filelist_bpackage') | ||
| 190 | path = models.FilePathField(max_length=255, blank=True) | 176 | path = models.FilePathField(max_length=255, blank=True) |
| 191 | size = models.IntegerField() | 177 | size = models.IntegerField() |
| 192 | 178 | ||
| 193 | class Target_File(models.Model): | ||
| 194 | tpackage = models.ForeignKey(Target_Package, related_name='filelist_tpackage') | ||
| 195 | path = models.FilePathField(max_length=255, blank=True) | ||
| 196 | size = models.IntegerField() | ||
| 197 | |||
| 198 | |||
| 199 | class Recipe(models.Model): | 179 | class Recipe(models.Model): |
| 200 | name = models.CharField(max_length=100, blank=True) | 180 | name = models.CharField(max_length=100, blank=True) |
| 201 | version = models.CharField(max_length=100, blank=True) | 181 | version = models.CharField(max_length=100, blank=True) |
