Mercurial > kallithea
changeset 3015:16af24982e30 beta
Multiple changes for compare system
- count number of changed lines and files
- add combined compare button into the old per changeset compare
- fixed some logic for remote & bundle compare system
- added few tests for git compare
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 18 Nov 2012 23:17:02 +0100 |
parents | 02bbd574fa14 |
children | b3c8a3a5ce5f |
files | rhodecode/controllers/compare.py rhodecode/controllers/pullrequests.py rhodecode/lib/diffs.py rhodecode/model/pull_request.py rhodecode/templates/changeset/changeset_range.html rhodecode/templates/compare/compare_cs.html rhodecode/templates/compare/compare_diff.html rhodecode/tests/functional/test_compare.py |
diffstat | 8 files changed, 244 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/compare.py Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/controllers/compare.py Sun Nov 18 23:17:02 2012 +0100 @@ -88,14 +88,14 @@ org_ref = (org_ref_type, org_ref) other_ref = (other_ref_type, other_ref) other_repo = request.GET.get('repo', org_repo) - bundle_compare = str2bool(request.GET.get('bundle', True)) + remote_compare = str2bool(request.GET.get('bundle', True)) c.fulldiff = fulldiff = request.GET.get('fulldiff') 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, as_form=request.GET.get('as_form'), - bundle=bundle_compare) + bundle=remote_compare) c.org_repo = org_repo = Repository.get_by_repo_name(org_repo) c.other_repo = other_repo = Repository.get_by_repo_name(other_repo) @@ -128,20 +128,21 @@ if partial: return render('compare/compare_cs.html') - if not bundle_compare and c.cs_ranges: + c.org_ref = org_ref[1] + c.other_ref = other_ref[1] + + if not remote_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 - c.org_ref = org_ref[1] - c.other_ref = other_ref[1] + diff_limit = self.cut_off_limit if not fulldiff else None + _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref, + discovery_data, remote_compare=remote_compare) - _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref, - discovery_data, bundle_compare=bundle_compare) - diff_limit = self.cut_off_limit if not fulldiff else None - diff_processor = diffs.DiffProcessor(_diff, format='gitdiff', + diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', diff_limit=diff_limit) _parsed = diff_processor.prepare() @@ -151,8 +152,13 @@ c.files = [] c.changes = {} - + c.lines_added = 0 + c.lines_deleted = 0 for f in _parsed: + st = f['stats'] + if st[0] != 'b': + c.lines_added += st[0] + c.lines_deleted += st[1] fid = h.FID('', f['filename']) c.files.append([fid, f['operation'], f['filename'], f['stats']]) diff = diff_processor.as_html(enable_comments=False, parsed_lines=[f])
--- a/rhodecode/controllers/pullrequests.py Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/controllers/pullrequests.py Sun Nov 18 23:17:02 2012 +0100 @@ -51,6 +51,7 @@ from rhodecode.model.changeset_status import ChangesetStatusModel from rhodecode.model.forms import PullRequestForm from rhodecode.lib.vcs.exceptions import EmptyRepositoryError +from rhodecode.lib.vcs.backends.base import EmptyChangeset log = logging.getLogger(__name__) @@ -277,7 +278,9 @@ # 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_ref = ('rev', getattr(c.cs_ranges[-1].parents[0] + if c.cs_ranges[-1].parents + else EmptyChangeset(), 'raw_id')) other_repo = org_repo c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges]) @@ -286,9 +289,9 @@ c.org_ref = org_ref[1] c.other_ref = other_ref[1] - # diff needs to have swapped org with other to generate proper diff - _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref, + _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref, discovery_data) + diff_processor = diffs.DiffProcessor(_diff, format='gitdiff') _parsed = diff_processor.prepare()
--- a/rhodecode/lib/diffs.py Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/lib/diffs.py Sun Nov 18 23:17:02 2012 +0100 @@ -702,52 +702,48 @@ def differ(org_repo, org_ref, other_repo, other_ref, discovery_data=None, - bundle_compare=False, context=3, ignore_whitespace=False): + remote_compare=False, context=3, ignore_whitespace=False): """ - General differ between branches, bookmarks, revisions of two remote related - repositories + General differ between branches, bookmarks, revisions of two remote or + local but related repositories :param org_repo: - :type org_repo: :param org_ref: - :type org_ref: :param other_repo: :type other_repo: - :param other_ref: :type other_ref: """ - bundlerepo = None - ignore_whitespace = ignore_whitespace - context = context org_repo_scm = org_repo.scm_instance + other_repo_scm = other_repo.scm_instance + org_repo = org_repo_scm._repo - other_repo = other_repo.scm_instance._repo - opts = diffopts(git=True, ignorews=ignore_whitespace, context=context) + other_repo = other_repo_scm._repo + org_ref = org_ref[1] other_ref = other_ref[1] if org_repo == other_repo: log.debug('running diff between %s@%s and %s@%s' % (org_repo, org_ref, other_repo, other_ref)) - _diff = org_repo_scm.get_diff(rev1=other_ref, rev2=org_ref, + _diff = org_repo_scm.get_diff(rev1=org_ref, rev2=other_ref, ignore_whitespace=ignore_whitespace, context=context) return _diff - elif bundle_compare: - + elif remote_compare: + opts = diffopts(git=True, ignorews=ignore_whitespace, context=context) common, incoming, rheads = discovery_data - other_repo_peer = localrepo.locallegacypeer(other_repo.local()) + org_repo_peer = localrepo.locallegacypeer(org_repo.local()) # create a bundle (uncompressed if other repo is not local) - if other_repo_peer.capable('getbundle') and incoming: + if org_repo_peer.capable('getbundle'): # disable repo hooks here since it's just bundle ! # patch and reset hooks section of UI config to not run any # hooks on fetching archives with subrepos - for k, _ in other_repo.ui.configitems('hooks'): - other_repo.ui.setconfig('hooks', k, None) + for k, _ in org_repo.ui.configitems('hooks'): + org_repo.ui.setconfig('hooks', k, None) - unbundle = other_repo.getbundle('incoming', common=common, - heads=None) + unbundle = org_repo.getbundle('incoming', common=common, + heads=None) buf = BytesIO() while True: @@ -764,8 +760,9 @@ bundlerepo = InMemoryBundleRepo(ui, path=org_repo.root, bundlestream=unbundle) - return ''.join(patch.diff(bundlerepo or org_repo, - node1=org_repo[org_ref].node(), - node2=other_repo[other_ref].node(), - opts=opts)) + return ''.join(patch.diff(bundlerepo, + node1=other_repo[other_ref].node(), + node2=org_repo[org_ref].node(), + opts=opts)) + return '' \ No newline at end of file
--- a/rhodecode/model/pull_request.py Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/model/pull_request.py Sun Nov 18 23:17:02 2012 +0100 @@ -185,21 +185,21 @@ revs = [ "ancestors(%s('%s')) and not ancestors(%s('%s'))" % ( + _revset_predicates[other_ref[0]], other_ref[1], _revset_predicates[org_ref[0]], org_ref[1], - _revset_predicates[other_ref[0]], other_ref[1] ) ] out = scmutil.revrange(org_repo._repo, revs) - for cs in reversed(out): + for cs in (out): changesets.append(org_repo.get_changeset(cs)) elif alias == 'git': so, se = org_repo.run_git_command( - 'log --pretty="format: %%H" -s -p %s..%s' % (org_ref[1], + 'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1], other_ref[1]) ) ids = re.findall(r'[0-9a-fA-F]{40}', so) - for cs in reversed(ids): + for cs in (ids): changesets.append(org_repo.get_changeset(cs)) return changesets
--- a/rhodecode/templates/changeset/changeset_range.html Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/templates/changeset/changeset_range.html Sun Nov 18 23:17:02 2012 +0100 @@ -26,7 +26,7 @@ <div class="table"> <div id="body" class="diffblock"> <div class="code-header cv"> - <h3 class="code-header-title">${_('Compare View')}</h3> + <h3 class="code-header-title">${_('Compare View')} / ${h.link_to(_('Show combined compare'),h.url('compare_url',repo_name=c.repo_name,org_ref_type='rev',org_ref=getattr(c.cs_ranges[0].parents[0] if c.cs_ranges[0].parents else h.EmptyChangeset(),'raw_id'),other_ref_type='rev',other_ref=c.cs_ranges[-1].raw_id))}</h3> <div> ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} </div>
--- a/rhodecode/templates/compare/compare_cs.html Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/templates/compare/compare_cs.html Sun Nov 18 23:17:02 2012 +0100 @@ -2,7 +2,7 @@ <div class="container"> <table class="compare_view_commits noborder"> %if not c.cs_ranges: - <tr><td>${_('No changesets')}</td></tr> + <span class="empty_data">${_('No changesets')}</span> %else: %for cnt, cs in enumerate(c.cs_ranges): <tr>
--- a/rhodecode/templates/compare/compare_diff.html Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/templates/compare/compare_diff.html Sun Nov 18 23:17:02 2012 +0100 @@ -34,12 +34,23 @@ </div> <div id="changeset_compare_view_content"> ##CS - <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Outgoing changesets')}</div> + <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${ungettext('Showing %s commit','Showing %s commits', len(c.cs_ranges)) % len(c.cs_ranges)}</div> <%include file="compare_cs.html" /> ## FILES - <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Files affected')}</div> + <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px"> + + % if c.limited_diff: + ${ungettext('%s file changed', '%s files changed', len(c.files)) % len(c.files)} + % else: + ${ungettext('%s file changed with %s insertions and %s deletions','%s files changed with %s insertions and %s deletions', len(c.files)) % (len(c.files),c.lines_added,c.lines_deleted)}: + %endif + + </div> <div class="cs_files"> + %if not c.files: + <span class="empty_data">${_('No files')}</span> + %endif %for fid, change, f, stat in c.files: <div class="cs_${change}"> <div class="node">${h.link_to(h.safe_unicode(f),h.url.current(anchor=fid))}</div>
--- a/rhodecode/tests/functional/test_compare.py Sun Nov 18 21:27:41 2012 +0100 +++ b/rhodecode/tests/functional/test_compare.py Sun Nov 18 23:17:02 2012 +0100 @@ -8,10 +8,10 @@ class TestCompareController(TestController): - def test_index_tag(self): + def test_compare_tag_hg(self): self.log_user() - tag1 = '0.1.3' - tag2 = '0.1.2' + tag1 = '0.1.2' + tag2 = '0.1.3' response = self.app.get(url(controller='compare', action='index', repo_name=HG_REPO, org_ref_type="tag", @@ -21,13 +21,13 @@ )) response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, tag1, HG_REPO, tag2)) ## outgoing changesets between tags - response.mustcontain('''<a href="/%s/changeset/17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">r120:17544fbfcd33</a>''' % HG_REPO) - response.mustcontain('''<a href="/%s/changeset/36e0fc9d2808c5022a24f49d6658330383ed8666">r119:36e0fc9d2808</a>''' % HG_REPO) - response.mustcontain('''<a href="/%s/changeset/bb1a3ab98cc45cb934a77dcabf87a5a598b59e97">r118:bb1a3ab98cc4</a>''' % HG_REPO) + response.mustcontain('''<a href="/%s/changeset/c5ddebc06eaaba3010c2d66ea6ec9d074eb0f678">r112:c5ddebc06eaa</a>''' % HG_REPO) + response.mustcontain('''<a href="/%s/changeset/70d4cef8a37657ee4cf5aabb3bd9f68879769816">r115:70d4cef8a376</a>''' % HG_REPO) + response.mustcontain('''<a href="/%s/changeset/9749bfbfc0d2eba208d7947de266303b67c87cda">r116:9749bfbfc0d2</a>''' % HG_REPO) response.mustcontain('''<a href="/%s/changeset/41fda979f02fda216374bf8edac4e83f69e7581c">r117:41fda979f02f</a>''' % HG_REPO) - response.mustcontain('''<a href="/%s/changeset/9749bfbfc0d2eba208d7947de266303b67c87cda">r116:9749bfbfc0d2</a>''' % HG_REPO) - response.mustcontain('''<a href="/%s/changeset/70d4cef8a37657ee4cf5aabb3bd9f68879769816">r115:70d4cef8a376</a>''' % HG_REPO) - response.mustcontain('''<a href="/%s/changeset/c5ddebc06eaaba3010c2d66ea6ec9d074eb0f678">r112:c5ddebc06eaa</a>''' % HG_REPO) + response.mustcontain('''<a href="/%s/changeset/bb1a3ab98cc45cb934a77dcabf87a5a598b59e97">r118:bb1a3ab98cc4</a>''' % HG_REPO) + response.mustcontain('''<a href="/%s/changeset/36e0fc9d2808c5022a24f49d6658330383ed8666">r119:36e0fc9d2808</a>''' % HG_REPO) + response.mustcontain('''<a href="/%s/changeset/17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">r120:17544fbfcd33</a>''' % HG_REPO) ## files diff response.mustcontain('''<div class="node"><a href="/%s/compare/tag@%s...tag@%s#C--1c5cf9e91c12">docs/api/utils/index.rst</a></div>''' % (HG_REPO, tag1, tag2)) @@ -42,7 +42,43 @@ response.mustcontain('''<div class="node"><a href="/%s/compare/tag@%s...tag@%s#C--2ef0ef106c56">vcs/utils/diffs.py</a></div>''' % (HG_REPO, tag1, tag2)) response.mustcontain('''<div class="node"><a href="/%s/compare/tag@%s...tag@%s#C--3150cb87d4b7">vcs/utils/lazy.py</a></div>''' % (HG_REPO, tag1, tag2)) - def test_index_branch(self): + def test_compare_tag_git(self): + self.log_user() + tag1 = 'v0.1.2' + tag2 = 'v0.1.3' + response = self.app.get(url(controller='compare', action='index', + repo_name=GIT_REPO, + org_ref_type="tag", + org_ref=tag1, + other_ref_type="tag", + other_ref=tag2, + bundle=False + )) + response.mustcontain('%s@%s -> %s@%s' % (GIT_REPO, tag1, GIT_REPO, tag2)) + + ## outgoing changesets between tags + response.mustcontain('''<a href="/%s/changeset/794bbdd31545c199f74912709ea350dedcd189a2">r113:794bbdd31545</a>''' % GIT_REPO) + response.mustcontain('''<a href="/%s/changeset/e36d8c5025329bdd4212bd53d4ed8a70ff44985f">r115:e36d8c502532</a>''' % GIT_REPO) + response.mustcontain('''<a href="/%s/changeset/5c9ff4f6d7508db0e72b1d2991c357d0d8e07af2">r116:5c9ff4f6d750</a>''' % GIT_REPO) + response.mustcontain('''<a href="/%s/changeset/b7187fa2b8c1d773ec35e9dee12f01f74808c879">r117:b7187fa2b8c1</a>''' % GIT_REPO) + response.mustcontain('''<a href="/%s/changeset/5f3b74262014a8de2dc7dade1152de9fd0c8efef">r118:5f3b74262014</a>''' % GIT_REPO) + response.mustcontain('''<a href="/%s/changeset/17438a11f72b93f56d0e08e7d1fa79a378578a82">r119:17438a11f72b</a>''' % GIT_REPO) + response.mustcontain('''<a href="/%s/changeset/5a3a8fb005554692b16e21dee62bf02667d8dc3e">r120:5a3a8fb00555</a>''' % GIT_REPO) + + #files + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--1c5cf9e91c12">docs/api/utils/index.rst</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--e3305437df55">test_and_report.sh</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--c8e92ef85cd1">.hgignore</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--6e08b694d687">.hgtags</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--2c14b00f3393">docs/api/index.rst</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--430ccbc82bdf">vcs/__init__.py</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--ebb592c595c0">vcs/utils/__init__.py</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--7abc741b5052">vcs/utils/annotate.py</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--2ef0ef106c56">vcs/utils/diffs.py</a>''' % (GIT_REPO, tag1, tag2)) + response.mustcontain('''<a href="/%s/compare/tag@%s...tag@%s#C--3150cb87d4b7">vcs/utils/lazy.py</a>''' % (GIT_REPO, tag1, tag2)) + + def test_index_branch_hg(self): self.log_user() response = self.app.get(url(controller='compare', action='index', repo_name=HG_REPO, @@ -54,12 +90,29 @@ response.mustcontain('%s@default -> %s@default' % (HG_REPO, HG_REPO)) # branch are equal - response.mustcontain('<tr><td>No changesets</td></tr>') + response.mustcontain('<span class="empty_data">No files</span>') + response.mustcontain('<span class="empty_data">No changesets</span>') + + def test_index_branch_git(self): + self.log_user() + response = self.app.get(url(controller='compare', action='index', + repo_name=GIT_REPO, + org_ref_type="branch", + org_ref='master', + other_ref_type="branch", + other_ref='master', + )) + + response.mustcontain('%s@master -> %s@master' % (GIT_REPO, GIT_REPO)) + # branch are equal + response.mustcontain('<span class="empty_data">No files</span>') + response.mustcontain('<span class="empty_data">No changesets</span>') def test_compare_revisions(self): self.log_user() - rev1 = '3d8f361e72ab' - rev2 = 'b986218ba1c9' + rev1 = 'b986218ba1c9' + rev2 = '3d8f361e72ab' + response = self.app.get(url(controller='compare', action='index', repo_name=HG_REPO, org_ref_type="rev", @@ -69,8 +122,7 @@ )) response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_REPO, rev2)) ## outgoing changesets between those revisions - response.mustcontain("""<a href="/%s/changeset/3d8f361e72ab303da48d799ff1ac40d5ac37c67e">r1:%s</a>""" % (HG_REPO, rev1)) - + response.mustcontain("""<a href="/%s/changeset/3d8f361e72ab303da48d799ff1ac40d5ac37c67e">r1:%s</a>""" % (HG_REPO, rev2)) ## files response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--c8e92ef85cd1">.hgignore</a>""" % (HG_REPO, rev1, rev2)) @@ -93,8 +145,54 @@ Session().commit() - rev1 = '7d4bc8ec6be5' - rev2 = '56349e29c2af' + rev1 = '56349e29c2af' + rev2 = '7d4bc8ec6be5' + + response = self.app.get(url(controller='compare', action='index', + repo_name=HG_REPO, + org_ref_type="rev", + org_ref=rev1, + other_ref_type="rev", + other_ref=rev2, + repo=HG_FORK, + )) + + try: + response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) + ## outgoing changesets between those revisions + + response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO)) + response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO)) + response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2)) + + ## files + response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2)) + response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2)) + response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2)) + finally: + RepoModel().delete(HG_FORK) + + def test_compare_remote_repos_remote_flag_off(self): + self.log_user() + + form_data = dict( + repo_name=HG_FORK, + repo_name_full=HG_FORK, + repo_group=None, + repo_type='hg', + description='', + private=False, + copy_permissions=False, + landing_rev='tip', + update_after_clone=False, + fork_parent_id=Repository.get_by_repo_name(HG_REPO), + ) + RepoModel().create_fork(form_data, cur_user=TEST_USER_ADMIN_LOGIN) + + Session().commit() + + rev1 = '56349e29c2af' + rev2 = '7d4bc8ec6be5' response = self.app.get(url(controller='compare', action='index', repo_name=HG_REPO, @@ -102,16 +200,17 @@ org_ref=rev1, other_ref_type="rev", other_ref=rev2, - repo=HG_FORK + repo=HG_FORK, + bundle=False, )) try: response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) ## outgoing changesets between those revisions - response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev1)) + response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO)) response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO)) - response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO)) + response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2)) ## files response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2)) @@ -120,6 +219,67 @@ finally: RepoModel().delete(HG_FORK) +# def test_compare_origin_ahead_of_fork(self): +# self.log_user() +# +# form_data = dict( +# repo_name=HG_FORK, +# repo_name_full=HG_FORK, +# repo_group=None, +# repo_type='hg', +# description='', +# private=False, +# copy_permissions=False, +# landing_rev='tip', +# update_after_clone=False, +# fork_parent_id=Repository.get_by_repo_name(HG_REPO), +# ) +# RepoModel().create_fork(form_data, cur_user=TEST_USER_ADMIN_LOGIN) +# +# Session().commit() +# +# repo1 = Repository.get_by_repo_name(HG_REPO) +# r1_name = HG_REPO +# +# #commit something ! +# cs0 = ScmModel().create_node( +# repo=repo1.scm_instance, repo_name=r1_name, +# cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN, +# author=TEST_USER_ADMIN_LOGIN, +# message='extra commit1', +# content='line1', +# f_path='file1' +# ) +# +# +# rev1 = '56349e29c2af' +# rev2 = '7d4bc8ec6be5' +# +# response = self.app.get(url(controller='compare', action='index', +# repo_name=HG_REPO, +# org_ref_type="rev", +# org_ref=rev1, +# other_ref_type="rev", +# other_ref=rev2, +# repo=HG_FORK, +# bundle=False, +# )) +# +# try: +# response.mustcontain('%s@%s -> %s@%s' % (HG_REPO, rev1, HG_REPO, rev2)) +# ## outgoing changesets between those revisions +# +# response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO)) +# response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO)) +# response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2)) +# +# ## files +# response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2)) +# response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2)) +# response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2)) +# finally: +# RepoModel().delete(HG_FORK) + def test_compare_extra_commits(self): self.log_user() @@ -178,7 +338,7 @@ try: response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) - response.mustcontain("""<div class="message">commit2</div>""") + response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""") response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (r2_name, cs1.raw_id, cs1.short_id)) ## files response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s#C--826e8142e6ba">file1</a>""" % (r2_name, rev1, rev2)) @@ -391,7 +551,7 @@ repo=r1_name, bundle=False )) - rev2 = cs0.parents[0].raw_id + response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) response.mustcontain("""file1-line1-from-fork""") response.mustcontain("""file2-line1-from-fork""")