##// END OF EJS Templates
branching: merge stable into default for 6.9 cycle
Raphaël Gomès -
r52559:8e3f6b5b merge default
parent child Browse files
Show More
@@ -263,3 +263,4 b' 803e61387e86f103483120df35619bdb175e3482'
263 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
@@ -279,3 +279,4 b' 803e61387e86f103483120df35619bdb175e3482'
279 028dc3f92dbd0f93bb78f9848c94ba5eecd72e71 6.7.3
279 028dc3f92dbd0f93bb78f9848c94ba5eecd72e71 6.7.3
280 a1a011d4b148955975cb40d619d285fdd4ee8713 6.7.4
280 a1a011d4b148955975cb40d619d285fdd4ee8713 6.7.4
281 6454c117c6a4003f07d8f4281dd90038955123e4 6.8rc0
281 6454c117c6a4003f07d8f4281dd90038955123e4 6.8rc0
282 11f41248595b6dd7e0fbb434ecbf75c418785a4c 6.8
@@ -7,6 +7,11 b''
7 * GNU General Public License version 2 or any later version.
7 * GNU General Public License version 2 or any later version.
8 */
8 */
9
9
10 #if defined(__sun) && !defined(_XOPEN_SOURCE)
11 /* msg_control is used */
12 #define _XOPEN_SOURCE 600
13 #endif
14
10 #include <arpa/inet.h> /* for ntohl(), htonl() */
15 #include <arpa/inet.h> /* for ntohl(), htonl() */
11 #include <assert.h>
16 #include <assert.h>
12 #include <ctype.h>
17 #include <ctype.h>
@@ -26,6 +31,10 b''
26 #include "procutil.h"
31 #include "procutil.h"
27 #include "util.h"
32 #include "util.h"
28
33
34 #ifndef O_DIRECTORY
35 #define O_DIRECTORY O_RDONLY
36 #endif
37
29 enum {
38 enum {
30 CAP_GETENCODING = 0x0001,
39 CAP_GETENCODING = 0x0001,
31 CAP_RUNCOMMAND = 0x0002,
40 CAP_RUNCOMMAND = 0x0002,
@@ -237,6 +237,8 b' def list_stdlib_modules():'
237 yield m
237 yield m
238 for m in ['cffi']:
238 for m in ['cffi']:
239 yield m
239 yield m
240 yield 'distutils' # in Python < 3.12
241 yield 'distutils.version' # in Python < 3.12
240 stdlib_prefixes = {sys.prefix, sys.exec_prefix}
242 stdlib_prefixes = {sys.prefix, sys.exec_prefix}
241 # We need to supplement the list of prefixes for the search to work
243 # We need to supplement the list of prefixes for the search to work
242 # when run from within a virtualenv.
244 # when run from within a virtualenv.
@@ -1213,11 +1213,12 b' class revbranchcache:'
1213
1213
1214 if self._names:
1214 if self._names:
1215 try:
1215 try:
1216 if repo.ui.configbool(b'storage', b'revbranchcache.mmap'):
1216 usemmap = repo.ui.configbool(b'storage', b'revbranchcache.mmap')
1217 with repo.cachevfs(_rbcrevs) as fp:
1217 with repo.cachevfs(_rbcrevs) as fp:
1218 if usemmap and repo.cachevfs.is_mmap_safe(_rbcrevs):
1218 data = util.buffer(util.mmapread(fp))
1219 data = util.buffer(util.mmapread(fp))
1219 else:
1220 else:
1220 data = repo.cachevfs.read(_rbcrevs)
1221 data = fp.read()
1221 self._rbcrevs = rbcrevs(data)
1222 self._rbcrevs = rbcrevs(data)
1222 except (IOError, OSError) as inst:
1223 except (IOError, OSError) as inst:
1223 repo.ui.debug(
1224 repo.ui.debug(
@@ -1788,7 +1788,7 b' def _addpartsfromopts(ui, repo, bundler,'
1788 addpartrevbranchcache(repo, bundler, outgoing)
1788 addpartrevbranchcache(repo, bundler, outgoing)
1789
1789
1790 if opts.get(b'obsolescence', False):
1790 if opts.get(b'obsolescence', False):
1791 obsmarkers = repo.obsstore.relevantmarkers(nodes=outgoing.missing)
1791 obsmarkers = repo.obsstore.relevantmarkers(outgoing.missing)
1792 buildobsmarkerspart(
1792 buildobsmarkerspart(
1793 bundler,
1793 bundler,
1794 obsmarkers,
1794 obsmarkers,
@@ -2147,7 +2147,7 b' experimental = true # experimental as l'
2147 [[items]]
2147 [[items]]
2148 section = "storage"
2148 section = "storage"
2149 name = "revbranchcache.mmap"
2149 name = "revbranchcache.mmap"
2150 default = true
2150 default = false
2151
2151
2152 [[items]]
2152 [[items]]
2153 section = "storage"
2153 section = "storage"
@@ -703,8 +703,8 b' def _pushdiscoveryobsmarkers(pushop):'
703 repo = pushop.repo
703 repo = pushop.repo
704 # very naive computation, that can be quite expensive on big repo.
704 # very naive computation, that can be quite expensive on big repo.
705 # However: evolution is currently slow on them anyway.
705 # However: evolution is currently slow on them anyway.
706 revs = repo.revs(b'::%ln', pushop.futureheads)
706 nodes = (c.node() for c in repo.set(b'::%ln', pushop.futureheads))
707 pushop.outobsmarkers = pushop.repo.obsstore.relevantmarkers(revs=revs)
707 pushop.outobsmarkers = pushop.repo.obsstore.relevantmarkers(nodes)
708
708
709
709
710 @pushdiscovery(b'bookmarks')
710 @pushdiscovery(b'bookmarks')
@@ -2605,8 +2605,8 b' def _getbundleobsmarkerpart('
2605 if kwargs.get('obsmarkers', False):
2605 if kwargs.get('obsmarkers', False):
2606 if heads is None:
2606 if heads is None:
2607 heads = repo.heads()
2607 heads = repo.heads()
2608 revs = repo.revs(b'::%ln', heads)
2608 subset = [c.node() for c in repo.set(b'::%ln', heads)]
2609 markers = repo.obsstore.relevantmarkers(revs=revs)
2609 markers = repo.obsstore.relevantmarkers(subset)
2610 markers = obsutil.sortedmarkers(markers)
2610 markers = obsutil.sortedmarkers(markers)
2611 bundle2.buildobsmarkerspart(bundler, markers)
2611 bundle2.buildobsmarkerspart(bundler, markers)
2612
2612
@@ -771,11 +771,10 b' class obsstore:'
771 _addchildren(self.children, markers)
771 _addchildren(self.children, markers)
772 _checkinvalidmarkers(self.repo, markers)
772 _checkinvalidmarkers(self.repo, markers)
773
773
774 def relevantmarkers(self, nodes=None, revs=None):
774 def relevantmarkers(self, nodes):
775 """return a set of all obsolescence markers relevant to a set of
775 """return a set of all obsolescence markers relevant to a set of nodes.
776 nodes or revisions.
777
776
778 "relevant" to a set of nodes or revisions mean:
777 "relevant" to a set of nodes mean:
779
778
780 - marker that use this changeset as successor
779 - marker that use this changeset as successor
781 - prune marker of direct children on this changeset
780 - prune marker of direct children on this changeset
@@ -783,21 +782,8 b' class obsstore:'
783 markers
782 markers
784
783
785 It is a set so you cannot rely on order."""
784 It is a set so you cannot rely on order."""
786 if nodes is None:
787 nodes = set()
788 if revs is None:
789 revs = set()
790
785
791 get_rev = self.repo.unfiltered().changelog.index.get_rev
786 pendingnodes = set(nodes)
792 pendingnodes = set()
793 for marker in self._all:
794 for node in (marker[0],) + marker[1] + (marker[5] or ()):
795 if node in nodes:
796 pendingnodes.add(node)
797 elif revs:
798 rev = get_rev(node)
799 if rev is not None and rev in revs:
800 pendingnodes.add(node)
801 seenmarkers = set()
787 seenmarkers = set()
802 seennodes = set(pendingnodes)
788 seennodes = set(pendingnodes)
803 precursorsmarkers = self.predecessors
789 precursorsmarkers = self.predecessors
@@ -108,7 +108,7 b' def getmarkers(repo, nodes=None, exclusi'
108 elif exclusive:
108 elif exclusive:
109 rawmarkers = exclusivemarkers(repo, nodes)
109 rawmarkers = exclusivemarkers(repo, nodes)
110 else:
110 else:
111 rawmarkers = repo.obsstore.relevantmarkers(nodes=nodes)
111 rawmarkers = repo.obsstore.relevantmarkers(nodes)
112
112
113 for markerdata in rawmarkers:
113 for markerdata in rawmarkers:
114 yield marker(repo, markerdata)
114 yield marker(repo, markerdata)
@@ -1460,7 +1460,10 b' class revlog:'
1460 with self.opener(filepath) as fp:
1460 with self.opener(filepath) as fp:
1461 if mmap_threshold is not None:
1461 if mmap_threshold is not None:
1462 file_size = self.opener.fstat(fp).st_size
1462 file_size = self.opener.fstat(fp).st_size
1463 if file_size >= mmap_threshold:
1463 if (
1464 file_size >= mmap_threshold
1465 and self.opener.is_mmap_safe(filepath)
1466 ):
1464 if size is not None:
1467 if size is not None:
1465 # avoid potentiel mmap crash
1468 # avoid potentiel mmap crash
1466 size = min(file_size, size)
1469 size = min(file_size, size)
@@ -74,7 +74,7 b' def persisted_data(revlog):'
74 test_race_hook_1()
74 test_race_hook_1()
75 try:
75 try:
76 with revlog.opener(filename) as fd:
76 with revlog.opener(filename) as fd:
77 if use_mmap:
77 if use_mmap and revlog.opener.is_mmap_safe(filename):
78 try:
78 try:
79 data = util.buffer(util.mmapread(fd, data_length))
79 data = util.buffer(util.mmapread(fd, data_length))
80 except ValueError:
80 except ValueError:
@@ -205,7 +205,7 b' def persist_nodemap(tr, revlog, pending='
205 fd.seek(target_docket.data_length)
205 fd.seek(target_docket.data_length)
206 fd.write(data)
206 fd.write(data)
207 if feed_data:
207 if feed_data:
208 if use_mmap:
208 if use_mmap and revlog.opener.is_mmap_safe(datafile):
209 fd.flush()
209 fd.flush()
210 new_data = util.buffer(util.mmapread(fd, new_length))
210 new_data = util.buffer(util.mmapread(fd, new_length))
211 else:
211 else:
@@ -238,11 +238,11 b' def persist_nodemap(tr, revlog, pending='
238 with revlog.opener(datafile, b'w+') as fd:
238 with revlog.opener(datafile, b'w+') as fd:
239 fd.write(data)
239 fd.write(data)
240 if feed_data:
240 if feed_data:
241 if use_mmap:
241 if use_mmap and revlog.opener.is_mmap_safe(datafile):
242 new_data = data
243 else:
244 fd.flush()
242 fd.flush()
245 new_data = util.buffer(util.mmapread(fd, len(data)))
243 new_data = util.buffer(util.mmapread(fd, len(data)))
244 else:
245 new_data = data
246 target_docket.data_length = len(data)
246 target_docket.data_length = len(data)
247 target_docket.tip_rev = revlog.tiprev()
247 target_docket.tip_rev = revlog.tiprev()
248 target_docket.tip_node = revlog.node(target_docket.tip_rev)
248 target_docket.tip_node = revlog.node(target_docket.tip_rev)
@@ -441,6 +441,13 b' class bufferedinputpipe:'
441
441
442
442
443 def mmapread(fp, size=None):
443 def mmapread(fp, size=None):
444 """Read a file content using mmap
445
446 The responsability of checking the file system is mmap safe is the
447 responsability of the caller.
448
449 In some case, a normal string might be returned.
450 """
444 if size == 0:
451 if size == 0:
445 # size of 0 to mmap.mmap() means "all data"
452 # size of 0 to mmap.mmap() means "all data"
446 # rather than "zero bytes", so special case that.
453 # rather than "zero bytes", so special case that.
@@ -189,6 +189,35 b' class abstractvfs:'
189 def lstat(self, path: Optional[bytes] = None):
189 def lstat(self, path: Optional[bytes] = None):
190 return os.lstat(self.join(path))
190 return os.lstat(self.join(path))
191
191
192 def is_mmap_safe(self, path: Optional[bytes] = None) -> bool:
193 """return True if it is safe to read a file content as mmap
194
195 This focus on the file system aspect of such safety, the application
196 logic around that file is not taken into account, so caller need to
197 make sure the file won't be truncated in a way that will create SIGBUS
198 on access.
199
200
201 The initial motivation for this logic is that if mmap is used on NFS
202 and somebody deletes the mapped file (e.g. by renaming on top of it),
203 then you get SIGBUS, which can be pretty disruptive: we get core dump
204 reports, and the process terminates without writing to the blackbox.
205
206 Instead in this situation we prefer to read the file normally.
207 The risk of ESTALE in the middle of the read remains, but it's
208 smaller because we read sooner and the error should be reported
209 just as any other error.
210
211 Note that python standard library does not offer the necessary function
212 to detect the file stem bits. So this detection rely on compiled bits
213 and is not available in pure python.
214 """
215 # XXX Since we already assume a vfs to address a consistent file system
216 # in other location, we could determine the fstype once for the root
217 # and cache that value.
218 fstype = util.getfstype(self.join(path))
219 return fstype is not None and fstype != b'nfs'
220
192 def listdir(self, path: Optional[bytes] = None):
221 def listdir(self, path: Optional[bytes] = None):
193 return os.listdir(self.join(path))
222 return os.listdir(self.join(path))
194
223
@@ -1,6 +1,4 b''
1 = Mercurial 6.8rc0 =
1 = Mercurial 6.8 =
2
3 /!\ This is a tentative release, any and all notes below are subject to change or removal.
4
2
5 As usual, a *lot* of patches don't make it to this list.
3 As usual, a *lot* of patches don't make it to this list.
6
4
@@ -32,8 +30,6 b" As usual, a *lot* of patches don't make "
32 * tags-cache: skip the filternode step if we are not going to use it
30 * tags-cache: skip the filternode step if we are not going to use it
33 * tags-cache: directly operate on rev-num warming hgtagsfnodescache
31 * tags-cache: directly operate on rev-num warming hgtagsfnodescache
34 * tags-cache: directly perform a monimal walk for hgtagsfnodescache warming
32 * tags-cache: directly perform a monimal walk for hgtagsfnodescache warming
35 * exchange: improve computation of relevant markers for large repos
36
37
33
38 == New Experimental Features ==
34 == New Experimental Features ==
39
35
@@ -43,9 +39,9 b" As usual, a *lot* of patches don't make "
43 * branchcache: add a "pure topological head" fast path
39 * branchcache: add a "pure topological head" fast path
44 * branchcache: allow to detect "pure topological case" for branchmap
40 * branchcache: allow to detect "pure topological case" for branchmap
45
41
46
47 == Bug Fixes ==
42 == Bug Fixes ==
48
43
44 * rust: use `cpython` 0.7.2 crate to add support for Python 3.12
49 * perf-stream-locked-section: actually use v1 generation when requested
45 * perf-stream-locked-section: actually use v1 generation when requested
50 * perf-stream-locked-section: fix the call to the v3 generator
46 * perf-stream-locked-section: fix the call to the v3 generator
51 * perf-stream-locked-section: advertise the right version key in the help
47 * perf-stream-locked-section: advertise the right version key in the help
@@ -62,6 +58,8 b" As usual, a *lot* of patches don't make "
62 * hgrc: search XDG_CONFIG_HOME on mac
58 * hgrc: search XDG_CONFIG_HOME on mac
63 * clonebundles: add missing newline to legacy response
59 * clonebundles: add missing newline to legacy response
64 * narrow: add a test for linkrev computation done during widen
60 * narrow: add a test for linkrev computation done during widen
61 * Multiple fixes to guard against mmap issues
62 * portability: fix build on Solaris-derived systemd
65
63
66 == Backwards Compatibility Changes ==
64 == Backwards Compatibility Changes ==
67
65
@@ -236,9 +236,9 b' dependencies = ['
236
236
237 [[package]]
237 [[package]]
238 name = "cpython"
238 name = "cpython"
239 version = "0.7.1"
239 version = "0.7.2"
240 source = "registry+https://github.com/rust-lang/crates.io-index"
240 source = "registry+https://github.com/rust-lang/crates.io-index"
241 checksum = "3052106c29da7390237bc2310c1928335733b286287754ea85e6093d2495280e"
241 checksum = "43b398a2c65baaf5892f10bb69b52508bf7a993380cc4ecd3785aaebb5c79389"
242 dependencies = [
242 dependencies = [
243 "libc",
243 "libc",
244 "num-traits",
244 "num-traits",
@@ -912,9 +912,9 b' dependencies = ['
912
912
913 [[package]]
913 [[package]]
914 name = "python3-sys"
914 name = "python3-sys"
915 version = "0.7.1"
915 version = "0.7.2"
916 source = "registry+https://github.com/rust-lang/crates.io-index"
916 source = "registry+https://github.com/rust-lang/crates.io-index"
917 checksum = "49f8b50d72fb3015735aa403eebf19bbd72c093bfeeae24ee798be5f2f1aab52"
917 checksum = "0f53ef6740367a09718d2cd21ba15b0d7972342a38e554736bcee7773e45c9f5"
918 dependencies = [
918 dependencies = [
919 "libc",
919 "libc",
920 "regex",
920 "regex",
@@ -37,7 +37,7 b' set up verbosemmap extension'
37
37
38 mmap index which is now more than 4k long
38 mmap index which is now more than 4k long
39 $ hg log -l 5 -T '{rev}\n' --config experimental.mmapindexthreshold=4k
39 $ hg log -l 5 -T '{rev}\n' --config experimental.mmapindexthreshold=4k
40 mmapping $TESTTMP/a/.hg/store/00changelog.i
40 mmapping $TESTTMP/a/.hg/store/00changelog.i (no-pure !)
41 mmapping $TESTTMP/a/.hg/store/00changelog-????????.nd (glob) (rust !)
41 mmapping $TESTTMP/a/.hg/store/00changelog-????????.nd (glob) (rust !)
42 100
42 100
43 99
43 99
General Comments 0
You need to be logged in to leave comments. Login now