def edit(request, user_name, repo_name, issue_id): refs = 'master'; path = '.'; current = 'issues'; title = u'%s / %s / 编辑问题' % (user_name, repo_name) repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) has_issue_modify = _has_issue_modify_right(request, issue, repo) if issue is None or not has_issue_modify: raise Http404 orgi_issue = copy.copy(issue) issueForm = IssueForm(instance = issue) issueForm.fill_assigned(repo) error = u'' if request.method == 'POST': issueForm = IssueForm(request.POST, instance = issue) issueForm.fill_assigned(repo) if issueForm.is_valid(): newIssue = issueForm.save() nid = newIssue.id FeedManager.notif_issue_at(request.user.id, nid, issueForm.cleaned_data['subject'] + ' ' + issueForm.cleaned_data['content']) FeedManager.notif_issue_status(request.user, newIssue, ISSUE_STATUS.ASSIGNED) FeedManager.feed_issue_change(request.user, repo, orgi_issue, nid) return HttpResponseRedirect('/%s/%s/issues/%s/' % (user_name, repo_name, nid)) else: error = u'issue 内容不能为空' response_dictionary = {'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'issueForm': issueForm, 'error': error, 'issue_id': issue_id} response_dictionary.update(ISSUE_ATTRS) response_dictionary.update(get_common_repo_dict(request, repo, user_name, repo_name, refs)) return render_to_response('repo/issue_edit.html', response_dictionary, context_instance=RequestContext(request))
def update(request, user_name, repo_name, issue_id, attr): repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) if issue is None: return _json_failed() has_issue_modify_right = _has_issue_modify_right(request, issue, repo) if not has_issue_modify_right: return _json_failed() orgi_issue = copy.copy(issue) (key, value) = attr.split('___', 1) if key == 'assigned': user = GsuserManager.get_user_by_name(value) if user is None: return _json_failed() repoMember = RepoManager.get_repo_member(repo.id, user.id) if repoMember is None: return _json_failed() issue.assigned = repoMember.user_id issue.save() FeedManager.notif_issue_status(request.user, issue, ISSUE_STATUS.ASSIGNED) FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id) return _json_ok() value = int(value) if key == 'tracker': issue.tracker = value elif key == 'status': issue.status = value elif key == 'priority': issue.priority = value issue.save() FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id) return _json_ok()
def _do_event(self, event): username = event['username'] reponame = event['reponame'] remote_git_url = event['remote_git_url'] local_user = GsuserManager.get_user_by_name(username) local_repo = RepoManager.get_repo_by_name(username, reponame) if local_user is None or local_repo is None or local_repo.status == 0: return local_repo_path = local_repo.get_abs_repopath() if os.path.exists(local_repo_path): return args = ['/bin/bash', '/opt/bin/git-import-remote-repo.sh'] + [local_repo_path, remote_git_url] try: popen = Popen(args, stdout=PIPE, shell=False, close_fds=True) output = popen.communicate()[0].strip() returncode = popen.returncode if returncode == 0: RepoManager.check_export_ok_file(local_repo) diff_size = long(output) RepoManager.update_user_repo_quote(local_user, local_repo, diff_size) local_repo.status = 0 local_repo.save() else: local_repo.status = 500 local_repo.save() except Exception, e: local_repo.status = 500 local_repo.save() logger.exception(e)
def _do_event(self, event): username = event['username'] reponame = event['reponame'] remote_git_url = event['remote_git_url'] local_user = GsuserManager.get_user_by_name(username) local_repo = RepoManager.get_repo_by_name(username, reponame) if local_user is None or local_repo is None or local_repo.status == 0: return local_repo_path = local_repo.get_abs_repopath() if os.path.exists(local_repo_path): return args = ['/bin/bash', '/opt/bin/git-import-remote-repo.sh' ] + [local_repo_path, remote_git_url] try: popen = Popen(args, stdout=PIPE, shell=False, close_fds=True) output = popen.communicate()[0].strip() returncode = popen.returncode if returncode == 0: RepoManager.check_export_ok_file(local_repo) diff_size = long(output) RepoManager.update_user_repo_quote(local_user, local_repo, diff_size) local_repo.status = 0 local_repo.save() else: local_repo.status = 500 local_repo.save() except Exception, e: local_repo.status = 500 local_repo.save() logger.exception(e)
def update(request, user_name, repo_name, issue_id, attr): repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) if issue is None: return _json_failed() has_issue_modify_right = _has_issue_modify_right(request, issue, repo) if not has_issue_modify_right: return _json_failed() orgi_issue = copy.copy(issue) (key, value) = attr.split('___', 1) if key == 'assigned': user = GsuserManager.get_user_by_name(value) if user is None: return _json_failed() repoMember = RepoManager.get_repo_member(repo.id, user.id) if repoMember is None: return _json_failed() issue.assigned = repoMember.user_id issue.save() FeedManager.notif_issue_status(request.user, issue, ISSUE_STATUS.ASSIGNED) FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id) return _json_ok() value = int(value) if key == 'tracker': issue.tracker = value elif key == 'status': issue.status = value elif key == 'priority': issue.priority = value issue.save() FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id) return _json_ok()
def delete(request, user_name, repo_name, issue_id): repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) if issue is not None: if _has_issue_modify_right(request, issue, repo): issue.visibly = 1 issue.save() return _json_ok()
def delete(request, user_name, repo_name, issue_id): repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) if issue is not None: if _has_issue_modify_right(request, issue, repo): issue.visibly = 1 issue.save() return _json_ok()
def http_auth(request): try: unauthorized_httpResponse = HttpResponse(status=401) unauthorized_httpResponse[ 'WWW-Authenticate'] = 'Basic realm="%s"' % 'Restricted' if not request.META.has_key('HTTP_X_SET_REQUESTURI'): return unauthorized_httpResponse orgi_request_uri = request.META['HTTP_X_SET_REQUESTURI'].strip() (desc_username, desc_reponame, action) = _get_desc_name(orgi_request_uri) if desc_username == '' or desc_reponame == '': return unauthorized_httpResponse suffix = '.git' if desc_reponame.endswith(suffix): desc_reponame = desc_reponame[0:len(desc_reponame) - len(suffix)] repo = RepoManager.get_repo_by_name(desc_username, desc_reponame) if repo is None: return unauthorized_httpResponse # if deploy key if 'git-receive-pack' not in orgi_request_uri: deploy_key = None username, password = _http_authenticate_name_password(request) if username is not None: deploy_key = username if deploy_key is not None and deploy_key != '' and repo.deploy_url == deploy_key: return HttpResponse(status=200) if repo.auth_type == 0: # if orgi_request_uri.endswith('?service=git-receive-pack') or action == 'git-receive-pack': if 'git-receive-pack' in orgi_request_uri: user = _http_authenticate_user(request) if not RepoManager.is_allowed_access_repo( repo, user, REPO_PERMISSION.WRITE): return unauthorized_httpResponse return HttpResponse(status=200) else: user = _http_authenticate_user(request) if 'git-receive-pack' in orgi_request_uri: if RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.WRITE): return HttpResponse(status=200) else: if RepoManager.is_allowed_access_repo( repo, user, REPO_PERMISSION.READ_ONLY): return HttpResponse(status=200) except Exception, e: print e
def comment_delete(request, user_name, repo_name, comment_id): repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: return _json_failed() issue_comment = IssueManager.get_issue_comment(comment_id) if issue_comment is None: return _json_failed() issue = IssueManager.get_issue(repo.id, issue_comment.issue_id) if issue is None or not _has_issue_comment_modify_right(request, issue_comment, repo): return _json_failed() issue_comment.visibly = 1 issue_comment.save() issue.comment_count = issue.comment_count - 1 issue.save() return _json_ok()
def comment_delete(request, user_name, repo_name, comment_id): repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: return _json_failed() issue_comment = IssueManager.get_issue_comment(comment_id) if issue_comment is None: return _json_failed() issue = IssueManager.get_issue(repo.id, issue_comment.issue_id) if issue is None or not _has_issue_comment_modify_right( request, issue_comment, repo): return _json_failed() issue_comment.visibly = 1 issue_comment.save() issue.comment_count = issue.comment_count - 1 issue.save() return _json_ok()
def edit(request, user_name, repo_name, issue_id): refs = 'master' path = '.' current = 'issues' title = u'%s / %s / 编辑问题' % (user_name, repo_name) repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) has_issue_modify = _has_issue_modify_right(request, issue, repo) if issue is None or not has_issue_modify: raise Http404 orgi_issue = copy.copy(issue) issueForm = IssueForm(instance=issue) issueForm.fill_assigned(repo) error = u'' if request.method == 'POST': issueForm = IssueForm(request.POST, instance=issue) issueForm.fill_assigned(repo) if issueForm.is_valid(): newIssue = issueForm.save() nid = newIssue.id FeedManager.notif_issue_at( request.user.id, nid, issueForm.cleaned_data['subject'] + ' ' + issueForm.cleaned_data['content']) FeedManager.notif_issue_status(request.user, newIssue, ISSUE_STATUS.ASSIGNED) FeedManager.feed_issue_change(request.user, repo, orgi_issue, nid) return HttpResponseRedirect('/%s/%s/issues/%s/' % (user_name, repo_name, nid)) else: error = u'issue 内容不能为空' response_dictionary = { 'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'issueForm': issueForm, 'error': error, 'issue_id': issue_id } response_dictionary.update(ISSUE_ATTRS) response_dictionary.update( get_common_repo_dict(request, repo, user_name, repo_name, refs)) return render_to_response('repo/issue_edit.html', response_dictionary, context_instance=RequestContext(request))
def wrap(request, *args, **kwargs): if len(args) >= 2: user_name = args[0]; repo_name = args[1] repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: return error_with_reason(request, 'repo_not_found') if repo.auth_type != 0 and not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=' + urlquote(request.path)) is_allowed_access_repo = RepoManager.is_allowed_access_repo(repo, request.user, REPO_PERMISSION.READ_ONLY) if not is_allowed_access_repo: if request.method == 'POST': return json_failed(403, u'没有管理权限') return error_with_reason(request, 'repo_permission_denied') if request.user.is_authenticated(): feedAction = FeedAction() feedAction.add_recently_view_repo_now(request.user.id, repo.id) return function(request, *args, **kwargs)
def http_auth(request): try: unauthorized_httpResponse = HttpResponse(status=401) unauthorized_httpResponse['WWW-Authenticate'] = 'Basic realm="%s"' % 'Restricted' if not request.META.has_key('HTTP_X_SET_REQUESTURI'): return unauthorized_httpResponse orgi_request_uri = request.META['HTTP_X_SET_REQUESTURI'].strip() (desc_username, desc_reponame, action) = _get_desc_name(orgi_request_uri) if desc_username == '' or desc_reponame == '': return unauthorized_httpResponse suffix = '.git' if desc_reponame.endswith(suffix): desc_reponame = desc_reponame[0:len(desc_reponame)-len(suffix)] repo = RepoManager.get_repo_by_name(desc_username, desc_reponame) if repo is None: return unauthorized_httpResponse # if deploy key if 'git-receive-pack' not in orgi_request_uri: deploy_key = None username, password = _http_authenticate_name_password(request) if username is not None: deploy_key = username if deploy_key is not None and deploy_key != '' and repo.deploy_url == deploy_key: return HttpResponse(status=200) if repo.auth_type == 0: # if orgi_request_uri.endswith('?service=git-receive-pack') or action == 'git-receive-pack': if 'git-receive-pack' in orgi_request_uri: user = _http_authenticate_user(request) if not RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.WRITE): return unauthorized_httpResponse return HttpResponse(status=200) else: user = _http_authenticate_user(request) if 'git-receive-pack' in orgi_request_uri: if RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.WRITE): return HttpResponse(status=200) else: if RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.READ_ONLY): return HttpResponse(status=200) except Exception, e: print e
def show(request, user_name, repo_name, issue_id, page): refs = 'master'; path = '.'; current = 'issues' repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) if issue is None: raise Http404 issueCommentForm = IssueCommentForm() if request.method == 'POST' and request.user.is_authenticated(): issueComment = IssueComment() issueComment.issue_id = issue_id issueComment.user_id = request.user.id issueCommentForm = IssueCommentForm(request.POST, instance = issueComment) if issueCommentForm.is_valid(): cid = issueCommentForm.save().id FeedManager.notif_issue_comment_at(request.user.id, cid, issueCommentForm.cleaned_data['content']) issue.comment_count = issue.comment_count + 1 issue.save() return HttpResponseRedirect('/%s/%s/issues/%s/' % (user_name, repo_name, issue_id)) page_size = 50; total_count = issue.comment_count; total_page = total_count / page_size if total_count != 0 and total_count % page_size == 0: total_page = total_page - 1 if page is None or int(page) > total_page: page = total_page page = int(page) issue_comments = [] if total_count > 0: offset = page*page_size; row_count = page_size issue_comments = IssueManager.list_issue_comments(issue_id, offset, row_count) memberUsers = RepoManager.list_repo_team_memberUser(repo.id) memberUsers = _let_request_user_first(memberUsers, request.user.id) assigneds = [x.username for x in memberUsers] has_issue_modify_right = _has_issue_modify_right(request, issue, repo) title = u'%s / %s / 问题:%s' % (user_name, repo_name, issue.subject) response_dictionary = {'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'issue': issue, 'issue_comments': issue_comments, 'issueCommentForm': issueCommentForm, 'page': page, 'total_page': range(0, total_page+1), 'assigneds': assigneds, 'assigned': issue.assigned, 'tracker': issue.tracker, 'status': issue.status, 'priority': issue.priority, 'has_issue_modify_right': has_issue_modify_right} response_dictionary.update(ISSUE_ATTRS) response_dictionary.update(get_common_repo_dict(request, repo, user_name, repo_name, refs)) return render_to_response('repo/issue_show.html', response_dictionary, context_instance=RequestContext(request))
def issues_list(request, user_name, repo_name, assigned, tracker, status, priority, orderby, page): refs = 'master'; path = '.'; current = 'issues'; title = u'%s / %s / 问题列表' % (user_name, repo_name) repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 user_id = request.user.id memberUsers = RepoManager.list_repo_team_memberUser(repo.id) memberUsers = _let_request_user_first(memberUsers, user_id) member_ids = [x.id for x in memberUsers] assigneds = [x.username for x in memberUsers] assigneds.insert(0, '0') if assigned is None: assigned = assigneds[0] assigned_id = 0 assigned_user = GsuserManager.get_user_by_name(assigned) if assigned_user is not None and assigned in assigneds: assigned_id = assigned_user.id tracker = int(tracker); status = int(status); priority = int(priority); page = int(page) current_attrs = { 'assigned': str(assigned), 'tracker': tracker, 'status': status, 'priority': priority, 'orderby': str(orderby), 'page': page } issues = [] page_size = 50; offset = page*page_size; row_count = page_size + 1 if assigned_id == 0 and tracker == 0 and status == 0 and priority == 0: issues = IssueManager.list_issues(repo.id, orderby, offset, row_count) else: assigned_ids = member_ids if assigned_id == 0 else [assigned_id] trackeres = TRACKERS_VAL if tracker == 0 else [tracker] statuses = STATUSES_VAL if status == 0 else [status] priorities = PRIORITIES_VAL if priority == 0 else [priority] issues = IssueManager.list_issues_cons(repo.id, assigned_ids, trackeres, statuses, priorities, orderby, offset, row_count) hasPre = False ; hasNext = False if page > 0: hasPre = True if len(issues) > page_size: hasNext = True issues.pop() response_dictionary = {'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'assigneds': assigneds, 'assigned': assigned, 'tracker': tracker, 'status': status, 'priority': priority, 'orderby': orderby, 'page': page, 'current_attrs': current_attrs, 'issues': issues, 'hasPre': hasPre, 'hasNext': hasNext} response_dictionary.update(ISSUE_ATTRS) response_dictionary.update(get_common_repo_dict(request, repo, user_name, repo_name, refs)) return render_to_response('repo/issues.html', response_dictionary, context_instance=RequestContext(request))
def wrap(request, *args, **kwargs): if len(args) >= 2: user_name = args[0]; repo_name = args[1] repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: return error_with_reason(request, 'repo_not_found') if not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=' + urlquote(request.path)) from gitshell.team.models import TeamManager user_permission = TeamManager.get_repo_user_permission(repo, request.user) if user_permission < REPO_PERMISSION.ADMIN: if user_permission >= REPO_PERMISSION.WEB_VIEW: return HttpResponseRedirect('/%s/%s/' % (user_name, repo_name)) if request.method == 'POST': return json_failed(403, u'没有管理权限') return error_with_reason(request, 'repo_permission_denied') if request.user.is_authenticated(): feedAction = FeedAction() feedAction.add_recently_view_repo_now(request.user.id, repo.id) return function(request, *args, **kwargs)
def wrap(request, *args, **kwargs): if len(args) >= 2: user_name = args[0] repo_name = args[1] repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: return error_with_reason(request, 'repo_not_found') if repo.auth_type != 0 and not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=' + urlquote(request.path)) is_allowed_access_repo = RepoManager.is_allowed_access_repo( repo, request.user, REPO_PERMISSION.READ_ONLY) if not is_allowed_access_repo: if request.method == 'POST': return json_failed(403, u'没有管理权限') return error_with_reason(request, 'repo_permission_denied') if request.user.is_authenticated(): feedAction = FeedAction() feedAction.add_recently_view_repo_now(request.user.id, repo.id) return function(request, *args, **kwargs)
def wrap(request, *args, **kwargs): if len(args) >= 2: user_name = args[0] repo_name = args[1] repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: return error_with_reason(request, 'repo_not_found') if not request.user.is_authenticated(): return HttpResponseRedirect('/login/?next=' + urlquote(request.path)) from gitshell.team.models import TeamManager user_permission = TeamManager.get_repo_user_permission( repo, request.user) if user_permission < REPO_PERMISSION.ADMIN: if user_permission >= REPO_PERMISSION.WEB_VIEW: return HttpResponseRedirect('/%s/%s/' % (user_name, repo_name)) if request.method == 'POST': return json_failed(403, u'没有管理权限') return error_with_reason(request, 'repo_permission_denied') if request.user.is_authenticated(): feedAction = FeedAction() feedAction.add_recently_view_repo_now(request.user.id, repo.id) return function(request, *args, **kwargs)
def show(request, user_name, repo_name, issue_id, page): refs = 'master' path = '.' current = 'issues' repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 issue = IssueManager.get_issue(repo.id, issue_id) if issue is None: raise Http404 issueCommentForm = IssueCommentForm() if request.method == 'POST' and request.user.is_authenticated(): issueComment = IssueComment() issueComment.issue_id = issue_id issueComment.user_id = request.user.id issueCommentForm = IssueCommentForm(request.POST, instance=issueComment) if issueCommentForm.is_valid(): cid = issueCommentForm.save().id FeedManager.notif_issue_comment_at( request.user.id, cid, issueCommentForm.cleaned_data['content']) issue.comment_count = issue.comment_count + 1 issue.save() return HttpResponseRedirect('/%s/%s/issues/%s/' % (user_name, repo_name, issue_id)) page_size = 50 total_count = issue.comment_count total_page = total_count / page_size if total_count != 0 and total_count % page_size == 0: total_page = total_page - 1 if page is None or int(page) > total_page: page = total_page page = int(page) issue_comments = [] if total_count > 0: offset = page * page_size row_count = page_size issue_comments = IssueManager.list_issue_comments( issue_id, offset, row_count) memberUsers = RepoManager.list_repo_team_memberUser(repo.id) memberUsers = _let_request_user_first(memberUsers, request.user.id) assigneds = [x.username for x in memberUsers] has_issue_modify_right = _has_issue_modify_right(request, issue, repo) title = u'%s / %s / 问题:%s' % (user_name, repo_name, issue.subject) response_dictionary = { 'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'issue': issue, 'issue_comments': issue_comments, 'issueCommentForm': issueCommentForm, 'page': page, 'total_page': range(0, total_page + 1), 'assigneds': assigneds, 'assigned': issue.assigned, 'tracker': issue.tracker, 'status': issue.status, 'priority': issue.priority, 'has_issue_modify_right': has_issue_modify_right } response_dictionary.update(ISSUE_ATTRS) response_dictionary.update( get_common_repo_dict(request, repo, user_name, repo_name, refs)) return render_to_response('repo/issue_show.html', response_dictionary, context_instance=RequestContext(request))
def issues_list(request, user_name, repo_name, assigned, tracker, status, priority, orderby, page): refs = 'master' path = '.' current = 'issues' title = u'%s / %s / 问题列表' % (user_name, repo_name) repo = RepoManager.get_repo_by_name(user_name, repo_name) if repo is None: raise Http404 user_id = request.user.id memberUsers = RepoManager.list_repo_team_memberUser(repo.id) memberUsers = _let_request_user_first(memberUsers, user_id) member_ids = [x.id for x in memberUsers] assigneds = [x.username for x in memberUsers] assigneds.insert(0, '0') if assigned is None: assigned = assigneds[0] assigned_id = 0 assigned_user = GsuserManager.get_user_by_name(assigned) if assigned_user is not None and assigned in assigneds: assigned_id = assigned_user.id tracker = int(tracker) status = int(status) priority = int(priority) page = int(page) current_attrs = { 'assigned': str(assigned), 'tracker': tracker, 'status': status, 'priority': priority, 'orderby': str(orderby), 'page': page } issues = [] page_size = 50 offset = page * page_size row_count = page_size + 1 if assigned_id == 0 and tracker == 0 and status == 0 and priority == 0: issues = IssueManager.list_issues(repo.id, orderby, offset, row_count) else: assigned_ids = member_ids if assigned_id == 0 else [assigned_id] trackeres = TRACKERS_VAL if tracker == 0 else [tracker] statuses = STATUSES_VAL if status == 0 else [status] priorities = PRIORITIES_VAL if priority == 0 else [priority] issues = IssueManager.list_issues_cons(repo.id, assigned_ids, trackeres, statuses, priorities, orderby, offset, row_count) hasPre = False hasNext = False if page > 0: hasPre = True if len(issues) > page_size: hasNext = True issues.pop() response_dictionary = { 'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'assigneds': assigneds, 'assigned': assigned, 'tracker': tracker, 'status': status, 'priority': priority, 'orderby': orderby, 'page': page, 'current_attrs': current_attrs, 'issues': issues, 'hasPre': hasPre, 'hasNext': hasNext } response_dictionary.update(ISSUE_ATTRS) response_dictionary.update( get_common_repo_dict(request, repo, user_name, repo_name, refs)) return render_to_response('repo/issues.html', response_dictionary, context_instance=RequestContext(request))