annotate rhodecode/lib/unionrepo.py @ 3883:88ec8f7b9e64 beta

Fixed issues with group renames for local repository group admins. - revoke permission on yourself check was triggered thus preventing group update. Moved this check into update permission function
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 22 May 2013 00:48:34 +0200
parents f3283898d431
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
1 # unionrepo.py - repository class for viewing union of repository changesets
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
2 #
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
3 # Derived from bundlerepo.py
3302
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
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
10 """Repository class for "in-memory pull" of one local repository to another,
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
11 allowing operations like diff and log with revsets.
3302
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
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
14 import os
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
15 from mercurial.node import nullid
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
16 from mercurial.i18n import _
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
17 from mercurial import util, mdiff, cmdutil, scmutil
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
18 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
19
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
20
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
21 class unionrevlog(revlog.revlog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
22 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
23 # How it works:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
24 # 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
25 # look it up in revlog2.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
26 #
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
27 # To differentiate a rev in the second revlog from a rev in the revlog,
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
28 # we check revision against repotiprev.
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
29 opener = scmutil.readonlyvfs(opener)
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
30 revlog.revlog.__init__(self, opener, indexfile)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
31 self.revlog2 = revlog2
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
32
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
33 n = len(self)
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
34 self.repotiprev = n - 1
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
35 self.bundlerevs = set() # used by 'bundle()' revset expression
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
36 for rev2 in self.revlog2:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
37 rev = self.revlog2.index[rev2]
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
38 # 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
39 _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
40
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
41 if linkmapper is None: # link is to same revlog
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
42 assert linkrev == rev2 # we never link back
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
43 link = n
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
44 else: # rev must be mapped from repo2 cl to unified cl by linkmapper
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
45 link = linkmapper(linkrev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
46
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
47 if node in self.nodemap:
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
48 # this happens for the common revlog revisions
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
49 self.bundlerevs.add(self.nodemap[node])
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
50 continue
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 p1node = self.revlog2.node(p1rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
53 p2node = self.revlog2.node(p2rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
54
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
55 e = (None, None, None, None,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
56 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
57 self.index.insert(-1, e)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
58 self.nodemap[node] = n
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
59 self.bundlerevs.add(n)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
60 n += 1
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
61
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
62 def _chunk(self, rev):
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
63 if rev <= self.repotiprev:
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
64 return revlog.revlog._chunk(self, rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
65 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
66
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
67 def revdiff(self, rev1, rev2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
68 """return or calculate a delta between two revisions"""
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
69 if rev1 > self.repotiprev and rev2 > self.repotiprev:
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
70 return self.revlog2.revdiff(
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
71 self.revlog2.rev(self.node(rev1)),
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
72 self.revlog2.rev(self.node(rev2)))
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
73 elif rev1 <= self.repotiprev and rev2 <= self.repotiprev:
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
74 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
75
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
76 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
77 self.revision(self.node(rev2)))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
78
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
79 def revision(self, nodeorrev):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
80 """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
81 number.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
82 """
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
83 if isinstance(nodeorrev, int):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
84 rev = nodeorrev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
85 node = self.node(rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
86 else:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
87 node = nodeorrev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
88 rev = self.rev(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
89
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
90 if node == nullid:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
91 return ""
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
92
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
93 if rev > self.repotiprev:
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
94 text = self.revlog2.revision(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
95 self._cache = (node, rev, text)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
96 else:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
97 text = revlog.revlog.revision(self, rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
98 # already cached
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
99 return text
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
100
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
101 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
102 raise NotImplementedError
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
103
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
104 def addgroup(self, revs, linkmapper, transaction):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
105 raise NotImplementedError
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
106
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
107 def strip(self, rev, minlink):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
108 raise NotImplementedError
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
109
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
110 def checksize(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
111 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
112
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
113
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
114 class unionchangelog(unionrevlog, changelog.changelog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
115 def __init__(self, opener, opener2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
116 changelog.changelog.__init__(self, opener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
117 linkmapper = None
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
118 changelog2 = changelog.changelog(opener2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
119 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
120 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
121
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
122
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
123 class unionmanifest(unionrevlog, manifest.manifest):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
124 def __init__(self, opener, opener2, linkmapper):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
125 manifest.manifest.__init__(self, opener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
126 manifest2 = manifest.manifest(opener2)
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, manifest2,
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
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
130
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
131 class unionfilelog(unionrevlog, filelog.filelog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
132 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
133 filelog.filelog.__init__(self, opener, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
134 filelog2 = filelog.filelog(opener2, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
135 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
136 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
137 self._repo = repo
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
138
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
139 def _file(self, f):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
140 self._repo.file(f)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
141
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
142
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
143 class unionpeer(localrepo.localpeer):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
144 def canpush(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
145 return False
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
146
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
147
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
148 class unionrepository(localrepo.localrepository):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
149 def __init__(self, ui, path, path2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
150 localrepo.localrepository.__init__(self, ui, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
151 self.ui.setconfig('phases', 'publish', False)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
152
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
153 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
154 util.expandpath(path2))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
155 self.repo2 = localrepo.localrepository(ui, path2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
156
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
157 @localrepo.unfilteredpropertycache
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
158 def changelog(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
159 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
160
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
161 def _clrev(self, rev2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
162 """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
163 node = self.repo2.changelog.node(rev2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
164 return self.changelog.rev(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
165
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
166 @localrepo.unfilteredpropertycache
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
167 def manifest(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
168 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
169 self._clrev)
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 url(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
172 return self._url
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 file(self, f):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
175 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
176 self._clrev, self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
177
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
178 def close(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
179 self.repo2.close()
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
180
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
181 def cancopy(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
182 return False
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
183
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
184 def peer(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
185 return unionpeer(self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
186
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
187 def getcwd(self):
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
188 return os.getcwd() # always outside the repo
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
189
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
190
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
191 def instance(ui, path, create):
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
192 if create:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
193 raise util.Abort(_('cannot create new union repository'))
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
194 parentpath = ui.config("bundle", "mainreporoot", "")
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
195 if not parentpath:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
196 # try to find the correct path to the working directory repo
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
197 parentpath = cmdutil.findrepo(os.getcwd())
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
198 if parentpath is None:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
199 parentpath = ''
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
200 if parentpath:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
201 # Try to make the full path relative so we get a nice, short URL.
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
202 # In particular, we don't want temp dir names in test outputs.
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
203 cwd = os.getcwd()
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
204 if parentpath == cwd:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
205 parentpath = ''
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
206 else:
3578
f3283898d431 pep8 unionrepo
Marcin Kuzminski <marcin@python-works.com>
parents: 3407
diff changeset
207 cwd = os.path.join(cwd, '')
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
208 if parentpath.startswith(cwd):
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
209 parentpath = parentpath[len(cwd):]
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
210 if path.startswith('union:'):
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
211 s = path.split(":", 1)[1].split("+", 1)
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
212 if len(s) == 1:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
213 repopath, repopath2 = parentpath, s[0]
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
214 else:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
215 repopath, repopath2 = s
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
216 else:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
217 repopath, repopath2 = parentpath, path
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
218 return unionrepository(ui, repopath, repopath2)