Esempio n. 1
0
def git_status_project(request, project):
    obj = get_project(request, project)

    if not can_see_repository_status(request.user, obj):
        raise PermissionDenied()

    statuses = []
    included = set()

    not_linked = obj.subproject_set.exclude(repo__startswith="weblate://")
    linked = obj.subproject_set.filter(repo__startswith="weblate://")

    for subproject in not_linked:
        statuses.append((subproject.__unicode__(), subproject.repository.status))
        included.add(subproject.get_repo_link_url())

    for subproject in linked.exclude(repo__in=included):
        statuses.append((subproject.__unicode__(), subproject.repository.status))

    return render(
        request,
        "js/git-status.html",
        {
            "object": obj,
            "project": obj,
            "changes": Change.objects.filter(subproject__project=obj, action__in=Change.ACTIONS_REPOSITORY)[:10],
            "statuses": statuses,
        },
    )
Esempio n. 2
0
File: js.py Progetto: wandeg/weblate
def git_status_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_see_repository_status(request.user, obj.subproject.project):
        raise PermissionDenied()

    target = obj.subproject
    if target.is_repo_link:
        target = target.linked_subproject

    return render(
        request, 'js/git-status.html', {
            'object':
            obj,
            'translation':
            obj,
            'project':
            obj.subproject.project,
            'changes':
            Change.objects.filter(
                action__in=Change.ACTIONS_REPOSITORY,
                subproject=target,
            )[:10],
            'statuses': [(None, obj.subproject.repository.status)],
        })
Esempio n. 3
0
    def repository(self, request, **kwargs):
        obj = self.get_object()

        if hasattr(obj, 'subproject'):
            project = obj.subproject.project
        elif hasattr(obj, 'project'):
            project = obj.project
        else:
            project = obj

        if request.method == 'POST':
            serializer = RepoRequestSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)

            result = self.repository_operation(
                request, obj, project, serializer.validated_data['operation']
            )
            return Response(
                data={
                    'result': result
                }
            )

        if not can_see_repository_status(request.user, project):
            raise PermissionDenied()

        return Response(
            data={
                'needs_commit': obj.repo_needs_commit(),
                'needs_merge': obj.repo_needs_merge(),
                'needs_push': obj.repo_needs_push(),
            }
        )
Esempio n. 4
0
    def repository(self, request, **kwargs):
        obj = self.get_object()

        if hasattr(obj, 'subproject'):
            project = obj.subproject.project
        elif hasattr(obj, 'project'):
            project = obj.project
        else:
            project = obj

        if request.method == 'POST':
            serializer = RepoRequestSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)

            result = self.repository_operation(
                request, obj, project, serializer.validated_data['operation'])
            return Response(data={'result': result})

        if not can_see_repository_status(request.user, project):
            raise PermissionDenied()

        return Response(
            data={
                'needs_commit': obj.repo_needs_commit(),
                'needs_merge': obj.repo_needs_merge(),
                'needs_push': obj.repo_needs_push(),
            })
Esempio n. 5
0
def git_status_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_see_repository_status(request.user, obj.subproject.project):
        raise PermissionDenied()

    return render(
        request,
        "js/git-status.html",
        {
            "object": obj,
            "project": obj.subproject.project,
            "changes": Change.objects.filter(action__in=Change.ACTIONS_REPOSITORY, subproject=obj.subproject)[:10],
            "statuses": [(None, obj.subproject.repository.status)],
        },
    )
Esempio n. 6
0
def git_status_project(request, project):
    obj = get_project(request, project)

    if not can_see_repository_status(request.user, obj):
        raise PermissionDenied()

    statuses = [(force_text(component), component.repository.status) for component in obj.all_repo_components()]

    return render(
        request,
        "js/git-status.html",
        {
            "object": obj,
            "project": obj,
            "changes": Change.objects.filter(subproject__project=obj, action__in=Change.ACTIONS_REPOSITORY)[:10],
            "statuses": statuses,
        },
    )
Esempio n. 7
0
def git_status_subproject(request, project, subproject):
    obj = get_subproject(request, project, subproject)

    if not can_see_repository_status(request.user, obj.project):
        raise PermissionDenied()

    return render(
        request,
        'js/git-status.html',
        {
            'object': obj,
            'project': obj.project,
            'changes': Change.objects.filter(
                action__in=Change.ACTIONS_REPOSITORY,
                subproject=obj,
            )[:10],
            'statuses': [(None, obj.repository.status)],
        }
    )
Esempio n. 8
0
def git_status_subproject(request, project, subproject):
    obj = get_subproject(request, project, subproject)

    if not can_see_repository_status(request.user, obj.project):
        raise PermissionDenied()

    return render(
        request, 'js/git-status.html', {
            'object':
            obj,
            'project':
            obj.project,
            'changes':
            Change.objects.filter(
                action__in=Change.ACTIONS_REPOSITORY,
                subproject=obj,
            )[:10],
            'statuses': [(None, obj.repository.status)],
        })
Esempio n. 9
0
def git_status_subproject(request, project, subproject):
    obj = get_subproject(request, project, subproject)

    if not can_see_repository_status(request.user, obj.project):
        raise PermissionDenied()

    target = obj
    if target.is_repo_link:
        target = target.linked_subproject

    return render(
        request,
        "js/git-status.html",
        {
            "object": obj,
            "project": obj.project,
            "changes": Change.objects.filter(action__in=Change.ACTIONS_REPOSITORY, subproject=target)[:10],
            "statuses": [(None, obj.repository.status)],
        },
    )
Esempio n. 10
0
def git_status_project(request, project):
    obj = get_project(request, project)

    if not can_see_repository_status(request.user, obj):
        raise PermissionDenied()

    statuses = []
    included = set()

    not_linked = obj.subproject_set.exclude(repo__startswith='weblate://')
    linked = obj.subproject_set.filter(repo__startswith='weblate://')

    for subproject in not_linked:
        statuses.append((
            subproject.__unicode__(),
            subproject.repository.status,
        ))
        included.add(subproject.get_repo_link_url())

    for subproject in linked.exclude(repo__in=included):
        statuses.append((
            subproject.__unicode__(),
            subproject.repository.status,
        ))

    return render(
        request, 'js/git-status.html', {
            'object':
            obj,
            'project':
            obj,
            'changes':
            Change.objects.filter(
                subproject__project=obj,
                action__in=Change.ACTIONS_REPOSITORY,
            )[:10],
            'statuses':
            statuses,
        })
Esempio n. 11
0
def git_status_project(request, project):
    obj = get_project(request, project)

    if not can_see_repository_status(request.user, obj):
        raise PermissionDenied()

    statuses = [(component.__unicode__(), component.repository.status)
                for component in obj.all_repo_components()]

    return render(
        request, 'js/git-status.html', {
            'object':
            obj,
            'project':
            obj,
            'changes':
            Change.objects.filter(
                subproject__project=obj,
                action__in=Change.ACTIONS_REPOSITORY,
            )[:10],
            'statuses':
            statuses,
        })
Esempio n. 12
0
def git_status_translation(request, project, subproject, lang):
    obj = get_translation(request, project, subproject, lang)

    if not can_see_repository_status(request.user, obj.subproject.project):
        raise PermissionDenied()

    target = obj.subproject
    if target.is_repo_link:
        target = target.linked_subproject

    return render(
        request,
        'js/git-status.html',
        {
            'object': obj,
            'project': obj.subproject.project,
            'changes': Change.objects.filter(
                action__in=Change.ACTIONS_REPOSITORY,
                subproject=target,
            )[:10],
            'statuses': [(None, obj.subproject.repository.status)],
        }
    )
Esempio n. 13
0
def git_status_project(request, project):
    obj = get_project(request, project)

    if not can_see_repository_status(request.user, obj):
        raise PermissionDenied()

    statuses = [
        (component.__unicode__(), component.repository.status)
        for component in obj.all_repo_components()
    ]

    return render(
        request,
        'js/git-status.html',
        {
            'object': obj,
            'project': obj,
            'changes': Change.objects.filter(
                subproject__project=obj,
                action__in=Change.ACTIONS_REPOSITORY,
            )[:10],
            'statuses': statuses,
        }
    )
Esempio n. 14
0
    def repository(self, request, **kwargs):
        obj = self.get_object()

        if isinstance(obj, Translation):
            project = obj.subproject.project
        elif isinstance(obj, SubProject):
            project = obj.project
        else:
            project = obj

        if request.method == 'POST':
            serializer = RepoRequestSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)

            data = {
                'result': self.repository_operation(
                    request, obj, project,
                    serializer.validated_data['operation']
                )
            }

            storage = get_messages(request)
            if storage:
                data['detail'] = '\n'.join([m.message for m in storage])

            return Response(data)

        if not can_see_repository_status(request.user, project):
            raise PermissionDenied()

        data = {
            'needs_commit': obj.repo_needs_commit(),
            'needs_merge': obj.repo_needs_merge(),
            'needs_push': obj.repo_needs_push(),
        }

        if isinstance(obj, Project):
            data['url'] = reverse(
                'api:project-repository',
                kwargs={'slug': obj.slug},
                request=request
            )
        else:
            data['remote_commit'] = obj.get_last_remote_commit()

            if isinstance(obj, Translation):
                subproject = obj.subproject
                data['url'] = reverse(
                    'api:translation-repository',
                    kwargs={
                        'subproject__project__slug': subproject.project.slug,
                        'subproject__slug': subproject.slug,
                        'language__code': obj.language.code,
                    },
                    request=request
                )
                data['status'] = obj.subproject.repository.status()
                changes = Change.objects.filter(
                    action__in=Change.ACTIONS_REPOSITORY,
                    subproject=obj.subproject,
                )
            else:
                data['url'] = reverse(
                    'api:component-repository',
                    kwargs={
                        'project__slug': obj.project.slug,
                        'slug': obj.slug,
                    },
                    request=request
                )
                data['status'] = obj.repository.status()
                changes = Change.objects.filter(
                    action__in=Change.ACTIONS_REPOSITORY,
                    subproject=obj,
                )

            if changes.exists() and changes[0].is_merge_failure():
                data['merge_failure'] = changes[0].target
            else:
                data['merge_failure'] = None

        return Response(data)
Esempio n. 15
0
    def repository(self, request, **kwargs):
        obj = self.get_object()

        if isinstance(obj, Translation):
            project = obj.subproject.project
        elif isinstance(obj, SubProject):
            project = obj.project
        else:
            project = obj

        if request.method == 'POST':
            serializer = RepoRequestSerializer(data=request.data)
            serializer.is_valid(raise_exception=True)

            data = {
                'result': self.repository_operation(
                    request, obj, project,
                    serializer.validated_data['operation']
                )
            }

            storage = get_messages(request)
            if storage:
                data['detail'] = '\n'.join([m.message for m in storage])

            return Response(data)

        if not can_see_repository_status(request.user, project):
            raise PermissionDenied()

        data = {
            'needs_commit': obj.repo_needs_commit(),
            'needs_merge': obj.repo_needs_merge(),
            'needs_push': obj.repo_needs_push(),
        }

        if isinstance(obj, Project):
            data['url'] = reverse(
                'api:project-repository',
                kwargs={'slug': obj.slug},
                request=request
            )
        else:
            data['remote_commit'] = obj.get_last_remote_commit()

            if isinstance(obj, Translation):
                subproject = obj.subproject
                data['url'] = reverse(
                    'api:translation-repository',
                    kwargs={
                        'subproject__project__slug': subproject.project.slug,
                        'subproject__slug': subproject.slug,
                        'language__code': obj.language.code,
                    },
                    request=request
                )
                data['status'] = obj.subproject.repository.status()
                changes = Change.objects.filter(
                    action__in=Change.ACTIONS_REPOSITORY,
                    subproject=obj.subproject,
                )
            else:
                data['url'] = reverse(
                    'api:component-repository',
                    kwargs={
                        'project__slug': obj.project.slug,
                        'slug': obj.slug,
                    },
                    request=request
                )
                data['status'] = obj.repository.status()
                changes = Change.objects.filter(
                    action__in=Change.ACTIONS_REPOSITORY,
                    subproject=obj,
                )

            if changes.exists() and changes[0].is_merge_failure():
                data['merge_failure'] = changes[0].target
            else:
                data['merge_failure'] = None

        return Response(data)