aboutsummaryrefslogtreecommitdiffstats
path: root/gitrefinery/migrations/0002_authors.py
blob: 9e69eba4c495c4eb18ba1dd46b4d2a04f8398eae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import re
import git

from django.db import migrations, models

def create_author_obj(apps, schema_editor):
    if not schema_editor.connection.alias == 'default':
        return
    Release = apps.get_model('gitrefinery', 'Release')
    Author = apps.get_model('gitrefinery', 'Author')

    for release in Release.objects.all():
        repo = git.Repo(release.repository.path)
        assert repo.bare == False
        for commit in release.commit_set.all():
            gitcommit = repo.commit(commit.revision)
            author, _ = Author.objects.get_or_create(name=gitcommit.author.name,
                                                    email=gitcommit.author.email)
            commit.author_obj = author
            commit.save()

class Migration(migrations.Migration):

    dependencies = [
        ('gitrefinery', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='Author',
            fields=[
                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=100)),
                ('email', models.CharField(max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='AuthorGroup',
            fields=[
                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='AuthorGroupMembership',
            fields=[
                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
                ('author', models.ForeignKey(on_delete=models.deletion.CASCADE, to='gitrefinery.Author')),
                ('group', models.ForeignKey(on_delete=models.deletion.CASCADE, to='gitrefinery.AuthorGroup')),
            ],
        ),
        migrations.AddField(
            model_name='commit',
            name='author_obj',
            field=models.ForeignKey(on_delete=models.deletion.CASCADE, null=True, blank=True, to='gitrefinery.Author'),
        ),
        migrations.RunPython(create_author_obj),
    ]