##// END OF EJS Templates
disable tooltip links
disable tooltip links

File last commit:

r2892:5fba3778 beta
r2974:b7db2065 beta
Show More
compare.py
148 lines | 5.8 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
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
Add check for existing revisions in compare view
r2593 from pylons.i18n.translation import _
Basic compare-view controller with ref parsing
r2241
Add check for existing revisions in compare view
r2593 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError, RepositoryError
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
small refactoring, moved shared for diff generation of code into pull-request model
r2442 from rhodecode.model.pull_request import PullRequestModel
swap the select values with revisions dynamically when switching the repos on pull request view...
r2847 from webob.exc import HTTPBadRequest
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892 from rhodecode.lib.utils2 import str2bool
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__()
swap the select values with revisions dynamically when switching the repos on pull request view...
r2847 def __get_cs_or_redirect(self, rev, repo, redirect_after=True,
partial=False):
Add check for existing revisions in compare view
r2593 """
Safe way to get changeset if error occur it redirects to changeset with
swap the select values with revisions dynamically when switching the repos on pull request view...
r2847 proper message. If partial is set then don't do redirect raise Exception
instead
Add check for existing revisions in compare view
r2593
:param rev: revision to fetch
:param repo: repo instance
"""
try:
type_, rev = rev
return repo.scm_instance.get_changeset(rev)
except EmptyRepositoryError, e:
if not redirect_after:
return None
h.flash(h.literal(_('There are no changesets yet')),
category='warning')
redirect(url('summary_home', repo_name=repo.repo_name))
except RepositoryError, e:
Bumped mercurial version to 2.3...
r2684 log.error(traceback.format_exc())
Add check for existing revisions in compare view
r2593 h.flash(str(e), category='warning')
swap the select values with revisions dynamically when switching the repos on pull request view...
r2847 if not partial:
redirect(h.url('summary_home', repo_name=repo.repo_name))
raise HTTPBadRequest()
Add check for existing revisions in compare view
r2593
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)
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892 bundle_compare = str2bool(request.GET.get('bundle', True))
Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
r2363
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],
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892 repo=org_repo, as_form=request.GET.get('as_form'),
bundle=bundle_compare)
Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
r2363
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
data checks
r2444 if c.org_repo.scm_instance.alias != 'hg':
log.error('Review not available for GIT REPOS')
raise HTTPNotFound
swap the select values with revisions dynamically when switching the repos on pull request view...
r2847 partial = request.environ.get('HTTP_X_PARTIAL_XHR')
self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial)
self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial)
Add check for existing revisions in compare view
r2593
small refactoring, moved shared for diff generation of code into pull-request model
r2442 c.cs_ranges, discovery_data = PullRequestModel().get_compare_data(
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892 org_repo, org_ref, other_repo, other_ref
)
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])
Fixed origin repo in pull-request view
r2487 c.target_repo = c.repo_name
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)
swap the select values with revisions dynamically when switching the repos on pull request view...
r2847 if partial:
created pull-request overview
r2395 return render('compare/compare_cs.html')
added changeset review status into repo/branch compare view
r2393
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892 if not bundle_compare and c.cs_ranges:
# case we want a simple diff without incoming changesets, just
# for review purposes. Make the diff on the forked repo, with
# revision that is common ancestor
other_ref = ('rev', c.cs_ranges[-1].parents[0].raw_id)
other_repo = org_repo
Created base for diffing two repositories inside rhodecode
r2337 c.org_ref = org_ref[1]
c.other_ref = other_ref[1]
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892
Improved cross repos diffs...
r2362 _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref,
#590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,...
r2892 discovery_data, bundle_compare=bundle_compare)
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')