Changeset - d787da66c292
[Not reviewed]
codereview
0 2 0
Marcin Kuzminski - 13 years ago 2012-05-28 02:00:14
marcin@python-works.com
Changed compare-view of remote repos to use incoming option instead of outgoing.
2 files changed with 22 insertions and 8 deletions:
0 comments (0 inline, 0 general)
rhodecode/controllers/compare.py
Show inline comments
 
@@ -82,53 +82,67 @@ class CompareController(BaseRepoControll
 
                other_repo, other_ref = other_parser(other)
 
                return org_repo, org_ref, other_repo, other_ref
 
            except:
 
                log.error(traceback.format_exc())
 

	
 
        raise HTTPNotFound
 

	
 
    def _get_changesets(self, org_repo, org_ref, other_repo, other_ref):
 
        changesets = []
 
        #case two independent repos
 
        if org_repo != other_repo:
 
            from mercurial import discovery
 
            out = discovery.findcommonoutgoing(org_repo._repo, other_repo._repo)
 
            for cs in map(binascii.hexlify, out.missing):
 
            other = org_repo._repo
 
            repo = other_repo._repo
 
            onlyheads = None
 
            tmp = discovery.findcommonincoming(repo=repo,
 
                                               remote=other,
 
                                               heads=onlyheads, force=False)
 
            common, incoming, rheads = tmp
 
            if not incoming:
 
                revs = []
 
            else:
 
                revs = other.changelog.findmissing(common, rheads)
 

	
 
            for cs in map(binascii.hexlify, revs):
 
                changesets.append(org_repo.get_changeset(cs))
 
        else:
 
            revs = ['ancestors(%s) and not ancestors(%s)' % (org_ref[1],
 
                                                             other_ref[1])]
 
            from mercurial import scmutil
 
            out = scmutil.revrange(org_repo._repo, revs)
 
            for cs in reversed(out):
 
                changesets.append(org_repo.get_changeset(cs))
 

	
 
        return changesets
 

	
 
    def index(self, ref):
 
        org_repo, org_ref, other_repo, other_ref = self._handle_ref(ref)
 

	
 
        c.swap_url = h.url('compare_home', repo_name=c.repo_name,
 
                           ref='%s...%s' % (':'.join(other_ref),
 
                                            ':'.join(org_ref)))
 
        c.org_repo = org_repo = Repository.get_by_repo_name(org_repo)
 
        c.other_repo = other_repo = Repository.get_by_repo_name(other_repo)
 

	
 
        c.cs_ranges = self._get_changesets(org_repo.scm_instance,
 
                                           org_ref,
 
                                           other_repo.scm_instance,
 
                                           other_ref)
 

	
 
        c.org_ref = org_ref[1]
 
        c.other_ref = other_ref[1]
 

	
 
        _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref)
 
        # diff needs to have swapped org with other to generate proper diff
 
        _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref)
 
        diff_processor = diffs.DiffProcessor(_diff, format='gitdiff')
 
        _parsed = diff_processor.prepare()
 

	
 
        c.files = []
 
        c.changes = {}
 

	
 
        for f in _parsed:
 
        # sort Added first then Modified last Deleted files
 
        sorter = lambda info: {'A': 0, 'M': 1, 'D': 2}.get(info['operation'])
 
        for f in sorted(_parsed, key=sorter):
 
            fid = h.FID('', f['filename'])
 
            c.files.append([fid, f['operation'], f['filename'], f['stats']])
 
            diff = diff_processor.as_html(enable_comments=False, diff_lines=[f])
 
            c.changes[fid] = [f['operation'], f['filename'], diff]
 

	
 
        return render('compare/compare_diff.html')
rhodecode/templates/compare/compare_diff.html
Show inline comments
 
@@ -17,25 +17,25 @@
 
    ${self.menu('changelog')}
 
</%def>
 

	
 
<%def name="main()">
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <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')} <a href="${c.swap_url}">swap</a></h3>
 
                <div>
 
                ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -> ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)}
 
                </div>
 
            </div>
 
        </div>
 
        <div id="changeset_compare_view_content">
 
            <div class="container">
 
            <table class="compare_view_commits noborder">
 
            %for cnt, cs in enumerate(c.cs_ranges):
 
                <tr>
 
                <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),14)}"/></div></td>
 
                <td>${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</td>
0 comments (0 inline, 0 general)