Mercurial > hg
annotate mercurial/unionrepo.py @ 30978:fdecd24ca4dc
ui: log time spent blocked on stdio
We use a wrapper around Mercurial at Facebook that logs key statistics (like
elpased time) to our standard performance tooling.
This is less useful than it could be, because we currently can't tell when a
command is slow because we need to fix Mercurial versus when a command is
slow because the user isn't interacting quickly.
Teach Mercurial to log the time it spends blocked, so that our tooling can
pick it up and submit it with the elapsed time - we can then do the math in
our tooling to see if Mercurial is slow, or if the user simply failed to
interact.
Combining this with the command duration log means that we can ensure that
we concentrate performance efforts on the things that bite Facebook users.
The perfwrite microbenchmark shifts from:
Linux:
! wall 3.213560 comb 0.410000 user 0.350000 sys 0.060000 (best of 4)
Mac:
! wall 0.342325 comb 0.180000 user 0.110000 sys 0.070000 (best of 20)
before this change to:
! wall 3.478070 comb 0.500000 user 0.420000 sys 0.080000 (best of 3)
Mac:
! wall 0.218112 comb 0.220000 user 0.150000 sys 0.070000 (best of 15)
showing a small hit in comb time, but firmly in the noise on wall time.
author | Simon Farnsworth <simonfar@fb.com> |
---|---|
date | Wed, 15 Feb 2017 13:50:06 -0800 |
parents | 2df983125d37 |
children | 854f9188e354 |
rev | line source |
---|---|
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
1 # unionrepo.py - repository class for viewing union of repository changesets |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
2 # |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
3 # Derived from bundlerepo.py |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
4 # Copyright 2006, 2007 Benoit Boissinot <bboissin@gmail.com> |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
5 # Copyright 2013 Unity Technologies, Mads Kiilerich <madski@unity3d.com> |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
6 # |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
7 # This software may be used and distributed according to the terms of the |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
8 # GNU General Public License version 2 or any later version. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
9 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
10 """Repository class for "in-memory pull" of one local repository to another, |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
11 allowing operations like diff and log with revsets. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
12 """ |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
13 |
25988
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
14 from __future__ import absolute_import |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
15 |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
16 from .i18n import _ |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
17 from .node import nullid |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
18 |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
19 from . import ( |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
20 changelog, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
21 cmdutil, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26230
diff
changeset
|
22 error, |
25988
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
23 filelog, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
24 localrepo, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
25 manifest, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
26 mdiff, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
27 pathutil, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30374
diff
changeset
|
28 pycompat, |
25988
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
29 revlog, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
30 scmutil, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
31 util, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
32 ) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
33 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
34 class unionrevlog(revlog.revlog): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
35 def __init__(self, opener, indexfile, revlog2, linkmapper): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
36 # How it works: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
37 # To retrieve a revision, we just need to know the node id so we can |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
38 # look it up in revlog2. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
39 # |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
40 # To differentiate a rev in the second revlog from a rev in the revlog, |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
41 # we check revision against repotiprev. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
42 opener = scmutil.readonlyvfs(opener) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
43 revlog.revlog.__init__(self, opener, indexfile) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
44 self.revlog2 = revlog2 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
45 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
46 n = len(self) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
47 self.repotiprev = n - 1 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
48 self.bundlerevs = set() # used by 'bundle()' revset expression |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
49 for rev2 in self.revlog2: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
50 rev = self.revlog2.index[rev2] |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
51 # rev numbers - in revlog2, very different from self.rev |
26230
6b16a3538c20
unionrepo: take delta base in account with building unified revlog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25988
diff
changeset
|
52 _start, _csize, _rsize, base, linkrev, p1rev, p2rev, node = rev |
27433
12f727a5b434
changegroup: add flags field to cg3 delta header
Mike Edgar <adgar@google.com>
parents:
26587
diff
changeset
|
53 flags = _start & 0xFFFF |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
54 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
55 if linkmapper is None: # link is to same revlog |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
56 assert linkrev == rev2 # we never link back |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
57 link = n |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
58 else: # rev must be mapped from repo2 cl to unified cl by linkmapper |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
59 link = linkmapper(linkrev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
60 |
26230
6b16a3538c20
unionrepo: take delta base in account with building unified revlog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25988
diff
changeset
|
61 if linkmapper is not None: # link is to same revlog |
6b16a3538c20
unionrepo: take delta base in account with building unified revlog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25988
diff
changeset
|
62 base = linkmapper(base) |
6b16a3538c20
unionrepo: take delta base in account with building unified revlog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25988
diff
changeset
|
63 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
64 if node in self.nodemap: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
65 # this happens for the common revlog revisions |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
66 self.bundlerevs.add(self.nodemap[node]) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
67 continue |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
68 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
69 p1node = self.revlog2.node(p1rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
70 p2node = self.revlog2.node(p2rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
71 |
27433
12f727a5b434
changegroup: add flags field to cg3 delta header
Mike Edgar <adgar@google.com>
parents:
26587
diff
changeset
|
72 e = (flags, None, None, base, |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
73 link, self.rev(p1node), self.rev(p2node), node) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
74 self.index.insert(-1, e) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
75 self.nodemap[node] = n |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
76 self.bundlerevs.add(n) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
77 n += 1 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
78 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
79 def _chunk(self, rev): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
80 if rev <= self.repotiprev: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
81 return revlog.revlog._chunk(self, rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
82 return self.revlog2._chunk(self.node(rev)) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
83 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
84 def revdiff(self, rev1, rev2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
85 """return or calculate a delta between two revisions""" |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
86 if rev1 > self.repotiprev and rev2 > self.repotiprev: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
87 return self.revlog2.revdiff( |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
88 self.revlog2.rev(self.node(rev1)), |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
89 self.revlog2.rev(self.node(rev2))) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
90 elif rev1 <= self.repotiprev and rev2 <= self.repotiprev: |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
91 return self.baserevdiff(rev1, rev2) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
92 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
93 return mdiff.textdiff(self.revision(self.node(rev1)), |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
94 self.revision(self.node(rev2))) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
95 |
30743
2df983125d37
revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents:
30519
diff
changeset
|
96 def revision(self, nodeorrev, raw=False): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
97 """return an uncompressed revision of a given node or revision |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
98 number. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
99 """ |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
100 if isinstance(nodeorrev, int): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
101 rev = nodeorrev |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
102 node = self.node(rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
103 else: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
104 node = nodeorrev |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
105 rev = self.rev(node) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
106 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
107 if node == nullid: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
108 return "" |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
109 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
110 if rev > self.repotiprev: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
111 text = self.revlog2.revision(node) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
112 self._cache = (node, rev, text) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
113 else: |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
114 text = self.baserevision(rev) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
115 # already cached |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
116 return text |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
117 |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
118 def baserevision(self, nodeorrev): |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
119 # Revlog subclasses may override 'revision' method to modify format of |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
120 # content retrieved from revlog. To use unionrevlog with such class one |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
121 # needs to override 'baserevision' and make more specific call here. |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
122 return revlog.revlog.revision(self, nodeorrev) |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
123 |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
124 def baserevdiff(self, rev1, rev2): |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
125 # Exists for the same purpose as baserevision. |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
126 return revlog.revlog.revdiff(self, rev1, rev2) |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
127 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
128 def addrevision(self, text, transaction, link, p1=None, p2=None, d=None): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
129 raise NotImplementedError |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
130 def addgroup(self, revs, linkmapper, transaction): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
131 raise NotImplementedError |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
132 def strip(self, rev, minlink): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
133 raise NotImplementedError |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
134 def checksize(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
135 raise NotImplementedError |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
136 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
137 class unionchangelog(unionrevlog, changelog.changelog): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
138 def __init__(self, opener, opener2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
139 changelog.changelog.__init__(self, opener) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
140 linkmapper = None |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
141 changelog2 = changelog.changelog(opener2) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
142 unionrevlog.__init__(self, opener, self.indexfile, changelog2, |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
143 linkmapper) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
144 |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
145 def baserevision(self, nodeorrev): |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
146 # Although changelog doesn't override 'revision' method, some extensions |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
147 # may replace this class with another that does. Same story with |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
148 # manifest and filelog classes. |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
149 return changelog.changelog.revision(self, nodeorrev) |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
150 |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
151 def baserevdiff(self, rev1, rev2): |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
152 return changelog.changelog.revdiff(self, rev1, rev2) |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
153 |
30374
f2d146d1e8d6
manifest: add unionmanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
154 class unionmanifest(unionrevlog, manifest.manifestrevlog): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
155 def __init__(self, opener, opener2, linkmapper): |
30374
f2d146d1e8d6
manifest: add unionmanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
156 manifest.manifestrevlog.__init__(self, opener) |
f2d146d1e8d6
manifest: add unionmanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
157 manifest2 = manifest.manifestrevlog(opener2) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
158 unionrevlog.__init__(self, opener, self.indexfile, manifest2, |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
159 linkmapper) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
160 |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
161 def baserevision(self, nodeorrev): |
30374
f2d146d1e8d6
manifest: add unionmanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
162 return manifest.manifestrevlog.revision(self, nodeorrev) |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
163 |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
164 def baserevdiff(self, rev1, rev2): |
30374
f2d146d1e8d6
manifest: add unionmanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
165 return manifest.manifestrevlog.revdiff(self, rev1, rev2) |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
166 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
167 class unionfilelog(unionrevlog, filelog.filelog): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
168 def __init__(self, opener, path, opener2, linkmapper, repo): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
169 filelog.filelog.__init__(self, opener, path) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
170 filelog2 = filelog.filelog(opener2, path) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
171 unionrevlog.__init__(self, opener, self.indexfile, filelog2, |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
172 linkmapper) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
173 self._repo = repo |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
174 |
19630
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
175 def baserevision(self, nodeorrev): |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
176 return filelog.filelog.revision(self, nodeorrev) |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
177 |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
178 def baserevdiff(self, rev1, rev2): |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
179 return filelog.filelog.revdiff(self, rev1, rev2) |
bb67f630b335
unionrevlog: extract 'baserevision' and 'baserevdiff' methods
Wojciech Lopata <lopek@fb.com>
parents:
18944
diff
changeset
|
180 |
24118
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
181 def iscensored(self, rev): |
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
182 """Check if a revision is censored.""" |
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
183 if rev <= self.repotiprev: |
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
184 return filelog.filelog.iscensored(self, rev) |
27723
bf86e3e87123
unionrepo: fix wrong rev being checked in iscensored (issue5024)
Sean Farley <sean@farley.io>
parents:
26587
diff
changeset
|
185 node = self.node(rev) |
bf86e3e87123
unionrepo: fix wrong rev being checked in iscensored (issue5024)
Sean Farley <sean@farley.io>
parents:
26587
diff
changeset
|
186 return self.revlog2.iscensored(self.revlog2.rev(node)) |
24118
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
187 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
188 class unionpeer(localrepo.localpeer): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
189 def canpush(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
190 return False |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
191 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
192 class unionrepository(localrepo.localrepository): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
193 def __init__(self, ui, path, path2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
194 localrepo.localrepository.__init__(self, ui, path) |
20790
49f2d5644f04
config: set a 'source' in most cases where config don't come from file but code
Mads Kiilerich <madski@unity3d.com>
parents:
19630
diff
changeset
|
195 self.ui.setconfig('phases', 'publish', False, 'unionrepo') |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
196 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
197 self._url = 'union:%s+%s' % (util.expandpath(path), |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
198 util.expandpath(path2)) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
199 self.repo2 = localrepo.localrepository(ui, path2) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
200 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
201 @localrepo.unfilteredpropertycache |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
202 def changelog(self): |
23878
37a92908a382
localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20790
diff
changeset
|
203 return unionchangelog(self.svfs, self.repo2.svfs) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
204 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
205 def _clrev(self, rev2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
206 """map from repo2 changelog rev to temporary rev in self.changelog""" |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
207 node = self.repo2.changelog.node(rev2) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
208 return self.changelog.rev(node) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
209 |
30218
1767723f71cf
manifest: move manifest creation to a helper function
Durham Goode <durham@fb.com>
parents:
28222
diff
changeset
|
210 def _constructmanifest(self): |
23878
37a92908a382
localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20790
diff
changeset
|
211 return unionmanifest(self.svfs, self.repo2.svfs, |
28222
b966e35aad78
unionrepo: properly handle hidden linkrev in revlog (issue5070)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27750
diff
changeset
|
212 self.unfiltered()._clrev) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
213 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
214 def url(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
215 return self._url |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
216 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
217 def file(self, f): |
23878
37a92908a382
localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20790
diff
changeset
|
218 return unionfilelog(self.svfs, f, self.repo2.svfs, |
28222
b966e35aad78
unionrepo: properly handle hidden linkrev in revlog (issue5070)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27750
diff
changeset
|
219 self.unfiltered()._clrev, self) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
220 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
221 def close(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
222 self.repo2.close() |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
223 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
224 def cancopy(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
225 return False |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
226 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
227 def peer(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
228 return unionpeer(self) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
229 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
230 def getcwd(self): |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30374
diff
changeset
|
231 return pycompat.getcwd() # always outside the repo |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
232 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
233 def instance(ui, path, create): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
234 if create: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26230
diff
changeset
|
235 raise error.Abort(_('cannot create new union repository')) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
236 parentpath = ui.config("bundle", "mainreporoot", "") |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
237 if not parentpath: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
238 # try to find the correct path to the working directory repo |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30374
diff
changeset
|
239 parentpath = cmdutil.findrepo(pycompat.getcwd()) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
240 if parentpath is None: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
241 parentpath = '' |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
242 if parentpath: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
243 # Try to make the full path relative so we get a nice, short URL. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
244 # In particular, we don't want temp dir names in test outputs. |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30374
diff
changeset
|
245 cwd = pycompat.getcwd() |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
246 if parentpath == cwd: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
247 parentpath = '' |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
248 else: |
24835
e4f75c93f073
unionrepo: use pathutil.normasprefix to ensure os.sep at the end of cwd
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24118
diff
changeset
|
249 cwd = pathutil.normasprefix(cwd) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
250 if parentpath.startswith(cwd): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
251 parentpath = parentpath[len(cwd):] |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
252 if path.startswith('union:'): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
253 s = path.split(":", 1)[1].split("+", 1) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
254 if len(s) == 1: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
255 repopath, repopath2 = parentpath, s[0] |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
256 else: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
257 repopath, repopath2 = s |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
258 else: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
259 repopath, repopath2 = parentpath, path |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
260 return unionrepository(ui, repopath, repopath2) |