13 import os, revlog, time, util |
13 import os, revlog, time, util |
14 |
14 |
15 class localrepository(repo.repository): |
15 class localrepository(repo.repository): |
16 capabilities = ('lookup', 'changegroupsubset') |
16 capabilities = ('lookup', 'changegroupsubset') |
17 supported = ('revlogv1', 'store') |
17 supported = ('revlogv1', 'store') |
18 branchcache_features = ('unnamed',) |
|
19 |
18 |
20 def __del__(self): |
19 def __del__(self): |
21 self.transhandle = None |
20 self.transhandle = None |
22 def __init__(self, parentui, path=None, create=0): |
21 def __init__(self, parentui, path=None, create=0): |
23 repo.repository.__init__(self) |
22 repo.repository.__init__(self) |
393 return self.branchcache |
392 return self.branchcache |
394 |
393 |
395 def _readbranchcache(self): |
394 def _readbranchcache(self): |
396 partial = {} |
395 partial = {} |
397 try: |
396 try: |
398 f = self.opener("branches.cache") |
397 f = self.opener("branch.cache") |
399 lines = f.read().split('\n') |
398 lines = f.read().split('\n') |
400 f.close() |
399 f.close() |
401 features = lines.pop(0).strip() |
|
402 if not features.startswith('features: '): |
|
403 raise ValueError(_('branch cache: no features specified')) |
|
404 features = features.split(' ', 1)[1].split() |
|
405 missing_features = [] |
|
406 for feature in self.branchcache_features: |
|
407 try: |
|
408 features.remove(feature) |
|
409 except ValueError, inst: |
|
410 missing_features.append(feature) |
|
411 if missing_features: |
|
412 raise ValueError(_('branch cache: missing features: %s') |
|
413 % ', '.join(missing_features)) |
|
414 if features: |
|
415 raise ValueError(_('branch cache: unknown features: %s') |
|
416 % ', '.join(features)) |
|
417 last, lrev = lines.pop(0).split(" ", 1) |
400 last, lrev = lines.pop(0).split(" ", 1) |
418 last, lrev = bin(last), int(lrev) |
401 last, lrev = bin(last), int(lrev) |
419 if not (lrev < self.changelog.count() and |
402 if not (lrev < self.changelog.count() and |
420 self.changelog.node(lrev) == last): # sanity check |
403 self.changelog.node(lrev) == last): # sanity check |
421 # invalidate the cache |
404 # invalidate the cache |
432 partial, last, lrev = {}, nullid, nullrev |
415 partial, last, lrev = {}, nullid, nullrev |
433 return partial, last, lrev |
416 return partial, last, lrev |
434 |
417 |
435 def _writebranchcache(self, branches, tip, tiprev): |
418 def _writebranchcache(self, branches, tip, tiprev): |
436 try: |
419 try: |
437 f = self.opener("branches.cache", "w") |
420 f = self.opener("branch.cache", "w") |
438 f.write(" features: %s\n" % ' '.join(self.branchcache_features)) |
|
439 f.write("%s %s\n" % (hex(tip), tiprev)) |
421 f.write("%s %s\n" % (hex(tip), tiprev)) |
440 for label, node in branches.iteritems(): |
422 for label, node in branches.iteritems(): |
441 f.write("%s %s\n" % (hex(node), label)) |
423 f.write("%s %s\n" % (hex(node), label)) |
442 except IOError: |
424 except IOError: |
443 pass |
425 pass |
757 raise util.Abort(_('branch name not in UTF-8!')) |
739 raise util.Abort(_('branch name not in UTF-8!')) |
758 else: |
740 else: |
759 branchname = "" |
741 branchname = "" |
760 |
742 |
761 if use_dirstate: |
743 if use_dirstate: |
762 oldname = c1[5].get("branch", "") # stored in UTF-8 |
744 oldname = c1[5].get("branch") # stored in UTF-8 |
763 if not commit and not remove and not force and p2 == nullid and \ |
745 if not commit and not remove and not force and p2 == nullid and \ |
764 branchname == oldname: |
746 branchname == oldname: |
765 self.ui.status(_("nothing changed\n")) |
747 self.ui.status(_("nothing changed\n")) |
766 return None |
748 return None |
767 |
749 |