diff options
Diffstat (limited to 'layerindex')
-rw-r--r-- | layerindex/forms.py | 9 | ||||
-rw-r--r-- | layerindex/migrations/0012_layeritem_vcs_commit_url.py | 37 | ||||
-rw-r--r-- | layerindex/models.py | 11 | ||||
-rwxr-xr-x | layerindex/tools/import_layer.py | 10 | ||||
-rwxr-xr-x | layerindex/tools/import_wiki_layers.py | 11 |
5 files changed, 65 insertions, 13 deletions
diff --git a/layerindex/forms.py b/layerindex/forms.py index 26e676aea6..0b75fcb833 100644 --- a/layerindex/forms.py +++ b/layerindex/forms.py @@ -54,7 +54,7 @@ class EditLayerForm(forms.ModelForm): class Meta: model = LayerItem - fields = ('name', 'layer_type', 'summary', 'description', 'vcs_url', 'vcs_web_url', 'vcs_web_tree_base_url', 'vcs_web_file_base_url', 'usage_url', 'mailing_list_url') + fields = ('name', 'layer_type', 'summary', 'description', 'vcs_url', 'vcs_web_url', 'vcs_web_tree_base_url', 'vcs_web_file_base_url', 'vcs_web_commit_url', 'usage_url', 'mailing_list_url') def __init__(self, user, layerbranch, *args, **kwargs): super(self.__class__, self).__init__(*args, **kwargs) @@ -130,6 +130,13 @@ class EditLayerForm(forms.ModelForm): val(url) return url + def clean_vcs_web_commit_url(self): + url = self.cleaned_data['vcs_web_commit_url'].strip() + if url: + val = URLValidator() + val(url) + return url + def clean_usage_url(self): usage = self.cleaned_data['usage_url'].strip() if usage.startswith('http'): diff --git a/layerindex/migrations/0012_layeritem_vcs_commit_url.py b/layerindex/migrations/0012_layeritem_vcs_commit_url.py new file mode 100644 index 0000000000..1836abac01 --- /dev/null +++ b/layerindex/migrations/0012_layeritem_vcs_commit_url.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +def set_commit_url(apps, schema_editor): + import re + LayerItem = apps.get_model('layerindex', 'LayerItem') + for layer in LayerItem.objects.all(): + if layer.vcs_web_url: + if 'git.yoctoproject.org' in layer.vcs_web_url or 'git.openembedded.org' in layer.vcs_web_url or 'cgit.' in layer.vcs_web_url: + layer.vcs_web_commit_url = layer.vcs_web_url + '/commit/?id=%hash%' + elif 'github.com/' in layer.vcs_web_url: + layer.vcs_web_commit_url = layer.vcs_web_url + '/commit/%hash%' + elif 'bitbucket.org/' in layer.vcs_web_url: + layer.vcs_web_commit_url = layer.vcs_web_url + '/commits/%hash%' + elif 'gitlab.' in layer.vcs_web_url: + layer.vcs_web_commit_url = layer.vcs_web_url + '/commit/%hash%' + elif 'a=tree;' in layer.vcs_web_tree_base_url: + layer.vcs_web_commit_url = re.sub(r'\.git.*', '.git;a=commit;h=%hash%', layer.vcs_web_url) + layer.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('layerindex', '0011_source'), + ] + + operations = [ + migrations.AddField( + model_name='layeritem', + name='vcs_web_commit_url', + field=models.CharField(verbose_name='Repository web interface commit URL', max_length=255, blank=True, help_text='Base URL for the web interface for viewing a single commit within the repository, if any'), + ), + migrations.RunPython(set_commit_url, reverse_code=migrations.RunPython.noop), + ] diff --git a/layerindex/models.py b/layerindex/models.py index 84d2e09d6f..ac2967bb2c 100644 --- a/layerindex/models.py +++ b/layerindex/models.py @@ -104,6 +104,7 @@ class LayerItem(models.Model): vcs_web_url = models.URLField('Repository web interface URL', blank=True, help_text='URL of the web interface for browsing the repository, if any') vcs_web_tree_base_url = models.CharField('Repository web interface tree base URL', max_length=255, blank=True, help_text='Base URL for the web interface for browsing directories within the repository, if any') vcs_web_file_base_url = models.CharField('Repository web interface file base URL', max_length=255, blank=True, help_text='Base URL for the web interface for viewing files (blobs) within the repository, if any') + vcs_web_commit_url = models.CharField('Repository web interface commit URL', max_length=255, blank=True, help_text='Base URL for the web interface for viewing a single commit within the repository, if any') usage_url = models.CharField('Usage web page URL', max_length=255, blank=True, help_text='URL of a web page with more information about the layer and how to use it, if any (or path to file within repository)') mailing_list_url = models.URLField('Mailing list URL', blank=True, help_text='URL of the info page for a mailing list for discussing the layer, if any') index_preference = models.IntegerField('Preference', default=0, help_text='Number used to find preferred recipes in recipe search results (higher number is greater preference)') @@ -242,6 +243,16 @@ class LayerBranch(models.Model): def file_url(self, path = ''): return self._handle_url_path(self.layer.vcs_web_file_base_url, path) + def commit_url(self, commit_hash): + url = self.layer.vcs_web_commit_url + url = url.replace('%hash%', commit_hash) + if self.actual_branch: + branchname = self.actual_branch + else: + branchname = self.branch.name + url = url.replace('%branch%', branchname) + return url + def test_tree_url(self): return self.tree_url('conf') diff --git a/layerindex/tools/import_layer.py b/layerindex/tools/import_layer.py index a806dd100c..2413cffae8 100755 --- a/layerindex/tools/import_layer.py +++ b/layerindex/tools/import_layer.py @@ -35,29 +35,27 @@ def set_vcs_fields(layer, repoval): layer.vcs_web_url = 'http://cgit.openembedded.org/' + reponame layer.vcs_web_tree_base_url = 'http://cgit.openembedded.org/' + reponame + '/tree/%path%?h=%branch%' layer.vcs_web_file_base_url = 'http://cgit.openembedded.org/' + reponame + '/tree/%path%?h=%branch%' + layer.vcs_web_commit_url = 'http://cgit.openembedded.org/' + reponame + '/commit/?id=%hash%' elif 'git.yoctoproject.org/' in repoval: reponame = re.sub('^.*/', '', repoval) layer.vcs_web_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame layer.vcs_web_tree_base_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame + '/tree/%path%?h=%branch%' layer.vcs_web_file_base_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame + '/tree/%path%?h=%branch%' + layer.vcs_web_commit_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame + '/commit/?id=%hash%' elif 'github.com/' in repoval: reponame = re.sub('^.*github.com/', '', repoval) reponame = re.sub('.git$', '', reponame) layer.vcs_web_url = 'http://github.com/' + reponame layer.vcs_web_tree_base_url = 'http://github.com/' + reponame + '/tree/%branch%/' layer.vcs_web_file_base_url = 'http://github.com/' + reponame + '/blob/%branch%/' - elif 'gitorious.org/' in repoval: - reponame = re.sub('^.*gitorious.org/', '', repoval) - reponame = re.sub('.git$', '', reponame) - layer.vcs_web_url = 'http://gitorious.org/' + reponame - layer.vcs_web_tree_base_url = 'http://gitorious.org/' + reponame + '/trees/%branch%/' - layer.vcs_web_file_base_url = 'http://gitorious.org/' + reponame + '/blobs/%branch%/' + layer.vcs_web_commit_url = 'http://github.com/' + reponame + '/commit/%hash%' elif 'bitbucket.org/' in repoval: reponame = re.sub('^.*bitbucket.org/', '', repoval) reponame = re.sub('.git$', '', reponame) layer.vcs_web_url = 'http://bitbucket.org/' + reponame layer.vcs_web_tree_base_url = 'http://bitbucket.org/' + reponame + '/src/%branch%/%path%?at=%branch%' layer.vcs_web_file_base_url = 'http://bitbucket.org/' + reponame + '/src/%branch%/%path%?at=%branch%' + layer.vcs_web_commit_url = 'http://bitbucket.org/' + reponame + '/commits/%hash%' def readme_extract(readmefn): diff --git a/layerindex/tools/import_wiki_layers.py b/layerindex/tools/import_wiki_layers.py index 7ada5f8d9b..baf0c719dd 100755 --- a/layerindex/tools/import_wiki_layers.py +++ b/layerindex/tools/import_wiki_layers.py @@ -99,34 +99,33 @@ def main(): layer.vcs_web_url = 'http://cgit.openembedded.org/' + reponame layer.vcs_web_tree_base_url = 'http://cgit.openembedded.org/' + reponame + '/tree/%path%?h=%branch%' layer.vcs_web_file_base_url = 'http://cgit.openembedded.org/' + reponame + '/tree/%path%?h=%branch%' + layer.vcs_web_commit_url = 'http://cgit.openembedded.org/' + reponame + '/commit/?id=%hash%' elif 'git.yoctoproject.org/' in repoval: reponame = re.sub('^.*/', '', repoval) layer.vcs_web_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame layer.vcs_web_tree_base_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame + '/tree/%path%?h=%branch%' layer.vcs_web_file_base_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame + '/tree/%path%?h=%branch%' + layer.vcs_web_commit_url = 'http://git.yoctoproject.org/cgit/cgit.cgi/' + reponame + '/commit/?id=%hash%' elif 'github.com/' in repoval: reponame = re.sub('^.*github.com/', '', repoval) reponame = re.sub('.git$', '', reponame) layer.vcs_web_url = 'http://github.com/' + reponame layer.vcs_web_tree_base_url = 'http://github.com/' + reponame + '/tree/%branch%/' layer.vcs_web_file_base_url = 'http://github.com/' + reponame + '/blob/%branch%/' - elif 'gitorious.org/' in repoval: - reponame = re.sub('^.*gitorious.org/', '', repoval) - reponame = re.sub('.git$', '', reponame) - layer.vcs_web_url = 'http://gitorious.org/' + reponame - layer.vcs_web_tree_base_url = 'http://gitorious.org/' + reponame + '/trees/%branch%/' - layer.vcs_web_file_base_url = 'http://gitorious.org/' + reponame + '/blobs/%branch%/' + layer.vcs_web_commit_url = 'http://github.com/' + reponame + '/commit/%hash%' elif 'bitbucket.org/' in repoval: reponame = re.sub('^.*bitbucket.org/', '', repoval) reponame = re.sub('.git$', '', reponame) layer.vcs_web_url = 'http://bitbucket.org/' + reponame layer.vcs_web_tree_base_url = 'http://bitbucket.org/' + reponame + '/src/%branch%/%path%?at=%branch%' layer.vcs_web_file_base_url = 'http://bitbucket.org/' + reponame + '/src/%branch%/%path%?at=%branch%' + layer.vcs_web_commit_url = 'http://bitbucket.org/' + reponame + '/commits/%hash%' elif '.git' in repoval: res = link_re.match(fields[5].strip()) layer.vcs_web_url = res.groups(1)[0] layer.vcs_web_tree_base_url = re.sub(r'\.git.*', '.git;a=tree;f=%path%;hb=%branch%', layer.vcs_web_url) layer.vcs_web_file_base_url = re.sub(r'\.git.*', '.git;a=blob;f=%path%;hb=%branch%', layer.vcs_web_url) + layer.vcs_web_file_base_url = re.sub(r'\.git.*', '.git;a=commit;h=%hash%', layer.vcs_web_url) layer.save() layerbranch = LayerBranch() |