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, }, )
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)], })
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(), } )
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(), })
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)], }, )
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, }, )
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)], } )
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)], })
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)], }, )
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, })
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, })
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)], } )
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, } )
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)
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)