equal
deleted
inserted
replaced
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( |