##// END OF EJS Templates
localrepo: resolve store and cachevfs in makelocalrepository()...
Gregory Szorc -
r39733:98ca9078 default
parent child Browse files
Show More
@@ -56,7 +56,7 from . import (
56 revsetlang,
56 revsetlang,
57 scmutil,
57 scmutil,
58 sparse,
58 sparse,
59 store,
59 store as storemod,
60 subrepoutil,
60 subrepoutil,
61 tags as tagsmod,
61 tags as tagsmod,
62 transaction,
62 transaction,
@@ -454,6 +454,40 def makelocalrepository(baseui, path, in
454 # At this point, we know we should be capable of opening the repository.
454 # At this point, we know we should be capable of opening the repository.
455 # Now get on with doing that.
455 # Now get on with doing that.
456
456
457 # The "store" part of the repository holds versioned data. How it is
458 # accessed is determined by various requirements. The ``shared`` or
459 # ``relshared`` requirements indicate the store lives in the path contained
460 # in the ``.hg/sharedpath`` file. This is an absolute path for
461 # ``shared`` and relative to ``.hg/`` for ``relshared``.
462 if b'shared' in requirements or b'relshared' in requirements:
463 sharedpath = hgvfs.read(b'sharedpath').rstrip(b'\n')
464 if b'relshared' in requirements:
465 sharedpath = hgvfs.join(sharedpath)
466
467 sharedvfs = vfsmod.vfs(sharedpath, realpath=True)
468
469 if not sharedvfs.exists():
470 raise error.RepoError(_(b'.hg/sharedpath points to nonexistent '
471 b'directory %s') % sharedvfs.base)
472
473 storebasepath = sharedvfs.base
474 cachepath = sharedvfs.join(b'cache')
475 else:
476 storebasepath = hgvfs.base
477 cachepath = hgvfs.join(b'cache')
478
479 # The store has changed over time and the exact layout is dictated by
480 # requirements. The store interface abstracts differences across all
481 # of them.
482 store = storemod.store(requirements, storebasepath,
483 lambda base: vfsmod.vfs(base, cacheaudited=True))
484
485 hgvfs.createmode = store.createmode
486
487 # The cache vfs is used to manage cache files.
488 cachevfs = vfsmod.vfs(cachepath, cacheaudited=True)
489 cachevfs.createmode = store.createmode
490
457 return localrepository(
491 return localrepository(
458 baseui=baseui,
492 baseui=baseui,
459 ui=ui,
493 ui=ui,
@@ -462,6 +496,9 def makelocalrepository(baseui, path, in
462 hgvfs=hgvfs,
496 hgvfs=hgvfs,
463 requirements=requirements,
497 requirements=requirements,
464 supportedrequirements=supportedrequirements,
498 supportedrequirements=supportedrequirements,
499 sharedpath=storebasepath,
500 store=store,
501 cachevfs=cachevfs,
465 intents=intents)
502 intents=intents)
466
503
467 def gathersupportedrequirements(ui):
504 def gathersupportedrequirements(ui):
@@ -581,7 +618,8 class localrepository(object):
581 }
618 }
582
619
583 def __init__(self, baseui, ui, origroot, wdirvfs, hgvfs, requirements,
620 def __init__(self, baseui, ui, origroot, wdirvfs, hgvfs, requirements,
584 supportedrequirements, intents=None):
621 supportedrequirements, sharedpath, store, cachevfs,
622 intents=None):
585 """Create a new local repository instance.
623 """Create a new local repository instance.
586
624
587 Most callers should use ``hg.repository()``, ``localrepo.instance()``,
625 Most callers should use ``hg.repository()``, ``localrepo.instance()``,
@@ -612,6 +650,17 class localrepository(object):
612 ``set`` of bytestrings representing repository requirements that we
650 ``set`` of bytestrings representing repository requirements that we
613 know how to open. May be a supetset of ``requirements``.
651 know how to open. May be a supetset of ``requirements``.
614
652
653 sharedpath
654 ``bytes`` Defining path to storage base directory. Points to a
655 ``.hg/`` directory somewhere.
656
657 store
658 ``store.basicstore`` (or derived) instance providing access to
659 versioned storage.
660
661 cachevfs
662 ``vfs.vfs`` used for cache files.
663
615 intents
664 intents
616 ``set`` of system strings indicating what this repo will be used
665 ``set`` of system strings indicating what this repo will be used
617 for.
666 for.
@@ -627,12 +676,11 class localrepository(object):
627 self.path = hgvfs.base
676 self.path = hgvfs.base
628 self.requirements = requirements
677 self.requirements = requirements
629 self.supported = supportedrequirements
678 self.supported = supportedrequirements
679 self.sharedpath = sharedpath
680 self.store = store
681 self.cachevfs = cachevfs
630
682
631 self.filtername = None
683 self.filtername = None
632 # svfs: usually rooted at .hg/store, used to access repository history
633 # If this is a shared repository, this vfs may point to another
634 # repository's .hg/store directory.
635 self.svfs = None
636
684
637 if (self.ui.configbool('devel', 'all-warnings') or
685 if (self.ui.configbool('devel', 'all-warnings') or
638 self.ui.configbool('devel', 'check-locks')):
686 self.ui.configbool('devel', 'check-locks')):
@@ -644,32 +692,9 class localrepository(object):
644
692
645 color.setup(self.ui)
693 color.setup(self.ui)
646
694
647 cachepath = self.vfs.join('cache')
648 self.sharedpath = self.path
649 try:
650 sharedpath = self.vfs.read("sharedpath").rstrip('\n')
651 if 'relshared' in self.requirements:
652 sharedpath = self.vfs.join(sharedpath)
653 vfs = vfsmod.vfs(sharedpath, realpath=True)
654 cachepath = vfs.join('cache')
655 s = vfs.base
656 if not vfs.exists():
657 raise error.RepoError(
658 _('.hg/sharedpath points to nonexistent directory %s') % s)
659 self.sharedpath = s
660 except IOError as inst:
661 if inst.errno != errno.ENOENT:
662 raise
663
664 self.store = store.store(
665 self.requirements, self.sharedpath,
666 lambda base: vfsmod.vfs(base, cacheaudited=True))
667 self.spath = self.store.path
695 self.spath = self.store.path
668 self.svfs = self.store.vfs
696 self.svfs = self.store.vfs
669 self.sjoin = self.store.join
697 self.sjoin = self.store.join
670 self.vfs.createmode = self.store.createmode
671 self.cachevfs = vfsmod.vfs(cachepath, cacheaudited=True)
672 self.cachevfs.createmode = self.store.createmode
673 if (self.ui.configbool('devel', 'all-warnings') or
698 if (self.ui.configbool('devel', 'all-warnings') or
674 self.ui.configbool('devel', 'check-locks')):
699 self.ui.configbool('devel', 'check-locks')):
675 if util.safehasattr(self.svfs, 'vfs'): # this is filtervfs
700 if util.safehasattr(self.svfs, 'vfs'): # this is filtervfs
General Comments 0
You need to be logged in to leave comments. Login now