Mercurial > public > mercurial-scm > hg
annotate hgext/git/gitlog.py @ 52644:e627cc25b6f3
pyupgrade: rewrite `yield` statements in a loop to `yield from`
This is the `legacy` fixer in `pyupgrade`, with the `yield` statement yielding
loop commented back in. This seems to help pytype in some cases, and hurt it in
others. But that can be manually fixed later.
Note that it's possibly buggy in that it aggressively changed `import-checker.py`
to `yield from 'fcntl', 'grp', 'pwd', 'select', 'termios': # Unix only`, which
is invalid syntax. Possibly it needed help from the token fixer that I've
disabled locally (because that wants to make a bunch of unrelated changes).
Just change those few places to yield from a list, to avoid having to constantly
revert that.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 05 Jan 2025 22:26:16 -0500 |
parents | 5cc8deb96b48 |
children | b61115f5d216 |
rev | line source |
---|---|
51859
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51301
diff
changeset
|
1 from __future__ import annotations |
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51301
diff
changeset
|
2 |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52444
diff
changeset
|
3 from typing import ( |
52617
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
4 Iterable, |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52444
diff
changeset
|
5 Iterator, |
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52444
diff
changeset
|
6 ) |
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52444
diff
changeset
|
7 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 from mercurial.i18n import _ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
10 from mercurial.node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
11 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
12 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
13 nullrev, |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
14 sha1nodeconstants, |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
15 ) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 from mercurial import ( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
17 ancestor, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 changelog as hgchangelog, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 dagop, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 encoding, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 error, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 manifest, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
23 pycompat, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
24 ) |
52489
ba8f03ad8906
filelog: subclass the new `repository.ifilestorage` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52487
diff
changeset
|
25 from mercurial.interfaces import ( |
ba8f03ad8906
filelog: subclass the new `repository.ifilestorage` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52487
diff
changeset
|
26 repository, |
ba8f03ad8906
filelog: subclass the new `repository.ifilestorage` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52487
diff
changeset
|
27 ) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
28 from mercurial.utils import stringutil |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
29 from . import ( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
30 gitutil, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
31 index, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
32 manifest as gitmanifest, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
33 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
34 |
44484
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44481
diff
changeset
|
35 pygit2 = gitutil.get_pygit2() |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44481
diff
changeset
|
36 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
38 class baselog: # revlog.revlog): |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
39 """Common implementations between changelog and manifestlog.""" |
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 __init__(self, gr, db): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 self.gitrepo = gr |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
43 self._db = db |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
44 |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52444
diff
changeset
|
45 def __len__(self) -> int: |
52628
3865451a5fab
git: cache the number of commits to speed up large repo operations
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52627
diff
changeset
|
46 return int(self._db.execute('SELECT ncommits FROM cache').fetchone()[0]) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 |
52617
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
48 def files(self): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
49 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
50 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
51 def storageinfo( |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
52 self, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
53 exclusivefiles=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
54 sharedfiles=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
55 revisionscount=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
56 trackedsize=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
57 storedsize=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
58 ): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
59 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
60 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
61 def verifyintegrity(self, state) -> Iterable[repository.iverifyproblem]: |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
62 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
63 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
64 def revs(self, start=0, stop=None): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
65 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
66 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
67 def addgroup( |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
68 self, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
69 deltas, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
70 linkmapper, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
71 transaction, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
72 addrevisioncb=None, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
73 duplicaterevisioncb=None, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
74 ): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
75 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
76 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
77 def commonancestorsheads(self, node1, node2): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
78 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
79 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
80 def descendants(self, revs): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
81 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
82 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
83 def heads(self, start=None, stop=None): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
84 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
85 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
86 def children(self, node): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
87 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
88 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
89 def emitrevisions( |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
90 self, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
91 nodes, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
92 nodesorder=None, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
93 revisiondata=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
94 assumehaveparentrevisions=False, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
95 ): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
96 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
97 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
98 def getstrippoint(self, minlink): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
99 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
100 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
101 def iscensored(self, rev): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
102 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
103 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
104 def parentrevs(self, rev): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
105 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
106 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
107 def rawdata(self, node): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
108 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
109 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
110 def revision(self, node): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
111 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
112 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
113 def size(self, rev): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
114 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
115 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
116 def strip(self, minlink, transaction): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
117 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
118 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
119 def addrevision( |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
120 self, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
121 revisiondata, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
122 transaction, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
123 linkrev, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
124 p1, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
125 p2, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
126 node=None, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
127 flags=0, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
128 cachedelta=None, |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
129 ): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
130 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
131 |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
132 def censorrevision(self, tr, node, tombstone=b''): |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
133 raise NotImplementedError |
a26c5da900ff
git: add stubs for filelog methods
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52489
diff
changeset
|
134 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
135 def rev(self, n): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
136 if n == sha1nodeconstants.nullid: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
137 return -1 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
138 t = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
139 'SELECT rev FROM changelog WHERE node = ?', (gitutil.togitnode(n),) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
140 ).fetchone() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
141 if t is None: |
52629
7d2fc79a3e5a
git: consistify & fix LookupError messages
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52628
diff
changeset
|
142 raise error.LookupError(n, b'00changelog.i', _(b'no node')) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
143 return t[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
144 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
145 def node(self, r): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
146 if r == nullrev: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
147 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
|
148 t = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
149 'SELECT node FROM changelog WHERE rev = ?', (r,) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
150 ).fetchone() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
151 if t is None: |
52629
7d2fc79a3e5a
git: consistify & fix LookupError messages
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52628
diff
changeset
|
152 raise error.LookupError(r, b'00changelog.i', _(b'no rev')) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
153 return bin(t[0]) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
154 |
52624
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
155 def synthetic(self, n): |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
156 """Map any node to a non-synthetic node. |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
157 |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
158 Indexing may have created synthetic nodes to handle octopus merges. |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
159 Certain operations on these made up nodes need to actually happen on |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
160 the real octopus merge commit. Given any node, this function |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
161 returns the real commit hash. One can think of this as hg-to-git |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
162 commit hash translation that always works.""" |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
163 t = self._db.execute( |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
164 'SELECT synthetic FROM changelog WHERE node = ?', |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
165 (gitutil.togitnode(n),), |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
166 ).fetchone() |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
167 if t is None or t[0] is None: |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
168 return n |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
169 return bin(t[0]) |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
170 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
171 def hasnode(self, n): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
172 t = self._db.execute( |
47050
ce24a00fe7f0
git: pass the correct type to the sqlite3 query for baselog.hasnode()
Matt Harbison <matt_harbison@yahoo.com>
parents:
47049
diff
changeset
|
173 'SELECT node FROM changelog WHERE node = ?', |
52633
86920d1f7632
git: hexdump node when passing it to sqlite in baselog.hasnode
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52632
diff
changeset
|
174 (gitutil.togitnode(n),), |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
175 ).fetchone() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
176 return t is not None |
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 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
179 class baselogindex: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
180 def __init__(self, log): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
181 self._log = log |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
182 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
183 def has_node(self, n): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
184 return self._log.rev(n) != -1 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
185 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
186 def __len__(self): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
187 return len(self._log) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
188 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
189 def __getitem__(self, idx): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
190 p1rev, p2rev = self._log.parentrevs(idx) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
191 # TODO: it's messy that the index leaks so far out of the |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
192 # storage layer that we have to implement things like reading |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
193 # this raw tuple, which exposes revlog internals. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
194 return ( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
195 # Pretend offset is just the index, since we don't really care. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
196 idx, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
197 # Same with lengths |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
198 idx, # length |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
199 idx, # rawsize |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
200 -1, # delta base |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
201 idx, # linkrev TODO is this right? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
202 p1rev, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
203 p2rev, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
204 self._log.node(idx), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
205 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
206 |
52618
143063a94085
git: implement baselogindex.{rev,get_rev}
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52617
diff
changeset
|
207 def rev(self, node): |
143063a94085
git: implement baselogindex.{rev,get_rev}
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52617
diff
changeset
|
208 return self._log.rev(node) |
143063a94085
git: implement baselogindex.{rev,get_rev}
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52617
diff
changeset
|
209 |
143063a94085
git: implement baselogindex.{rev,get_rev}
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52617
diff
changeset
|
210 def get_rev(self, node): |
143063a94085
git: implement baselogindex.{rev,get_rev}
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52617
diff
changeset
|
211 return self._log.get_rev(node) |
143063a94085
git: implement baselogindex.{rev,get_rev}
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52617
diff
changeset
|
212 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
213 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
214 # TODO: an interface for the changelog type? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
215 class changelog(baselog): |
45414
66a10bd1b8db
git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents:
45413
diff
changeset
|
216 # TODO: this appears to be an enumerated type, and should probably |
66a10bd1b8db
git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents:
45413
diff
changeset
|
217 # be part of the public changelog interface |
66a10bd1b8db
git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents:
45413
diff
changeset
|
218 _copiesstorage = b'extra' |
66a10bd1b8db
git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents:
45413
diff
changeset
|
219 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
220 def __contains__(self, rev): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
221 try: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
222 self.node(rev) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
223 return True |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
224 except error.LookupError: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
225 return False |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
226 |
44481
8b5f5d8ad783
gitlog: implement __iter__ on changelog
Augie Fackler <raf@durin42.com>
parents:
44480
diff
changeset
|
227 def __iter__(self): |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
228 return iter(range(len(self))) |
44481
8b5f5d8ad783
gitlog: implement __iter__ on changelog
Augie Fackler <raf@durin42.com>
parents:
44480
diff
changeset
|
229 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
230 @property |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
231 def filteredrevs(self): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
232 # TODO: we should probably add a refs/hg/ namespace for hidden |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
233 # heads etc, but that's an idea for later. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
234 return set() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
235 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
236 @property |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
237 def index(self): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
238 return baselogindex(self) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
239 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
240 @property |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
241 def nodemap(self): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
242 r = { |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
243 bin(v[0]): v[1] |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
244 for v in self._db.execute('SELECT node, rev FROM changelog') |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
245 } |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
246 r[sha1nodeconstants.nullid] = nullrev |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
247 return r |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
248 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
249 def tip(self): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
250 t = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
251 'SELECT node FROM changelog ORDER BY rev DESC LIMIT 1' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
252 ).fetchone() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
253 if t: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
254 return bin(t[0]) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
255 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
|
256 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
257 def revs(self, start=0, stop=None): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
258 if stop is None: |
47049
2a77c817d451
git: use the correct type for stopping changelog.revs()
Matt Harbison <matt_harbison@yahoo.com>
parents:
47048
diff
changeset
|
259 stop = self.tiprev() |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
260 t = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
261 'SELECT rev FROM changelog ' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
262 'WHERE rev >= ? AND rev <= ? ' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
263 'ORDER BY REV ASC', |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
264 (start, stop), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
265 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
266 return (int(r[0]) for r in t) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
267 |
45925
6aacc39501f7
gitlog: add tiprev() function
Augie Fackler <raf@durin42.com>
parents:
45521
diff
changeset
|
268 def tiprev(self): |
6aacc39501f7
gitlog: add tiprev() function
Augie Fackler <raf@durin42.com>
parents:
45521
diff
changeset
|
269 t = self._db.execute( |
45939
66f6ca2b7aee
cleanup: fix a few recent black formatting violations
Matt Harbison <matt_harbison@yahoo.com>
parents:
45925
diff
changeset
|
270 'SELECT rev FROM changelog ' 'ORDER BY REV DESC ' 'LIMIT 1' |
47046
497cedcb6504
git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents:
47045
diff
changeset
|
271 ).fetchone() |
497cedcb6504
git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents:
47045
diff
changeset
|
272 |
497cedcb6504
git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents:
47045
diff
changeset
|
273 if t is not None: |
497cedcb6504
git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents:
47045
diff
changeset
|
274 return t[0] |
497cedcb6504
git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents:
47045
diff
changeset
|
275 return -1 |
45925
6aacc39501f7
gitlog: add tiprev() function
Augie Fackler <raf@durin42.com>
parents:
45521
diff
changeset
|
276 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
277 def _partialmatch(self, id): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
278 if sha1nodeconstants.wdirhex.startswith(id): |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
279 raise error.WdirUnsupported |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
280 candidates = [ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
281 bin(x[0]) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
282 for x in self._db.execute( |
47045
846920d89476
git: fix partial node matching
Matt Harbison <matt_harbison@yahoo.com>
parents:
46795
diff
changeset
|
283 'SELECT node FROM changelog WHERE node LIKE ?', |
846920d89476
git: fix partial node matching
Matt Harbison <matt_harbison@yahoo.com>
parents:
46795
diff
changeset
|
284 (pycompat.sysstr(id + b'%'),), |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
285 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
286 ] |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
287 if sha1nodeconstants.nullhex.startswith(id): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
288 candidates.append(sha1nodeconstants.nullid) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
289 if len(candidates) > 1: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
290 raise error.AmbiguousPrefixLookupError( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
291 id, b'00changelog.i', _(b'ambiguous identifier') |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
292 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
293 if candidates: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
294 return candidates[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
295 return None |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
296 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
297 def flags(self, rev): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
298 return 0 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
299 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
300 def shortest(self, node, minlength=1): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
301 nodehex = hex(node) |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
302 for attempt in range(minlength, len(nodehex) + 1): |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
303 candidate = nodehex[:attempt] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
304 matches = int( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
305 self._db.execute( |
52632
d7368933f4b0
git: switch changelog.shortest from LIKE to GLOB to speed up matching
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52629
diff
changeset
|
306 'SELECT COUNT(*) FROM changelog WHERE node GLOB ?', |
d7368933f4b0
git: switch changelog.shortest from LIKE to GLOB to speed up matching
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52629
diff
changeset
|
307 (pycompat.sysstr(candidate + b'*'),), |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
308 ).fetchone()[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
309 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
310 if matches == 1: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
311 return candidate |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
312 return nodehex |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
313 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
314 def headrevs(self, revs=None): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
315 realheads = [ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
316 int(x[0]) |
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._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
318 'SELECT rev FROM changelog ' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
319 'INNER JOIN heads ON changelog.node = heads.node' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
320 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
321 ] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
322 if revs: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
323 return sorted([r for r in revs if r in realheads]) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
324 return sorted(realheads) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
325 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
326 def changelogrevision(self, nodeorrev): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
327 # Ensure we have a node id |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
328 if isinstance(nodeorrev, int): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
329 n = self.node(nodeorrev) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
330 else: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
331 n = nodeorrev |
47052
f8fa7ec53517
git: initialize `extra` to have at least the branch name for nullid
Matt Harbison <matt_harbison@yahoo.com>
parents:
47050
diff
changeset
|
332 extra = {b'branch': b'default'} |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
333 # handle looking up nullid |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
334 if n == sha1nodeconstants.nullid: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
335 return hgchangelog._changelogrevision( |
47057 | 336 extra=extra, manifest=sha1nodeconstants.nullid |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
337 ) |
52624
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
338 n = self.synthetic(n) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
339 hn = gitutil.togitnode(n) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
340 # We've got a real commit! |
52627
4dadaf300fe0
git: index changed files on-demand
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52624
diff
changeset
|
341 index._index_repo_commit(self.gitrepo, self._db, hn, commit=True) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
342 files = [ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
343 r[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
344 for r in self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
345 'SELECT filename FROM changedfiles ' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
346 'WHERE node = ? and filenode != ?', |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
347 (hn, gitutil.nullgit), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
348 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
349 ] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
350 filesremoved = [ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
351 r[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
352 for r in self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
353 'SELECT filename FROM changedfiles ' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
354 'WHERE node = ? and filenode = ?', |
47048
03c73fc6f89a
git: use the proper filenode for deleted files in changelog.changelogrevision
Matt Harbison <matt_harbison@yahoo.com>
parents:
47046
diff
changeset
|
355 (hn, gitutil.nullgit), |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
356 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
357 ] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
358 c = self.gitrepo[hn] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
359 return hgchangelog._changelogrevision( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
360 manifest=n, # pretend manifest the same as the commit node |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
361 user=b'%s <%s>' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
362 % (c.author.name.encode('utf8'), c.author.email.encode('utf8')), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
363 date=(c.author.time, -c.author.offset * 60), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
364 files=files, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
365 # TODO filesadded in the index |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
366 filesremoved=filesremoved, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
367 description=c.message.encode('utf8'), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
368 # TODO do we want to handle extra? how? |
47052
f8fa7ec53517
git: initialize `extra` to have at least the branch name for nullid
Matt Harbison <matt_harbison@yahoo.com>
parents:
47050
diff
changeset
|
369 extra=extra, |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
370 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
371 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
372 def ancestors(self, revs, stoprev=0, inclusive=False): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
373 revs = list(revs) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
374 tip = self.rev(self.tip()) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
375 for r in revs: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
376 if r > tip: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
377 raise IndexError(b'Invalid rev %r' % r) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
378 return ancestor.lazyancestors( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
379 self.parentrevs, revs, stoprev=stoprev, inclusive=inclusive |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
380 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
381 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
382 # Cleanup opportunity: this is *identical* to the revlog.py version |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
383 def descendants(self, revs): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
384 return dagop.descendantrevs(revs, self.revs, self.parentrevs) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
385 |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
386 def incrementalmissingrevs(self, common=None): |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
387 """Return an object that can be used to incrementally compute the |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
388 revision numbers of the ancestors of arbitrary sets that are not |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
389 ancestors of common. This is an ancestor.incrementalmissingancestors |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
390 object. |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
391 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
392 'common' is a list of revision numbers. If common is not supplied, uses |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
393 nullrev. |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
394 """ |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
395 if common is None: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
396 common = [nullrev] |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
397 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
398 return ancestor.incrementalmissingancestors(self.parentrevs, common) |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
399 |
49386
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
400 def findmissingrevs(self, common=None, heads=None): |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
401 """Return the revision numbers of the ancestors of heads that |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
402 are not ancestors of common. |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
403 |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
404 More specifically, return a list of revision numbers corresponding to |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
405 nodes N such that every N satisfies the following constraints: |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
406 |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
407 1. N is an ancestor of some node in 'heads' |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
408 2. N is not an ancestor of any node in 'common' |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
409 |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
410 The list is sorted by revision number, meaning it is |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
411 topologically sorted. |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
412 |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
413 'heads' and 'common' are both lists of revision numbers. If heads is |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
414 not supplied, uses all of the revlog's heads. If common is not |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
415 supplied, uses nullid.""" |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
416 if common is None: |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
417 common = [nullrev] |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
418 if heads is None: |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
419 heads = self.headrevs() |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
420 |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
421 inc = self.incrementalmissingrevs(common=common) |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
422 return inc.missingancestors(heads) |
1e12ea7d8435
git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents:
49288
diff
changeset
|
423 |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
424 def findmissing(self, common=None, heads=None): |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
425 """Return the ancestors of heads that are not ancestors of common. |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
426 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
427 More specifically, return a list of nodes N such that every N |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
428 satisfies the following constraints: |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
429 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
430 1. N is an ancestor of some node in 'heads' |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
431 2. N is not an ancestor of any node in 'common' |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
432 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
433 The list is sorted by revision number, meaning it is |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
434 topologically sorted. |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
435 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
436 'heads' and 'common' are both lists of node IDs. If heads is |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
437 not supplied, uses all of the revlog's heads. If common is not |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
438 supplied, uses nullid.""" |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
439 if common is None: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
440 common = [sha1nodeconstants.nullid] |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
441 if heads is None: |
51301
d91b55371d6f
git-hgext: adjust to the lack of `changelog.heads` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49386
diff
changeset
|
442 heads = [self.node(r) for r in self.headrevs()] |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
443 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
444 common = [self.rev(n) for n in common] |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
445 heads = [self.rev(n) for n in heads] |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
446 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
447 inc = self.incrementalmissingrevs(common=common) |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
448 return [self.node(r) for r in inc.missingancestors(heads)] |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
449 |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
450 def children(self, node): |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
451 """find the children of a given node""" |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
452 c = [] |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
453 p = self.rev(node) |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
454 for r in self.revs(start=p + 1): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
455 prevs = [pr for pr in self.parentrevs(r) if pr != nullrev] |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
456 if prevs: |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
457 for pr in prevs: |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
458 if pr == p: |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
459 c.append(self.node(r)) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
460 elif p == nullrev: |
44845
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
461 c.append(self.node(r)) |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
462 return c |
3e09d22a0bf5
git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents:
44844
diff
changeset
|
463 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
464 def reachableroots(self, minroot, heads, roots, includepath=False): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
465 return dagop._reachablerootspure( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
466 self.parentrevs, minroot, roots, heads, includepath |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
467 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
468 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
469 # Cleanup opportunity: this is *identical* to the revlog.py version |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
470 def isancestor(self, a, b): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
471 a, b = self.rev(a), self.rev(b) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
472 return self.isancestorrev(a, b) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
473 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
474 # Cleanup opportunity: this is *identical* to the revlog.py version |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
475 def isancestorrev(self, a, b): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
476 if a == nullrev: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
477 return True |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
478 elif a == b: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
479 return True |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
480 elif a > b: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
481 return False |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
482 return bool(self.reachableroots(a, [b], [a], includepath=False)) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
483 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
484 def parentrevs(self, rev): |
52624
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
485 assert rev >= 0, rev |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
486 t = self._db.execute( |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
487 'SELECT p1, p2 FROM changelog WHERE rev = ?', (rev,) |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
488 ).fetchone() |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
489 if t is None: |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
490 raise error.LookupError(rev, b'00changelog.i', _(b'no rev')) |
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
491 return self.rev(bin(t[0])), self.rev(bin(t[1])) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
492 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
493 # Private method is used at least by the tags code. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
494 _uncheckedparentrevs = parentrevs |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
495 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
496 def commonancestorsheads(self, a, b): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
497 # TODO the revlog verson of this has a C path, so we probably |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
498 # need to optimize this... |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
499 a, b = self.rev(a), self.rev(b) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
500 return [ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
501 self.node(n) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
502 for n in ancestor.commonancestorsheads(self.parentrevs, a, b) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
503 ] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
504 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
505 def branchinfo(self, rev): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
506 """Git doesn't do named branches, so just put everything on default.""" |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
507 return b'default', False |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
508 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
509 def delayupdate(self, tr): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
510 # TODO: I think we can elide this because we're just dropping |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
511 # an object in the git repo? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
512 pass |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
513 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
514 def add( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
515 self, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
516 manifest, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
517 files, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
518 desc, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
519 transaction, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
520 p1, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
521 p2, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
522 user, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
523 date=None, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
524 extra=None, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
525 p1copies=None, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
526 p2copies=None, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
527 filesadded=None, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
528 filesremoved=None, |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
529 ): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
530 parents = [] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
531 hp1, hp2 = gitutil.togitnode(p1), gitutil.togitnode(p2) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
532 if 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
|
533 parents.append(hp1) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
534 if p2 and p2 != sha1nodeconstants.nullid: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
535 parents.append(hp2) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
536 assert date is not None |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
537 timestamp, tz = date |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
538 sig = pygit2.Signature( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
539 encoding.unifromlocal(stringutil.person(user)), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
540 encoding.unifromlocal(stringutil.email(user)), |
45521
e7587430ca23
git: also convert timezone to int (issue6359)
Augie Fackler <augie@google.com>
parents:
45414
diff
changeset
|
541 int(timestamp), |
45413
8ddbb75bad09
git: convert tz offset to int (issue6359)
Augie Fackler <raf@durin42.com>
parents:
44951
diff
changeset
|
542 -int(tz // 60), |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
543 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
544 oid = self.gitrepo.create_commit( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
545 None, sig, sig, desc, gitutil.togitnode(manifest), parents |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
546 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
547 # Set up an internal reference to force the commit into the |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
548 # changelog. Hypothetically, we could even use this refs/hg/ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
549 # namespace to allow for anonymous heads on git repos, which |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
550 # would be neat. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
551 self.gitrepo.references.create( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
552 'refs/hg/internal/latest-commit', oid, force=True |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
553 ) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
554 # Reindex now to pick up changes. We omit the progress |
44951
83e41b73d115
git: add debug logging when there's a mismatch in the cached heads list
Augie Fackler <augie@google.com>
parents:
44845
diff
changeset
|
555 # and log callbacks because this will be very quick. |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
556 index._index_repo(self.gitrepo, self._db) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
557 return oid.raw |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
558 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
559 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
560 class manifestlog(baselog): |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
561 nodeconstants = sha1nodeconstants |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
562 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
563 def __getitem__(self, node): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
564 return self.get(b'', node) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
565 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
566 def get(self, relpath, node): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
567 if node == sha1nodeconstants.nullid: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
568 # TODO: this should almost certainly be a memgittreemanifestctx |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
569 return manifest.memtreemanifestctx(self, relpath) |
52624
cdbfe5e7592e
git: handle octopus merges
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52618
diff
changeset
|
570 node = self.synthetic(node) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
571 commit = self.gitrepo[gitutil.togitnode(node)] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
572 t = commit.tree |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
573 if relpath: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
574 parts = relpath.split(b'/') |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
575 for p in parts: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
576 te = t[p] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
577 t = self.gitrepo[te.id] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
578 return gitmanifest.gittreemanifestctx(self.gitrepo, t) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
579 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
580 |
52489
ba8f03ad8906
filelog: subclass the new `repository.ifilestorage` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52487
diff
changeset
|
581 class filelog(baselog, repository.ifilestorage): |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
582 def __init__(self, gr, db, path): |
52643
5cc8deb96b48
pyupgrade: modernize calls to superclass methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
52633
diff
changeset
|
583 super().__init__(gr, db) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
584 assert isinstance(path, bytes) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
585 self.path = path |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
586 self.nullid = sha1nodeconstants.nullid |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
587 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
588 def read(self, node): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46795
diff
changeset
|
589 if node == sha1nodeconstants.nullid: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
590 return b'' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
591 return self.gitrepo[gitutil.togitnode(node)].data |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
592 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
593 def lookup(self, node): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
594 if len(node) not in (20, 40): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
595 node = int(node) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
596 if isinstance(node, int): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
597 assert False, b'todo revnums for nodes' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
598 if len(node) == 40: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
599 node = bin(node) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
600 hnode = gitutil.togitnode(node) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
601 if hnode in self.gitrepo: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
602 return node |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
603 raise error.LookupError(self.path, node, _(b'no match found')) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
604 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
605 def cmp(self, node, text): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
606 """Returns True if text is different than content at `node`.""" |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
607 return self.read(node) != text |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
608 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
609 def add(self, text, meta, transaction, link, p1=None, p2=None): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
610 assert not meta # Should we even try to handle this? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
611 return self.gitrepo.create_blob(text).raw |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
612 |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52444
diff
changeset
|
613 def __iter__(self) -> Iterator[int]: |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
614 for clrev in self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
615 ''' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
616 SELECT rev FROM changelog |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
617 INNER JOIN changedfiles ON changelog.node = changedfiles.node |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
618 WHERE changedfiles.filename = ? AND changedfiles.filenode != ? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
619 ''', |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
620 (pycompat.fsdecode(self.path), gitutil.nullgit), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
621 ): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
622 yield clrev[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
623 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
624 def linkrev(self, fr): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
625 return fr |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
626 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
627 def rev(self, node): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
628 row = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
629 ''' |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
630 SELECT rev FROM changelog |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
631 INNER JOIN changedfiles ON changelog.node = changedfiles.node |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
632 WHERE changedfiles.filename = ? AND changedfiles.filenode = ?''', |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
633 (pycompat.fsdecode(self.path), gitutil.togitnode(node)), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
634 ).fetchone() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
635 if row is None: |
52629
7d2fc79a3e5a
git: consistify & fix LookupError messages
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
52628
diff
changeset
|
636 raise error.LookupError(self.path, node, _(b'no node')) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
637 return int(row[0]) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
638 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
639 def node(self, rev): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
640 maybe = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
641 '''SELECT filenode FROM changedfiles |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
642 INNER JOIN changelog ON changelog.node = changedfiles.node |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
643 WHERE changelog.rev = ? AND filename = ? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
644 ''', |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
645 (rev, pycompat.fsdecode(self.path)), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
646 ).fetchone() |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
647 if maybe is None: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
648 raise IndexError('gitlog %r out of range %d' % (self.path, rev)) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
649 return bin(maybe[0]) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
650 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
651 def parents(self, node): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
652 gn = gitutil.togitnode(node) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
653 gp = pycompat.fsdecode(self.path) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
654 ps = [] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
655 for p in self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
656 '''SELECT p1filenode, p2filenode FROM changedfiles |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
657 WHERE filenode = ? AND filename = ? |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
658 ''', |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
659 (gn, gp), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
660 ).fetchone(): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
661 if p is None: |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
662 commit = self._db.execute( |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
663 "SELECT node FROM changedfiles " |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
664 "WHERE filenode = ? AND filename = ?", |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
665 (gn, gp), |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
666 ).fetchone()[0] |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
667 # This filelog is missing some data. Build the |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
668 # filelog, then recurse (which will always find data). |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
49284
diff
changeset
|
669 commit = commit.decode('ascii') |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
670 index.fill_in_filelog(self.gitrepo, self._db, commit, gp, gn) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
671 return self.parents(node) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
672 else: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45939
diff
changeset
|
673 ps.append(bin(p)) |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
674 return ps |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
675 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
676 def renamed(self, node): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
677 # TODO: renames/copies |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
678 return False |