Changeset 3579

Show
Ignore:
Timestamp:
04/30/08 15:27:14 (5 months ago)
Author:
eblot
Message:

Create a new RevtreePlugin enhancer for use with SVN 1.5

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • revtreeplugin/0.11/enhancers/mergeinfoenhancer/mergeinfoenhancer/enhancer.py

    r3578 r3579  
    11# -*- coding: utf-8 -*- 
    22# 
    3 # Copyright (C) 2007 Emmanuel Blot <emmanuel.blot@free.fr> 
     3# Copyright (C) 2008 Emmanuel Blot <emmanuel.blot@free.fr> 
    44# All rights reserved. 
    55# 
     
    2121import sys 
    2222 
    23 __all__ = ['MergeEnhancer'] 
     23__all__ = ['MergeInfoEnhancer'] 
    2424 
    2525class SimpleContainer(object): 
     
    3030 
    3131 
    32 class MergeEnhancer(Component): 
    33     """Enhancer to show merge operation, based on svnmerge properties""" 
     32def get_merge_info(repos, path, rev): 
     33    """Extract merge information as a list""" 
     34    props = repos.get_node_properties(path, rev) 
     35    mergeprop = props and props.get('svn:mergeinfo') 
     36    return mergeprop and mergeprop.split('\n') or [] 
     37 
     38 
     39class MergeInfoEnhancer(Component): 
     40    """Enhancer to show merge operation, based on svn:mergeinfo properties. 
    3441     
    35     implements(IRevtreeEnhancer)     
    36      
     42       This enhancer requires a SVN >= 1.5 repository. Previous releases of 
     43       SVN do not manage the required information. This enhancer cannnot be 
     44       used with repositories managed with the svnmerge.py tool  
     45    """ 
     46 
     47    implements(IRevtreeEnhancer) 
     48 
    3749    def create(self, env, req, repos, svgrevtree): 
    3850        """Creates the internal data from the repository""" 
     
    5769            chgsets = [c for r, c in chgsets]  
    5870 
     71            # if the first changeset of a branch is a copy of another 
     72            # changeset (from another branch), extract the properties of the 
     73            # source changeset 
     74            srcmergeprops = [] 
     75            if chgsets and chgsets[0].clone: 
     76                (srev, spath) = branch.source() 
     77                srcmergeprops = get_merge_info(repos, spath, srev) 
     78 
    5979            # find all the changeset that have been created by svnmerge 
    6080            mergeops = [] 
    6181            for chgset in chgsets: 
    62                 nodeprops = repos.get_node_properties(branch.name, chgset.rev) 
    63                 if nodeprops:                                       
    64                     mergeprop = nodeprops.get('svnmerge-integrated') 
    65                     if not mergeprop: 
    66                         continue  
    67                     mergeops.append((chgset.rev, mergeprop)) 
     82                mergeprops = get_merge_info(repos, branch.name, chgset.rev) 
     83                # discard all the merge information already set in the source 
     84                # branch 
     85                filterprops = [m for m in mergeprops if m not in srcmergeprops] 
     86                if filterprops: 
     87                    mergeops.append((chgset.rev, mergeprops)) 
    6888 
    6989            srcbrs = {} 
    7090            prevmerge = None 
    7191            for m in mergeops: 
    72                 (rev, merge) = m 
    73                 if prevmerge != merge: 
    74                     #print >> sys.stderr, "\n**\n%d Merge [%s]: %s" % \ 
    75                     #    (rev, branch.name, merge) 
    76                     # warning: potential flaw with path containing spaces? 
    77                     sources = merge.split(' ') 
    78                     for source in sources: 
     92                (rev, merges) = m 
     93                if prevmerge != merges: 
     94                    for source in merges: 
    7995                        (srcbr, srcrev) = source.split(':') 
    8096                        srcbranch = repos.branch(to_unicode(srcbr[1:])) 
     
    104120                                                   srcbrs[srcbr]) 
    105121                    # track last useful merge info 
    106                     prevmerge = merge 
     122                    prevmerge = merges 
    107123        return enhancer 
    108124                 
  • revtreeplugin/0.11/enhancers/mergeinfoenhancer/mergeinfoenhancer/__init__.py

    r3578 r3579  
    11# -*- coding: utf-8 -*- 
    22# 
    3 # Copyright (C) 2007-2008 Emmanuel Blot <emmanuel.blot@free.fr> 
     3# Copyright (C) 2008 Emmanuel Blot <emmanuel.blot@free.fr> 
    44# All rights reserved. 
    55# 
  • revtreeplugin/0.11/enhancers/mergeinfoenhancer/setup.py

    r3578 r3579  
    22# -*- coding: utf-8 -*- 
    33# 
    4 # Copyright (C) 2007-2008 Emmanuel Blot <emmanuel.blot@free.fr> 
     4# Copyright (C) 2008 Emmanuel Blot <emmanuel.blot@free.fr> 
    55# All rights reserved. 
    66# 
     
    1515from setuptools import setup, find_packages 
    1616 
    17 PACKAGE = 'TracRevtreeMergeEnhancer' 
    18 VERSION = '0.1.1
     17PACKAGE = 'TracRevtreeMergeInfoEnhancer' 
     18VERSION = '0.1.0
    1919 
    2020setup ( 
    2121    name = PACKAGE, 
    2222    version = VERSION, 
    23     description = 'Enhancer for the RevtreePlugin, based on svnmerge.py info', 
     23    description = 'Enhancer for the RevtreePlugin for SVN >=1.5', 
    2424    author = 'Emmanuel Blot', 
    2525    author_email = 'emmanuel.blot@free.fr', 
    2626    license='BSD',  
    27     url='http://trac-hacks.org/wiki/RevtreePlugin/MergeEnhancer', 
     27    url='http://trac-hacks.org/wiki/RevtreePlugin/MergeInfoEnhancer', 
    2828    keywords = "trac revision svg graphical tree browser log", 
    2929    install_requires = [ 'TracRevtreePlugin >= 0.5.7',  
     
    3232    entry_points = { 
    3333        'trac.plugins': [ 
    34             'revtree.enhancer = mergeenhancer' 
     34            'revtree.enhancer = mergeinfoenhancer' 
    3535        ] 
    3636    }