annotate rhodecode/lib/unionrepo.py @ 3577:238486bb71ab beta

Switched handling of RhodeCode extra params in consistent way - use only os.environ for both hg and git - hacking ui objects was bad - os.environ allows easier to call rhodecode hooks externally
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 24 Mar 2013 03:07:04 +0100
parents 6354556781ef
children f3283898d431
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
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
20 class unionrevlog(revlog.revlog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
21 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
22 # How it works:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
23 # 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
24 # look it up in revlog2.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
25 #
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
26 # 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
27 # we check revision against repotiprev.
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
28 opener = scmutil.readonlyvfs(opener)
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
29 revlog.revlog.__init__(self, opener, indexfile)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
30 self.revlog2 = revlog2
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
31
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
32 n = len(self)
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
33 self.repotiprev = n - 1
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
34 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
35 for rev2 in self.revlog2:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
36 rev = self.revlog2.index[rev2]
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
37 # 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
38 _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
39
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
40 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
41 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
42 link = n
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
43 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
44 link = linkmapper(linkrev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
45
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
46 if node in self.nodemap:
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
47 # 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
48 self.bundlerevs.add(self.nodemap[node])
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
49 continue
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
50
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
51 p1node = self.revlog2.node(p1rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
52 p2node = self.revlog2.node(p2rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
53
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
54 e = (None, None, None, None,
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
55 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
56 self.index.insert(-1, e)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
57 self.nodemap[node] = n
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
58 self.bundlerevs.add(n)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
59 n += 1
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
60
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
61 def _chunk(self, rev):
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
62 if rev <= self.repotiprev:
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
63 return revlog.revlog._chunk(self, rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
64 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
65
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
66 def revdiff(self, rev1, rev2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
67 """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
68 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
69 return self.revlog2.revdiff(
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
70 self.revlog2.rev(self.node(rev1)),
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
71 self.revlog2.rev(self.node(rev2)))
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
72 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
73 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
74
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
75 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
76 self.revision(self.node(rev2)))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
77
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
78 def revision(self, nodeorrev):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
79 """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
80 number.
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
81 """
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
82 if isinstance(nodeorrev, int):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
83 rev = nodeorrev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
84 node = self.node(rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
85 else:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
86 node = nodeorrev
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
87 rev = self.rev(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
88
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
89 if node == nullid:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
90 return ""
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
91
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
92 if rev > self.repotiprev:
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
93 text = self.revlog2.revision(node)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
94 self._cache = (node, rev, text)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
95 else:
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
96 text = revlog.revlog.revision(self, rev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
97 # already cached
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
98 return text
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
99
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
100 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
101 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
102 def addgroup(self, revs, linkmapper, transaction):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
103 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
104 def strip(self, rev, minlink):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
105 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
106 def checksize(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
107 raise NotImplementedError
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
108
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
109 class unionchangelog(unionrevlog, changelog.changelog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
110 def __init__(self, opener, opener2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
111 changelog.changelog.__init__(self, opener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
112 linkmapper = None
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
113 changelog2 = changelog.changelog(opener2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
114 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
115 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
116
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
117 class unionmanifest(unionrevlog, manifest.manifest):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
118 def __init__(self, opener, opener2, linkmapper):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
119 manifest.manifest.__init__(self, opener)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
120 manifest2 = manifest.manifest(opener2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
121 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
122 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
123
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
124 class unionfilelog(unionrevlog, filelog.filelog):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
125 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
126 filelog.filelog.__init__(self, opener, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
127 filelog2 = filelog.filelog(opener2, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
128 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
129 linkmapper)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
130 self._repo = repo
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
131
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
132 def _file(self, f):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
133 self._repo.file(f)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
134
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
135 class unionpeer(localrepo.localpeer):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
136 def canpush(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
137 return False
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 class unionrepository(localrepo.localrepository):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
140 def __init__(self, ui, path, path2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
141 localrepo.localrepository.__init__(self, ui, path)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
142 self.ui.setconfig('phases', 'publish', False)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
143
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
144 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
145 util.expandpath(path2))
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
146 self.repo2 = localrepo.localrepository(ui, path2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
147
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
148 @localrepo.unfilteredpropertycache
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
149 def changelog(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
150 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
151
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
152 def _clrev(self, rev2):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
153 """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
154 node = self.repo2.changelog.node(rev2)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
155 return self.changelog.rev(node)
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 manifest(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
159 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
160 self._clrev)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
161
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
162 def url(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
163 return self._url
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
164
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
165 def file(self, f):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
166 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
167 self._clrev, self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
168
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
169 def close(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
170 self.repo2.close()
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
171
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
172 def cancopy(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
173 return False
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
174
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
175 def peer(self):
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
176 return unionpeer(self)
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
177
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
178 def getcwd(self):
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
179 return os.getcwd() # always outside the repo
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
180
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
181 def instance(ui, path, create):
3407
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
182 if create:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
183 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
184 parentpath = ui.config("bundle", "mainreporoot", "")
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
185 if not parentpath:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
186 # 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
187 parentpath = cmdutil.findrepo(os.getcwd())
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
188 if parentpath is None:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
189 parentpath = ''
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
190 if parentpath:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
191 # 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
192 # 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
193 cwd = os.getcwd()
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
194 if parentpath == cwd:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
195 parentpath = ''
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
196 else:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
197 cwd = os.path.join(cwd,'')
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
198 if parentpath.startswith(cwd):
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
199 parentpath = parentpath[len(cwd):]
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
200 if path.startswith('union:'):
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
201 s = path.split(":", 1)[1].split("+", 1)
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
202 if len(s) == 1:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
203 repopath, repopath2 = parentpath, s[0]
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
204 else:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
205 repopath, repopath2 = s
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
206 else:
6354556781ef update unionrepo for Mercurial 2.5.1
Mads Kiilerich <madski@unity3d.com>
parents: 3302
diff changeset
207 repopath, repopath2 = parentpath, path
3302
ead7a902998c introduce unionrepo repository class for viewing union of repositories
Mads Kiilerich <madski@unity3d.com>
parents:
diff changeset
208 return unionrepository(ui, repopath, repopath2)