mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 12:49:01 +02:00
Add actual_branch field to layerbranch
Some layers don't use the conventional branch name (i.e. the same name as the core branch). Add a field so we can record the actual branch name and use this within the update script. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
parent
89f9e6afe8
commit
8be1adddb6
|
@ -0,0 +1,125 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
# Adding field 'LayerBranch.actual_branch'
|
||||
db.add_column('layerindex_layerbranch', 'actual_branch',
|
||||
self.gf('django.db.models.fields.CharField')(default='', max_length=80, blank=True),
|
||||
keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
# Deleting field 'LayerBranch.actual_branch'
|
||||
db.delete_column('layerindex_layerbranch', 'actual_branch')
|
||||
|
||||
|
||||
models = {
|
||||
'layerindex.bbappend': {
|
||||
'Meta': {'object_name': 'BBAppend'},
|
||||
'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'filepath': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"})
|
||||
},
|
||||
'layerindex.bbclass': {
|
||||
'Meta': {'object_name': 'BBClass'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'layerindex.branch': {
|
||||
'Meta': {'object_name': 'Branch'},
|
||||
'bitbake_branch': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||
'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'sort_priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'layerindex.layerbranch': {
|
||||
'Meta': {'object_name': 'LayerBranch'},
|
||||
'actual_branch': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
|
||||
'branch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Branch']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerItem']"}),
|
||||
'vcs_last_commit': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'vcs_last_fetch': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'vcs_last_rev': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
|
||||
'vcs_subdir': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'})
|
||||
},
|
||||
'layerindex.layerdependency': {
|
||||
'Meta': {'object_name': 'LayerDependency'},
|
||||
'dependency': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dependents_set'", 'to': "orm['layerindex.LayerItem']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dependencies_set'", 'to': "orm['layerindex.LayerBranch']"})
|
||||
},
|
||||
'layerindex.layeritem': {
|
||||
'Meta': {'object_name': 'LayerItem'},
|
||||
'description': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'index_preference': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'layer_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
|
||||
'mailing_list_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
|
||||
'status': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
|
||||
'summary': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
|
||||
'usage_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'vcs_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'vcs_web_file_base_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'vcs_web_tree_base_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'vcs_web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
|
||||
},
|
||||
'layerindex.layermaintainer': {
|
||||
'Meta': {'object_name': 'LayerMaintainer'},
|
||||
'email': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'responsibility': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
|
||||
'status': ('django.db.models.fields.CharField', [], {'default': "'A'", 'max_length': '1'})
|
||||
},
|
||||
'layerindex.layernote': {
|
||||
'Meta': {'object_name': 'LayerNote'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerItem']"}),
|
||||
'text': ('django.db.models.fields.TextField', [], {})
|
||||
},
|
||||
'layerindex.machine': {
|
||||
'Meta': {'object_name': 'Machine'},
|
||||
'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'layerindex.recipe': {
|
||||
'Meta': {'object_name': 'Recipe'},
|
||||
'bbclassextend': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'bugtracker': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'filepath': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'homepage': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"}),
|
||||
'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'pn': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'provides': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'pv': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'section': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'summary': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'})
|
||||
},
|
||||
'layerindex.recipefiledependency': {
|
||||
'Meta': {'object_name': 'RecipeFileDependency'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['layerindex.LayerBranch']"}),
|
||||
'path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
|
||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['layerindex']
|
|
@ -108,6 +108,7 @@ class LayerBranch(models.Model):
|
|||
vcs_last_fetch = models.DateTimeField('Last successful fetch', blank=True, null=True)
|
||||
vcs_last_rev = models.CharField('Last revision fetched', max_length=80, blank=True)
|
||||
vcs_last_commit = models.DateTimeField('Last commit date', blank=True, null=True)
|
||||
actual_branch = models.CharField('Actual Branch', max_length=80, blank=True, help_text='Name of the actual branch in the repository matching the core branch')
|
||||
|
||||
class Meta:
|
||||
verbose_name_plural = "Layer branches"
|
||||
|
|
|
@ -304,15 +304,18 @@ def main():
|
|||
logger.error("Unable to find core layer %s in database; check CORE_LAYER_NAME setting" % settings.CORE_LAYER_NAME)
|
||||
sys.exit(1)
|
||||
core_layerbranch = core_layer.get_layerbranch(options.branch)
|
||||
core_branchname = options.branch
|
||||
if core_layerbranch:
|
||||
core_subdir = core_layerbranch.vcs_subdir
|
||||
if core_layerbranch.actual_branch:
|
||||
core_branchname = core_layerbranch.actual_branch
|
||||
else:
|
||||
core_subdir = 'meta'
|
||||
core_urldir = core_layer.get_fetch_dir()
|
||||
core_repodir = os.path.join(fetchdir, core_urldir)
|
||||
core_layerdir = os.path.join(core_repodir, core_subdir)
|
||||
if not options.nocheckout:
|
||||
out = runcmd("git checkout origin/%s" % options.branch, core_repodir)
|
||||
out = runcmd("git checkout origin/%s" % core_branchname, core_repodir)
|
||||
out = runcmd("git clean -f -x", core_repodir)
|
||||
# The directory above where this script exists should contain our conf/layer.conf,
|
||||
# so add it to BBPATH along with the core layer directory
|
||||
|
@ -357,17 +360,28 @@ def main():
|
|||
transaction.rollback()
|
||||
continue
|
||||
|
||||
layerbranch = layer.get_layerbranch(options.branch)
|
||||
|
||||
branchname = options.branch
|
||||
branchdesc = options.branch
|
||||
if layerbranch:
|
||||
if layerbranch.actual_branch:
|
||||
branchname = layerbranch.actual_branch
|
||||
branchdesc = "%s (%s)" % (options.branch, branchname)
|
||||
|
||||
# Collect repo info
|
||||
repo = git.Repo(repodir)
|
||||
assert repo.bare == False
|
||||
try:
|
||||
topcommit = repo.commit('origin/%s' % options.branch)
|
||||
topcommit = repo.commit('origin/%s' % branchname)
|
||||
except:
|
||||
logger.info("Skipping update of layer %s - branch %s doesn't exist" % (layer.name, options.branch))
|
||||
if layerbranch:
|
||||
logger.error("Failed update of layer %s - branch %s no longer exists" % (layer.name, branchdesc))
|
||||
else:
|
||||
logger.info("Skipping update of layer %s - branch %s doesn't exist" % (layer.name, branchdesc))
|
||||
transaction.rollback()
|
||||
continue
|
||||
|
||||
layerbranch = layer.get_layerbranch(options.branch)
|
||||
if not layerbranch:
|
||||
# LayerBranch doesn't exist for this branch, create it
|
||||
layerbranch = LayerBranch()
|
||||
|
@ -405,16 +419,16 @@ def main():
|
|||
if layerbranch.vcs_last_rev != topcommit.hexsha or options.reload:
|
||||
# Check out appropriate branch
|
||||
if not options.nocheckout:
|
||||
out = runcmd("git checkout origin/%s" % options.branch, repodir)
|
||||
out = runcmd("git checkout origin/%s" % branchname, repodir)
|
||||
out = runcmd("git clean -f -x", repodir)
|
||||
|
||||
if not os.path.exists(layerdir):
|
||||
if options.branch == 'master':
|
||||
logger.error("Subdirectory for layer %s does not exist on master branch!" % layer.name)
|
||||
logger.error("Subdirectory for layer %s does not exist on branch %s!" % branchdesc)
|
||||
transaction.rollback()
|
||||
continue
|
||||
else:
|
||||
logger.info("Skipping update of layer %s for branch %s - subdirectory does not exist on this branch" % (layer.name, options.branch))
|
||||
logger.info("Skipping update of layer %s for branch %s - subdirectory does not exist on this branch" % (layer.name, branchdesc))
|
||||
transaction.rollback()
|
||||
continue
|
||||
|
||||
|
@ -423,7 +437,7 @@ def main():
|
|||
transaction.rollback()
|
||||
continue
|
||||
|
||||
logger.info("Collecting data for layer %s on branch %s" % (layer.name, options.branch))
|
||||
logger.info("Collecting data for layer %s on branch %s" % (layer.name, branchdesc))
|
||||
|
||||
# Parse layer.conf files for this layer and its dependencies
|
||||
# This is necessary not just because BBPATH needs to be set in order
|
||||
|
@ -573,7 +587,7 @@ def main():
|
|||
layerbranch.vcs_last_rev = topcommit.hexsha
|
||||
layerbranch.vcs_last_commit = datetime.fromtimestamp(topcommit.committed_date)
|
||||
else:
|
||||
logger.info("Layer %s is already up-to-date for branch %s" % (layer.name, options.branch))
|
||||
logger.info("Layer %s is already up-to-date for branch %s" % (layer.name, branchdesc))
|
||||
|
||||
layerbranch.vcs_last_fetch = datetime.now()
|
||||
layerbranch.save()
|
||||
|
|
Loading…
Reference in New Issue
Block a user