From 8d2e18c89027e731ce90729323e586246c8af4e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 13 Sep 2016 18:22:44 +0200 Subject: [PATCH] add commit_id to Package --- src/c3nav/api/serializers.py | 2 +- .../migrations/0003_package_commit_id.py | 20 +++++++++++++++++++ src/c3nav/mapdata/models/package.py | 1 + src/c3nav/mapdata/packageio/read.py | 11 ++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/c3nav/mapdata/migrations/0003_package_commit_id.py diff --git a/src/c3nav/api/serializers.py b/src/c3nav/api/serializers.py index 5e326522..f3287761 100644 --- a/src/c3nav/api/serializers.py +++ b/src/c3nav/api/serializers.py @@ -16,7 +16,7 @@ class LevelSerializer(serializers.ModelSerializer): class PackageSerializer(serializers.ModelSerializer): class Meta: model = Package - fields = ('name', 'home_repo', 'depends', 'bounds') + fields = ('name', 'home_repo', 'commit_id', 'depends', 'bounds') def to_representation(self, obj): result = super().to_representation(obj) diff --git a/src/c3nav/mapdata/migrations/0003_package_commit_id.py b/src/c3nav/mapdata/migrations/0003_package_commit_id.py new file mode 100644 index 00000000..01cfa489 --- /dev/null +++ b/src/c3nav/mapdata/migrations/0003_package_commit_id.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.1 on 2016-09-13 16:12 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0002_package_home_repo'), + ] + + operations = [ + migrations.AddField( + model_name='package', + name='commit_id', + field=models.CharField(max_length=40, null=True, verbose_name='current commit id'), + ), + ] diff --git a/src/c3nav/mapdata/models/package.py b/src/c3nav/mapdata/models/package.py index 600a95d3..08e320e5 100644 --- a/src/c3nav/mapdata/models/package.py +++ b/src/c3nav/mapdata/models/package.py @@ -12,6 +12,7 @@ class Package(models.Model): help_text=_('e.g. de.c3nav.33c3.base')) depends = models.ManyToManyField('Package') home_repo = models.URLField(_('URL to the home git repository'), null=True) + commit_id = models.CharField(_('current commit id'), max_length=40, null=True) bottom = models.DecimalField(_('bottom coordinate'), null=True, max_digits=6, decimal_places=2) left = models.DecimalField(_('left coordinate'), null=True, max_digits=6, decimal_places=2) diff --git a/src/c3nav/mapdata/packageio/read.py b/src/c3nav/mapdata/packageio/read.py index 3ddbeb34..59f9cc38 100644 --- a/src/c3nav/mapdata/packageio/read.py +++ b/src/c3nav/mapdata/packageio/read.py @@ -1,5 +1,6 @@ import json import os +import subprocess from django.conf import settings from django.core.management.base import CommandError @@ -34,6 +35,16 @@ def read_package(directory, objects=None): raise CommandError('no pkg.json found') package = Package.fromfile(package, directory) + + try: + result = subprocess.Popen(['git', '-C', path, 'rev-parse', '--verify', 'HEAD'], stdout=subprocess.PIPE) + returncode = result.wait() + except: + pass + else: + if returncode == 0: + package['commit_id'] = result.stdout.read().strip() + objects.add_package(package) objects.add_levels(_read_folder(package['name'], Level, os.path.join(path, 'levels'))) objects.add_sources(_read_folder(package['name'], Source, os.path.join(path, 'sources'), check_sister_file=True))