annotate rhodecode/lib/unionrepo.py @ 3371:199fd214b213 beta

Show admin dropdown for users who are admin of repo groups
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 15 Feb 2013 00:53:47 +0100
parents ead7a902998c
children 6354556781ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
1 # unionrepo.py - repository class for viewing union of repositories
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
2 #
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
3 # Derived from Mercurial 2.5 bundlerepo.py
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
4 # Copyright 2006, 2007 Benoit Boissinot <bboissin@gmail.com>
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
5 # Copyright 2013 Unity Technologies, Mads Kiilerich <madski@unity3d.com>
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
6 #
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
7 # This software may be used and distributed according to the terms of the
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
8 # GNU General Public License version 2 or any later version.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
9
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
10 """Repository class for in-memory pull of one local repository to another.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
11 """
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
12
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
13 from mercurial.node import nullid
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
14 from mercurial import util, mdiff
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
15 from mercurial import localrepo, changelog, manifest, filelog, revlog
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
16
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
17 class unionrevlog(revlog.revlog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
18 def __init__(self, opener, indexfile, revlog2, linkmapper):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
19 # How it works:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
20 # To retrieve a revision, we just need to know the node id so we can
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
21 # look it up in revlog2.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
22 #
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
23 # basemap is indexed with revisions coming from the second revlog.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
24 #
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
25 # To differentiate a rev in the second revlog from a rev in the revlog,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
26 # we check revision against basemap.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
27 revlog.revlog.__init__(self, opener, indexfile)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
28 self.revlog2 = revlog2
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
29
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
30 self.basemap = {} # mapping rev that is in revlog2 to ... nothing
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
31 n = len(self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
32 self.bundlerevs = set() # used by 'bundle()' revset expression
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
33 for rev2 in self.revlog2:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
34 rev = self.revlog2.index[rev2]
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
35 # rev numbers - in revlog2, very different from self.rev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
36 _start, _csize, _rsize, _base, linkrev, p1rev, p2rev, node = rev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
37
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
38 if linkmapper is None: # link is to same revlog
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
39 assert linkrev == rev2 # we never link back
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
40 link = n
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
41 else: # rev must be mapped from repo2 cl to unified cl by linkmapper
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
42 link = linkmapper(linkrev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
43
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
44 if node in self.nodemap:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
45 # this happens for for the common revlog revisions
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
46 self.bundlerevs.add(self.nodemap[node])
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
47 continue
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
48
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
49 p1node = self.revlog2.node(p1rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
50 p2node = self.revlog2.node(p2rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
51
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
52 e = (None, None, None, None,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
53 link, self.rev(p1node), self.rev(p2node), node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
54 self.basemap[n] = None
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
55 self.index.insert(-1, e)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
56 self.nodemap[node] = n
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
57 self.bundlerevs.add(n)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
58 n += 1
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
59
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
60 def _chunk(self, rev):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
61 if rev not in self.basemap:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
62 return revlog.revlog._chunk(self, rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
63 return self.revlog2._chunk(self.node(rev))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
64
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
65 def revdiff(self, rev1, rev2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
66 """return or calculate a delta between two revisions"""
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
67 if rev1 in self.basemap and rev2 in self.basemap:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
68 return self.revlog2.revdiff(
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
69 self.revlog2.rev(self.node(rev1)),
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
70 self.revlog2.rev(self.node(rev2)))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
71 elif rev1 not in self.basemap and rev2 not in self.basemap:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
72 return revlog.revlog.revdiff(self, rev1, rev2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
73
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
74 return mdiff.textdiff(self.revision(self.node(rev1)),
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
75 self.revision(self.node(rev2)))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
76
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
77 def revision(self, nodeorrev):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
78 """return an uncompressed revision of a given node or revision
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
79 number.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
80 """
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
81 if isinstance(nodeorrev, int):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
82 rev = nodeorrev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
83 node = self.node(rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
84 else:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
85 node = nodeorrev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
86 rev = self.rev(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
87
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
88 if node == nullid:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
89 return ""
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
90
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
91 if rev in self.basemap:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
92 text = self.revlog2.revision(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
93 self._cache = (node, rev, text)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
94 else:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
95 text = revlog.revlog.revision(self, rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
96 # already cached
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
97 return text
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
98
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
99 def addrevision(self, text, transaction, link, p1=None, p2=None, d=None):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
100 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
101 def addgroup(self, revs, linkmapper, transaction):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
102 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
103 def strip(self, rev, minlink):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
104 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
105 def checksize(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
106 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
107
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
108 class unionchangelog(unionrevlog, changelog.changelog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
109 def __init__(self, opener, opener2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
110 changelog.changelog.__init__(self, opener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
111 linkmapper = None
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
112 changelog2 = changelog.changelog(opener2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
113 unionrevlog.__init__(self, opener, self.indexfile, changelog2,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
114 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
115
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
116 class unionmanifest(unionrevlog, manifest.manifest):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
117 def __init__(self, opener, opener2, linkmapper):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
118 manifest.manifest.__init__(self, opener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
119 manifest2 = manifest.manifest(opener2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
120 unionrevlog.__init__(self, opener, self.indexfile, manifest2,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
121 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
122
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
123 class unionfilelog(unionrevlog, filelog.filelog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
124 def __init__(self, opener, path, opener2, linkmapper, repo):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
125 filelog.filelog.__init__(self, opener, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
126 filelog2 = filelog.filelog(opener2, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
127 unionrevlog.__init__(self, opener, self.indexfile, filelog2,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
128 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
129 self._repo = repo
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
130
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
131 def _file(self, f):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
132 self._repo.file(f)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
133
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
134 class unionpeer(localrepo.localpeer):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
135 def canpush(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
136 return False
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
137
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
138 class unionrepository(localrepo.localrepository):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
139 def __init__(self, ui, path, path2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
140 localrepo.localrepository.__init__(self, ui, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
141 self.ui.setconfig('phases', 'publish', False)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
142
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
143 self._url = 'union:%s+%s' % (util.expandpath(path),
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
144 util.expandpath(path2))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
145 self.repo2 = localrepo.localrepository(ui, path2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
146
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
147 @util.propertycache
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
148 def changelog(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
149 return unionchangelog(self.sopener, self.repo2.sopener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
150
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
151 def _clrev(self, rev2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
152 """map from repo2 changelog rev to temporary rev in self.changelog"""
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
153 node = self.repo2.changelog.node(rev2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
154 return self.changelog.rev(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
155
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
156 @util.propertycache
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
157 def manifest(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
158 return unionmanifest(self.sopener, self.repo2.sopener,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
159 self._clrev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
160
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
161 def url(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
162 return self._url
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
163
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
164 def file(self, f):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
165 return unionfilelog(self.sopener, f, self.repo2.sopener,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
166 self._clrev, self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
167
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
168 def close(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
169 self.repo2.close()
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
170
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
171 def cancopy(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
172 return False
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
173
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
174 def peer(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
175 return unionpeer(self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
176
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
177 def instance(ui, path, create):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
178 u = util.url(path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
179 assert u.scheme == 'union'
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
180 repopath, repopath2 = u.path.split("+", 1)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
181 return unionrepository(ui, repopath, repopath2)