annotate hgext/git/gitlog.py @ 51304:d91b55371d6f

git-hgext: adjust to the lack of `changelog.heads` method We don't have a `heads` method returning nodeid, but this is very easy to get the same result. This was flagged by pytype. We can note that the fact this code did not break is probably a good sign that it is dead code. However this is a question outside of the scop of this series.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 19 Dec 2023 22:54:52 +0100
parents 1e12ea7d8435
children f4733654f144
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
1 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
2
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
3 from mercurial.node import (
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
4 bin,
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
5 hex,
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
6 nullrev,
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
7 sha1nodeconstants,
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
8 )
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
9 from mercurial import (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
10 ancestor,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
11 changelog as hgchangelog,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
12 dagop,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
13 encoding,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
14 error,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
15 manifest,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
16 pycompat,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
17 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
18 from mercurial.interfaces import (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
19 repository,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
20 util as interfaceutil,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
21 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
22 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
23 from . import (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
24 gitutil,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
25 index,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
26 manifest as gitmanifest,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
27 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
28
44484
ec54b3d2af0b git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents: 44481
diff changeset
29 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
30
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
31
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
32 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
33 """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
34
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
35 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
36 self.gitrepo = gr
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
37 self._db = db
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
38
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
39 def __len__(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
40 return int(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
41 self._db.execute('SELECT COUNT(*) FROM changelog').fetchone()[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
42 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
43
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
44 def rev(self, n):
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
45 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
46 return -1
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
47 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
48 '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
49 ).fetchone()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
50 if t is None:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
51 raise error.LookupError(n, b'00changelog.i', _(b'no node %d'))
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
52 return t[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
53
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
54 def node(self, r):
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
55 if r == nullrev:
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
56 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
57 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
58 '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
59 ).fetchone()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
60 if t is None:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
61 raise error.LookupError(r, b'00changelog.i', _(b'no node'))
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
62 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
63
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
64 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
65 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
66 'SELECT node FROM changelog WHERE node = ?',
ce24a00fe7f0 git: pass the correct type to the sqlite3 query for baselog.hasnode()
Matt Harbison <matt_harbison@yahoo.com>
parents: 47049
diff changeset
67 (pycompat.sysstr(n),),
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
68 ).fetchone()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
69 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
70
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
71
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
72 class baselogindex:
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
73 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
74 self._log = log
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
75
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
76 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
77 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
78
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
79 def __len__(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
80 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
81
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
82 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
83 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
84 # 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
85 # 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
86 # 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
87 return (
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
88 # 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
89 idx,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
90 # Same with lengths
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
91 idx, # length
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
92 idx, # rawsize
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
93 -1, # delta base
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
94 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
95 p1rev,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
96 p2rev,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
97 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
98 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
99
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
100
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
101 # 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
102 class changelog(baselog):
45414
66a10bd1b8db git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents: 45413
diff changeset
103 # 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
104 # be part of the public changelog interface
66a10bd1b8db git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents: 45413
diff changeset
105 _copiesstorage = b'extra'
66a10bd1b8db git: restore basic functionality after b3040b6739ce
Augie Fackler <raf@durin42.com>
parents: 45413
diff changeset
106
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
107 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
108 try:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
109 self.node(rev)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
110 return True
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
111 except error.LookupError:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
112 return False
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
113
44481
8b5f5d8ad783 gitlog: implement __iter__ on changelog
Augie Fackler <raf@durin42.com>
parents: 44480
diff changeset
114 def __iter__(self):
49284
d44e3c45f0e4 py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
115 return iter(range(len(self)))
44481
8b5f5d8ad783 gitlog: implement __iter__ on changelog
Augie Fackler <raf@durin42.com>
parents: 44480
diff changeset
116
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
117 @property
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
118 def filteredrevs(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
119 # 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
120 # 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
121 return set()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
122
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
123 @property
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
124 def index(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
125 return baselogindex(self)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
126
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
127 @property
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
128 def nodemap(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
129 r = {
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
130 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
131 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
132 }
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
133 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
134 return r
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
135
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
136 def tip(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
137 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
138 '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
139 ).fetchone()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
140 if t:
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
141 return bin(t[0])
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
142 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
143
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
144 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
145 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
146 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
147 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
148 '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
149 '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
150 '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
151 (start, stop),
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
152 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
153 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
154
45925
6aacc39501f7 gitlog: add tiprev() function
Augie Fackler <raf@durin42.com>
parents: 45521
diff changeset
155 def tiprev(self):
6aacc39501f7 gitlog: add tiprev() function
Augie Fackler <raf@durin42.com>
parents: 45521
diff changeset
156 t = self._db.execute(
45939
66f6ca2b7aee cleanup: fix a few recent black formatting violations
Matt Harbison <matt_harbison@yahoo.com>
parents: 45925
diff changeset
157 '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
158 ).fetchone()
497cedcb6504 git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents: 47045
diff changeset
159
497cedcb6504 git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents: 47045
diff changeset
160 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
161 return t[0]
497cedcb6504 git: make changelog.tiprev() return int instead of tuple (issue6510)
Matt Harbison <matt_harbison@yahoo.com>
parents: 47045
diff changeset
162 return -1
45925
6aacc39501f7 gitlog: add tiprev() function
Augie Fackler <raf@durin42.com>
parents: 45521
diff changeset
163
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
164 def _partialmatch(self, id):
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
165 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
166 raise error.WdirUnsupported
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
167 candidates = [
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
168 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
169 for x in self._db.execute(
47045
846920d89476 git: fix partial node matching
Matt Harbison <matt_harbison@yahoo.com>
parents: 46795
diff changeset
170 'SELECT node FROM changelog WHERE node LIKE ?',
846920d89476 git: fix partial node matching
Matt Harbison <matt_harbison@yahoo.com>
parents: 46795
diff changeset
171 (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
172 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
173 ]
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
174 if sha1nodeconstants.nullhex.startswith(id):
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
175 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
176 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
177 raise error.AmbiguousPrefixLookupError(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
178 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
179 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
180 if candidates:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
181 return candidates[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
182 return None
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
183
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
184 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
185 return 0
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
186
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
187 def shortest(self, node, minlength=1):
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
188 nodehex = hex(node)
49284
d44e3c45f0e4 py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
189 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
190 candidate = nodehex[:attempt]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
191 matches = int(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
192 self._db.execute(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
193 'SELECT COUNT(*) FROM changelog WHERE node LIKE ?',
44478
6d953b3fc2bd git: make {shortest()} return shortest *unique* prefix
Martin von Zweigbergk <martinvonz@google.com>
parents: 44477
diff changeset
194 (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
195 ).fetchone()[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
196 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
197 if matches == 1:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
198 return candidate
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
199 return nodehex
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
200
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
201 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
202 realheads = [
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
203 int(x[0])
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
204 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
205 '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
206 '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
207 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
208 ]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
209 if revs:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
210 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
211 return sorted(realheads)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
212
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
213 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
214 # 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
215 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
216 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
217 else:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
218 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
219 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
220 # handle looking up nullid
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
221 if n == sha1nodeconstants.nullid:
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
222 return hgchangelog._changelogrevision(
47057
7431f5ab0d2a branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net>
parents: 47012 47052
diff changeset
223 extra=extra, manifest=sha1nodeconstants.nullid
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
224 )
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
225 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
226 # We've got a real commit!
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
227 files = [
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
228 r[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
229 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
230 '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
231 '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
232 (hn, gitutil.nullgit),
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
233 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
234 ]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
235 filesremoved = [
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
236 r[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
237 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
238 '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
239 '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
240 (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
241 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
242 ]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
243 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
244 return hgchangelog._changelogrevision(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
245 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
246 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
247 % (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
248 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
249 files=files,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
250 # 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
251 filesremoved=filesremoved,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
252 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
253 # 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
254 extra=extra,
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
255 )
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 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
258 revs = list(revs)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
259 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
260 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
261 if r > tip:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
262 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
263 return ancestor.lazyancestors(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
264 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
265 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
266
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
267 # 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
268 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
269 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
270
44845
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
271 def incrementalmissingrevs(self, common=None):
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
272 """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
273 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
274 ancestors of common. This is an ancestor.incrementalmissingancestors
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
275 object.
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
276
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
277 '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
278 nullrev.
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
279 """
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
280 if common is None:
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
281 common = [nullrev]
44845
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
282
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
283 return ancestor.incrementalmissingancestors(self.parentrevs, common)
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
284
49386
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
285 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
286 """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
287 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
288
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
289 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
290 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
291
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
292 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
293 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
294
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
295 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
296 topologically sorted.
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
297
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
298 '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
299 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
300 supplied, uses nullid."""
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
301 if common is None:
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
302 common = [nullrev]
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
303 if heads is None:
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
304 heads = self.headrevs()
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
305
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
306 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
307 return inc.missingancestors(heads)
1e12ea7d8435 git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
Anton Shestakov <av6@dwimlabs.net>
parents: 49288
diff changeset
308
44845
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
309 def findmissing(self, common=None, heads=None):
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
310 """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
311
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
312 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
313 satisfies the following constraints:
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
314
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
315 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
316 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
317
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
318 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
319 topologically sorted.
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
320
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
321 '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
322 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
323 supplied, uses nullid."""
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
324 if common is None:
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
325 common = [sha1nodeconstants.nullid]
44845
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
326 if heads is None:
51304
d91b55371d6f git-hgext: adjust to the lack of `changelog.heads` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49386
diff changeset
327 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
328
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
329 common = [self.rev(n) for n in common]
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
330 heads = [self.rev(n) for n in heads]
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
331
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
332 inc = self.incrementalmissingrevs(common=common)
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
333 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
334
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
335 def children(self, node):
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
336 """find the children of a given node"""
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
337 c = []
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
338 p = self.rev(node)
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
339 for r in self.revs(start=p + 1):
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
340 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
341 if prevs:
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
342 for pr in prevs:
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
343 if pr == p:
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
344 c.append(self.node(r))
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
345 elif p == nullrev:
44845
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
346 c.append(self.node(r))
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
347 return c
3e09d22a0bf5 git: implement some changelog methods
Romain DEP. <rom1dep@gmail.com>
parents: 44844
diff changeset
348
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
349 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
350 return dagop._reachablerootspure(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
351 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
352 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
353
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
354 # 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
355 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
356 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
357 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
358
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
359 # 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
360 def isancestorrev(self, a, b):
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
361 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
362 return True
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
363 elif a == b:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
364 return True
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
365 elif a > b:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
366 return False
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
367 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
368
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
369 def parentrevs(self, rev):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
370 n = self.node(rev)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
371 hn = gitutil.togitnode(n)
44844
8bfc6cc8e480 git: avoid looking-up parents for the null commit
Romain DEP. <rom1dep@gmail.com>
parents: 44484
diff changeset
372 if hn != gitutil.nullgit:
8bfc6cc8e480 git: avoid looking-up parents for the null commit
Romain DEP. <rom1dep@gmail.com>
parents: 44484
diff changeset
373 c = self.gitrepo[hn]
8bfc6cc8e480 git: avoid looking-up parents for the null commit
Romain DEP. <rom1dep@gmail.com>
parents: 44484
diff changeset
374 else:
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
375 return nullrev, nullrev
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
376 p1 = p2 = nullrev
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
377 if c.parents:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
378 p1 = self.rev(c.parents[0].id.raw)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
379 if len(c.parents) > 2:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
380 raise error.Abort(b'TODO octopus merge handling')
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
381 if len(c.parents) == 2:
44480
f19491aae641 gitlog: fix embarassing bug that prevented log from showing correct parents
Augie Fackler <raf@durin42.com>
parents: 44478
diff changeset
382 p2 = self.rev(c.parents[1].id.raw)
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
383 return p1, p2
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
384
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
385 # 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
386 _uncheckedparentrevs = parentrevs
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
387
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
388 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
389 # 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
390 # 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
391 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
392 return [
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
393 self.node(n)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
394 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
395 ]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
396
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
397 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
398 """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
399 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
400
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
401 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
402 # 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
403 # 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
404 pass
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
405
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
406 def add(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
407 self,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
408 manifest,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
409 files,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
410 desc,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
411 transaction,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
412 p1,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
413 p2,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
414 user,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
415 date=None,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
416 extra=None,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
417 p1copies=None,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
418 p2copies=None,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
419 filesadded=None,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
420 filesremoved=None,
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
421 ):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
422 parents = []
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
423 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
424 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
425 parents.append(hp1)
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
426 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
427 parents.append(hp2)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
428 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
429 timestamp, tz = date
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
430 sig = pygit2.Signature(
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
431 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
432 encoding.unifromlocal(stringutil.email(user)),
45521
e7587430ca23 git: also convert timezone to int (issue6359)
Augie Fackler <augie@google.com>
parents: 45414
diff changeset
433 int(timestamp),
45413
8ddbb75bad09 git: convert tz offset to int (issue6359)
Augie Fackler <raf@durin42.com>
parents: 44951
diff changeset
434 -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
435 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
436 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
437 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
438 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
439 # 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
440 # 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
441 # 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
442 # would be neat.
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
443 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
444 '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
445 )
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
446 # 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
447 # 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
448 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
449 return oid.raw
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
450
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
451
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
452 class manifestlog(baselog):
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
453 nodeconstants = sha1nodeconstants
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
454
44477
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
455 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
456 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
457
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
458 def get(self, relpath, node):
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
459 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
460 # 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
461 return manifest.memtreemanifestctx(self, relpath)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
462 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
463 t = commit.tree
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
464 if relpath:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
465 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
466 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
467 te = t[p]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
468 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
469 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
470
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
471
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
472 @interfaceutil.implementer(repository.ifilestorage)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
473 class filelog(baselog):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
474 def __init__(self, gr, db, path):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
475 super(filelog, self).__init__(gr, db)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
476 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
477 self.path = path
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
478 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
479
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
480 def read(self, node):
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46795
diff changeset
481 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
482 return b''
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
483 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
484
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
485 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
486 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
487 node = int(node)
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
488 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
489 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
490 if len(node) == 40:
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
491 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
492 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
493 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
494 return node
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
495 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
496
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
497 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
498 """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
499 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
500
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
501 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
502 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
503 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
504
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
505 def __iter__(self):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
506 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
507 '''
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
508 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
509 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
510 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
511 ''',
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
512 (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
513 ):
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
514 yield clrev[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
515
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
516 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
517 return fr
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
518
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
519 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
520 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
521 '''
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
522 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
523 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
524 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
525 (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
526 ).fetchone()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
527 if row is None:
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
528 raise error.LookupError(self.path, node, _(b'no such node'))
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
529 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
530
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
531 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
532 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
533 '''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
534 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
535 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
536 ''',
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
537 (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
538 ).fetchone()
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
539 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
540 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
541 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
542
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
543 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
544 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
545 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
546 ps = []
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
547 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
548 '''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
549 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
550 ''',
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
551 (gn, gp),
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
552 ).fetchone():
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
553 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
554 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
555 "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
556 "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
557 (gn, gp),
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
558 ).fetchone()[0]
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
559 # 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
560 # 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
561 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
562 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
563 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
564 else:
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45939
diff changeset
565 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
566 return ps
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
567
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
568 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
569 # TODO: renames/copies
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff changeset
570 return False