annotate mercurial/bundlerepo.py @ 41824:3913223417ea

manifest: accept narrowmatch into constructor instead of getting from repo The manifest should ideally not know at all about the repo, so this is just a little step towards cleaning that up. Differential Revision: https://phab.mercurial-scm.org/D5469
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 03 Dec 2018 22:22:23 -0800
parents 55db747a21ad
children 3472a3f9d785
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8226
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
1 # bundlerepo.py - repository class for viewing uncompressed bundles
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
2 #
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
3 # Copyright 2006, 2007 Benoit Boissinot <bboissin@gmail.com>
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
4 #
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9676
diff changeset
6 # GNU General Public License version 2 or any later version.
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
7
8227
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
8 """Repository class for viewing uncompressed bundles.
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
9
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
10 This provides a read-only repository interface to bundles as if they
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
11 were part of the actual repository.
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
12 """
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
13
26504
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
14 from __future__ import absolute_import
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
15
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
16 import os
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
17 import shutil
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
18
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
19 from .i18n import _
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
20 from .node import nullid
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
21
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
22 from . import (
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
23 bundle2,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
24 changegroup,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
25 changelog,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
26 cmdutil,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
27 discovery,
40604
24e493ec2229 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 40549
diff changeset
28 encoding,
26504
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
29 error,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
30 exchange,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
31 filelog,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
32 localrepo,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
33 manifest,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
34 mdiff,
29464
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
35 node as nodemod,
26504
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
36 pathutil,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
37 phases,
31298
20a42325fdef py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31154
diff changeset
38 pycompat,
26504
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
39 revlog,
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
40 util,
32019
5f68e7341ada vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31703
diff changeset
41 vfs as vfsmod,
26504
5aaf51c14fea bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26390
diff changeset
42 )
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
43
1946
9fee186f7f0d bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1942
diff changeset
44 class bundlerevlog(revlog.revlog):
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
45 def __init__(self, opener, indexfile, cgunpacker, linkmapper):
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
46 # How it works:
18410
de7dac2a58e8 bundlerepo: fix outdated comment
Mads Kiilerich <madski@unity3d.com>
parents: 18216
diff changeset
47 # To retrieve a revision, we need to know the offset of the revision in
de7dac2a58e8 bundlerepo: fix outdated comment
Mads Kiilerich <madski@unity3d.com>
parents: 18216
diff changeset
48 # the bundle (an unbundle object). We store this offset in the index
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
49 # (start). The base of the delta is stored in the base field.
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
50 #
18410
de7dac2a58e8 bundlerepo: fix outdated comment
Mads Kiilerich <madski@unity3d.com>
parents: 18216
diff changeset
51 # To differentiate a rev in the bundle from a rev in the revlog, we
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
52 # check revision against repotiprev.
32019
5f68e7341ada vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31703
diff changeset
53 opener = vfsmod.readonlyvfs(opener)
4266
1b5c38e9d7aa revlog: don't pass datafile as an argument
Matt Mackall <mpm@selenic.com>
parents: 4029
diff changeset
54 revlog.revlog.__init__(self, opener, indexfile)
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
55 self.bundle = cgunpacker
6752
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6646
diff changeset
56 n = len(self)
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
57 self.repotiprev = n - 1
18411
8b0f0dd56cec bundlerepo: improve performance for bundle() revset expression
Mads Kiilerich <madski@unity3d.com>
parents: 18410
diff changeset
58 self.bundlerevs = set() # used by 'bundle()' revset expression
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
59 for deltadata in cgunpacker.deltaiter():
35076
0fe62d8bdd50 bundlerepo: update to use new deltaiter api
Durham Goode <durham@fb.com>
parents: 35002
diff changeset
60 node, p1, p2, cs, deltabase, delta, flags = deltadata
14150
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
61
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
62 size = len(delta)
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
63 start = cgunpacker.tell() - size
14150
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
64
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
65 link = linkmapper(cs)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
66 if node in self.nodemap:
14150
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
67 # this can happen if two branches make the same change
18411
8b0f0dd56cec bundlerepo: improve performance for bundle() revset expression
Mads Kiilerich <madski@unity3d.com>
parents: 18410
diff changeset
68 self.bundlerevs.add(self.nodemap[node])
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
69 continue
14150
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
70
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
71 for p in (p1, p2):
16686
67964cda8701 cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
72 if p not in self.nodemap:
9650
1ad02c04356c bundlerepo: fix small bug in exception raising
Sune Foldager <cryo@cyanite.org>
parents: 9189
diff changeset
73 raise error.LookupError(p, self.indexfile,
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents: 7435
diff changeset
74 _("unknown parent"))
18416
87f370c5fef5 bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents: 18415
diff changeset
75
87f370c5fef5 bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents: 18415
diff changeset
76 if deltabase not in self.nodemap:
87f370c5fef5 bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents: 18415
diff changeset
77 raise LookupError(deltabase, self.indexfile,
87f370c5fef5 bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents: 18415
diff changeset
78 _('unknown delta base'))
87f370c5fef5 bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents: 18415
diff changeset
79
87f370c5fef5 bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents: 18415
diff changeset
80 baserev = self.rev(deltabase)
5159
aba624d2301d fix bundlerepo broken by 4205f626dc05
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4989
diff changeset
81 # start, size, full unc. size, base (unused), link, p1, p2, node
32614
4bafc80f827e bundlerepo: build revlog index with flags
Jun Wu <quark@fb.com>
parents: 32613
diff changeset
82 e = (revlog.offset_type(start, flags), size, -1, baserev, link,
4979
06abdaf78788 revlog: add a magic null revision to our index
Matt Mackall <mpm@selenic.com>
parents: 4962
diff changeset
83 self.rev(p1), self.rev(p2), node)
39636
6104b203bec8 index: replace insert(-1, e) method by append(e) method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38951
diff changeset
84 self.index.append(e)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
85 self.nodemap[node] = n
18411
8b0f0dd56cec bundlerepo: improve performance for bundle() revset expression
Mads Kiilerich <madski@unity3d.com>
parents: 18410
diff changeset
86 self.bundlerevs.add(n)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
87 n += 1
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
88
35830
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
89 def _chunk(self, rev, df=None):
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
90 # Warning: in case of bundle, the diff is against what we stored as
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
91 # delta base, not against rev - 1
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
92 # XXX: could use some caching
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
93 if rev <= self.repotiprev:
9676
48bf28d3c8dd bundlerepo: keep the bundlerevlog interface in sync with revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 9650
diff changeset
94 return revlog.revlog._chunk(self, rev)
12338
680fe77ab5b8 bundlerepo: use bundle objects everywhere
Matt Mackall <mpm@selenic.com>
parents: 12337
diff changeset
95 self.bundle.seek(self.start(rev))
680fe77ab5b8 bundlerepo: use bundle objects everywhere
Matt Mackall <mpm@selenic.com>
parents: 12337
diff changeset
96 return self.bundle.read(self.length(rev))
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
97
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
98 def revdiff(self, rev1, rev2):
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
99 """return or calculate a delta between two revisions"""
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
100 if rev1 > self.repotiprev and rev2 > self.repotiprev:
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
101 # hot path for bundle
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
102 revb = self.index[rev2][3]
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
103 if revb == rev1:
9676
48bf28d3c8dd bundlerepo: keep the bundlerevlog interface in sync with revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 9650
diff changeset
104 return self._chunk(rev2)
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
105 elif rev1 <= self.repotiprev and rev2 <= self.repotiprev:
4028
540d1059c802 bundlerepo: it was meant to be revdiff() instead of chunk()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3791
diff changeset
106 return revlog.revlog.revdiff(self, rev1, rev2)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
107
32616
37e793918c07 bundlerepo: use raw revision in revdiff()
Jun Wu <quark@fb.com>
parents: 32615
diff changeset
108 return mdiff.textdiff(self.revision(rev1, raw=True),
37e793918c07 bundlerepo: use raw revision in revdiff()
Jun Wu <quark@fb.com>
parents: 32615
diff changeset
109 self.revision(rev2, raw=True))
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
110
35830
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
111 def revision(self, nodeorrev, _df=None, raw=False):
16435
df347129305d revlog: fix partial revision() docstring (from d7d64b89a65c)
Patrick Mezard <patrick@mezard.eu>
parents: 16375
diff changeset
112 """return an uncompressed revision of a given node or revision
df347129305d revlog: fix partial revision() docstring (from d7d64b89a65c)
Patrick Mezard <patrick@mezard.eu>
parents: 16375
diff changeset
113 number.
df347129305d revlog: fix partial revision() docstring (from d7d64b89a65c)
Patrick Mezard <patrick@mezard.eu>
parents: 16375
diff changeset
114 """
16375
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
115 if isinstance(nodeorrev, int):
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
116 rev = nodeorrev
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
117 node = self.node(rev)
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
118 else:
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
119 node = nodeorrev
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
120 rev = self.rev(node)
d7d64b89a65c revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents: 16195
diff changeset
121
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
122 if node == nullid:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
123 return ""
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
124
32615
4598e8f43e20 bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents: 32614
diff changeset
125 rawtext = None
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
126 chain = []
18415
95b8629fd2de bundlerepo: use rev instead of node for iteration in revision()
Mads Kiilerich <madski@unity3d.com>
parents: 18414
diff changeset
127 iterrev = rev
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
128 # reconstruct the revision if it is from a changegroup
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
129 while iterrev > self.repotiprev:
40838
55db747a21ad revlog: rename _cache to _revisioncache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40730
diff changeset
130 if self._revisioncache and self._revisioncache[1] == iterrev:
55db747a21ad revlog: rename _cache to _revisioncache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40730
diff changeset
131 rawtext = self._revisioncache[2]
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
132 break
18415
95b8629fd2de bundlerepo: use rev instead of node for iteration in revision()
Mads Kiilerich <madski@unity3d.com>
parents: 18414
diff changeset
133 chain.append(iterrev)
18637
cc28a84db8c9 bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents: 18568
diff changeset
134 iterrev = self.index[iterrev][3]
32615
4598e8f43e20 bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents: 32614
diff changeset
135 if rawtext is None:
4598e8f43e20 bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents: 32614
diff changeset
136 rawtext = self.baserevision(iterrev)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
137
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
138 while chain:
9676
48bf28d3c8dd bundlerepo: keep the bundlerevlog interface in sync with revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 9650
diff changeset
139 delta = self._chunk(chain.pop())
32615
4598e8f43e20 bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents: 32614
diff changeset
140 rawtext = mdiff.patches(rawtext, [delta])
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
141
32615
4598e8f43e20 bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents: 32614
diff changeset
142 text, validatehash = self._processflags(rawtext, self.flags(rev),
31524
c1b7b2285522 revlog: flag processor
Remi Chaintron <remi@fb.com>
parents: 31522
diff changeset
143 'read', raw=raw)
c1b7b2285522 revlog: flag processor
Remi Chaintron <remi@fb.com>
parents: 31522
diff changeset
144 if validatehash:
c1b7b2285522 revlog: flag processor
Remi Chaintron <remi@fb.com>
parents: 31522
diff changeset
145 self.checkhash(text, node, rev=rev)
40838
55db747a21ad revlog: rename _cache to _revisioncache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40730
diff changeset
146 self._revisioncache = (node, rev, rawtext)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
147 return text
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
148
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
149 def baserevision(self, nodeorrev):
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
150 # Revlog subclasses may override 'revision' method to modify format of
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
151 # content retrieved from revlog. To use bundlerevlog with such class one
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
152 # needs to override 'baserevision' and make more specific call here.
32613
433ab46f6bb4 bundlerepo: make baserevision return raw text
Jun Wu <quark@fb.com>
parents: 32502
diff changeset
153 return revlog.revlog.revision(self, nodeorrev, raw=True)
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
154
35830
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
155 def addrevision(self, *args, **kwargs):
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
156 raise NotImplementedError
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
157
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
158 def addgroup(self, *args, **kwargs):
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
159 raise NotImplementedError
35830
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
160
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
161 def strip(self, *args, **kwargs):
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
162 raise NotImplementedError
35830
32d079f37207 bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35794
diff changeset
163
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
164 def checksize(self):
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
165 raise NotImplementedError
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
166
1946
9fee186f7f0d bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1942
diff changeset
167 class bundlechangelog(bundlerevlog, changelog.changelog):
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
168 def __init__(self, opener, cgunpacker):
1946
9fee186f7f0d bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1942
diff changeset
169 changelog.changelog.__init__(self, opener)
14150
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
170 linkmapper = lambda x: x
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
171 bundlerevlog.__init__(self, opener, self.indexfile, cgunpacker,
14150
cb91ea6af733 bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14076
diff changeset
172 linkmapper)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
173
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
174 def baserevision(self, nodeorrev):
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
175 # Although changelog doesn't override 'revision' method, some extensions
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
176 # may replace this class with another that does. Same story with
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
177 # manifest and filelog classes.
25139
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
178
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
179 # This bypasses filtering on changelog.node() and rev() because we need
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
180 # revision text of the bundle base even if it is hidden.
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
181 oldfilter = self.filteredrevs
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
182 try:
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
183 self.filteredrevs = ()
32613
433ab46f6bb4 bundlerepo: make baserevision return raw text
Jun Wu <quark@fb.com>
parents: 32502
diff changeset
184 return changelog.changelog.revision(self, nodeorrev, raw=True)
25139
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
185 finally:
995003a324da bundlerepo: disable filtering of changelog while constructing revision text
Yuya Nishihara <yuya@tcha.org>
parents: 25013
diff changeset
186 self.filteredrevs = oldfilter
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
187
31152
31de088945cd manifest: add bundlemanifestlog support
Durham Goode <durham@fb.com>
parents: 30997
diff changeset
188 class bundlemanifest(bundlerevlog, manifest.manifestrevlog):
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
189 def __init__(self, opener, cgunpacker, linkmapper, dirlogstarts=None,
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
190 dir=''):
40029
0d97530eb535 manifest: rename dir argument and attribute to tree
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39636
diff changeset
191 manifest.manifestrevlog.__init__(self, opener, tree=dir)
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
192 bundlerevlog.__init__(self, opener, self.indexfile, cgunpacker,
4266
1b5c38e9d7aa revlog: don't pass datafile as an argument
Matt Mackall <mpm@selenic.com>
parents: 4029
diff changeset
193 linkmapper)
30476
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
194 if dirlogstarts is None:
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
195 dirlogstarts = {}
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
196 if self.bundle.version == "03":
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
197 dirlogstarts = _getfilestarts(self.bundle)
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
198 self._dirlogstarts = dirlogstarts
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
199 self._linkmapper = linkmapper
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
200
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
201 def baserevision(self, nodeorrev):
27025
1f0e78f8f55f bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com>
parents: 26504
diff changeset
202 node = nodeorrev
1f0e78f8f55f bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com>
parents: 26504
diff changeset
203 if isinstance(node, int):
1f0e78f8f55f bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com>
parents: 26504
diff changeset
204 node = self.node(node)
1f0e78f8f55f bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com>
parents: 26504
diff changeset
205
30695
1619efcde9a4 manifest: make one use of _mancache avoid manifestctxs
Durham Goode <durham@fb.com>
parents: 30686
diff changeset
206 if node in self.fulltextcache:
32125
2a18e9e6ca43 py3: use bytearray() instead of array('c', ...) constructions
Augie Fackler <augie@google.com>
parents: 32019
diff changeset
207 result = '%s' % self.fulltextcache[node]
27025
1f0e78f8f55f bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com>
parents: 26504
diff changeset
208 else:
32613
433ab46f6bb4 bundlerepo: make baserevision return raw text
Jun Wu <quark@fb.com>
parents: 32502
diff changeset
209 result = manifest.manifestrevlog.revision(self, nodeorrev, raw=True)
27025
1f0e78f8f55f bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com>
parents: 26504
diff changeset
210 return result
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
211
30476
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
212 def dirlog(self, d):
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
213 if d in self._dirlogstarts:
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
214 self.bundle.seek(self._dirlogstarts[d])
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
215 return bundlemanifest(
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
216 self.opener, self.bundle, self._linkmapper,
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
217 self._dirlogstarts, dir=d)
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
218 return super(bundlemanifest, self).dirlog(d)
55d341877316 bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents: 30474
diff changeset
219
38283
1541e1a8e87d filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38117
diff changeset
220 class bundlefilelog(filelog.filelog):
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
221 def __init__(self, opener, path, cgunpacker, linkmapper):
1946
9fee186f7f0d bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1942
diff changeset
222 filelog.filelog.__init__(self, opener, path)
38283
1541e1a8e87d filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38117
diff changeset
223 self._revlog = bundlerevlog(opener, self.indexfile,
1541e1a8e87d filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38117
diff changeset
224 cgunpacker, linkmapper)
14287
7c231754a621 filelog: add file function to open other filelogs
Sune Foldager <cryo@cyanite.org>
parents: 14190
diff changeset
225
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
226 def baserevision(self, nodeorrev):
32613
433ab46f6bb4 bundlerepo: make baserevision return raw text
Jun Wu <quark@fb.com>
parents: 32502
diff changeset
227 return filelog.filelog.revision(self, nodeorrev, raw=True)
19629
81241f978fd2 bundlerevlog: extract 'baserevision' method
Wojciech Lopata <lopek@fb.com>
parents: 18825
diff changeset
228
17193
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
229 class bundlepeer(localrepo.localpeer):
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
230 def canpush(self):
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
231 return False
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
232
23643
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
233 class bundlephasecache(phases.phasecache):
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
234 def __init__(self, *args, **kwargs):
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
235 super(bundlephasecache, self).__init__(*args, **kwargs)
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
236 if util.safehasattr(self, 'opener'):
32019
5f68e7341ada vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31703
diff changeset
237 self.opener = vfsmod.readonlyvfs(self.opener)
23643
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
238
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
239 def write(self):
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
240 raise NotImplementedError
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
241
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
242 def _write(self, fp):
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
243 raise NotImplementedError
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
244
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
245 def _updateroots(self, phase, newroots, tr):
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
246 self.phaseroots[phase] = newroots
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
247 self.invalidate()
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
248 self.dirty = True
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
249
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
250 def _getfilestarts(cgunpacker):
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
251 filespos = {}
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
252 for chunkdata in iter(cgunpacker.filelogheader, {}):
30473
9e88077f972c bundlerepo: introduce method to find file starts and use it
Augie Fackler <augie@google.com>
parents: 30472
diff changeset
253 fname = chunkdata['filename']
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
254 filespos[fname] = cgunpacker.tell()
35859
90609be10891 bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35858
diff changeset
255 for chunk in iter(lambda: cgunpacker.deltachunk(None), {}):
30473
9e88077f972c bundlerepo: introduce method to find file starts and use it
Augie Fackler <augie@google.com>
parents: 30472
diff changeset
256 pass
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
257 return filespos
30473
9e88077f972c bundlerepo: introduce method to find file starts and use it
Augie Fackler <augie@google.com>
parents: 30472
diff changeset
258
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
259 class bundlerepository(object):
35833
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
260 """A repository instance that is a union of a local repo and a bundle.
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
261
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
262 Instances represent a read-only repository composed of a local repository
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
263 with the contents of a bundle file applied. The repository instance is
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
264 conceptually similar to the state of a repository after an
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
265 ``hg unbundle`` operation. However, the contents of the bundle are never
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
266 applied to the actual base repository.
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
267
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
268 Instances constructed directly are not usable as repository objects.
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
269 Use instance() or makebundlerepository() to create instances.
35833
d2458ba810c5 bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35832
diff changeset
270 """
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
271 def __init__(self, bundlepath, url, tempparent):
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
272 self._tempparent = tempparent
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
273 self._url = url
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
274
20790
49f2d5644f04 config: set a 'source' in most cases where config don't come from file but code
Mads Kiilerich <madski@unity3d.com>
parents: 19629
diff changeset
275 self.ui.setconfig('phases', 'publish', False, 'bundlerepo')
2673
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2273
diff changeset
276
2273
f116ddea537f add support for compressed bundle repositories
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2257
diff changeset
277 self.tempfile = None
35832
4696938d40f9 bundlerepo: rename arguments to bundlerepository.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35831
diff changeset
278 f = util.posixfile(bundlepath, "rb")
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
279 bundle = exchange.readbundle(self.ui, f, bundlepath)
12044
bcc7139521b7 bundlerepo: remove duplication of bundle decompressors
Matt Mackall <mpm@selenic.com>
parents: 11154
diff changeset
280
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
281 if isinstance(bundle, bundle2.unbundle20):
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
282 self._bundlefile = bundle
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
283 self._cgunpacker = None
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
284
35898
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
285 cgpart = None
35899
da91e7309daf bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35898
diff changeset
286 for part in bundle.iterparts(seekable=True):
27443
ed41ce89822d bundlerepo: properly extract compressed changegroup from bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27441
diff changeset
287 if part.type == 'changegroup':
35898
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
288 if cgpart:
27443
ed41ce89822d bundlerepo: properly extract compressed changegroup from bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27441
diff changeset
289 raise NotImplementedError("can't process "
ed41ce89822d bundlerepo: properly extract compressed changegroup from bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27441
diff changeset
290 "multiple changegroups")
35898
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
291 cgpart = part
24085
ff5caa8dfd99 bundlerepo: basic bundle2 support
Eric Sumner <ericsumner@fb.com>
parents: 24084
diff changeset
292
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
293 self._handlebundle2part(bundle, part)
24085
ff5caa8dfd99 bundlerepo: basic bundle2 support
Eric Sumner <ericsumner@fb.com>
parents: 24084
diff changeset
294
35898
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
295 if not cgpart:
34672
f672d060a931 bundlerepo: move bundle2 part handling out to a function
Durham Goode <durham@fb.com>
parents: 34671
diff changeset
296 raise error.Abort(_("No changegroups found"))
35898
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
297
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
298 # This is required to placate a later consumer, which expects
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
299 # the payload offset to be at the beginning of the changegroup.
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
300 # We need to do this after the iterparts() generator advances
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
301 # because iterparts() will seek to end of payload after the
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
302 # generator returns control to iterparts().
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
303 cgpart.seek(0, os.SEEK_SET)
2b72bc88043f bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35860
diff changeset
304
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
305 elif isinstance(bundle, changegroup.cg1unpacker):
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
306 if bundle.compressed():
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
307 f = self._writetempbundle(bundle.read, '.hg10un',
35834
4f04c9207a76 bundlerepo: don't assume there are only two bundle classes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35833
diff changeset
308 header='HG10UN')
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
309 bundle = exchange.readbundle(self.ui, f, bundlepath, self.vfs)
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
310
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
311 self._bundlefile = bundle
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
312 self._cgunpacker = bundle
35834
4f04c9207a76 bundlerepo: don't assume there are only two bundle classes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35833
diff changeset
313 else:
4f04c9207a76 bundlerepo: don't assume there are only two bundle classes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35833
diff changeset
314 raise error.Abort(_('bundle type %s cannot be read') %
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
315 type(bundle))
27441
73bf76bf6f14 bundlerepo: uncompress changegroup in bundle1 case only
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27440
diff changeset
316
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
317 # dict with the mapping 'filename' -> position in the changegroup.
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
318 self._cgfilespos = {}
5258
a35756389ef4 Make bundlerepo lazier
Brendan Cully <brendan@kublai.com>
parents: 5159
diff changeset
319
23644
e7fcf58acd71 bundlerepo: retract phase boundary
Eric Sumner <ericsumner@fb.com>
parents: 23643
diff changeset
320 self.firstnewrev = self.changelog.repotiprev + 1
e7fcf58acd71 bundlerepo: retract phase boundary
Eric Sumner <ericsumner@fb.com>
parents: 23643
diff changeset
321 phases.retractboundary(self, None, phases.draft,
e7fcf58acd71 bundlerepo: retract phase boundary
Eric Sumner <ericsumner@fb.com>
parents: 23643
diff changeset
322 [ctx.node() for ctx in self[self.firstnewrev:]])
e7fcf58acd71 bundlerepo: retract phase boundary
Eric Sumner <ericsumner@fb.com>
parents: 23643
diff changeset
323
35836
495fcff10124 bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35835
diff changeset
324 def _handlebundle2part(self, bundle, part):
35858
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
325 if part.type != 'changegroup':
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
326 return
34672
f672d060a931 bundlerepo: move bundle2 part handling out to a function
Durham Goode <durham@fb.com>
parents: 34671
diff changeset
327
35858
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
328 cgstream = part
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
329 version = part.params.get('version', '01')
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
330 legalcgvers = changegroup.supportedincomingversions(self)
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
331 if version not in legalcgvers:
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
332 msg = _('Unsupported changegroup version: %s')
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
333 raise error.Abort(msg % version)
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
334 if bundle.compressed():
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
335 cgstream = self._writetempbundle(part.read, '.cg%sun' % version)
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
336
3eeb0a3eeaed bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35837
diff changeset
337 self._cgunpacker = changegroup.getunbundler(version, cgstream, 'UN')
34672
f672d060a931 bundlerepo: move bundle2 part handling out to a function
Durham Goode <durham@fb.com>
parents: 34671
diff changeset
338
34670
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
339 def _writetempbundle(self, readfn, suffix, header=''):
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
340 """Write a temporary file to disk
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
341 """
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
342 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-",
35831
80e9b85d96e5 bundlerepo: use suffix variable
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35830
diff changeset
343 suffix=suffix)
34670
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
344 self.tempfile = temp
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
345
37621
5bc7ff103081 py3: use r'' instead of sysstr('') to get around code transformer
Yuya Nishihara <yuya@tcha.org>
parents: 36619
diff changeset
346 with os.fdopen(fdtemp, r'wb') as fptemp:
34670
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
347 fptemp.write(header)
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
348 while True:
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
349 chunk = readfn(2**18)
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
350 if not chunk:
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
351 break
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
352 fptemp.write(chunk)
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
353
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
354 return self.vfs.open(self.tempfile, mode="rb")
702a26fec3e2 bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents: 33965
diff changeset
355
18013
a39fe76c4c65 clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17913
diff changeset
356 @localrepo.unfilteredpropertycache
23643
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
357 def _phasecache(self):
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
358 return bundlephasecache(self, self._phasedefaults)
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
359
b8260abfeb7d bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents: 22182
diff changeset
360 @localrepo.unfilteredpropertycache
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
361 def changelog(self):
14152
3c3c53d8343a unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14150
diff changeset
362 # consume the header if it exists
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
363 self._cgunpacker.changelogheader()
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
364 c = bundlechangelog(self.svfs, self._cgunpacker)
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
365 self.manstart = self._cgunpacker.tell()
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
366 return c
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
367
40549
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40390
diff changeset
368 @localrepo.unfilteredpropertycache
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40390
diff changeset
369 def manifestlog(self):
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
370 self._cgunpacker.seek(self.manstart)
14152
3c3c53d8343a unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 14150
diff changeset
371 # consume the header if it exists
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
372 self._cgunpacker.manifestheader()
28892
7a8c44844f57 bundlerepo: properly handle hidden linkrev in manifestlog (issue4945)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 28857
diff changeset
373 linkmapper = self.unfiltered().changelog.rev
40549
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40390
diff changeset
374 rootstore = bundlemanifest(self.svfs, self._cgunpacker, linkmapper)
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
375 self.filestart = self._cgunpacker.tell()
40549
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40390
diff changeset
376
41824
3913223417ea manifest: accept narrowmatch into constructor instead of getting from repo
Martin von Zweigbergk <martinvonz@google.com>
parents: 40838
diff changeset
377 return manifest.manifestlog(self.svfs, self, rootstore,
3913223417ea manifest: accept narrowmatch into constructor instead of getting from repo
Martin von Zweigbergk <martinvonz@google.com>
parents: 40838
diff changeset
378 self.narrowmatch())
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
379
35794
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
380 def _consumemanifest(self):
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
381 """Consumes the manifest portion of the bundle, setting filestart so the
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
382 file portion can be read."""
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
383 self._cgunpacker.seek(self.manstart)
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
384 self._cgunpacker.manifestheader()
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
385 for delta in self._cgunpacker.deltaiter():
35794
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
386 pass
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
387 self.filestart = self._cgunpacker.tell()
35794
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
388
18013
a39fe76c4c65 clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17913
diff changeset
389 @localrepo.unfilteredpropertycache
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
390 def manstart(self):
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
391 self.changelog
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
392 return self.manstart
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
393
18013
a39fe76c4c65 clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17913
diff changeset
394 @localrepo.unfilteredpropertycache
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
395 def filestart(self):
31154
11b8b740d54a manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents: 31152
diff changeset
396 self.manifestlog
35794
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
397
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
398 # If filestart was not set by self.manifestlog, that means the
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
399 # manifestlog implementation did not consume the manifests from the
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
400 # changegroup (ex: it might be consuming trees from a separate bundle2
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
401 # part instead). So we need to manually consume it.
36619
87b085a4f9d1 bundlerepo: use native str when peeking in __dict__
Augie Fackler <augie@google.com>
parents: 36569
diff changeset
402 if r'filestart' not in self.__dict__:
35794
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
403 self._consumemanifest()
a2dfc723b6b5 bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents: 35076
diff changeset
404
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
405 return self.filestart
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
406
2673
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2273
diff changeset
407 def url(self):
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2273
diff changeset
408 return self._url
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2273
diff changeset
409
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
410 def file(self, f):
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
411 if not self._cgfilespos:
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
412 self._cgunpacker.seek(self.filestart)
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
413 self._cgfilespos = _getfilestarts(self._cgunpacker)
5258
a35756389ef4 Make bundlerepo lazier
Brendan Cully <brendan@kublai.com>
parents: 5159
diff changeset
414
35860
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
415 if f in self._cgfilespos:
cd4cd7b94ff1 bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35859
diff changeset
416 self._cgunpacker.seek(self._cgfilespos[f])
28857
5ab6f0fde75f bundlerepo: properly handle hidden linkrev in filelog (issue4945)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 28624
diff changeset
417 linkmapper = self.unfiltered().changelog.rev
35837
3f393e4593f2 bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35836
diff changeset
418 return bundlefilelog(self.svfs, f, self._cgunpacker, linkmapper)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
419 else:
38117
c68262401c8c bundlerepo: use super() when calling file()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37621
diff changeset
420 return super(bundlerepository, self).file(f)
1942
9da45de3118d add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
421
12349
6277a9469dff bundlerepo: restore close() method
Matt Mackall <mpm@selenic.com>
parents: 12341
diff changeset
422 def close(self):
6277a9469dff bundlerepo: restore close() method
Matt Mackall <mpm@selenic.com>
parents: 12341
diff changeset
423 """Close assigned bundle file immediately."""
35835
df2a676a2e9e bundlerepo: make bundle and bundlefile attributes private
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35834
diff changeset
424 self._bundlefile.close()
12962
ff083040a555 bundlerepository: get rid of temporary bundle files (issue2478)
Klaus Koch <kuk42@gmx.net>
parents: 12961
diff changeset
425 if self.tempfile is not None:
20981
4fdd1172d37e bundlerepo: treat temporarily extracted bundle file via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20790
diff changeset
426 self.vfs.unlink(self.tempfile)
6314
9a1c59283ad3 Add ability to directly clone from all-history bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 6312
diff changeset
427 if self._tempparent:
9a1c59283ad3 Add ability to directly clone from all-history bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 6312
diff changeset
428 shutil.rmtree(self._tempparent, True)
2740
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
429
6315
5c96a4bca66b clone: use cancopy
Matt Mackall <mpm@selenic.com>
parents: 6314
diff changeset
430 def cancopy(self):
5c96a4bca66b clone: use cancopy
Matt Mackall <mpm@selenic.com>
parents: 6314
diff changeset
431 return False
5c96a4bca66b clone: use cancopy
Matt Mackall <mpm@selenic.com>
parents: 6314
diff changeset
432
17193
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
433 def peer(self):
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
434 return bundlepeer(self)
1d710fe5ee0e peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents: 17191
diff changeset
435
7435
5e13df32fb74 bundlerepo doesn't really have a dirstate, throw AttributeError if requested
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6953
diff changeset
436 def getcwd(self):
40604
24e493ec2229 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 40549
diff changeset
437 return encoding.getcwd() # always outside the repo
7435
5e13df32fb74 bundlerepo doesn't really have a dirstate, throw AttributeError if requested
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6953
diff changeset
438
29464
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
439 # Check if parents exist in localrepo before setting
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
440 def setparents(self, p1, p2=nullid):
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
441 p1rev = self.changelog.rev(p1)
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
442 p2rev = self.changelog.rev(p2)
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
443 msg = _("setting parent to node %s that only exists in the bundle\n")
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
444 if self.changelog.repotiprev < p1rev:
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
445 self.ui.warn(msg % nodemod.hex(p1))
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
446 if self.changelog.repotiprev < p2rev:
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
447 self.ui.warn(msg % nodemod.hex(p2))
dac81729fea4 bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents: 29407
diff changeset
448 return super(bundlerepository, self).setparents(p1, p2)
15597
bc0778f5619a bundlerepo: don't write branch cache to disk
Sune Foldager <cryo@cyanite.org>
parents: 15091
diff changeset
449
40335
089fc0db0954 hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40029
diff changeset
450 def instance(ui, path, create, intents=None, createopts=None):
2740
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
451 if create:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27177
diff changeset
452 raise error.Abort(_('cannot create new bundle repository'))
26390
5418dd5be8ac bundlerepo: mark internal-only config variable
Matt Mackall <mpm@selenic.com>
parents: 25209
diff changeset
453 # internal config: bundle.mainreporoot
33965
634997248c97 configitems: register the 'bundle.mainreporoot' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32616
diff changeset
454 parentpath = ui.config("bundle", "mainreporoot")
16042
4b7aa1c899dc bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents: 15597
diff changeset
455 if not parentpath:
4b7aa1c899dc bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents: 15597
diff changeset
456 # try to find the correct path to the working directory repo
40604
24e493ec2229 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 40549
diff changeset
457 parentpath = cmdutil.findrepo(encoding.getcwd())
16042
4b7aa1c899dc bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents: 15597
diff changeset
458 if parentpath is None:
4b7aa1c899dc bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents: 15597
diff changeset
459 parentpath = ''
5668
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
460 if parentpath:
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
461 # Try to make the full path relative so we get a nice, short URL.
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
462 # In particular, we don't want temp dir names in test outputs.
40604
24e493ec2229 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 40549
diff changeset
463 cwd = encoding.getcwd()
5668
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
464 if parentpath == cwd:
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
465 parentpath = ''
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
466 else:
25013
6e31e1274080 bundlerepo: use pathutil.normasprefix to ensure os.sep at the end of cwd
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24825
diff changeset
467 cwd = pathutil.normasprefix(cwd)
5668
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
468 if parentpath.startswith(cwd):
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
469 parentpath = parentpath[len(cwd):]
14076
924c82157d46 url: move URL parsing functions into util to improve startup time
Brodie Rao <brodie@bitheap.org>
parents: 14073
diff changeset
470 u = util.url(path)
13826
e574207e3bcd url: refactor util.drop_scheme() and hg.localpath() into url.localpath()
Brodie Rao <brodie@bitheap.org>
parents: 13742
diff changeset
471 path = u.localpath()
e574207e3bcd url: refactor util.drop_scheme() and hg.localpath() into url.localpath()
Brodie Rao <brodie@bitheap.org>
parents: 13742
diff changeset
472 if u.scheme == 'bundle':
2740
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
473 s = path.split("+", 1)
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
474 if len(s) == 1:
5668
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
475 repopath, bundlename = parentpath, s[0]
2740
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
476 else:
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
477 repopath, bundlename = s
386f04d6ecb3 clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2673
diff changeset
478 else:
5668
da72b4d24797 Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 5558
diff changeset
479 repopath, bundlename = parentpath, path
40389
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
480
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
481 return makebundlerepository(ui, repopath, bundlename)
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
482
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
483 def makebundlerepository(ui, repopath, bundlepath):
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
484 """Make a bundle repository object based on repo and bundle paths."""
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
485 if repopath:
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
486 url = 'bundle:%s+%s' % (util.expandpath(repopath), bundlepath)
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
487 else:
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
488 url = 'bundle:%s' % bundlepath
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
489
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
490 # Because we can't make any guarantees about the type of the base
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
491 # repository, we can't have a static class representing the bundle
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
492 # repository. We also can't make any guarantees about how to even
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
493 # call the base repository's constructor!
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
494 #
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
495 # So, our strategy is to go through ``localrepo.instance()`` to construct
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
496 # a repo instance. Then, we dynamically create a new type derived from
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
497 # both it and our ``bundlerepository`` class which overrides some
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
498 # functionality. We then change the type of the constructed repository
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
499 # to this new type and initialize the bundle-specific bits of it.
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
500
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
501 try:
40730
75b53b809e87 bundlerepo: remove a variable alias
Martin von Zweigbergk <martinvonz@google.com>
parents: 40604
diff changeset
502 repo = localrepo.instance(ui, repopath, create=False)
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
503 tempparent = None
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
504 except error.RepoError:
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
505 tempparent = pycompat.mkdtemp()
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
506 try:
40730
75b53b809e87 bundlerepo: remove a variable alias
Martin von Zweigbergk <martinvonz@google.com>
parents: 40604
diff changeset
507 repo = localrepo.instance(ui, tempparent, create=True)
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
508 except Exception:
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
509 shutil.rmtree(tempparent)
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
510 raise
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
511
40730
75b53b809e87 bundlerepo: remove a variable alias
Martin von Zweigbergk <martinvonz@google.com>
parents: 40604
diff changeset
512 class derivedbundlerepository(bundlerepository, repo.__class__):
40390
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
513 pass
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
514
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
515 repo.__class__ = derivedbundlerepository
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
516 bundlerepository.__init__(repo, bundlepath, url, tempparent)
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
517
335ae4d0a552 bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
518 return repo
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
519
23645
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
520 class bundletransactionmanager(object):
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
521 def transaction(self):
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
522 return None
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
523
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
524 def close(self):
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
525 raise NotImplementedError
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
526
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
527 def release(self):
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
528 raise NotImplementedError
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
529
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
530 def getremotechanges(ui, repo, peer, onlyheads=None, bundlename=None,
14073
72c84f24b420 discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14004
diff changeset
531 force=False):
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
532 '''obtains a bundle of changes incoming from peer
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
533
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
534 "onlyheads" restricts the returned changes to those reachable from the
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
535 specified heads.
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
536 "bundlename", if given, stores the bundle to this file path permanently;
14190
8aab5a82685f bundlerepo: fix closing and docstring of getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14163
diff changeset
537 otherwise it's stored to a temp file and gets deleted again when you call
8aab5a82685f bundlerepo: fix closing and docstring of getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14163
diff changeset
538 the returned "cleanupfn".
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
539 "force" indicates whether to proceed on unrelated repos.
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
540
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
541 Returns a tuple (local, csets, cleanupfn):
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
542
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16435
diff changeset
543 "local" is a local repo from which to obtain the actual incoming
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16435
diff changeset
544 changesets; it is a bundlerepo for the obtained bundle when the
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
545 original "peer" is remote.
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
546 "csets" lists the incoming changeset node ids.
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16435
diff changeset
547 "cleanupfn" must be called without arguments when you're done processing
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
548 the changes; it closes both the original "peer" and the one returned
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16435
diff changeset
549 here.
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
550 '''
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
551 tmp = discovery.findcommonincoming(repo, peer, heads=onlyheads,
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16435
diff changeset
552 force=force)
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
553 common, incoming, rheads = tmp
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
554 if not incoming:
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
555 try:
15091
106f89299da6 bundlerepo: add argument check before unlink
Sune Foldager <cryo@cyanite.org>
parents: 14494
diff changeset
556 if bundlename:
21694
c08a22bfa16e bundlerepo: backout dbf292f65b09
Matt Mackall <mpm@selenic.com>
parents: 21562
diff changeset
557 os.unlink(bundlename)
14004
97ed99d1f419 eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents: 13826
diff changeset
558 except OSError:
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
559 pass
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
560 return repo, [], peer.close
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
561
22182
510cafe72004 incoming: don't request heads that already are common
Mads Kiilerich <madski@unity3d.com>
parents: 21694
diff changeset
562 commonset = set(common)
510cafe72004 incoming: don't request heads that already are common
Mads Kiilerich <madski@unity3d.com>
parents: 21694
diff changeset
563 rheads = [x for x in rheads if x not in commonset]
510cafe72004 incoming: don't request heads that already are common
Mads Kiilerich <madski@unity3d.com>
parents: 21694
diff changeset
564
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
565 bundle = None
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
566 bundlerepo = None
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
567 localrepo = peer.local()
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 16686
diff changeset
568 if bundlename or not localrepo:
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
569 # create a bundle (uncompressed if peer repo is not local)
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
570
30445
ff5d5751fc1b bundlerepo: also read the 'devel.legacy.exchange' config
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30150
diff changeset
571 # developer config: devel.legacy.exchange
ff5d5751fc1b bundlerepo: also read the 'devel.legacy.exchange' config
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30150
diff changeset
572 legexc = ui.configlist('devel', 'legacy.exchange')
30450
39537bc64442 bundle2: remove 'experimental.bundle2-exp' boolean config (BC)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30445
diff changeset
573 forcebundle1 = 'bundle2' not in legexc and 'bundle1' in legexc
30445
ff5d5751fc1b bundlerepo: also read the 'devel.legacy.exchange' config
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30150
diff changeset
574 canbundle2 = (not forcebundle1
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
575 and peer.capable('getbundle')
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
576 and peer.capable('bundle2'))
27177
1e8e0b01faba incoming: request a bundle2 when possible (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27176
diff changeset
577 if canbundle2:
38429
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
578 with peer.commandexecutor() as e:
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
579 b2 = e.callcommand('getbundle', {
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
580 'source': 'incoming',
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
581 'common': common,
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
582 'heads': rheads,
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
583 'bundlecaps': exchange.caps20to10(repo, role='client'),
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
584 'cg': True,
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
585 }).result()
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
586
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
587 fname = bundle = changegroup.writechunks(ui,
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
588 b2._forwardchunks(),
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
589 bundlename)
27177
1e8e0b01faba incoming: request a bundle2 when possible (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27176
diff changeset
590 else:
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
591 if peer.capable('getbundle'):
38429
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
592 with peer.commandexecutor() as e:
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
593 cg = e.callcommand('getbundle', {
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
594 'source': 'incoming',
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
595 'common': common,
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
596 'heads': rheads,
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
597 }).result()
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
598 elif onlyheads is None and not peer.capable('changegroupsubset'):
27176
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
599 # compat with older servers when pulling all remote heads
38421
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
600
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
601 with peer.commandexecutor() as e:
38421
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
602 cg = e.callcommand('changegroup', {
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
603 'nodes': incoming,
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
604 'source': 'incoming',
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
605 }).result()
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
606
27176
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
607 rheads = None
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
608 else:
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
609 with peer.commandexecutor() as e:
38421
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
610 cg = e.callcommand('changegroupsubset', {
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
611 'bases': incoming,
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
612 'heads': rheads,
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
613 'source': 'incoming',
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
614 }).result()
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38283
diff changeset
615
27176
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
616 if localrepo:
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
617 bundletype = "HG10BZ"
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
618 else:
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
619 bundletype = "HG10UN"
29407
ae53ecc47414 bundle: move writebundle() from changegroup.py to bundle2.py (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 28892
diff changeset
620 fname = bundle = bundle2.writebundle(ui, cg, bundlename,
27176
a018cbabdb51 bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27025
diff changeset
621 bundletype)
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
622 # keep written bundle?
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
623 if bundlename:
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
624 bundle = None
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 16686
diff changeset
625 if not localrepo:
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
626 # use the created uncompressed bundlerepo
40389
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
627 localrepo = bundlerepo = makebundlerepository(repo. baseui,
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
628 repo.root,
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
629 fname)
a8d2faeca49e bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40388
diff changeset
630
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
631 # this repo contains local and peer now, so filter out local again
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
632 common = repo.heads()
18568
cd403d6d96ef incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18418
diff changeset
633 if localrepo:
cd403d6d96ef incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18418
diff changeset
634 # Part of common may be remotely filtered
cd403d6d96ef incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18418
diff changeset
635 # So use an unfiltered version
cd403d6d96ef incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18418
diff changeset
636 # The discovery process probably need cleanup to avoid that
cd403d6d96ef incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18418
diff changeset
637 localrepo = localrepo.unfiltered()
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
638
14412
9ac479758d3b bundlerepo: make getremotechanges support filtering of incoming
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14287
diff changeset
639 csets = localrepo.changelog.findmissing(common, rheads)
12734
5dfd1c49dcc5 bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12349
diff changeset
640
23645
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
641 if bundlerepo:
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
642 reponodes = [ctx.node() for ctx in bundlerepo[bundlerepo.firstnewrev:]]
38429
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
643
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
644 with peer.commandexecutor() as e:
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
645 remotephases = e.callcommand('listkeys', {
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
646 'namespace': 'phases',
1aa4d646d0de bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38428
diff changeset
647 }).result()
23645
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
648
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
649 pullop = exchange.pulloperation(bundlerepo, peer, heads=reponodes)
23645
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
650 pullop.trmanager = bundletransactionmanager()
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
651 exchange._pullapplyphases(pullop, remotephases)
96c3cbec006f incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents: 23644
diff changeset
652
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
653 def cleanup():
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
654 if bundlerepo:
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
655 bundlerepo.close()
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
656 if bundle:
21694
c08a22bfa16e bundlerepo: backout dbf292f65b09
Matt Mackall <mpm@selenic.com>
parents: 21562
diff changeset
657 os.unlink(bundle)
38428
d959277ff1b5 bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38421
diff changeset
658 peer.close()
14163
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
659
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14158
diff changeset
660 return (localrepo, csets, cleanup)