summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2013-12-03 12:51:04 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-12-10 11:16:14 +0000
commit415ebb738da2a9625d6cc1456f4e99e463797c31 (patch)
tree323d58d2f4262db2fda5161b96736ef639947cfc /bitbake
parent81ebce07788cd4c5f53cb6ad7b51ee3d6e52c881 (diff)
downloadpoky-415ebb738da2a9625d6cc1456f4e99e463797c31.tar.gz
bitbake: toaster: migrate orm models to South
As Toaster advances, database schema alteration will force users to delete old versions and lose all data collected. In order to prevent this, and to allow database updates to happen without having to delete old data, we use South to handle migrations for the ORM application which stores the Toaster data. [YOCTO #5559] (Bitbake rev: 6936faed8d94f3a2ab4055049cd27d02d8229003) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rwxr-xr-xbitbake/bin/toaster16
-rw-r--r--bitbake/lib/toaster/orm/migrations/0001_initial.py400
-rw-r--r--bitbake/lib/toaster/orm/migrations/__init__.py0
-rw-r--r--bitbake/lib/toaster/toastermain/settings.py1
4 files changed, 416 insertions, 1 deletions
diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster
index 7e51014b7d..fc59fe5547 100755
--- a/bitbake/bin/toaster
+++ b/bitbake/bin/toaster
@@ -40,9 +40,16 @@ function webserverStartAll()
40{ 40{
41 retval=0 41 retval=0
42 python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1 42 python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1
43 python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2
43 if [ $retval -eq 1 ]; then 44 if [ $retval -eq 1 ]; then
44 echo "Failed db sync, stopping system start" 1>&2 45 echo "Failed db sync, stopping system start" 1>&2
45 else 46 elif [ $retval -eq 2 ]; then
47 echo -e "\nError on migration, trying to recover... \n"
48 python $BBBASEDIR/lib/toaster/manage.py migrate orm 0001_initial --fake
49 retval=0
50 python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
51 fi
52 if [ $retval -eq 0 ]; then
46 python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid 53 python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
47 fi 54 fi
48 return $retval 55 return $retval
@@ -92,6 +99,13 @@ if ! echo "import django; print (1,5) == django.VERSION[0:2]" | python 2>/dev/nu
92 return 2 99 return 2
93fi 100fi
94 101
102if ! echo "import south; print [0,8,4] == map(int,south.__version__.split(\".\"))" | python 2>/dev/null | grep True >/dev/null; then
103 echo -e "This program needs South 0.8.4. Please install with\n\nsudo pip install south==0.8.4"
104 return 2
105fi
106
107
108
95 109
96 110
97# Determine the action. If specified by arguments, fine, if not, toggle it 111# Determine the action. If specified by arguments, fine, if not, toggle it
diff --git a/bitbake/lib/toaster/orm/migrations/0001_initial.py b/bitbake/lib/toaster/orm/migrations/0001_initial.py
new file mode 100644
index 0000000000..3b606cbf64
--- /dev/null
+++ b/bitbake/lib/toaster/orm/migrations/0001_initial.py
@@ -0,0 +1,400 @@
1# -*- coding: utf-8 -*-
2from south.utils import datetime_utils as datetime
3from south.db import db
4from south.v2 import SchemaMigration
5from django.db import models
6
7
8class Migration(SchemaMigration):
9
10 def forwards(self, orm):
11 # Adding model 'Build'
12 db.create_table(u'orm_build', (
13 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
14 ('machine', self.gf('django.db.models.fields.CharField')(max_length=100)),
15 ('image_fstypes', self.gf('django.db.models.fields.CharField')(max_length=100)),
16 ('distro', self.gf('django.db.models.fields.CharField')(max_length=100)),
17 ('distro_version', self.gf('django.db.models.fields.CharField')(max_length=100)),
18 ('started_on', self.gf('django.db.models.fields.DateTimeField')()),
19 ('completed_on', self.gf('django.db.models.fields.DateTimeField')()),
20 ('outcome', self.gf('django.db.models.fields.IntegerField')(default=2)),
21 ('errors_no', self.gf('django.db.models.fields.IntegerField')(default=0)),
22 ('warnings_no', self.gf('django.db.models.fields.IntegerField')(default=0)),
23 ('cooker_log_path', self.gf('django.db.models.fields.CharField')(max_length=500)),
24 ('build_name', self.gf('django.db.models.fields.CharField')(max_length=100)),
25 ('bitbake_version', self.gf('django.db.models.fields.CharField')(max_length=50)),
26 ))
27 db.send_create_signal(u'orm', ['Build'])
28
29 # Adding model 'Target'
30 db.create_table(u'orm_target', (
31 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
32 ('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Build'])),
33 ('target', self.gf('django.db.models.fields.CharField')(max_length=100)),
34 ('is_image', self.gf('django.db.models.fields.BooleanField')(default=False)),
35 ('file_name', self.gf('django.db.models.fields.CharField')(max_length=100)),
36 ('file_size', self.gf('django.db.models.fields.IntegerField')()),
37 ))
38 db.send_create_signal(u'orm', ['Target'])
39
40 # Adding model 'Task'
41 db.create_table(u'orm_task', (
42 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
43 ('build', self.gf('django.db.models.fields.related.ForeignKey')(related_name='task_build', to=orm['orm.Build'])),
44 ('order', self.gf('django.db.models.fields.IntegerField')(null=True)),
45 ('task_executed', self.gf('django.db.models.fields.BooleanField')(default=False)),
46 ('outcome', self.gf('django.db.models.fields.IntegerField')(default=5)),
47 ('sstate_checksum', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
48 ('path_to_sstate_obj', self.gf('django.db.models.fields.FilePathField')(max_length=500, blank=True)),
49 ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(related_name='build_recipe', to=orm['orm.Recipe'])),
50 ('task_name', self.gf('django.db.models.fields.CharField')(max_length=100)),
51 ('source_url', self.gf('django.db.models.fields.FilePathField')(max_length=255, blank=True)),
52 ('work_directory', self.gf('django.db.models.fields.FilePathField')(max_length=255, blank=True)),
53 ('script_type', self.gf('django.db.models.fields.IntegerField')(default=0)),
54 ('line_number', self.gf('django.db.models.fields.IntegerField')(default=0)),
55 ('disk_io', self.gf('django.db.models.fields.IntegerField')(null=True)),
56 ('cpu_usage', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=6, decimal_places=2)),
57 ('elapsed_time', self.gf('django.db.models.fields.CharField')(default=0, max_length=50)),
58 ('sstate_result', self.gf('django.db.models.fields.IntegerField')(default=0)),
59 ('message', self.gf('django.db.models.fields.CharField')(max_length=240)),
60 ('logfile', self.gf('django.db.models.fields.FilePathField')(max_length=255, blank=True)),
61 ))
62 db.send_create_signal(u'orm', ['Task'])
63
64 # Adding model 'Task_Dependency'
65 db.create_table(u'orm_task_dependency', (
66 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
67 ('task', self.gf('django.db.models.fields.related.ForeignKey')(related_name='task_dependencies_task', to=orm['orm.Task'])),
68 ('depends_on', self.gf('django.db.models.fields.related.ForeignKey')(related_name='task_dependencies_depends', to=orm['orm.Task'])),
69 ))
70 db.send_create_signal(u'orm', ['Task_Dependency'])
71
72 # Adding model 'Package'
73 db.create_table(u'orm_package', (
74 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
75 ('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Build'])),
76 ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Recipe'], null=True)),
77 ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
78 ('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
79 ('revision', self.gf('django.db.models.fields.CharField')(max_length=32, blank=True)),
80 ('summary', self.gf('django.db.models.fields.CharField')(max_length=200, blank=True)),
81 ('description', self.gf('django.db.models.fields.CharField')(max_length=200, blank=True)),
82 ('size', self.gf('django.db.models.fields.IntegerField')(default=0)),
83 ('installed_size', self.gf('django.db.models.fields.IntegerField')(default=0)),
84 ('section', self.gf('django.db.models.fields.CharField')(max_length=80, blank=True)),
85 ('license', self.gf('django.db.models.fields.CharField')(max_length=80, blank=True)),
86 ))
87 db.send_create_signal(u'orm', ['Package'])
88
89 # Adding model 'Package_Dependency'
90 db.create_table(u'orm_package_dependency', (
91 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
92 ('package', self.gf('django.db.models.fields.related.ForeignKey')(related_name='package_dependencies_source', to=orm['orm.Package'])),
93 ('depends_on', self.gf('django.db.models.fields.related.ForeignKey')(related_name='package_dependencies_target', to=orm['orm.Package'])),
94 ('dep_type', self.gf('django.db.models.fields.IntegerField')()),
95 ('target', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Target'], null=True)),
96 ))
97 db.send_create_signal(u'orm', ['Package_Dependency'])
98
99 # Adding model 'Target_Installed_Package'
100 db.create_table(u'orm_target_installed_package', (
101 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
102 ('target', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Target'])),
103 ('package', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Package'])),
104 ))
105 db.send_create_signal(u'orm', ['Target_Installed_Package'])
106
107 # Adding model 'Package_File'
108 db.create_table(u'orm_package_file', (
109 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
110 ('package', self.gf('django.db.models.fields.related.ForeignKey')(related_name='buildfilelist_package', to=orm['orm.Package'])),
111 ('path', self.gf('django.db.models.fields.FilePathField')(max_length=255, blank=True)),
112 ('size', self.gf('django.db.models.fields.IntegerField')()),
113 ))
114 db.send_create_signal(u'orm', ['Package_File'])
115
116 # Adding model 'Recipe'
117 db.create_table(u'orm_recipe', (
118 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
119 ('name', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
120 ('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
121 ('layer_version', self.gf('django.db.models.fields.related.ForeignKey')(related_name='recipe_layer_version', to=orm['orm.Layer_Version'])),
122 ('summary', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
123 ('description', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
124 ('section', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
125 ('license', self.gf('django.db.models.fields.CharField')(max_length=200, blank=True)),
126 ('licensing_info', self.gf('django.db.models.fields.TextField')(blank=True)),
127 ('homepage', self.gf('django.db.models.fields.URLField')(max_length=200, blank=True)),
128 ('bugtracker', self.gf('django.db.models.fields.URLField')(max_length=200, blank=True)),
129 ('file_path', self.gf('django.db.models.fields.FilePathField')(max_length=255)),
130 ))
131 db.send_create_signal(u'orm', ['Recipe'])
132
133 # Adding model 'Recipe_Dependency'
134 db.create_table(u'orm_recipe_dependency', (
135 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
136 ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(related_name='r_dependencies_recipe', to=orm['orm.Recipe'])),
137 ('depends_on', self.gf('django.db.models.fields.related.ForeignKey')(related_name='r_dependencies_depends', to=orm['orm.Recipe'])),
138 ('dep_type', self.gf('django.db.models.fields.IntegerField')()),
139 ))
140 db.send_create_signal(u'orm', ['Recipe_Dependency'])
141
142 # Adding model 'Layer'
143 db.create_table(u'orm_layer', (
144 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
145 ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
146 ('local_path', self.gf('django.db.models.fields.FilePathField')(max_length=255)),
147 ('layer_index_url', self.gf('django.db.models.fields.URLField')(max_length=200)),
148 ))
149 db.send_create_signal(u'orm', ['Layer'])
150
151 # Adding model 'Layer_Version'
152 db.create_table(u'orm_layer_version', (
153 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
154 ('build', self.gf('django.db.models.fields.related.ForeignKey')(related_name='layer_version_build', to=orm['orm.Build'])),
155 ('layer', self.gf('django.db.models.fields.related.ForeignKey')(related_name='layer_version_layer', to=orm['orm.Layer'])),
156 ('branch', self.gf('django.db.models.fields.CharField')(max_length=50)),
157 ('commit', self.gf('django.db.models.fields.CharField')(max_length=100)),
158 ('priority', self.gf('django.db.models.fields.IntegerField')()),
159 ))
160 db.send_create_signal(u'orm', ['Layer_Version'])
161
162 # Adding model 'Variable'
163 db.create_table(u'orm_variable', (
164 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
165 ('build', self.gf('django.db.models.fields.related.ForeignKey')(related_name='variable_build', to=orm['orm.Build'])),
166 ('variable_name', self.gf('django.db.models.fields.CharField')(max_length=100)),
167 ('variable_value', self.gf('django.db.models.fields.TextField')(blank=True)),
168 ('changed', self.gf('django.db.models.fields.BooleanField')(default=False)),
169 ('human_readable_name', self.gf('django.db.models.fields.CharField')(max_length=200)),
170 ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
171 ))
172 db.send_create_signal(u'orm', ['Variable'])
173
174 # Adding model 'VariableHistory'
175 db.create_table(u'orm_variablehistory', (
176 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
177 ('variable', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Variable'])),
178 ('file_name', self.gf('django.db.models.fields.FilePathField')(max_length=255)),
179 ('line_number', self.gf('django.db.models.fields.IntegerField')(null=True)),
180 ('operation', self.gf('django.db.models.fields.CharField')(max_length=16)),
181 ))
182 db.send_create_signal(u'orm', ['VariableHistory'])
183
184 # Adding model 'LogMessage'
185 db.create_table(u'orm_logmessage', (
186 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
187 ('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Build'])),
188 ('level', self.gf('django.db.models.fields.IntegerField')(default=0)),
189 ('message', self.gf('django.db.models.fields.CharField')(max_length=240)),
190 ('pathname', self.gf('django.db.models.fields.FilePathField')(max_length=255, blank=True)),
191 ('lineno', self.gf('django.db.models.fields.IntegerField')(null=True)),
192 ))
193 db.send_create_signal(u'orm', ['LogMessage'])
194
195
196 def backwards(self, orm):
197 # Deleting model 'Build'
198 db.delete_table(u'orm_build')
199
200 # Deleting model 'Target'
201 db.delete_table(u'orm_target')
202
203 # Deleting model 'Task'
204 db.delete_table(u'orm_task')
205
206 # Deleting model 'Task_Dependency'
207 db.delete_table(u'orm_task_dependency')
208
209 # Deleting model 'Package'
210 db.delete_table(u'orm_package')
211
212 # Deleting model 'Package_Dependency'
213 db.delete_table(u'orm_package_dependency')
214
215 # Deleting model 'Target_Installed_Package'
216 db.delete_table(u'orm_target_installed_package')
217
218 # Deleting model 'Package_File'
219 db.delete_table(u'orm_package_file')
220
221 # Deleting model 'Recipe'
222 db.delete_table(u'orm_recipe')
223
224 # Deleting model 'Recipe_Dependency'
225 db.delete_table(u'orm_recipe_dependency')
226
227 # Deleting model 'Layer'
228 db.delete_table(u'orm_layer')
229
230 # Deleting model 'Layer_Version'
231 db.delete_table(u'orm_layer_version')
232
233 # Deleting model 'Variable'
234 db.delete_table(u'orm_variable')
235
236 # Deleting model 'VariableHistory'
237 db.delete_table(u'orm_variablehistory')
238
239 # Deleting model 'LogMessage'
240 db.delete_table(u'orm_logmessage')
241
242
243 models = {
244 u'orm.build': {
245 'Meta': {'object_name': 'Build'},
246 'bitbake_version': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
247 'build_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
248 'completed_on': ('django.db.models.fields.DateTimeField', [], {}),
249 'cooker_log_path': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
250 'distro': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
251 'distro_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
252 'errors_no': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
253 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
254 'image_fstypes': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
255 'machine': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
256 'outcome': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
257 'started_on': ('django.db.models.fields.DateTimeField', [], {}),
258 'warnings_no': ('django.db.models.fields.IntegerField', [], {'default': '0'})
259 },
260 u'orm.layer': {
261 'Meta': {'object_name': 'Layer'},
262 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
263 'layer_index_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
264 'local_path': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
265 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
266 },
267 u'orm.layer_version': {
268 'Meta': {'object_name': 'Layer_Version'},
269 'branch': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
270 'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'layer_version_build'", 'to': u"orm['orm.Build']"}),
271 'commit': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
272 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
273 'layer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'layer_version_layer'", 'to': u"orm['orm.Layer']"}),
274 'priority': ('django.db.models.fields.IntegerField', [], {})
275 },
276 u'orm.logmessage': {
277 'Meta': {'object_name': 'LogMessage'},
278 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
279 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
280 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
281 'lineno': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
282 'message': ('django.db.models.fields.CharField', [], {'max_length': '240'}),
283 'pathname': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'})
284 },
285 u'orm.package': {
286 'Meta': {'object_name': 'Package'},
287 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
288 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
289 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
290 'installed_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
291 'license': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
292 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
293 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Recipe']", 'null': 'True'}),
294 'revision': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
295 'section': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
296 'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
297 'summary': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
298 'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
299 },
300 u'orm.package_dependency': {
301 'Meta': {'object_name': 'Package_Dependency'},
302 'dep_type': ('django.db.models.fields.IntegerField', [], {}),
303 'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_dependencies_target'", 'to': u"orm['orm.Package']"}),
304 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
305 'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_dependencies_source'", 'to': u"orm['orm.Package']"}),
306 'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']", 'null': 'True'})
307 },
308 u'orm.package_file': {
309 'Meta': {'object_name': 'Package_File'},
310 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
311 'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'buildfilelist_package'", 'to': u"orm['orm.Package']"}),
312 'path': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
313 'size': ('django.db.models.fields.IntegerField', [], {})
314 },
315 u'orm.recipe': {
316 'Meta': {'object_name': 'Recipe'},
317 'bugtracker': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
318 'description': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
319 'file_path': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
320 'homepage': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
321 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
322 'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'recipe_layer_version'", 'to': u"orm['orm.Layer_Version']"}),
323 'license': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
324 'licensing_info': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
325 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
326 'section': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
327 'summary': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
328 'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
329 },
330 u'orm.recipe_dependency': {
331 'Meta': {'object_name': 'Recipe_Dependency'},
332 'dep_type': ('django.db.models.fields.IntegerField', [], {}),
333 'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'r_dependencies_depends'", 'to': u"orm['orm.Recipe']"}),
334 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
335 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'r_dependencies_recipe'", 'to': u"orm['orm.Recipe']"})
336 },
337 u'orm.target': {
338 'Meta': {'object_name': 'Target'},
339 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
340 'file_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
341 'file_size': ('django.db.models.fields.IntegerField', [], {}),
342 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
343 'is_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
344 'target': ('django.db.models.fields.CharField', [], {'max_length': '100'})
345 },
346 u'orm.target_installed_package': {
347 'Meta': {'object_name': 'Target_Installed_Package'},
348 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
349 'package': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Package']"}),
350 'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
351 },
352 u'orm.task': {
353 'Meta': {'ordering': "('order', 'recipe')", 'object_name': 'Task'},
354 'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_build'", 'to': u"orm['orm.Build']"}),
355 'cpu_usage': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '6', 'decimal_places': '2'}),
356 'disk_io': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
357 'elapsed_time': ('django.db.models.fields.CharField', [], {'default': '0', 'max_length': '50'}),
358 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
359 'line_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
360 'logfile': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
361 'message': ('django.db.models.fields.CharField', [], {'max_length': '240'}),
362 'order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
363 'outcome': ('django.db.models.fields.IntegerField', [], {'default': '5'}),
364 'path_to_sstate_obj': ('django.db.models.fields.FilePathField', [], {'max_length': '500', 'blank': 'True'}),
365 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'build_recipe'", 'to': u"orm['orm.Recipe']"}),
366 'script_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
367 'source_url': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
368 'sstate_checksum': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
369 'sstate_result': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
370 'task_executed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
371 'task_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
372 'work_directory': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'})
373 },
374 u'orm.task_dependency': {
375 'Meta': {'object_name': 'Task_Dependency'},
376 'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_dependencies_depends'", 'to': u"orm['orm.Task']"}),
377 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
378 'task': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_dependencies_task'", 'to': u"orm['orm.Task']"})
379 },
380 u'orm.variable': {
381 'Meta': {'object_name': 'Variable'},
382 'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variable_build'", 'to': u"orm['orm.Build']"}),
383 'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
384 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
385 'human_readable_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
386 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
387 'variable_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
388 'variable_value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
389 },
390 u'orm.variablehistory': {
391 'Meta': {'object_name': 'VariableHistory'},
392 'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
393 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
394 'line_number': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
395 'operation': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
396 'variable': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Variable']"})
397 }
398 }
399
400 complete_apps = ['orm'] \ No newline at end of file
diff --git a/bitbake/lib/toaster/orm/migrations/__init__.py b/bitbake/lib/toaster/orm/migrations/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/bitbake/lib/toaster/orm/migrations/__init__.py
diff --git a/bitbake/lib/toaster/toastermain/settings.py b/bitbake/lib/toaster/toastermain/settings.py
index 9435087f17..c6ede686ca 100644
--- a/bitbake/lib/toaster/toastermain/settings.py
+++ b/bitbake/lib/toaster/toastermain/settings.py
@@ -148,6 +148,7 @@ INSTALLED_APPS = (
148 'toastermain', 148 'toastermain',
149 'bldviewer', 149 'bldviewer',
150 'toastergui', 150 'toastergui',
151 'south',
151) 152)
152 153
153# A sample logging configuration. The only tangible logging 154# A sample logging configuration. The only tangible logging