Warning: Can't synchronize with the repository (Unsupported version control system "mtn": Can't find an appropriate component, maybe the corresponding plugin was not enabled? ). Look in the Trac log for more information.

Ticket #13: tracmtn-65cc6f.patch

File tracmtn-65cc6f.patch, 7.5 KB (added by alien.technology+trac@…, 3 years ago)

Patch for TracMonotone, apply to revision 65cc6f5a3ee53454c0232be02a6d63ba5c973fdb

  • tracmtn/backend.py

    #
    # old_revision [65cc6f5a3ee53454c0232be02a6d63ba5c973fdb]
    #
    # patch "tracmtn/backend.py"
    #  from [d1ea39556f9842df75cb1502b4f227297ae35679]
    #    to [3509a4ab43f67c6d8077f29e4cd86be8f25de7ea]
    #
    ============================================================
     
    133133        dir. 
    134134        """ 
    135135        self.lock.acquire() 
     136 
     137        tok = path.split(':', 1) 
     138        if len(tok) == 2: 
     139            sel = tok[1] 
     140            path = tok[0] 
     141        else: 
     142            sel = None 
     143 
    136144        try: 
    137145            # note: we don't use type or authname, therefore we can always 
    138146            # return the same Repository object for the same database path 
     
    141149            except KeyError: 
    142150                mtn = MTN(path, self.log, self.mtn_binary) 
    143151                self.mtn_procs[path] = mtn 
     152 
    144153            repos = MonotoneRepository( 
    145                 mtn, path, self.log, self.cachespec, self.get_revprops()) 
     154                mtn, path, sel, self.log, self.cachespec,  
     155                self.get_revprops()) 
    146156 
    147157            # this is the main entry point for users of this plugin, so let's set 
    148158            # version information here 
     
    210220 
    211221        def match_property(self, name, mode): 
    212222            if mode == 'revprop' and name in ('Parents', 'Children', 
    213                                               'Branches', 'Tags'): 
     223                                              'Branches', 'Tags', 'Repository'): 
    214224                return 4 
    215225            return 0 
    216226 
    217227        def render_property(self, name, mode, context, props): 
    218228            fragments = [] 
    219             repos = self.env.get_repository() 
     229            repos = props['Repository'][0] 
     230            if name == 'Repository': 
     231                return 
    220232            for val in props[name]: 
    221233                if name in ('Branches', 'Tags'): 
    222234                    # don't create links here 
    223235                    fragments.append(tag(val)) 
    224236                else: 
    225237                    changeset = repos.get_changeset(val) 
    226                     fragments.append(tag.a(val, class_="changeset", 
    227                                      title=shorten_line(changeset.message), 
    228                                      href=context.href.changeset(val))) 
     238                    if repos.reponame: 
     239                        fragments.append(tag.a(val, class_="changeset", 
     240                                               title=shorten_line(changeset.message), 
     241                                               href=context.href.changeset(val + '/' + repos.reponame))) 
     242                    else: 
     243                        fragments.append(tag.a(val, class_="changeset", 
     244                                               title=shorten_line(changeset.message), 
     245                                               href=context.href.changeset(val))) 
    229246            return tag([tag(f, ', ') for f in fragments[:-1]], fragments[-1]) 
    230247 
    231248 
     
    307324    Represents a Monotone repository. 
    308325    """ 
    309326 
    310     def __init__(self, mtn, path, log, cachespec, revpropspec = None): 
     327    def __init__(self, mtn, path, sel, log, cachespec, revpropspec = None): 
    311328        Repository.__init__(self, 'mtn:%s' % path, None, log) 
    312329        self.mtn = CachedMTN(mtn, cachespec) 
     330        self.selector = sel 
     331        self.path = path 
     332        self.reponame = None 
    313333        self.revpropspec = revpropspec or {} 
    314334 
    315335    def close(self): 
     
    329349        Like get_changeset, but skips the revision normalization. 
    330350        """ 
    331351        try: 
    332             return MonotoneChangeset(self.mtn, rev, self.revpropspec) 
     352            return MonotoneChangeset(self, self.mtn, rev, self.revpropspec) 
    333353        except AutomateException: 
    334354            raise NoSuchChangeset(rev) 
    335355 
     
    337357        """ 
    338358        Generate Changesets belonging to the given time period (start, stop). 
    339359        """ 
    340         for rev in self.mtn.select('l:%s/e:%s' % 
    341                 (format_datetime(start), format_datetime(stop))): 
     360        selector = ('l:%s/e:%s' % 
     361                (format_datetime(start), format_datetime(stop))) 
     362        if self.selector != None: 
     363            selector += '/' + self.selector 
     364        for rev in self.mtn.select(selector): 
    342365            yield self._get_changeset(rev) 
    343366 
    344367    def get_node(self, path, rev=None): 
     
    356379        rev = self.normalize_rev(rev) 
    357380        path = self.normalize_path(path) 
    358381        try: 
    359             return MonotoneNode(self.mtn, rev, path) 
     382            return MonotoneNode(self, self.mtn, rev, path) 
    360383        except AutomateException: 
    361384            raise NoSuchChangeset(rev) 
    362385 
     
    498521        `rev` might be needed in order to retrieve the branches, but 
    499522        in general it's best to produce all known branches. 
    500523        """ 
    501         return self.mtn.non_merged_branches() 
     524        return self.mtn.branches() 
    502525 
    503526    def get_quickjump_entries(self, from_rev): 
    504527        """ 
     
    540563    revision. 
    541564    """ 
    542565 
    543     def __init__(self, mtn, rev, path, manifest = None): 
     566    def __init__(self, repos, mtn, rev, path, manifest = None): 
     567        self.repos = repos 
     568        self.selector = repos.selector 
    544569        self.mtn = mtn 
    545570        self.manifest = manifest or self.mtn.manifest(rev) 
    546571 
     
    593618            return get_parent(path) == self.path 
    594619 
    595620        for path in filter(ischild, self.manifest.keys()): # IGNORE:W0141 
    596             yield MonotoneNode(self.mtn, self.rev, path, self.manifest) 
     621            yield MonotoneNode(self.repos, self.mtn, self.rev, path, self.manifest) 
    597622 
    598623    def get_history(self, limit=None): 
    599624        """ 
     
    604629        first element of the tuple (i.e. the path) changing.  Starts 
    605630        with an entry for the current revision. 
    606631        """ 
    607         # FIXME: this is only a stub 
    608         yield (self.path, self.rev, None) 
     632        # Use selector, if exists, otherwise just return all revisions for 
     633        # the (entire?!) repository. 
    609634 
     635        if self.selector == None: 
     636            revs = self.mtn.all_revs() 
     637            topo = reversed(self.mtn.toposort(revs)) 
     638            for i in topo: 
     639                yield (self.path, i, None) 
     640        else: 
     641            revs = self.mtn.select(self.selector) 
     642            topo = reversed(self.mtn.toposort(revs)) 
     643            for i in topo: 
     644                yield (self.path, i, None) 
     645 
    610646    def get_properties(self): 
    611647        """ 
    612648        Returns a dictionary containing the properties (meta-data) of 
     
    635671    Represents the set of changes in one revision. 
    636672    """ 
    637673    # changesets are retrieved via MonotoneRepository.get_changeset() 
    638     def __init__(self, mtn, rev, revpropspec = None): 
     674    def __init__(self, repos, mtn, rev, revpropspec = None): 
     675        self.repos = repos 
    639676        self.certs = mtn.certs(rev) 
    640677        self.messages = self.certs.get('changelog', ['-']) 
    641678        self.authors = self.certs.get('author', ['-']) 
     
    707744            if self.tags: 
    708745                properties['Tags'] = self.tags 
    709746            # FIXME: add user-defined revision properties 
     747            properties['Repository'] = (self.repos, self.rev) 
    710748            return properties 
    711749 
    712750    else: # legacy