Mercurial > hg
annotate mercurial/unionrepo.py @ 47148:a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
We want to make the actual location of the indexfile and location more of an
implementation details than what is is currently. In that process, we make the
attribute private.
Differential Revision: https://phab.mercurial-scm.org/D10574
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 03 May 2021 12:22:16 +0200 |
parents | 8a1a51d31e85 |
children | 8d3c2f9d4af7 |
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 _ |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
17 from .pycompat import getattr |
25988
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, |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
22 encoding, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26230
diff
changeset
|
23 error, |
25988
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
24 filelog, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
25 localrepo, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
26 manifest, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
27 mdiff, |
83f220c7d6f0
unionrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24835
diff
changeset
|
28 pathutil, |
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 util, |
31242
854f9188e354
vfs: use 'vfs' module directly in 'mercurial.unionrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30743
diff
changeset
|
31 vfs as vfsmod, |
25988
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 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
34 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
35 class unionrevlog(revlog.revlog): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
36 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
|
37 # How it works: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
38 # 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
|
39 # look it up in revlog2. |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
40 # |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
41 # 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
|
42 # we check revision against repotiprev. |
31242
854f9188e354
vfs: use 'vfs' module directly in 'mercurial.unionrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30743
diff
changeset
|
43 opener = vfsmod.readonlyvfs(opener) |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
44 target = getattr(revlog2, 'target', None) |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
45 if target is None: |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
46 # a revlog wrapper, eg: the manifestlog that is not an actual revlog |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
47 target = revlog2._revlog.target |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
48 revlog.revlog.__init__(self, opener, target=target, indexfile=indexfile) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
49 self.revlog2 = revlog2 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
50 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
51 n = len(self) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
52 self.repotiprev = n - 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
53 self.bundlerevs = set() # used by 'bundle()' revset expression |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
54 for rev2 in self.revlog2: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
55 rev = self.revlog2.index[rev2] |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
56 # rev numbers - in revlog2, very different from self.rev |
47142
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
57 ( |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
58 _start, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
59 _csize, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
60 rsize, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
61 base, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
62 linkrev, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
63 p1rev, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
64 p2rev, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
65 node, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
66 _sdo, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
67 _sds, |
4292bed8da7c
revlog: make the index always return the same tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
68 ) = rev |
27433
12f727a5b434
changegroup: add flags field to cg3 delta header
Mike Edgar <adgar@google.com>
parents:
26587
diff
changeset
|
69 flags = _start & 0xFFFF |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
70 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
71 if linkmapper is None: # link is to same revlog |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
72 assert linkrev == rev2 # we never link back |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
73 link = n |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
74 else: # rev must be mapped from repo2 cl to unified cl by linkmapper |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
75 link = linkmapper(linkrev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
76 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
77 if linkmapper is not None: # link is to same revlog |
26230
6b16a3538c20
unionrepo: take delta base in account with building unified revlog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25988
diff
changeset
|
78 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
|
79 |
43565
f212cc5ffceb
index: use `index.get_rev` in `unionrepo.unionrevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43533
diff
changeset
|
80 this_rev = self.index.get_rev(node) |
f212cc5ffceb
index: use `index.get_rev` in `unionrepo.unionrevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43533
diff
changeset
|
81 if this_rev is not None: |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
82 # this happens for the common revlog revisions |
43565
f212cc5ffceb
index: use `index.get_rev` in `unionrepo.unionrevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43533
diff
changeset
|
83 self.bundlerevs.add(this_rev) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
84 continue |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
85 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
86 p1node = self.revlog2.node(p1rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
87 p2node = self.revlog2.node(p2rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
88 |
45815
b6f4a1df91bd
unionrepo: don't insert index tuples with None as int field
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
89 # TODO: it's probably wrong to set compressed length to -1, but |
38176
df5f6881cebd
unionrepo: fill in uncompressed length of revlog entry
Yuya Nishihara <yuya@tcha.org>
parents:
37717
diff
changeset
|
90 # I have no idea if csize is valid in the base revlog context. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
91 e = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
92 flags, |
45815
b6f4a1df91bd
unionrepo: don't insert index tuples with None as int field
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
93 -1, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
94 rsize, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
95 base, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
96 link, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
97 self.rev(p1node), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
98 self.rev(p2node), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
99 node, |
47143
47ffc754989a
revlog: always "append" full size tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47142
diff
changeset
|
100 0, # sidedata offset |
47ffc754989a
revlog: always "append" full size tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47142
diff
changeset
|
101 0, # sidedata size |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
102 ) |
38850
6104b203bec8
index: replace insert(-1, e) method by append(e) method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38176
diff
changeset
|
103 self.index.append(e) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
104 self.bundlerevs.add(n) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
105 n += 1 |
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 def _chunk(self, rev): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
108 if rev <= self.repotiprev: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
109 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
|
110 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
|
111 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
112 def revdiff(self, rev1, rev2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
113 """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
|
114 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
|
115 return self.revlog2.revdiff( |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
116 self.revlog2.rev(self.node(rev1)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
117 self.revlog2.rev(self.node(rev2)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
118 ) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
119 elif rev1 <= self.repotiprev and rev2 <= self.repotiprev: |
42827
a61a8f78da28
unionrepo: use normal inheritance scheme to call revdiff
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42826
diff
changeset
|
120 return super(unionrevlog, self).revdiff(rev1, rev2) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
121 |
42826
3e2520acf17b
unionrepo: fix `revdiff` implementation to use `rawdata`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42825
diff
changeset
|
122 return mdiff.textdiff(self.rawdata(rev1), self.rawdata(rev2)) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
123 |
42824
64c3db458d08
unionrepo: use a lower level overide in unionrepo too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42726
diff
changeset
|
124 def _revisiondata(self, nodeorrev, _df=None, raw=False): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
125 if isinstance(nodeorrev, int): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
126 rev = nodeorrev |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
127 node = self.node(rev) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
128 else: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
129 node = nodeorrev |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
130 rev = self.rev(node) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
131 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
132 if rev > self.repotiprev: |
42824
64c3db458d08
unionrepo: use a lower level overide in unionrepo too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42726
diff
changeset
|
133 # work around manifestrevlog NOT being a revlog |
64c3db458d08
unionrepo: use a lower level overide in unionrepo too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42726
diff
changeset
|
134 revlog2 = getattr(self.revlog2, '_revlog', self.revlog2) |
64c3db458d08
unionrepo: use a lower level overide in unionrepo too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42726
diff
changeset
|
135 func = revlog2._revisiondata |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
136 else: |
42824
64c3db458d08
unionrepo: use a lower level overide in unionrepo too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42726
diff
changeset
|
137 func = super(unionrevlog, self)._revisiondata |
64c3db458d08
unionrepo: use a lower level overide in unionrepo too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42726
diff
changeset
|
138 return func(node, _df=_df, raw=raw) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
139 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
140 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
|
141 raise NotImplementedError |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
142 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
143 def addgroup( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
144 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
145 deltas, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
146 linkmapper, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
147 transaction, |
46373
711ba0f1057e
revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents:
45815
diff
changeset
|
148 alwayscache=False, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
149 addrevisioncb=None, |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
43565
diff
changeset
|
150 duplicaterevisioncb=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
151 maybemissingparents=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
152 ): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
153 raise NotImplementedError |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
154 |
42196
94e2f8437f6b
unionrepo: sync with repository API
Joerg Sonnenberger <joerg@bec.de>
parents:
41038
diff
changeset
|
155 def strip(self, minlink, transaction): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
156 raise NotImplementedError |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
157 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
158 def checksize(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
159 raise NotImplementedError |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
160 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
161 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
162 class unionchangelog(unionrevlog, changelog.changelog): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
163 def __init__(self, opener, opener2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
164 changelog.changelog.__init__(self, opener) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
165 linkmapper = None |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
166 changelog2 = changelog.changelog(opener2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
167 unionrevlog.__init__( |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47147
diff
changeset
|
168 self, opener, self._indexfile, changelog2, linkmapper |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
169 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
170 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
171 |
30374
f2d146d1e8d6
manifest: add unionmanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
172 class unionmanifest(unionrevlog, manifest.manifestrevlog): |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
173 def __init__(self, nodeconstants, opener, opener2, linkmapper): |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
174 manifest.manifestrevlog.__init__(self, nodeconstants, opener) |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
175 manifest2 = manifest.manifestrevlog(nodeconstants, opener2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
176 unionrevlog.__init__( |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47147
diff
changeset
|
177 self, opener, self._revlog._indexfile, manifest2, linkmapper |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
178 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
179 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
180 |
37497
1541e1a8e87d
filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34219
diff
changeset
|
181 class unionfilelog(filelog.filelog): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
182 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
|
183 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
|
184 filelog2 = filelog.filelog(opener2, path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
185 self._revlog = unionrevlog( |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47147
diff
changeset
|
186 opener, self._revlog._indexfile, filelog2._revlog, linkmapper |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
187 ) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
188 self._repo = repo |
37497
1541e1a8e87d
filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34219
diff
changeset
|
189 self.repotiprev = self._revlog.repotiprev |
1541e1a8e87d
filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34219
diff
changeset
|
190 self.revlog2 = self._revlog.revlog2 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
191 |
24118
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
192 def iscensored(self, rev): |
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
193 """Check if a revision is censored.""" |
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
194 if rev <= self.repotiprev: |
76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com>
parents:
24003
diff
changeset
|
195 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
|
196 node = self.node(rev) |
bf86e3e87123
unionrepo: fix wrong rev being checked in iscensored (issue5024)
Sean Farley <sean@farley.io>
parents:
26587
diff
changeset
|
197 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
|
198 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
199 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
200 class unionpeer(localrepo.localpeer): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
201 def canpush(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
202 return False |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
203 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
204 |
39605
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
205 class unionrepository(object): |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
206 """Represents the union of data in 2 repositories. |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
207 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
208 Instances are not usable if constructed directly. Use ``instance()`` |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
209 or ``makeunionrepository()`` to create a usable instance. |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
210 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
211 |
39605
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
212 def __init__(self, repo2, url): |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
213 self.repo2 = repo2 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
214 self._url = url |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
215 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 self.ui.setconfig(b'phases', b'publish', False, b'unionrepo') |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
217 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
218 @localrepo.unfilteredpropertycache |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
219 def changelog(self): |
23878
37a92908a382
localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20790
diff
changeset
|
220 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
|
221 |
39763
5ccd791344f3
localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39605
diff
changeset
|
222 @localrepo.unfilteredpropertycache |
5ccd791344f3
localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39605
diff
changeset
|
223 def manifestlog(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
224 rootstore = unionmanifest( |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
225 self.nodeconstants, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
226 self.svfs, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
227 self.repo2.svfs, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46373
diff
changeset
|
228 self.unfiltered()._clrev, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
229 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
230 return manifest.manifestlog( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
231 self.svfs, self, rootstore, self.narrowmatch() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
232 ) |
39763
5ccd791344f3
localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39605
diff
changeset
|
233 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
234 def _clrev(self, rev2): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
235 """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
|
236 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
|
237 return self.changelog.rev(node) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
238 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
239 def url(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
240 return self._url |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
241 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
242 def file(self, f): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
243 return unionfilelog( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
244 self.svfs, f, self.repo2.svfs, self.unfiltered()._clrev, self |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
245 ) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
246 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
247 def close(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
248 self.repo2.close() |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
249 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
250 def cancopy(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
251 return False |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
252 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
253 def peer(self): |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
254 return unionpeer(self) |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
255 |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
256 def getcwd(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
257 return encoding.getcwd() # always outside the repo |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
258 |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
259 |
39549
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38850
diff
changeset
|
260 def instance(ui, path, create, intents=None, createopts=None): |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
261 if create: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
262 raise error.Abort(_(b'cannot create new union repository')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
263 parentpath = ui.config(b"bundle", b"mainreporoot") |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
264 if not parentpath: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
265 # try to find the correct path to the working directory repo |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
266 parentpath = cmdutil.findrepo(encoding.getcwd()) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
267 if parentpath is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 parentpath = b'' |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
269 if parentpath: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
270 # 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
|
271 # In particular, we don't want temp dir names in test outputs. |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
272 cwd = encoding.getcwd() |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
273 if parentpath == cwd: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
274 parentpath = b'' |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
275 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
|
276 cwd = pathutil.normasprefix(cwd) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
277 if parentpath.startswith(cwd): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
278 parentpath = parentpath[len(cwd) :] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 if path.startswith(b'union:'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 s = path.split(b":", 1)[1].split(b"+", 1) |
18944
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
281 if len(s) == 1: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
282 repopath, repopath2 = parentpath, s[0] |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
283 else: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
284 repopath, repopath2 = s |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
285 else: |
a9c443b3b240
unionrepo: read-only operations on a union of two localrepos
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
286 repopath, repopath2 = parentpath, path |
39605
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
287 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
288 return makeunionrepository(ui, repopath, repopath2) |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
289 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
290 |
39605
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
291 def makeunionrepository(ui, repopath1, repopath2): |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
292 """Make a union repository object from 2 local repo paths.""" |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
293 repo1 = localrepo.instance(ui, repopath1, create=False) |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
294 repo2 = localrepo.instance(ui, repopath2, create=False) |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
295 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
296 url = b'union:%s+%s' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
297 util.expandpath(repopath1), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
298 util.expandpath(repopath2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42829
diff
changeset
|
299 ) |
39605
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
300 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
301 class derivedunionrepository(unionrepository, repo1.__class__): |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
302 pass |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
303 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
304 repo = repo1 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
305 repo.__class__ = derivedunionrepository |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
306 unionrepository.__init__(repo1, repo2, url) |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
307 |
23f2299e9e53
unionrepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
308 return repo |