annotate rhodecode/controllers/compare.py @ 3380:01fe360a66c0 beta

fixed pull-requests with cherry picking changesets - fixed tests for them
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 19 Feb 2013 01:57:59 +0100
parents 674a8fad3abc
children 934f1fd5d549
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2 """
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
3 rhodecode.controllers.compare
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
3304
70309536c143 compare and diff: remove unused "bundle" functionality
Mads Kiilerich <madski@unity3d.com>
parents: 3192
diff changeset
6 compare controller for pylons showing differences between two
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
7 repos, branches, bookmarks or tips
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 :created_on: May 6, 2012
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
10 :author: marcink
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 :license: GPLv3, see COPYING for more details.
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 """
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 # This program is free software: you can redistribute it and/or modify
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
15 # it under the terms of the GNU General Public License as published by
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
16 # the Free Software Foundation, either version 3 of the License, or
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
17 # (at your option) any later version.
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
18 #
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
19 # This program is distributed in the hope that it will be useful,
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
22 # GNU General Public License for more details.
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
23 #
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
24 # You should have received a copy of the GNU General Public License
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26 import logging
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27 import traceback
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
28
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
29 from webob.exc import HTTPNotFound
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
30 from pylons import request, response, session, tmpl_context as c, url
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
31 from pylons.controllers.util import abort, redirect
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
32 from pylons.i18n.translation import _
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
33
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
34 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError, RepositoryError
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
35 from rhodecode.lib import helpers as h
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
36 from rhodecode.lib.base import BaseRepoController, render
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
38 from rhodecode.lib import diffs
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
39
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
40 from rhodecode.model.db import Repository
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
41 from rhodecode.model.pull_request import PullRequestModel
2847
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
42 from webob.exc import HTTPBadRequest
3011
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
43 from rhodecode.lib.diffs import LimitedDiffContainer
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
44
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
45 log = logging.getLogger(__name__)
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
46
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
47
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
48 class CompareController(BaseRepoController):
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
49
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
50 @LoginRequired()
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
51 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
52 'repository.admin')
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53 def __before__(self):
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
54 super(CompareController, self).__before__()
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55
2847
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
56 def __get_cs_or_redirect(self, rev, repo, redirect_after=True,
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
57 partial=False):
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
58 """
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
59 Safe way to get changeset if error occur it redirects to changeset with
2847
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
60 proper message. If partial is set then don't do redirect raise Exception
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
61 instead
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
62
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
63 :param rev: revision to fetch
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
64 :param repo: repo instance
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
65 """
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
66
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
67 try:
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
68 type_, rev = rev
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
69 return repo.scm_instance.get_changeset(rev)
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
70 except EmptyRepositoryError, e:
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
71 if not redirect_after:
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
72 return None
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
73 h.flash(h.literal(_('There are no changesets yet')),
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
74 category='warning')
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
75 redirect(url('summary_home', repo_name=repo.repo_name))
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
76
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
77 except RepositoryError, e:
2684
2b6939a77052 Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents: 2593
diff changeset
78 log.error(traceback.format_exc())
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
79 h.flash(str(e), category='warning')
2847
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
80 if not partial:
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
81 redirect(h.url('summary_home', repo_name=repo.repo_name))
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
82 raise HTTPBadRequest()
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
83
2363
745dda7817ed Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2362
diff changeset
84 def index(self, org_ref_type, org_ref, other_ref_type, other_ref):
2362
3c4afb8894bd Improved cross repos diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 2355
diff changeset
85
2363
745dda7817ed Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2362
diff changeset
86 org_repo = c.rhodecode_db_repo.repo_name
745dda7817ed Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2362
diff changeset
87 org_ref = (org_ref_type, org_ref)
745dda7817ed Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2362
diff changeset
88 other_ref = (other_ref_type, other_ref)
3317
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
89 other_repo = request.GET.get('other_repo', org_repo)
3011
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
90 c.fulldiff = fulldiff = request.GET.get('fulldiff')
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
91 rev_start = request.GET.get('rev_start')
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
92 rev_end = request.GET.get('rev_end')
2363
745dda7817ed Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2362
diff changeset
93
3317
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
94 c.swap_url = h.url('compare_url', as_form=request.GET.get('as_form'),
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
95 repo_name=other_repo,
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
96 org_ref_type=other_ref[0], org_ref=other_ref[1],
3320
75431548602a fixed broken swap url, and added a test to detect it in feature
Marcin Kuzminski <marcin@python-works.com>
parents: 3317
diff changeset
97 other_repo=org_repo,
3317
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
98 other_ref_type=org_ref[0], other_ref=org_ref[1])
2363
745dda7817ed Rewrote url routes to make all validations and parsing for compare view + added compare fork button into forked repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2362
diff changeset
99
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
100 partial = request.environ.get('HTTP_X_PARTIAL_XHR')
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
101
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
102 org_repo = Repository.get_by_repo_name(org_repo)
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
103 other_repo = Repository.get_by_repo_name(other_repo)
2362
3c4afb8894bd Improved cross repos diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 2355
diff changeset
104
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
105 self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial)
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
106 self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial)
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
107
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
108 if org_repo is None:
3143
db4ca2212ec0 compare: more helpful error messages when a repo wasn't found
Mads Kiilerich <madski@unity3d.com>
parents: 3023
diff changeset
109 log.error('Could not find org repo %s' % org_repo)
db4ca2212ec0 compare: more helpful error messages when a repo wasn't found
Mads Kiilerich <madski@unity3d.com>
parents: 3023
diff changeset
110 raise HTTPNotFound
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
111 if other_repo is None:
3143
db4ca2212ec0 compare: more helpful error messages when a repo wasn't found
Mads Kiilerich <madski@unity3d.com>
parents: 3023
diff changeset
112 log.error('Could not find other repo %s' % other_repo)
2362
3c4afb8894bd Improved cross repos diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 2355
diff changeset
113 raise HTTPNotFound
3c4afb8894bd Improved cross repos diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 2355
diff changeset
114
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
115 if org_repo != other_repo and h.is_git(org_repo):
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
116 log.error('compare of two remote repos not available for GIT REPOS')
2444
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
117 raise HTTPNotFound
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
118
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
119 if org_repo.scm_instance.alias != other_repo.scm_instance.alias:
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
120 log.error('compare of two different kind of remote repos not available')
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
121 raise HTTPNotFound
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
122
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
123 c.org_repo = org_repo
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
124 c.other_repo = other_repo
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
125 c.org_ref = org_ref[1]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
126 c.other_ref = other_ref[1]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
127 c.org_ref_type = org_ref[0]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
128 c.other_ref_type = other_ref[0]
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
129
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
130 if rev_start and rev_end:
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
131 # swap revs with cherry picked ones, save them for display
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
132 #org_ref = ('rev', rev_start)
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
133 #other_ref = ('rev', rev_end)
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
134 c.org_ref = rev_start[:12]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
135 c.other_ref = rev_end[:12]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
136 # get parent of
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
137 # rev start to include it in the diff
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
138 _cs = other_repo.scm_instance.get_changeset(rev_start)
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
139 rev_start = _cs.parents[0].raw_id
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
140 org_ref = ('rev', rev_start)
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
141 other_ref = ('rev', rev_end)
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
142 #if we cherry pick it's not remote, make the other_repo org_repo
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
143 org_repo = other_repo
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
144
3323
a07296564f6b compare: show aggregated diff of what will be merged to other repo, using merge ancestor
Mads Kiilerich <madski@unity3d.com>
parents: 3322
diff changeset
145 c.cs_ranges, ancestor = PullRequestModel().get_compare_data(
a07296564f6b compare: show aggregated diff of what will be merged to other repo, using merge ancestor
Mads Kiilerich <madski@unity3d.com>
parents: 3322
diff changeset
146 org_repo, org_ref, other_repo, other_ref)
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
147
2393
b94eac50ec4d added changeset review status into repo/branch compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2363
diff changeset
148 c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in
b94eac50ec4d added changeset review status into repo/branch compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2363
diff changeset
149 c.cs_ranges])
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
150 # defines that we need hidden inputs with changesets
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
151 c.as_form = request.GET.get('as_form', False)
2847
1cd0a0c05f42 swap the select values with revisions dynamically when switching the repos on pull request view
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
152 if partial:
2395
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2393
diff changeset
153 return render('compare/compare_cs.html')
2393
b94eac50ec4d added changeset review status into repo/branch compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2363
diff changeset
154
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
155 if ancestor and org_repo != other_repo:
3323
a07296564f6b compare: show aggregated diff of what will be merged to other repo, using merge ancestor
Mads Kiilerich <madski@unity3d.com>
parents: 3322
diff changeset
156 # case we want a simple diff without incoming changesets,
a07296564f6b compare: show aggregated diff of what will be merged to other repo, using merge ancestor
Mads Kiilerich <madski@unity3d.com>
parents: 3322
diff changeset
157 # previewing what will be merged.
a07296564f6b compare: show aggregated diff of what will be merged to other repo, using merge ancestor
Mads Kiilerich <madski@unity3d.com>
parents: 3322
diff changeset
158 # Make the diff on the forked repo, with
2892
5fba3778431c #590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,
Marcin Kuzminski <marcin@python-works.com>
parents: 2847
diff changeset
159 # revision that is common ancestor
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
160 log.debug('Using ancestor %s as org_ref instead of %s'
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
161 % (ancestor, org_ref))
3323
a07296564f6b compare: show aggregated diff of what will be merged to other repo, using merge ancestor
Mads Kiilerich <madski@unity3d.com>
parents: 3322
diff changeset
162 org_ref = ('rev', ancestor)
3322
c9b0f1d363c7 compare: swap org and other when they refer to different repos, ie are pull request style
Mads Kiilerich <madski@unity3d.com>
parents: 3320
diff changeset
163 org_repo = other_repo
2892
5fba3778431c #590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,
Marcin Kuzminski <marcin@python-works.com>
parents: 2847
diff changeset
164
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
165 diff_limit = self.cut_off_limit if not fulldiff else None
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
166
3304
70309536c143 compare and diff: remove unused "bundle" functionality
Mads Kiilerich <madski@unity3d.com>
parents: 3192
diff changeset
167 _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref)
2892
5fba3778431c #590 Add GET flag that controls the way the diff are generated, for pull requests we want to use non-bundle based diffs,
Marcin Kuzminski <marcin@python-works.com>
parents: 2847
diff changeset
168
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
169 diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff',
3011
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
170 diff_limit=diff_limit)
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
171 _parsed = diff_processor.prepare()
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
172
3011
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
173 c.limited_diff = False
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
174 if isinstance(_parsed, LimitedDiffContainer):
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
175 c.limited_diff = True
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
176
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
177 c.files = []
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
178 c.changes = {}
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
179 c.lines_added = 0
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
180 c.lines_deleted = 0
2393
b94eac50ec4d added changeset review status into repo/branch compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2363
diff changeset
181 for f in _parsed:
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
182 st = f['stats']
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
183 if st[0] != 'b':
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
184 c.lines_added += st[0]
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
185 c.lines_deleted += st[1]
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
186 fid = h.FID('', f['filename'])
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
187 c.files.append([fid, f['operation'], f['filename'], f['stats']])
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2892
diff changeset
188 diff = diff_processor.as_html(enable_comments=False, parsed_lines=[f])
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
189 c.changes[fid] = [f['operation'], f['filename'], diff]
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
190
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
191 return render('compare/compare_diff.html')