annotate hggit/overlay.py @ 856:15d2b119ca99

overlaymanifest: implement more methods for Mercurial 3.3 compatibility Looks like we use many more dict APIs in overlaymanifest.
author Siddharth Agarwal <sid0@fb.com>
date Mon, 26 Jan 2015 17:47:54 -0800
parents 4538981d2c3f
children 517cf1b5e626
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
1 # overlay classes for repositories
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
2 # unifies access to unimported git objects and committed hg objects
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
3 # designed to support incoming
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
4 #
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
5 # incomplete, implemented on demand
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
6
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
7 from mercurial import ancestor
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
8 from mercurial import manifest
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
9 from mercurial import context
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
10 from mercurial.node import bin, hex, nullid
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
11 from mercurial import localrepo
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
12
620
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
13 def _maybehex(n):
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
14 if len(n) == 20:
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
15 return hex(n)
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
16 return n
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
17
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
18 class overlaymanifest(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
19 def __init__(self, repo, sha):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
20 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
21 self.tree = repo.handler.git.get_object(sha)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
22 self._map = None
856
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
23 self._flags = None
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
24
466
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
25 def withflags(self):
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
26 self.load()
856
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
27 return set([path for path, flag in self._flags.iteritems()
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
28 if flag != ''])
466
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
29
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
30 def copy(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
31 return overlaymanifest(self.repo, self.tree.id)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
32
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
33 def keys(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
34 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
35 return self._map.keys()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
36
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
37 def iterkeys(self):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
38 return iter(self.keys())
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
39
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
40 def flags(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
41 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
42
856
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
43 return hgflag(self._flags[path])
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
44
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
45 def load(self):
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
46 if self._map is not None:
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
47 return
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
48
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
49 self._map = {}
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
50 self._flags = {}
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
51
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
52 def hgflag(gitflag):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
53 if gitflag & 0100:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
54 return 'x'
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
55 elif gitflag & 020000:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
56 return 'l'
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
57 else:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
58 return ''
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
59
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
60 def addtree(tree, dirname):
423
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
61 for entry in tree.iteritems():
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
62 if entry.mode & 040000:
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
63 # expand directory
423
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
64 subtree = self.repo.handler.git.get_object(entry.sha)
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
65 addtree(subtree, dirname + entry.path + '/')
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
66 else:
423
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
67 path = dirname + entry.path
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
68 self._map[path] = bin(entry.sha)
856
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
69 self._flags[path] = hgflag(entry.mode)
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
70
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
71 addtree(self.tree, '')
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
72
829
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
73 def matches(self, match):
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
74 '''generate a new manifest filtered by the match argument'''
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
75 if match.always():
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
76 return self.copy()
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
77
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
78 mf = self.copy()
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
79 for fn in mf.keys():
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
80 if not match(fn):
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
81 del mf[fn]
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
82 return mf
64fa5ea18b89 manifest: add matches() to overlay
Durham Goode <durham@fb.com>
parents: 690
diff changeset
83
597
3964de9961ec overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents: 570
diff changeset
84 def iteritems(self):
3964de9961ec overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents: 570
diff changeset
85 self.load()
3964de9961ec overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents: 570
diff changeset
86 return self._map.iteritems()
3964de9961ec overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents: 570
diff changeset
87
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
88 def __iter__(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
89 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
90 return self._map.__iter__()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
91
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
92 def __getitem__(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
93 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
94 return self._map[path]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
95
856
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
96 def __contains__(self, path):
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
97 self.load()
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
98 return path in self._map
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
99
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
100 def get(self, path, default=None):
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
101 self.load()
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
102 return self._map.get(path, default)
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
103
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
104 def diff(self, m2, clean=False):
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
105 self.load()
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
106 if isinstance(m2, overlaymanifest):
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
107 m2.load()
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
108
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
109 # below code copied from manifest.py:manifestdict.diff
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
110 diff = {}
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
111
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
112 for fn, n1 in self.iteritems():
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
113 fl1 = self._flags.get(fn, '')
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
114 n2 = m2.get(fn, None)
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
115 fl2 = m2._flags.get(fn, '')
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
116 if n2 is None:
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
117 fl2 = ''
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
118 if n1 != n2 or fl1 != fl2:
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
119 diff[fn] = ((n1, fl1), (n2, fl2))
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
120 elif clean:
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
121 diff[fn] = None
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
122
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
123 for fn, n2 in m2.iteritems():
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
124 if fn not in self:
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
125 fl2 = m2._flags.get(fn, '')
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
126 diff[fn] = ((None, ''), (n2, fl2))
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
127
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
128 return diff
15d2b119ca99 overlaymanifest: implement more methods for Mercurial 3.3 compatibility
Siddharth Agarwal <sid0@fb.com>
parents: 855
diff changeset
129
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
130 def __delitem__(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
131 del self._map[path]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
132
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
133 class overlayfilectx(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
134 def __init__(self, repo, path, fileid=None):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
135 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
136 self._path = path
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
137 self.fileid = fileid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
138
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
139 # this is a hack to skip copy detection
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
140 def ancestors(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
141 return [self, self]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
142
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
143 def filenode(self):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
144 return nullid
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
145
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
146 def rev(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
147 return -1
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
148
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
149 def path(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
150 return self._path
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
151
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
152 def filelog(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
153 return self.fileid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
154
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
155 def data(self):
620
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
156 blob = self.repo.handler.git.get_object(_maybehex(self.fileid))
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
157 return blob.data
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
158
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
159 class overlaychangectx(context.changectx):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
160 def __init__(self, repo, sha):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
161 self.repo = repo
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
162 if not isinstance(sha, basestring):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
163 sha = sha.hex()
620
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
164 self.commit = repo.handler.git.get_object(_maybehex(sha))
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
165 self._overlay = getattr(repo, 'gitoverlay', repo)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
166 self._rev = self._overlay.rev(bin(self.commit.id))
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
167
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
168 def node(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
169 return bin(self.commit.id)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
170
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
171 def rev(self):
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
172 return self._rev
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
173
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
174 def date(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
175 return self.commit.author_time, self.commit.author_timezone
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
176
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
177 def branch(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
178 return 'default'
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
179
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
180 def user(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
181 return self.commit.author
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
182
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
183 def files(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
184 return []
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
185
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
186 def extra(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
187 return {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
188
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
189 def description(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
190 return self.commit.message
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
191
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
192 def parents(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
193 return [overlaychangectx(self.repo, sha) for sha in self.commit.parents]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
194
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
195 def manifestnode(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
196 return bin(self.commit.tree)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
197
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
198 def hex(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
199 return self.commit.id
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
200
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
201 def tags(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
202 return []
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
203
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
204 def bookmarks(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
205 return []
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
206
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
207 def manifest(self):
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
208 return overlaymanifest(self._overlay, self.commit.tree)
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
209
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
210 def filectx(self, path, filelog=None):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
211 mf = self.manifest()
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
212 return overlayfilectx(self._overlay, path, mf[path])
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
213
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
214 def flags(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
215 mf = self.manifest()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
216 return mf.flags(path)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
217
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
218 def __nonzero__(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
219 return True
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
220
568
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
221 def phase(self):
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
222 try:
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
223 from mercurial import phases
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
224 return phases.draft
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
225 except ImportError:
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
226 return 1
41f6e3df67b1 overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
227
855
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
228 def totuple(self):
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
229 return (self.commit.tree, self.user(), self.date(), self.files(),
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
230 self.description(), self.extra())
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
231
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
232 class overlayrevlog(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
233 def __init__(self, repo, base):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
234 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
235 self.base = base
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
236
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
237 def parents(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
238 gitrev = self.repo.revmap.get(n)
689
aa8519daf037 overlayrevlog: handle rev = 0 correctly
Siddharth Agarwal <sid0@fb.com>
parents: 684
diff changeset
239 if gitrev is None:
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
240 # we've reached a revision we have
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
241 return self.base.parents(n)
620
0a514e303a06 overlay: add kludge to make sure we only ever give hexshas to dulwich
Augie Fackler <raf@durin42.com>
parents: 612
diff changeset
242 commit = self.repo.handler.git.get_object(_maybehex(n))
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
243
690
c99941ff2d28 overlayrevlog: handle root commits correctly
Siddharth Agarwal <sid0@fb.com>
parents: 689
diff changeset
244 if not commit.parents:
c99941ff2d28 overlayrevlog: handle root commits correctly
Siddharth Agarwal <sid0@fb.com>
parents: 689
diff changeset
245 return [nullid, nullid]
c99941ff2d28 overlayrevlog: handle root commits correctly
Siddharth Agarwal <sid0@fb.com>
parents: 689
diff changeset
246
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
247 def gitorhg(n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
248 hn = self.repo.handler.map_hg_get(hex(n))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
249 if hn is not None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
250 return bin(hn)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
251 return n
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
252
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
253 # currently ignores the octopus
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
254 p1 = gitorhg(bin(commit.parents[0]))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
255 if len(commit.parents) > 1:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
256 p2 = gitorhg(bin(commit.parents[1]))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
257 else:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
258 p2 = nullid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
259
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
260 return [p1, p2]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
261
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
262 def ancestor(self, a, b):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
263 anode = self.repo.nodemap.get(a)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
264 bnode = self.repo.nodemap.get(b)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
265 if anode is None and bnode is None:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
266 return self.base.ancestor(a, b)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
267 ancs = ancestor.ancestors(self.parentrevs, a, b)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
268 if ancs:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
269 return min(map(self.node, ancs))
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
270 return nullid
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
271
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
272 def parentrevs(self, rev):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
273 return [self.rev(p) for p in self.parents(self.node(rev))]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
274
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
275 def node(self, rev):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
276 gitnode = self.repo.nodemap.get(rev)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
277 if gitnode is None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
278 return self.base.node(rev)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
279 return gitnode
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
280
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
281 def rev(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
282 gitrev = self.repo.revmap.get(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
283 if gitrev is None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
284 return self.base.rev(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
285 return gitrev
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
286
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
287 def __len__(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
288 return len(self.repo.handler.repo) + len(self.repo.revmap)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
289
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
290 class overlaymanifestlog(overlayrevlog):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
291 def read(self, sha):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
292 if sha == nullid:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
293 return manifest.manifestdict()
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
294 return overlaymanifest(self.repo, sha)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
295
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
296 class overlaychangelog(overlayrevlog):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
297 def read(self, sha):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
298 if isinstance(sha, int):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
299 sha = self.node(sha)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
300 if sha == nullid:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
301 return (nullid, "", (0, 0), [], "", {})
855
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
302 try:
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
303 return self.base.read(sha)
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
304 except LookupError:
4538981d2c3f overlaychangelog: return tuples for read()
Siddharth Agarwal <sid0@fb.com>
parents: 854
diff changeset
305 return overlaychangectx(self.repo, sha).totuple()
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
306
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
307 class overlayrepo(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
308 def __init__(self, handler, commits, refs):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
309 self.handler = handler
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
310
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
311 self.changelog = overlaychangelog(self, handler.repo.changelog)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
312 self.manifest = overlaymanifestlog(self, handler.repo.manifest)
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
313
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
314 # for incoming -p
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
315 self.root = handler.repo.root
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
316 self.getcwd = handler.repo.getcwd
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
317 # self.status = handler.repo.status
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
318 self.ui = handler.repo.ui
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
319
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
320 self.revmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
321 self.nodemap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
322 self.refmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
323 self.tagmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
324
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
325 self._makemaps(commits, refs)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
326
854
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
327 try:
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
328 # Mercurial >= 3.3
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
329 from mercurial import namespaces
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
330 self.names = namespaces.namespaces()
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
331 except ImportError:
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
332 pass
eba7dcfab1bb overlay: add namespace support to overlayrepo to support Mercurial >= 3.3
Siddharth Agarwal <sid0@fb.com>
parents: 829
diff changeset
333
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
334 def __getitem__(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
335 if n not in self.revmap:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
336 return self.handler.repo[n]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
337 return overlaychangectx(self, n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
338
612
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
339 def _handlerhack(self, method, *args, **kwargs):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
340 nothing = object()
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
341 r = self.handler.repo
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
342 oldhandler = getattr(r, 'handler', nothing)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
343 oldoverlay = getattr(r, 'gitoverlay', nothing)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
344 r.handler = self.handler
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
345 r.gitoverlay = self
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
346 try:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
347 return getattr(r, method)(*args, **kwargs)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
348 finally:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
349 if oldhandler is nothing:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
350 del r.handler
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
351 else:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
352 r.handler = oldhandler
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
353 if oldoverlay is nothing:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
354 del r.gitoverlay
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
355 else:
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
356 r.gitoverlay = oldoverlay
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
357
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
358 def status(self, *args, **kwargs):
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
359 return self._handlerhack('status', *args, **kwargs)
bf8518b09d57 overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents: 597
diff changeset
360
557
4f4ab2d89375 gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
361 def node(self, n):
4f4ab2d89375 gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
362 """Returns an Hg or Git hash for the specified Git hash"""
4f4ab2d89375 gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
363 if bin(n) in self.revmap:
4f4ab2d89375 gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
364 return n
4f4ab2d89375 gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
365 return self.handler.map_hg_get(n)
4f4ab2d89375 gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents: 466
diff changeset
366
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
367 def nodebookmarks(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
368 return self.refmap.get(n, [])
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
369
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
370 def nodetags(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
371 return self.tagmap.get(n, [])
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
372
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
373 def rev(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
374 return self.revmap[n]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
375
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
376 def filectx(self, path, fileid=None):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
377 return overlayfilectx(self, path, fileid=fileid)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
378
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
379 def _makemaps(self, commits, refs):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
380 baserev = self.handler.repo['tip'].rev()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
381 self.revmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
382 self.nodemap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
383 for i, n in enumerate(commits):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
384 rev = baserev + i + 1
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
385 self.revmap[n] = rev
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
386 self.nodemap[rev] = n
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
387
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
388 self.refmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
389 self.tagmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
390 for ref in refs:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
391 if ref.startswith('refs/heads/'):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
392 refname = ref[11:]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
393 self.refmap.setdefault(bin(refs[ref]), []).append(refname)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
394 elif ref.startswith('refs/tags/'):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
395 tagname = ref[10:]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
396 self.tagmap.setdefault(bin(refs[ref]), []).append(tagname)