/loggerhead/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/loggerhead/trunk

« back to all changes in this revision

Viewing changes to loggerhead/history.py

MergeĀ fromĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
195
195
        self._lock = threading.RLock()
196
196
 
197
197
    @classmethod
198
 
    def from_branch(cls, branch, name=None):
 
198
    def from_branch(cls, branch):
199
199
        z = time.time()
200
200
        self = cls()
201
201
        self._branch = branch
202
202
        self._last_revid = self._branch.last_revision()
203
203
 
204
 
        if name is None:
205
 
            name = self._branch.nick
206
 
        self._name = name
207
 
        self.log = logging.getLogger('loggerhead.%s' % (name,))
 
204
        self.log = logging.getLogger('loggerhead.%s' % (self._branch.nick,))
208
205
 
209
206
        graph = branch.repository.get_graph()
210
207
        parent_map = dict(((key, value) for key, value in
255
252
        return revision_graph
256
253
 
257
254
    @classmethod
258
 
    def from_folder(cls, path, name=None):
 
255
    def from_folder(cls, path):
259
256
        b = bzrlib.branch.Branch.open(path)
260
257
        b.lock_read()
261
258
        try:
262
 
            return cls.from_branch(b, name)
 
259
            return cls.from_branch(b)
263
260
        finally:
264
261
            b.unlock()
265
262
 
288
285
    def get_config(self):
289
286
        return self._branch.get_config()
290
287
 
291
 
 
292
288
    def get_revno(self, revid):
293
289
        if revid not in self._revision_info:
294
290
            # ghost parent?
352
348
        return revid_list[index:]
353
349
 
354
350
    @with_branch_lock
355
 
    def get_revision_history_matching(self, revid_list, text):
356
 
        self.log.debug('searching %d revisions for %r', len(revid_list), text)
357
 
        z = time.time()
358
 
        # this is going to be painfully slow. :(
359
 
        out = []
360
 
        text = text.lower()
361
 
        for revid in revid_list:
362
 
            change = self.get_changes([ revid ])[0]
363
 
            if text in change.comment.lower():
364
 
                out.append(revid)
365
 
        self.log.debug('searched %d revisions for %r in %r secs', len(revid_list), text, time.time() - z)
366
 
        return out
367
 
 
368
 
    @with_branch_lock
369
351
    def get_search_revid_list(self, query, revid_list):
370
352
        """
371
353
        given a "quick-search" query, try a few obvious possible meanings:
490
472
        else:
491
473
            revid_list = None
492
474
 
493
 
        try:
494
 
            revid_list = search.search_revisions(self._branch, query)
495
 
            if len(revid_list) > 0:
496
 
                if revid not in revid_list:
497
 
                    revid = revid_list[0]
498
 
                return revid, start_revid, revid_list
499
 
        except:
500
 
            # no results
 
475
        revid_list = self.get_search_revid_list(query, revid_list)
 
476
        if revid_list and len(revid_list) > 0:
 
477
            if revid not in revid_list:
 
478
                revid = revid_list[0]
 
479
            return revid, start_revid, revid_list
 
480
        else:
501
481
            return None, None, []
502
482
 
503
483
    @with_branch_lock
519
499
            path = '/' + path
520
500
        return self._branch.repository.get_revision_inventory(revid).path2id(path)
521
501
 
522
 
 
523
502
    def get_merge_point_list(self, revid):
524
503
        """
525
504
        Return the list of revids that have merged this node.
620
599
 
621
600
        return changes
622
601
 
623
 
    # alright, let's profile this sucka. (FIXME remove this eventually...)
624
 
    def _get_changes_profiled(self, revid_list):
625
 
        from loggerhead.lsprof import profile
626
 
        import cPickle
627
 
        ret, stats = profile(self.get_changes_uncached, revid_list)
628
 
        stats.sort()
629
 
        stats.freeze()
630
 
        cPickle.dump(stats, open('lsprof.stats', 'w'), 2)
631
 
        self.log.info('lsprof complete!')
632
 
        return ret
633
 
 
634
602
    @with_branch_lock
635
603
    @with_bzrlib_read_lock
636
604
    def get_changes_uncached(self, revid_list):