annotate rhodecode/controllers/compare.py @ 3811:3591b33e0c94 beta

hg: use 'revset injection safe' repo.revs for revsets
author Mads Kiilerich <madski@unity3d.com>
date Mon, 08 Apr 2013 21:59:09 +0200
parents f533c054fb19
children 4324d6899e55
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/>.
3721
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
26
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27 import logging
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
28 import traceback
3721
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
29 import re
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
30
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
31 from webob.exc import HTTPNotFound
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
32 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
33 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
34 from pylons.i18n.translation import _
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
35
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
36 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError, RepositoryError
3721
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
37 from rhodecode.lib.vcs.utils import safe_str
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
38 from rhodecode.lib.vcs.utils.hgcompat import scmutil
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
39 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
40 from rhodecode.lib.base import BaseRepoController, render
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
3721
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
42 from rhodecode.lib import diffs, unionrepo
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
43
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
44 from rhodecode.model.db import Repository
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
45 from webob.exc import HTTPBadRequest
3011
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
46 from rhodecode.lib.diffs import LimitedDiffContainer
3721
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
47
2241
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
48
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
49 log = logging.getLogger(__name__)
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
50
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
51
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
52 class CompareController(BaseRepoController):
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
54 def __before__(self):
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55 super(CompareController, self).__before__()
b2a2868d7bec Basic compare-view controller with ref parsing
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
56
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
57 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
58 partial=False):
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
59 """
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
60 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
61 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
62 instead
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
63
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
64 :param rev: revision to fetch
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
65 :param repo: repo instance
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
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
68 try:
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
69 type_, rev = rev
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
70 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
71 except EmptyRepositoryError, e:
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
72 if not redirect_after:
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
73 return None
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
74 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
75 category='warning')
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
76 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
77
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
78 except RepositoryError, e:
2684
2b6939a77052 Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents: 2593
diff changeset
79 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
80 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
81 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
82 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
83 raise HTTPBadRequest()
2593
16a6a2f5d422 Add check for existing revisions in compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
84
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
85 def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, merge):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
86 """
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
87 Returns a list of changesets that can be merged from org_repo@org_ref
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
88 to other_repo@other_ref ... and the ancestor that would be used for merge
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
89
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
90 :param org_repo:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
91 :param org_ref:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
92 :param other_repo:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
93 :param other_ref:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
94 :param tmp:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
95 """
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
96
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
97 ancestor = None
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
98
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
99 if alias == 'hg':
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
100 # lookup up the exact node id
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
101 _revset_predicates = {
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
102 'branch': 'branch',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
103 'book': 'bookmark',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
104 'tag': 'tag',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
105 'rev': 'id',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
106 }
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
107
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
108 org_rev_spec = "max(%s(%%s))" % _revset_predicates[org_ref[0]]
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
109 org_revs = org_repo._repo.revs(org_rev_spec, safe_str(org_ref[1]))
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
110 org_rev = org_repo._repo[org_revs[-1] if org_revs else -1].hex()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
111
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
112 other_revs_spec = "max(%s(%%s))" % _revset_predicates[other_ref[0]]
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
113 other_revs = other_repo._repo.revs(other_revs_spec, safe_str(other_ref[1]))
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
114 other_rev = other_repo._repo[other_revs[-1] if other_revs else -1].hex()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
115
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
116 #case two independent repos
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
117 if org_repo != other_repo:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
118 hgrepo = unionrepo.unionrepository(other_repo.baseui,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
119 other_repo.path,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
120 org_repo.path)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
121 # all the changesets we are looking for will be in other_repo,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
122 # so rev numbers from hgrepo can be used in other_repo
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
123
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
124 #no remote compare do it on the same repository
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
125 else:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
126 hgrepo = other_repo._repo
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
127
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
128 if merge:
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
129 revs = hgrepo.revs("ancestors(id(%s)) and not ancestors(id(%s)) and not id(%s)",
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
130 other_rev, org_rev, org_rev)
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
131
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
132 ancestors = hgrepo.revs("ancestor(id(%s), id(%s))", org_rev, other_rev)
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
133 if ancestors:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
134 # pick arbitrary ancestor - but there is usually only one
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
135 ancestor = hgrepo[ancestors[0]].hex()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
136 else:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
137 # TODO: have both + and - changesets
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
138 revs = hgrepo.revs("id(%s) :: id(%s) - id(%s)",
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
139 org_rev, other_rev, org_rev)
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
140
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3783
diff changeset
141 changesets = [other_repo.get_changeset(rev) for rev in revs]
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
142
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
143 elif alias == 'git':
3783
f533c054fb19 It's better to use Exception here than assertion. It plays better with the exception handling software like sentry or errormator
Marcin Kuzminski <marcin@python-works.com>
parents: 3771
diff changeset
144 if org_repo != other_repo:
f533c054fb19 It's better to use Exception here than assertion. It plays better with the exception handling software like sentry or errormator
Marcin Kuzminski <marcin@python-works.com>
parents: 3771
diff changeset
145 raise Exception('Comparing of different GIT repositories is not'
f533c054fb19 It's better to use Exception here than assertion. It plays better with the exception handling software like sentry or errormator
Marcin Kuzminski <marcin@python-works.com>
parents: 3771
diff changeset
146 'allowed. Got %s != %s' % (org_repo, other_repo))
f533c054fb19 It's better to use Exception here than assertion. It plays better with the exception handling software like sentry or errormator
Marcin Kuzminski <marcin@python-works.com>
parents: 3771
diff changeset
147
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
148 so, se = org_repo.run_git_command(
3771
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
149 'log --reverse --pretty="format: %%H" -s -p %s..%s'
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
150 % (org_ref[1], other_ref[1])
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
151 )
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
152 changesets = [org_repo.get_changeset(cs)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
153 for cs in re.findall(r'[0-9a-fA-F]{40}', so)]
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
154
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
155 return changesets, ancestor
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
156
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
157 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
158 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3721
diff changeset
159 'repository.admin')
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
160 def index(self, org_ref_type, org_ref, other_ref_type, other_ref):
3443
3ac76dfdab8e compare: minor refactoring and comments
Mads Kiilerich <madski@unity3d.com>
parents: 3442
diff changeset
161 # org_ref will be evaluated in org_repo
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
162 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
163 org_ref = (org_ref_type, org_ref)
3443
3ac76dfdab8e compare: minor refactoring and comments
Mads Kiilerich <madski@unity3d.com>
parents: 3442
diff changeset
164 # other_ref will be evaluated in other_repo
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
165 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
166 other_repo = request.GET.get('other_repo', org_repo)
3486
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
167 # If merge is True:
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
168 # Show what org would get if merged with other:
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
169 # List changesets that are ancestors of other but not of org.
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
170 # New changesets in org is thus ignored.
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
171 # Diff will be from common ancestor, and merges of org to other will thus be ignored.
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
172 # If merge is False:
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
173 # Make a raw diff from org to other, no matter if related or not.
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
174 # Changesets in one and not in the other will be ignored
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
175 merge = bool(request.GET.get('merge'))
3443
3ac76dfdab8e compare: minor refactoring and comments
Mads Kiilerich <madski@unity3d.com>
parents: 3442
diff changeset
176 # fulldiff disables cut_off_limit
3ac76dfdab8e compare: minor refactoring and comments
Mads Kiilerich <madski@unity3d.com>
parents: 3442
diff changeset
177 c.fulldiff = request.GET.get('fulldiff')
3442
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3387
diff changeset
178 # partial uses compare_cs.html template directly
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3387
diff changeset
179 partial = request.environ.get('HTTP_X_PARTIAL_XHR')
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3387
diff changeset
180 # as_form puts hidden input field with changeset revisions
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3387
diff changeset
181 c.as_form = partial and request.GET.get('as_form')
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3387
diff changeset
182 # swap url for compare_diff page - never partial and never as_form
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3387
diff changeset
183 c.swap_url = h.url('compare_url',
3317
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
184 repo_name=other_repo,
b36285f90f89 compare: rename optional compare_url parameter repo to other_repo
Mads Kiilerich <madski@unity3d.com>
parents: 3304
diff changeset
185 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
186 other_repo=org_repo,
3486
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
187 other_ref_type=org_ref[0], other_ref=org_ref[1],
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
188 merge=merge or '')
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
189
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
190 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
191 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
192
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
193 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
194 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
195 raise HTTPNotFound
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
196 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
197 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
198 raise HTTPNotFound
3c4afb8894bd Improved cross repos diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 2355
diff changeset
199
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
200 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
201 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
202 raise HTTPNotFound
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
203
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
204 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
205 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
206 raise HTTPNotFound
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
207
3615
50927aedcab5 move the existing changeset checks bellow other checks else it can throw exceptions for non
Marcin Kuzminski <marcin@python-works.com>
parents: 3486
diff changeset
208 self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial)
50927aedcab5 move the existing changeset checks bellow other checks else it can throw exceptions for non
Marcin Kuzminski <marcin@python-works.com>
parents: 3486
diff changeset
209 self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial)
50927aedcab5 move the existing changeset checks bellow other checks else it can throw exceptions for non
Marcin Kuzminski <marcin@python-works.com>
parents: 3486
diff changeset
210
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
211 c.org_repo = org_repo
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
212 c.other_repo = other_repo
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
213 c.org_ref = org_ref[1]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
214 c.other_ref = other_ref[1]
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
215 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
216 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
217
3721
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
218 c.cs_ranges, c.ancestor = self._get_changesets(org_repo.scm_instance.alias,
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
219 org_repo.scm_instance, org_ref,
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
220 other_repo.scm_instance, other_ref,
6c79bfcd3b54 compare: move get_changesets to compare controller where it is used
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
221 merge)
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
222
2393
b94eac50ec4d added changeset review status into repo/branch compare view
Marcin Kuzminski <marcin@python-works.com>
parents: 2363
diff changeset
223 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
224 c.cs_ranges])
3771
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
225 if not c.ancestor:
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
226 log.warning('Unable to find ancestor revision')
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
227
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
228 if partial:
2395
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2393
diff changeset
229 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
230
3486
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
231 if c.ancestor:
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
232 assert merge
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
233 # 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
234 # previewing what will be merged.
3486
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
235 # Make the diff on the other repo (which is known to have other_ref)
3380
01fe360a66c0 fixed pull-requests with cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3357
diff changeset
236 log.debug('Using ancestor %s as org_ref instead of %s'
3486
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
237 % (c.ancestor, org_ref))
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3484
diff changeset
238 org_ref = ('rev', c.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
239 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
240
3443
3ac76dfdab8e compare: minor refactoring and comments
Mads Kiilerich <madski@unity3d.com>
parents: 3442
diff changeset
241 diff_limit = self.cut_off_limit if not c.fulldiff else None
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
242
3718
b2575bdb847c diffs: drop diffs.differ
Mads Kiilerich <madski@unity3d.com>
parents: 3615
diff changeset
243 log.debug('running diff between %s@%s and %s@%s'
b2575bdb847c diffs: drop diffs.differ
Mads Kiilerich <madski@unity3d.com>
parents: 3615
diff changeset
244 % (org_repo.scm_instance.path, org_ref,
b2575bdb847c diffs: drop diffs.differ
Mads Kiilerich <madski@unity3d.com>
parents: 3615
diff changeset
245 other_repo.scm_instance.path, other_ref))
3771
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
246 _diff = org_repo.scm_instance.get_diff(rev1=safe_str(org_ref[1]),
d23f2bea2346 removed assertion about ancestor revision.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
247 rev2=safe_str(other_ref[1]))
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
248
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
249 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
250 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
251 _parsed = diff_processor.prepare()
2337
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
252
3011
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
253 c.limited_diff = False
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
254 if isinstance(_parsed, LimitedDiffContainer):
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
255 c.limited_diff = True
25d77aef2729 Optimized look of compare view of changesets.
Marcin Kuzminski <marcin@python-works.com>
parents: 3010
diff changeset
256
2348
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
257 c.files = []
a07e04ef7bb4 Implemented basic compare view(for pull requests) for mercurial.
Marcin Kuzminski <marcin@python-works.com>
parents: 2337
diff changeset
258 c.changes = {}
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
259 c.lines_added = 0
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
260 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
261 for f in _parsed:
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
262 st = f['stats']
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
263 if st[0] != 'b':
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
264 c.lines_added += st[0]
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 3011
diff changeset
265 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
266 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
267 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
268 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
269 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
270
f8c953c6b040 Created base for diffing two repositories inside rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 2245
diff changeset
271 return render('compare/compare_diff.html')