Mercurial > kallithea
annotate rhodecode/lib/unionrepo.py @ 3405:a9adca4ba3c9 beta
fixed urlify changesets regex + tests
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 26 Feb 2013 00:11:59 +0100 |
parents | ead7a902998c |
children | 6354556781ef |
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) |