##// END OF EJS Templates
- pull request generates overview based on it's params...
- pull request generates overview based on it's params - added page to show all pull-requests for a repository - db schema changes to support comments and inline comments for pull-requests

File last commit:

r2434:f2946967 codereview
r2440:1bc579bc codereview
Show More
compare.py
145 lines | 5.7 KiB | text/x-python | PythonLexer
Basic compare-view controller with ref parsing
r2241 # -*- coding: utf-8 -*-
"""
rhodecode.controllers.compare
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compare controller for pylons showoing differences between two
repos, branches, bookmarks or tips
:created_on: May 6, 2012
:author: marcink
:copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
:license: GPLv3, see COPYING for more details.
"""
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import logging
import traceback
Implemented basic compare view(for pull requests) for mercurial.
r2348 import binascii
Basic compare-view controller with ref parsing
r2241
Created base for diffing two repositories inside rhodecode
r2337 from webob.exc import HTTPNotFound
Basic compare-view controller with ref parsing
r2241 from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect
Implemented basic compare view(for pull requests) for mercurial.
r2348 from rhodecode.lib import helpers as h
Basic compare-view controller with ref parsing
r2241 from rhodecode.lib.base import BaseRepoController, render
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
Created base for diffing two repositories inside rhodecode
r2337 from rhodecode.lib import diffs
from rhodecode.model.db import Repository
Basic compare-view controller with ref parsing
r2241
log = logging.getLogger(__name__)
class CompareController(BaseRepoController):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
def __before__(self):
super(CompareController, self).__before__()
Improved cross repos diffs...
r2362 def _get_discovery(self, org_repo, org_ref, other_repo, other_ref):
added basic comparision of two repositories using bundles...
r2355 from mercurial import discovery
other = org_repo._repo
repo = other_repo._repo
Improved cross repos diffs...
r2362 tip = other[org_ref[1]]
log.debug('Doing discovery for %s@%s vs %s@%s' % (
org_repo, org_ref, other_repo, other_ref)
)
log.debug('Filter heads are %s[%s]' % (tip, org_ref[1]))
added basic comparision of two repositories using bundles...
r2355 tmp = discovery.findcommonincoming(
repo=repo, # other_repo we check for incoming
remote=other, # org_repo source for incoming
Improved cross repos diffs...
r2362 heads=[tip.node()],
added basic comparision of two repositories using bundles...
r2355 force=False
)
return tmp
def _get_changesets(self, org_repo, org_ref, other_repo, other_ref, tmp):
Created base for diffing two repositories inside rhodecode
r2337 changesets = []
#case two independent repos
if org_repo != other_repo:
Changed compare-view of remote repos to use incoming option instead of outgoing.
r2350 common, incoming, rheads = tmp
added basic comparision of two repositories using bundles...
r2355
Changed compare-view of remote repos to use incoming option instead of outgoing.
r2350 if not incoming:
revs = []
else:
added basic comparision of two repositories using bundles...
r2355 revs = org_repo._repo.changelog.findmissing(common, rheads)
Changed compare-view of remote repos to use incoming option instead of outgoing.
r2350
added basic comparision of two repositories using bundles...
r2355 for cs in reversed(map(binascii.hexlify, revs)):
Created base for diffing two repositories inside rhodecode
r2337 changesets.append(org_repo.get_changeset(cs))
else:
Implemented basic compare view(for pull requests) for mercurial.
r2348 revs = ['ancestors(%s) and not ancestors(%s)' % (org_ref[1],
other_ref[1])]
from mercurial import scmutil
out = scmutil.revrange(org_repo._repo, revs)
for cs in reversed(out):
Created base for diffing two repositories inside rhodecode
r2337 changesets.append(org_repo.get_changeset(cs))
return changesets
Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
r2363 def index(self, org_ref_type, org_ref, other_ref_type, other_ref):
Improved cross repos diffs...
r2362
Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
r2363 org_repo = c.rhodecode_db_repo.repo_name
org_ref = (org_ref_type, org_ref)
other_ref = (other_ref_type, other_ref)
other_repo = request.GET.get('repo', org_repo)
c.swap_url = h.url('compare_url', repo_name=other_repo,
org_ref_type=other_ref[0], org_ref=other_ref[1],
other_ref_type=org_ref[0], other_ref=org_ref[1],
repo=org_repo)
Created base for diffing two repositories inside rhodecode
r2337 c.org_repo = org_repo = Repository.get_by_repo_name(org_repo)
c.other_repo = other_repo = Repository.get_by_repo_name(other_repo)
Improved cross repos diffs...
r2362
if c.org_repo is None or c.other_repo is None:
log.error('Could not found repo %s or %s' % (org_repo, other_repo))
raise HTTPNotFound
discovery_data = self._get_discovery(org_repo.scm_instance,
added basic comparision of two repositories using bundles...
r2355 org_ref,
other_repo.scm_instance,
other_ref)
Created base for diffing two repositories inside rhodecode
r2337 c.cs_ranges = self._get_changesets(org_repo.scm_instance,
org_ref,
other_repo.scm_instance,
added basic comparision of two repositories using bundles...
r2355 other_ref,
Improved cross repos diffs...
r2362 discovery_data)
Created base for diffing two repositories inside rhodecode
r2337
added changeset review status into repo/branch compare view
r2393 c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in
c.cs_ranges])
Added basic models for saving open pull requests...
r2434 # defines that we need hidden inputs with changesets
c.as_form = request.GET.get('as_form', False)
created pull-request overview
r2395 if request.environ.get('HTTP_X_PARTIAL_XHR'):
return render('compare/compare_cs.html')
added changeset review status into repo/branch compare view
r2393
Created base for diffing two repositories inside rhodecode
r2337 c.org_ref = org_ref[1]
c.other_ref = other_ref[1]
Changed compare-view of remote repos to use incoming option instead of outgoing.
r2350 # diff needs to have swapped org with other to generate proper diff
Improved cross repos diffs...
r2362 _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref,
discovery_data)
Created base for diffing two repositories inside rhodecode
r2337 diff_processor = diffs.DiffProcessor(_diff, format='gitdiff')
Implemented basic compare view(for pull requests) for mercurial.
r2348 _parsed = diff_processor.prepare()
Created base for diffing two repositories inside rhodecode
r2337
Implemented basic compare view(for pull requests) for mercurial.
r2348 c.files = []
c.changes = {}
added changeset review status into repo/branch compare view
r2393
for f in _parsed:
Implemented basic compare view(for pull requests) for mercurial.
r2348 fid = h.FID('', f['filename'])
c.files.append([fid, f['operation'], f['filename'], f['stats']])
diff = diff_processor.as_html(enable_comments=False, diff_lines=[f])
c.changes[fid] = [f['operation'], f['filename'], diff]
Created base for diffing two repositories inside rhodecode
r2337
return render('compare/compare_diff.html')