annotate hgext/git/dirstate.py @ 51929:93d872a06132

typing: add type annotations to the dirstate classes The basic procedure here was to use `merge-pyi` to merge the `git/dirstate.pyi` file in (after renaming the interface class to match), cleaning up the import statement mess, and then repeating the procedure for `mercurial/dirstate.pyi`. Surprisingly, git's dirstate had more hints inferred in its *.pyi file. After that, it was a manual examination of each method in the interface, and how they were implemented in the core and git classes to verify what was inferred by pytype, and fill in the missing gaps. Since this involved jumping around between three different files, I applied the same type info to all three at the same time. Complex types I rolled up into type aliases in the interface module, and used that as needed. That way if it changes, there's one place to edit. There are some hints still missing, and some documentation that doesn't match the signatures. They should all be marked with TODOs. There are also a bunch of methods on the core class that aren't on the Protocol class that seem like maybe they should be (like `set_tracked()`). There are even more methods missing from the git class. But that's a project for another time.
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 27 Sep 2024 12:30:37 -0400
parents e99c007030da
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51863
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51273
diff changeset
1 from __future__ import annotations
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51273
diff changeset
2
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
3 import contextlib
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
4 import os
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
5
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
6 from typing import (
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
7 Any,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
8 Dict,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
9 Iterable,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
10 Iterator,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
11 List,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
12 Optional,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
13 Tuple,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
14 )
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
15
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
16 from mercurial.node import sha1nodeconstants
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
17 from mercurial import (
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
18 dirstatemap,
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
19 error,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
20 extensions,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
21 match as matchmod,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
22 pycompat,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
23 scmutil,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
24 util,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
25 )
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
26 from mercurial.dirstateutils import (
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
27 timestamp,
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
28 )
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
29 from mercurial.interfaces import (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
30 dirstate as intdirstate,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
31 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
32
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
33 from . import gitutil
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
34
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
35
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
36 DirstateItem = dirstatemap.DirstateItem
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
37 propertycache = util.propertycache
44484
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
38 pygit2 = gitutil.get_pygit2()
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
39
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
40
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
41 def readpatternfile(orig, filepath, warn, sourceinfo=False):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
42 if not (b'info/exclude' in filepath or filepath.endswith(b'.gitignore')):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
43 return orig(filepath, warn, sourceinfo=False)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
44 result = []
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
45 warnings = []
49078
020328be00cb git: un-byteify the `mode` argument for the builtin `open()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49077
diff changeset
46 with open(filepath, 'rb') as fp:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
47 for l in fp:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
48 l = l.strip()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
49 if not l or l.startswith(b'#'):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
50 continue
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
51 if l.startswith(b'!'):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
52 warnings.append(b'unsupported ignore pattern %s' % l)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
53 continue
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
54 if l.startswith(b'/'):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
55 result.append(b'rootglob:' + l[1:])
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
56 else:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
57 result.append(b'relglob:' + l)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
58 return result, warnings
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
59
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
60
50779
39eb3aab3e63 wrapfunction: use sysstr instead of bytes as argument in the "git" extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50256
diff changeset
61 extensions.wrapfunction(matchmod, 'readpatternfile', readpatternfile)
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
62
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
63
44484
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
64 _STATUS_MAP = {}
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
65 if pygit2:
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
66 _STATUS_MAP = {
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
67 pygit2.GIT_STATUS_CONFLICTED: b'm',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
68 pygit2.GIT_STATUS_CURRENT: b'n',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
69 pygit2.GIT_STATUS_IGNORED: b'?',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
70 pygit2.GIT_STATUS_INDEX_DELETED: b'r',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
71 pygit2.GIT_STATUS_INDEX_MODIFIED: b'n',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
72 pygit2.GIT_STATUS_INDEX_NEW: b'a',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
73 pygit2.GIT_STATUS_INDEX_RENAMED: b'a',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
74 pygit2.GIT_STATUS_INDEX_TYPECHANGE: b'n',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
75 pygit2.GIT_STATUS_WT_DELETED: b'r',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
76 pygit2.GIT_STATUS_WT_MODIFIED: b'n',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
77 pygit2.GIT_STATUS_WT_NEW: b'?',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
78 pygit2.GIT_STATUS_WT_RENAMED: b'a',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
79 pygit2.GIT_STATUS_WT_TYPECHANGE: b'n',
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
80 pygit2.GIT_STATUS_WT_UNREADABLE: b'?',
47054
9cea55ca1175 git: ensure all dirstate state values are bytes
Matt Harbison <matt_harbison@yahoo.com>
parents: 46113
diff changeset
81 pygit2.GIT_STATUS_INDEX_MODIFIED | pygit2.GIT_STATUS_WT_MODIFIED: b'm',
44484
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
82 }
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
83
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
84
51925
3a90a6fd710d dirstate: subclass the new dirstate Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
85 class gitdirstate(intdirstate.idirstate):
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
86 def __init__(self, ui, vfs, gitrepo, use_dirstate_v2):
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
87 self._ui = ui
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
88 self._root = os.path.dirname(vfs.base)
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
89 self._opener = vfs
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
90 self.git = gitrepo
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
91 self._plchangecallbacks = {}
47772
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
92 # TODO: context.poststatusfixup is bad and uses this attribute
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
93 self._dirty = False
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
94 self._mapcls = dirstatemap.dirstatemap
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
95 self._use_dirstate_v2 = use_dirstate_v2
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
96
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
97 @propertycache
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
98 def _map(self):
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
99 """Return the dirstate contents (see documentation for dirstatemap)."""
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
100 self._map = self._mapcls(
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
101 self._ui,
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
102 self._opener,
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
103 self._root,
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
104 sha1nodeconstants,
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
105 self._use_dirstate_v2,
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
106 )
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
107 return self._map
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
108
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
109 def p1(self) -> bytes:
44492
eb061d272af4 git: correctly handle p1() on dirstate when underlying git repo is empty
Augie Fackler <raf@durin42.com>
parents: 44484
diff changeset
110 try:
eb061d272af4 git: correctly handle p1() on dirstate when underlying git repo is empty
Augie Fackler <raf@durin42.com>
parents: 44484
diff changeset
111 return self.git.head.peel().id.raw
eb061d272af4 git: correctly handle p1() on dirstate when underlying git repo is empty
Augie Fackler <raf@durin42.com>
parents: 44484
diff changeset
112 except pygit2.GitError:
eb061d272af4 git: correctly handle p1() on dirstate when underlying git repo is empty
Augie Fackler <raf@durin42.com>
parents: 44484
diff changeset
113 # Typically happens when peeling HEAD fails, as in an
eb061d272af4 git: correctly handle p1() on dirstate when underlying git repo is empty
Augie Fackler <raf@durin42.com>
parents: 44484
diff changeset
114 # empty repository.
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
115 return sha1nodeconstants.nullid
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
116
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
117 def p2(self) -> bytes:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
118 # TODO: MERGE_HEAD? something like that, right?
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
119 return sha1nodeconstants.nullid
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
120
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
121 def setparents(self, p1: bytes, p2: Optional[bytes] = None):
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
122 if p2 is None:
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
123 p2 = sha1nodeconstants.nullid
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
124 assert p2 == sha1nodeconstants.nullid, b'TODO merging support'
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
125 self.git.head.set_target(gitutil.togitnode(p1))
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
126
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
127 @util.propertycache
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
128 def identity(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
129 return util.filestat.frompath(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
130 os.path.join(self._root, b'.git', b'index')
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
131 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
132
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
133 def branch(self) -> bytes:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
134 return b'default'
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
135
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
136 def parents(self) -> List[bytes]:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
137 # TODO how on earth do we find p2 if a merge is in flight?
51927
e99c007030da git: make `dirstate.parents()` return a list like the core class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51925
diff changeset
138 return [self.p1(), sha1nodeconstants.nullid]
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
139
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
140 def __iter__(self) -> Iterator[bytes]:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
141 return (pycompat.fsencode(f.path) for f in self.git.index)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
142
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
143 def items(self) -> Iterator[Tuple[bytes, intdirstate.DirstateItemT]]:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
144 for ie in self.git.index:
47539
84391ddf4c78 dirstate-item: rename the class to DirstateItem
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47057
diff changeset
145 yield ie.path, None # value should be a DirstateItem
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
146
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
147 # py2,3 compat forward
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
148 iteritems = items
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
149
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
150 def __getitem__(self, filename):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
151 try:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
152 gs = self.git.status_file(filename)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
153 except KeyError:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
154 return b'?'
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
155 return _STATUS_MAP[gs]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
156
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
157 def __contains__(self, filename: Any) -> bool:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
158 try:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
159 gs = self.git.status_file(filename)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
160 return _STATUS_MAP[gs] != b'?'
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
161 except KeyError:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
162 return False
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
163
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
164 def status(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
165 self,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
166 match: matchmod.basematcher,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
167 subrepos: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
168 ignored: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
169 clean: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
170 unknown: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
171 ) -> intdirstate.StatusReturnT:
45431
7a57ced7de87 git: remove unrequired assignment of listignored and listunknown
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45423
diff changeset
172 listclean = clean
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
173 # TODO handling of clean files - can we get that from git.status()?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
174 modified, added, removed, deleted, unknown, ignored, clean = (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
175 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
176 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
177 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
178 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
179 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
180 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
181 [],
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
182 )
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
183
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
184 try:
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
185 mtime_boundary = timestamp.get_fs_now(self._opener)
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
186 except OSError:
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
187 # In largefiles or readonly context
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
188 mtime_boundary = None
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
189
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
190 gstatus = self.git.status()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
191 for path, status in gstatus.items():
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
192 path = pycompat.fsencode(path)
45421
0c6b2cc9a7bb git: make dirstate status() respect matcher
Augie Fackler <raf@durin42.com>
parents: 45420
diff changeset
193 if not match(path):
0c6b2cc9a7bb git: make dirstate status() respect matcher
Augie Fackler <raf@durin42.com>
parents: 45420
diff changeset
194 continue
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
195 if status == pygit2.GIT_STATUS_IGNORED:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
196 if path.endswith(b'/'):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
197 continue
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
198 ignored.append(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
199 elif status in (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
200 pygit2.GIT_STATUS_WT_MODIFIED,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
201 pygit2.GIT_STATUS_INDEX_MODIFIED,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
202 pygit2.GIT_STATUS_WT_MODIFIED
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
203 | pygit2.GIT_STATUS_INDEX_MODIFIED,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
204 ):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
205 modified.append(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
206 elif status == pygit2.GIT_STATUS_INDEX_NEW:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
207 added.append(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
208 elif status == pygit2.GIT_STATUS_WT_NEW:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
209 unknown.append(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
210 elif status == pygit2.GIT_STATUS_WT_DELETED:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
211 deleted.append(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
212 elif status == pygit2.GIT_STATUS_INDEX_DELETED:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
213 removed.append(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
214 else:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
215 raise error.Abort(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
216 b'unhandled case: status for %r is %r' % (path, status)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
217 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
218
45422
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
219 if listclean:
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
220 observed = set(
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
221 modified + added + removed + deleted + unknown + ignored
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
222 )
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
223 index = self.git.index
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
224 index.read()
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
225 for entry in index:
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
226 path = pycompat.fsencode(entry.path)
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
227 if not match(path):
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
228 continue
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
229 if path in observed:
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
230 continue # already in some other set
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
231 if path[-1] == b'/':
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
232 continue # directory
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
233 clean.append(path)
601e3658216d git: make dirstate actually support listclean parameter
Augie Fackler <raf@durin42.com>
parents: 45421
diff changeset
234
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
235 # TODO are we really always sure of status here?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
236 return (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
237 False,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
238 scmutil.status(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
239 modified, added, removed, deleted, unknown, ignored, clean
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
240 ),
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
241 mtime_boundary,
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
242 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
243
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
244 def flagfunc(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
245 self, buildfallback: intdirstate.FlagFuncFallbackT
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
246 ) -> intdirstate.FlagFuncReturnT:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
247 # TODO we can do better
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
248 return buildfallback()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
249
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
250 def getcwd(self) -> bytes:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
251 # TODO is this a good way to do this?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
252 return os.path.dirname(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
253 os.path.dirname(pycompat.fsencode(self.git.path))
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
254 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
255
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
256 def get_entry(self, path: bytes) -> intdirstate.DirstateItemT:
49077
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
257 """return a DirstateItem for the associated path"""
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
258 entry = self._map.get(path)
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
259 if entry is None:
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
260 return DirstateItem()
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
261 return entry
20d151e43429 git: adapt to some recent dirstate API changes
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
262
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
263 def normalize(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
264 self, path: bytes, isknown: bool = False, ignoremissing: bool = False
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
265 ) -> bytes:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
266 normed = util.normcase(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
267 assert normed == path, b"TODO handling of case folding: %s != %s" % (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
268 normed,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
269 path,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
270 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
271 return path
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
272
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
273 @property
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
274 def _checklink(self) -> bool:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
275 return util.checklink(os.path.dirname(pycompat.fsencode(self.git.path)))
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
276
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
277 def copies(self) -> Dict[bytes, bytes]:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
278 # TODO support copies?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
279 return {}
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
280
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
281 # # TODO what the heck is this
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
282 _filecache = set()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
283
51924
51be8bf8c986 git: correct some signature mismatches between dirstate and the Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51863
diff changeset
284 @property
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
285 def is_changing_parents(self) -> bool:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
286 # TODO: we need to implement the context manager bits and
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
287 # correctly stage/revert index edits.
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
288 return False
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
289
51924
51be8bf8c986 git: correct some signature mismatches between dirstate and the Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51863
diff changeset
290 @property
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
291 def is_changing_any(self) -> bool:
50023
e1cff85484e2 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
292 # TODO: we need to implement the context manager bits and
e1cff85484e2 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
293 # correctly stage/revert index edits.
e1cff85484e2 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
294 return False
e1cff85484e2 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
295
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
296 def write(self, tr: Optional[intdirstate.TransactionT]) -> None:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
297 # TODO: call parent change callbacks
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
298
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
299 if tr:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
300
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
301 def writeinner(category):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
302 self.git.index.write()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
303
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
304 tr.addpending(b'gitdirstate', writeinner)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
305 else:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
306 self.git.index.write()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
307
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
308 def pathto(self, f: bytes, cwd: Optional[bytes] = None) -> bytes:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
309 if cwd is None:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
310 cwd = self.getcwd()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
311 # TODO core dirstate does something about slashes here
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
312 assert isinstance(f, bytes)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
313 r = util.pathto(self._root, cwd, f)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
314 return r
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
315
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
316 def matches(self, match: matchmod.basematcher) -> Iterable[bytes]:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
317 for x in self.git.index:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
318 p = pycompat.fsencode(x.path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
319 if match(p):
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
320 yield p # TODO: return list instead of yielding?
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
321
48385
080151f18f3a dirstate: make it mandatory to provide parentfiledata in `set_clean`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47772
diff changeset
322 def set_clean(self, f, parentfiledata):
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
323 """Mark a file normal and clean."""
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
324 # TODO: for now we just let libgit2 re-stat the file. We can
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
325 # clearly do better.
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
326
47772
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
327 def set_possibly_dirty(self, f):
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
328 """Mark a file normal, but possibly dirty."""
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
329 # TODO: for now we just let libgit2 re-stat the file. We can
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
330 # clearly do better.
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
331
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
332 def walk(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
333 self,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
334 match: matchmod.basematcher,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
335 subrepos: Any,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
336 unknown: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
337 ignored: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
338 full: bool = True,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
339 ) -> intdirstate.WalkReturnT:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
340 # TODO: we need to use .status() and not iterate the index,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
341 # because the index doesn't force a re-walk and so `hg add` of
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
342 # a new file without an intervening call to status will
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
343 # silently do nothing.
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
344 r = {}
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
345 cwd = self.getcwd()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
346 for path, status in self.git.status().items():
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
347 if path.startswith('.hg/'):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
348 continue
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
349 path = pycompat.fsencode(path)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
350 if not match(path):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
351 continue
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
352 # TODO construct the stat info from the status object?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
353 try:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
354 s = os.stat(os.path.join(cwd, path))
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 49078
diff changeset
355 except FileNotFoundError:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
356 continue
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
357 r[path] = s
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
358 return r
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
359
49385
3c4d36a96a3e git: add a missing reset_copy keyword argument to dirstate.set_tracked()
Anton Shestakov <av6@dwimlabs.net>
parents: 49306
diff changeset
360 def set_tracked(self, f, reset_copy=False):
3c4d36a96a3e git: add a missing reset_copy keyword argument to dirstate.set_tracked()
Anton Shestakov <av6@dwimlabs.net>
parents: 49306
diff changeset
361 # TODO: support copies and reset_copy=True
47772
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
362 uf = pycompat.fsdecode(f)
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
363 if uf in self.git.index:
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
364 return False
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
365 index = self.git.index
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
366 index.read()
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
367 index.add(uf)
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
368 index.write()
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
369 return True
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
370
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
371 def add(self, f):
45420
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
372 index = self.git.index
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
373 index.read()
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
374 index.add(pycompat.fsdecode(f))
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
375 index.write()
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
376
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
377 def drop(self, f):
45420
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
378 index = self.git.index
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
379 index.read()
45423
d4cf80341589 git: fix index handling of removed files during commit (issue6398)
Augie Fackler <raf@durin42.com>
parents: 45422
diff changeset
380 fs = pycompat.fsdecode(f)
d4cf80341589 git: fix index handling of removed files during commit (issue6398)
Augie Fackler <raf@durin42.com>
parents: 45422
diff changeset
381 if fs in index:
d4cf80341589 git: fix index handling of removed files during commit (issue6398)
Augie Fackler <raf@durin42.com>
parents: 45422
diff changeset
382 index.remove(fs)
d4cf80341589 git: fix index handling of removed files during commit (issue6398)
Augie Fackler <raf@durin42.com>
parents: 45422
diff changeset
383 index.write()
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
384
47772
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
385 def set_untracked(self, f):
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
386 index = self.git.index
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
387 index.read()
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
388 fs = pycompat.fsdecode(f)
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
389 if fs in index:
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
390 index.remove(fs)
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
391 index.write()
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
392 return True
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
393 return False
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
394
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
395 def remove(self, f):
45420
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
396 index = self.git.index
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
397 index.read()
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
398 index.remove(pycompat.fsdecode(f))
c67529569643 git: fix up dirstate use of index
Augie Fackler <raf@durin42.com>
parents: 44927
diff changeset
399 index.write()
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
400
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
401 def copied(self, file: bytes) -> Optional[bytes]:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
402 # TODO: track copies?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
403 return None
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
404
44927
472b14da52c2 git: implement stub prefetch_parents dirstate method
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44622
diff changeset
405 def prefetch_parents(self):
472b14da52c2 git: implement stub prefetch_parents dirstate method
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44622
diff changeset
406 # TODO
472b14da52c2 git: implement stub prefetch_parents dirstate method
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44622
diff changeset
407 pass
472b14da52c2 git: implement stub prefetch_parents dirstate method
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44622
diff changeset
408
47772
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
409 def update_file(self, *args, **kwargs):
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
410 # TODO
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
411 pass
0bdcb5ef932c git: restore basic functionality (issue6545)
Augie Fackler <augie@google.com>
parents: 47539
diff changeset
412
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
413 @contextlib.contextmanager
49961
7a8bfc05b691 dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
414 def changing_parents(self, repo):
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
415 # TODO: track this maybe?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
416 yield
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
417
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
418 def addparentchangecallback(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
419 self, category: bytes, callback: intdirstate.AddParentChangeCallbackT
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
420 ) -> None:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
421 # TODO: should this be added to the dirstate interface?
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
422 self._plchangecallbacks[category] = callback
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
423
51929
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
424 def setbranch(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
425 self, branch: bytes, transaction: Optional[intdirstate.TransactionT]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51927
diff changeset
426 ) -> None:
44622
7bbb83e4e8de git: abort when attempting to set a branch
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44492
diff changeset
427 raise error.Abort(
7bbb83e4e8de git: abort when attempting to set a branch
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44492
diff changeset
428 b'git repos do not support branches. try using bookmarks'
7bbb83e4e8de git: abort when attempting to set a branch
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 44492
diff changeset
429 )