~ubuntu-branches/ubuntu/precise/trac/precise

« back to all changes in this revision

Viewing changes to trac/versioncontrol/svn_fs.py

  • Committer: Bazaar Package Importer
  • Author(s): Daniel T Chen
  • Date: 2006-07-03 22:03:47 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20060703220347-4vhz82319vn0jws6
Tags: 0.9.5-2ubuntu1
* Merge from debian unstable:
  - debian/{control,dirs}: Continue to use python2.4.
  - debian/rules: Use Debian Sid's version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
260
260
        return SubversionNode(path, rev, self.authz, self.scope, self.fs_ptr,
261
261
                              self.pool)
262
262
 
 
263
    def _history(self, path, start, end, limit=None, pool=None):
 
264
        scoped_path = posixpath.join(self.scope[1:], path)
 
265
        return _get_history(scoped_path, self.authz, self.fs_ptr,
 
266
                            pool or self.pool, start, end, limit)
 
267
 
 
268
    def _previous_rev(self, rev, path='', pool=None):
 
269
        if rev > 1: # don't use oldest here, as it's too expensive
 
270
            try:
 
271
                for _, prev in self._history(path, 0, rev-1, limit=1,
 
272
                                             pool=pool):
 
273
                    return prev
 
274
            except (SystemError, # "null arg to internal routine" in 1.2.x
 
275
                    core.SubversionException): # in 1.3.x
 
276
                pass
 
277
        return None
 
278
    
 
279
 
263
280
    def get_oldest_rev(self):
264
281
        rev = 0
265
282
        if self.scope == '/':
326
343
                for p, r in _get_history(self.scope + path, self.authz,
327
344
                                         self.fs_ptr, subpool, 0, rev, limit):
328
345
                    older = (_scoped_path(self.scope, p), r, Changeset.ADD)
329
 
                    rev = self.previous_rev(r)
 
346
                    rev = self._previous_rev(r, pool=subpool)
330
347
                    if newer:
331
348
                        if older[0] == path:
332
349
                            # still on the path: 'newer' was an edit
333
350
                            yield newer[0], newer[1], Changeset.EDIT
334
351
                        else:
335
352
                            # the path changed: 'newer' was a copy
336
 
                            rev = self.previous_rev(newer[1])
 
353
                            rev = self._previous_rev(newer[1], pool=subpool)
337
354
                            # restart before the copy op
338
355
                            yield newer[0], newer[1], Changeset.COPY
339
356
                            older = (older[0], older[1], 'unknown')
344
361
                    yield older
345
362
            else:
346
363
                expect_deletion = True
347
 
                rev = self.previous_rev(rev)
 
364
                rev = self._previous_rev(rev, pool=subpool)
348
365
 
349
366
 
350
367
class SubversionNode(Node):
455
472
 
456
473
    def get_changes(self):
457
474
        pool = Pool(self.pool)
 
475
        tmp = Pool(pool)
458
476
        root = fs.revision_root(self.fs_ptr, self.rev, pool())
459
477
        editor = repos.RevisionChangeCollector(self.fs_ptr, self.rev, pool())
460
478
        e_ptr, e_baton = delta.make_editor(editor, pool())
465
483
        changes = []
466
484
        revroots = {}
467
485
        for path, change in editor.changes.items():
 
486
            tmp.clear()
468
487
            if not self.authz.has_permission(path):
469
488
                # FIXME: what about base_path?
470
489
                continue
488
507
                else:
489
508
                    b_root = fs.revision_root(self.fs_ptr, b_rev, pool())
490
509
                    revroots[b_rev] = b_root
491
 
                change.base_path = fs.node_created_path(b_root, b_path, pool())
492
 
                change.base_rev = fs.node_created_rev(b_root, b_path, pool())
 
510
                change.base_path = fs.node_created_path(b_root, b_path, tmp())
 
511
                change.base_rev = fs.node_created_rev(b_root, b_path, tmp())
493
512
            kind = _kindmap[change.item_kind]
494
513
            path = path[len(self.scope) - 1:]
495
514
            base_path = _scoped_path(self.scope, change.base_path)