hgext/git/__init__.py
changeset 44992 83e41b73d115
parent 44628 7cab8dbd0497
child 45430 6739ef7c5fcf
equal deleted inserted replaced
44991:f9734b2d59cc 44992:83e41b73d115
    14     commands,
    14     commands,
    15     error,
    15     error,
    16     extensions,
    16     extensions,
    17     localrepo,
    17     localrepo,
    18     pycompat,
    18     pycompat,
       
    19     registrar,
    19     scmutil,
    20     scmutil,
    20     store,
    21     store,
    21     util,
    22     util,
    22 )
    23 )
    23 
    24 
    24 from . import (
    25 from . import (
    25     dirstate,
    26     dirstate,
    26     gitlog,
    27     gitlog,
    27     gitutil,
    28     gitutil,
    28     index,
    29     index,
       
    30 )
       
    31 
       
    32 configtable = {}
       
    33 configitem = registrar.configitem(configtable)
       
    34 # git.log-index-cache-miss: internal knob for testing
       
    35 configitem(
       
    36     b"git", b"log-index-cache-miss", default=False,
    29 )
    37 )
    30 
    38 
    31 # TODO: extract an interface for this in core
    39 # TODO: extract an interface for this in core
    32 class gitstore(object):  # store.basicstore):
    40 class gitstore(object):  # store.basicstore):
    33     def __init__(self, path, vfstype):
    41     def __init__(self, path, vfstype):
    39 
    47 
    40         self.git = gitutil.get_pygit2().Repository(
    48         self.git = gitutil.get_pygit2().Repository(
    41             os.path.normpath(os.path.join(path, b'..', b'.git'))
    49             os.path.normpath(os.path.join(path, b'..', b'.git'))
    42         )
    50         )
    43         self._progress_factory = lambda *args, **kwargs: None
    51         self._progress_factory = lambda *args, **kwargs: None
       
    52         self._logfn = lambda x: None
    44 
    53 
    45     @util.propertycache
    54     @util.propertycache
    46     def _db(self):
    55     def _db(self):
    47         # We lazy-create the database because we want to thread a
    56         # We lazy-create the database because we want to thread a
    48         # progress callback down to the indexing process if it's
    57         # progress callback down to the indexing process if it's
    49         # required, and we don't have a ui handle in makestore().
    58         # required, and we don't have a ui handle in makestore().
    50         return index.get_index(self.git, self._progress_factory)
    59         return index.get_index(self.git, self._logfn, self._progress_factory)
    51 
    60 
    52     def join(self, f):
    61     def join(self, f):
    53         """Fake store.join method for git repositories.
    62         """Fake store.join method for git repositories.
    54 
    63 
    55         For the most part, store.join is used for @storecache
    64         For the most part, store.join is used for @storecache
   274 
   283 
   275 def reposetup(ui, repo):
   284 def reposetup(ui, repo):
   276     if repo.local() and isinstance(repo.store, gitstore):
   285     if repo.local() and isinstance(repo.store, gitstore):
   277         orig = repo.__class__
   286         orig = repo.__class__
   278         repo.store._progress_factory = repo.ui.makeprogress
   287         repo.store._progress_factory = repo.ui.makeprogress
       
   288         if ui.configbool(b'git', b'log-index-cache-miss'):
       
   289             repo.store._logfn = repo.ui.warn
   279 
   290 
   280         class gitlocalrepo(orig):
   291         class gitlocalrepo(orig):
   281             def _makedirstate(self):
   292             def _makedirstate(self):
   282                 # TODO narrow support here
   293                 # TODO narrow support here
   283                 return dirstate.gitdirstate(
   294                 return dirstate.gitdirstate(