D12136: revlog: extract entry byte offsets into named constants
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY Labelling the fields pointed by the given offsets shared by revlog v1 and v2. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12136 AFFECTED FILES mercurial/cext/revlog.c CHANGE DETAILS diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c +++ b/mercurial/cext/revlog.c @@ -136,6 +136,20 @@ static const long format_v1 = 1; /* Internal only, could be any number */ static const long format_v2 = 2; /* Internal only, could be any number */ +static const long entry_offset_high = 0; +static const long entry_offset_offset_flags = 4; +static const long entry_offset_comp_len = 8; +static const long entry_offset_uncomp_len = 12; +static const long entry_offset_base_rev = 16; +static const long entry_offset_link_rev = 20; +static const long entry_offset_parent_1 = 24; +static const long entry_offset_parent_2 = 28; +static const long entry_offset_node_id = 32; +static const long entry_offset_sidedata_offset = 64; +static const long entry_offset_sidedata_comp_len = 72; +static const long entry_offset_all_comp_mode = 76; +static const long entry_offset_padding_start = 77; + static const char comp_mode_inline = 2; static const char rank_unknown = -1; @@ -206,8 +220,8 @@ { const char *data = index_deref(self, rev); - ps[0] = getbe32(data + 24); - ps[1] = getbe32(data + 28); + ps[0] = getbe32(data + entry_offset_parent_1); + ps[1] = getbe32(data + entry_offset_parent_2); /* If index file is corrupted, ps[] may point to invalid revisions. So * there is a risk of buffer overflow to trust them unconditionally. */ @@ -254,12 +268,12 @@ return 0; data = index_deref(self, rev); - offset = getbe32(data + 4); + offset = getbe32(data + entry_offset_offset_flags); if (rev == 0) { /* mask out version number for the first entry */ offset &= 0x; } else { - uint32_t offset_high = getbe32(data); + uint32_t offset_high = getbe32(data + entry_offset_high); offset |= ((uint64_t)offset_high) << 32; } return (int64_t)(offset >> 16); @@ -275,7 +289,7 @@ data = index_deref(self, rev); - tmp = (int)getbe32(data + 8); + tmp = (int)getbe32(data + entry_offset_comp_len); if (tmp < 0) { PyErr_Format(PyExc_OverflowError, "revlog entry size out of bound (%d)", tmp); @@ -320,7 +334,7 @@ if (data == NULL) return NULL; - offset_flags = getbe32(data + 4); + offset_flags = getbe32(data + entry_offset_offset_flags); /* * The first entry on-disk needs the version number masked out, * but this doesn't apply if entries are added to an empty index. @@ -328,17 +342,17 @@ if (self->length && pos == 0) offset_flags &= 0x; else { - uint32_t offset_high = getbe32(data); + uint32_t offset_high = getbe32(data + entry_offset_high); offset_flags |= ((uint64_t)offset_high) << 32; } - comp_len = getbe32(data + 8); - uncomp_len = getbe32(data + 12); - base_rev = getbe32(data + 16); - link_rev = getbe32(data + 20); - parent_1 = getbe32(data + 24); - parent_2 = getbe32(data + 28); - c_node_id = data + 32; + comp_len = getbe32(data + entry_offset_comp_len); + uncomp_len = getbe32(data + entry_offset_uncomp_len); + base_rev = getbe32(data + entry_offset_base_rev); + link_rev = getbe32(data + entry_offset_link_rev); + parent_1 = getbe32(data + entry_offset_parent_1); + parent_2 = getbe32(data + entry_offset_parent_2); + c_node_id = data + entry_offset_node_id; if (self->format_version == format_v1) { sidedata_offset = 0; @@ -346,10 +360,12 @@ data_comp_mode = comp_mode_inline; sidedata_comp_mode = comp_mode_inline; } else { - sidedata_offset = getbe64(data + 64); - sidedata_comp_len = getbe32(data + 72); - data_comp_mode = data[76] & 3; - sidedata_comp_mode = ((data[76] >> 2) & 3); + sidedata_offset = getbe64(data + entry_offset_sidedata_offset); + sidedata_comp_len = + getbe32(data + entry_offset_sidedata_comp_len); + data_comp_mode = data[entry_offset_all_comp_mode] & 3; + sidedata_comp_mode = + ((data[entry_offset_all_comp_mode] >> 2) & 3); } return Py_BuildValue(tuple_format, offset_flags, comp_len, uncomp_len, @@ -421,7 +437,7 @@ return NULL; data = index_deref(self, pos); -
D12137: revlog: split revlog v1 and revlog v2 handling
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY Explicitly splitting their fields packing and unpacking makes it easier to extend the existing C implemenation to handle the new changelog format, whose fields and offsets are not simply a superset of the revlog. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12137 AFFECTED FILES mercurial/cext/revlog.c CHANGE DETAILS diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c +++ b/mercurial/cext/revlog.c @@ -136,19 +136,29 @@ static const long format_v1 = 1; /* Internal only, could be any number */ static const long format_v2 = 2; /* Internal only, could be any number */ -static const long entry_offset_high = 0; -static const long entry_offset_offset_flags = 4; -static const long entry_offset_comp_len = 8; -static const long entry_offset_uncomp_len = 12; -static const long entry_offset_base_rev = 16; -static const long entry_offset_link_rev = 20; -static const long entry_offset_parent_1 = 24; -static const long entry_offset_parent_2 = 28; -static const long entry_offset_node_id = 32; -static const long entry_offset_sidedata_offset = 64; -static const long entry_offset_sidedata_comp_len = 72; -static const long entry_offset_all_comp_mode = 76; -static const long entry_offset_padding_start = 77; +static const long entry_v1_offset_high = 0; +static const long entry_v1_offset_offset_flags = 4; +static const long entry_v1_offset_comp_len = 8; +static const long entry_v1_offset_uncomp_len = 12; +static const long entry_v1_offset_base_rev = 16; +static const long entry_v1_offset_link_rev = 20; +static const long entry_v1_offset_parent_1 = 24; +static const long entry_v1_offset_parent_2 = 28; +static const long entry_v1_offset_node_id = 32; + +static const long entry_v2_offset_high = 0; +static const long entry_v2_offset_offset_flags = 4; +static const long entry_v2_offset_comp_len = 8; +static const long entry_v2_offset_uncomp_len = 12; +static const long entry_v2_offset_base_rev = 16; +static const long entry_v2_offset_link_rev = 20; +static const long entry_v2_offset_parent_1 = 24; +static const long entry_v2_offset_parent_2 = 28; +static const long entry_v2_offset_node_id = 32; +static const long entry_v2_offset_sidedata_offset = 64; +static const long entry_v2_offset_sidedata_comp_len = 72; +static const long entry_v2_offset_all_comp_mode = 76; +static const long entry_v2_offset_padding_start = 77; static const char comp_mode_inline = 2; static const char rank_unknown = -1; @@ -220,8 +230,16 @@ { const char *data = index_deref(self, rev); - ps[0] = getbe32(data + entry_offset_parent_1); - ps[1] = getbe32(data + entry_offset_parent_2); + if (self->format_version == format_v1) { + ps[0] = getbe32(data + entry_v1_offset_parent_1); + ps[1] = getbe32(data + entry_v1_offset_parent_2); + } else if (self->format_version == format_v2) { + ps[0] = getbe32(data + entry_v2_offset_parent_1); + ps[1] = getbe32(data + entry_v2_offset_parent_2); + } else { + raise_revlog_error(); + return -1; + } /* If index file is corrupted, ps[] may point to invalid revisions. So * there is a risk of buffer overflow to trust them unconditionally. */ @@ -268,14 +286,32 @@ return 0; data = index_deref(self, rev); - offset = getbe32(data + entry_offset_offset_flags); - if (rev == 0) { - /* mask out version number for the first entry */ - offset &= 0x; + + if (self->format_version == format_v1) { + offset = getbe32(data + entry_v1_offset_offset_flags); + if (rev == 0) { + /* mask out version number for the first entry */ + offset &= 0x; + } else { + uint32_t offset_high = + getbe32(data + entry_v1_offset_high); + offset |= ((uint64_t)offset_high) << 32; + } + } else if (self->format_version == format_v2) { + offset = getbe32(data + entry_v2_offset_offset_flags); + if (rev == 0) { + /* mask out version number for the first entry */ + offset &= 0x; + } else { + uint32_t offset_high = + getbe32(data + entry_v2_offset_high); + offset |= ((uint64_t)offset_high) << 32; + } } else { - uint32_t offset_high = getbe32(data + entry_offset_high); - offset |= ((uint64_t)offset_high) << 32; + raise_revlog_error(); + return -1; } + return (int64_t)(offset >> 16); } @@ -289,7
Re: [PATCH 1 of 2] revlog: extract entry byte offsets into named constants
Patch series resent through Phabricator: https://phab.mercurial-scm.org/D12136 ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D12138: branchmap: split a long condition in branchcache.validfor(), add comments
av6 created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12138 AFFECTED FILES mercurial/branchmap.py CHANGE DETAILS diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -352,17 +352,25 @@ return filename def validfor(self, repo): -"""Is the cache content valid regarding a repo +"""check that cache contents are valid for (a subset of) this repo -- False when cached tipnode is unknown or if we detect a strip. -- True when cache is up to date or a subset of current repo.""" +- False when the order of changesets changed or if we detect a strip. +- True when cache is up-to-date for the current repo or its subset.""" try: -return (self.tipnode == repo.changelog.node(self.tiprev)) and ( -self.filteredhash -== scmutil.filteredhash(repo, self.tiprev, needobsolete=True) -) +node = repo.changelog.node(self.tiprev) except IndexError: +# changesets were stripped and now we don't even have enough to +# find tiprev return False +if self.tipnode != node: +# tiprev doesn't correspond to tipnode: repo was stripped, or this +# repo has a different order of changesets +return False +tiphash = scmutil.filteredhash(repo, self.tiprev, needobsolete=True) +# hashes don't match if this repo view has a different set of filtered +# revisions (e.g. due to phase changes) or obsolete revisions (e.g. +# history was rewritten) +return self.filteredhash == tiphash def _branchtip(self, heads): """Return tuple with last open head in heads and false, To: av6, #hg-reviewers Cc: mercurial-patches, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
[PATCH stable, v2] doc: inspect.getargspec has been removed in Python 3.11
# HG changeset patch # User Mads Kiilerich # Date 1644245153 -3600 # Mon Feb 07 15:45:53 2022 +0100 # Branch stable # Node ID 937db8e65dd5614cc4595cced61f2e21026d3be3 # Parent 01fde63b4eded708802bfd0d0d4cb4ecc5ff6e1c doc: inspect.getargspec has been removed in Python 3.11 Fixed by dropping the inspection introduced in cdda48c93676. The 2nd "reporter" parameter to docutils.languages.get_language has been available since 0.8 more than 10 years ago. Reported for Fedora on https://bugzilla.redhat.com/show_bug.cgi?id=2022252#c2 . diff --git a/doc/hgmanpage.py b/doc/hgmanpage.py --- a/doc/hgmanpage.py +++ b/doc/hgmanpage.py @@ -45,7 +45,6 @@ from __future__ import absolute_import __docformat__ = 'reStructuredText' -import inspect import re from docutils import ( @@ -177,13 +176,7 @@ class Translator(nodes.NodeVisitor): nodes.NodeVisitor.__init__(self, document) self.settings = settings = document.settings lcode = settings.language_code -arglen = len(inspect.getargspec(languages.get_language)[0]) -if arglen == 2: -self.language = languages.get_language( -lcode, self.document.reporter -) -else: -self.language = languages.get_language(lcode) +self.language = languages.get_language(lcode, self.document.reporter) self.head = [] self.body = [] self.foot = [] ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
phab.mercurial-scm.org is completely overrun with SEO spam
Hello I apologize in advance if this isn't the right place to send this, I've turned the mercurial-scm.org-website upside down looking for a webmaster URL or some sort of contact information but come up with nothing. My hope is that someone on this list knows who this should be sent to, and will help me get it to that person. To make a long story short, I run a homebrew search engine, and in cleaning out some spam links from my own index, I've discovered that your phabricator instance is being used for search engine spam. By linking from your a high value domain like mercurial-scm.org, they're able to boost their own search engine ranking. I stumbled upon this project: https://phab.mercurial-scm.org/project/profile/684/ But there appears to be hundreds upon hundreds of them: https://phab.mercurial-scm.org/project/ Thanks, / V ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D12141: rank: add minimal test
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This adds a small test checking the rank computation in the case of a merge. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12141 AFFECTED FILES tests/test-rank.t CHANGE DETAILS diff --git a/tests/test-rank.t b/tests/test-rank.t new file mode 100644 --- /dev/null +++ b/tests/test-rank.t @@ -0,0 +1,42 @@ += +Check that we can compute and exchange revision rank properly += + + $ cat << EOF >> $HGRCPATH + > [format] + > exp-use-changelog-v2=enable-unstable-format-and-corrupt-my-data + > EOF + + +Test minimal rank computation with merge + + $ hg init rank-repo-minimal + $ cd rank-repo-minimal + $ touch 0 + $ hg add 0 + $ hg commit -m 0 + $ touch 1 + $ hg add 1 + $ hg commit -m 1 + $ hg update -r 0 >> /dev/null + $ touch 2 + $ hg add 2 + $ hg commit -m 2 >> /dev/null + $ hg merge -r 1 >> /dev/null + $ hg commit -m 3 + $ touch 4 + $ hg add 4 + $ hg commit -m 4 + $ hg log --graph --template '{rev} {_fast_rank}\n' + @ 4 5 + | + o3 4 + |\ + | o 2 2 + | | + o | 1 2 + |/ + o 0 1 + + $ cd .. + To: pacien, #hg-reviewers Cc: mercurial-patches, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D12142: rank: add test with golden values
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This adds a regression test for the computation of the rank, using the current values computed with the naive algorithm as the "golden" reference. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12142 AFFECTED FILES tests/test-rank.t CHANGE DETAILS diff --git a/tests/test-rank.t b/tests/test-rank.t --- a/tests/test-rank.t +++ b/tests/test-rank.t @@ -40,3 +40,188 @@ $ cd .. + +Build a bigger example repo + + $ hg init rank-repo-generated + $ cd rank-repo-generated + $ hg debugbuilddag '.:root1+5:mp1https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D12139: rank: naive rank property computation and retrieval
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This stores the rank (size of the ancestor set of a revision, including itself) in a changelog field and allows this property to be retrieved. The value is computed in a naive way from the definition of the rank. This will be replaced by a more efficient version later on. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12139 AFFECTED FILES mercurial/revlog.py CHANGE DETAILS diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -40,11 +40,13 @@ COMP_MODE_DEFAULT, COMP_MODE_INLINE, COMP_MODE_PLAIN, +ENTRY_RANK, FEATURES_BY_VERSION, FLAG_GENERALDELTA, FLAG_INLINE_DATA, INDEX_HEADER, KIND_CHANGELOG, +RANK_UNKNOWN, REVLOGV0, REVLOGV1, REVLOGV1_FLAGS, @@ -872,6 +874,20 @@ return len(self.revision(rev, raw=False)) +def fast_rank(self, rev): +"""The "rank" of the revision if available, None otherwise + +The rank of a revision is the size of sub-graph it defines as a head. +In other words, the rank og X i sthe size of `ancestors(X)` (X +included). + +Some variant of revlog persist this value and make it available. +""" +rank = self.index[rev][ENTRY_RANK] +if rank == RANK_UNKNOWN: +return None +return rank + def chainbase(self, rev): base = self._chainbasecache.get(rev) if base is not None: @@ -2472,6 +2488,11 @@ # than ones we manually add. sidedata_offset = 0 +# maybe the index.append should compute it when applicable instead +rank = RANK_UNKNOWN +if self._format_version == CHANGELOGV2: +rank = len(list(self.ancestors([p1r, p2r], inclusive=True))) + 1 + e = revlogutils.entry( flags=flags, data_offset=offset, @@ -2486,6 +2507,7 @@ sidedata_offset=sidedata_offset, sidedata_compressed_length=len(serialized_sidedata), sidedata_compression_mode=sidedata_compression_mode, +rank=rank, ) self.index.append(e) To: pacien, #hg-reviewers Cc: mercurial-patches, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D12140: rank: add context and template keyword
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This makes the stored rank property accessible, to be expanded and printed. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12140 AFFECTED FILES mercurial/context.py mercurial/templatekw.py CHANGE DETAILS diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py --- a/mercurial/templatekw.py +++ b/mercurial/templatekw.py @@ -304,6 +304,20 @@ ) +@templatekeyword(b'_fast_rank', requires={b'ctx'}) +def fast_rank(context, mapping): +"""the rank of a changeset if cached + +The rank of a revision is the size of sub-graph it defines as a head. In +other words, the rank of X is the size of `ancestors(X)` (X included). +""" +ctx = context.resource(mapping, b'ctx') +rank = ctx.fast_rank() +if rank is None: +return None +return b"%d" % rank + + def _getfilestatus(context, mapping, listall=False): ctx = context.resource(mapping, b'ctx') revcache = context.resource(mapping, b'revcache') diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -685,6 +685,14 @@ """Return a list of byte bookmark names.""" return self._repo.nodebookmarks(self._node) +def fast_rank(self): +repo = self._repo +if self._maybe_filtered: +cl = repo.changelog +else: +cl = repo.unfiltered().changelog +return cl.fast_rank(self._rev) + def phase(self): return self._repo._phasecache.phase(self._repo, self._rev) To: pacien, #hg-reviewers Cc: mercurial-patches, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D12143: rank: compute property incrementally
pacien created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This replace the naive rank computation with a more efficient incremental method, avoiding computing the whole ancestor set when possible. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D12143 AFFECTED FILES mercurial/revlog.py CHANGE DETAILS diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -2491,7 +2491,16 @@ # maybe the index.append should compute it when applicable instead rank = RANK_UNKNOWN if self._format_version == CHANGELOGV2: -rank = len(list(self.ancestors([p1r, p2r], inclusive=True))) + 1 +if (p1r, p2r) == (nullrev, nullrev): +rank = 1 +elif p1r != nullrev and p2r == nullrev: +rank = 1 + self.fast_rank(p1r) +elif p1r == nullrev and p2r != nullrev: +rank = 1 + self.fast_rank(p2r) +else: # merge node +pmin, pmax = sorted((p1r, p2r)) +rank = 1 + self.fast_rank(pmax) +rank += sum(1 for _ in self.findmissingrevs([pmax], [pmin])) e = revlogutils.entry( flags=flags, To: pacien, #hg-reviewers Cc: mercurial-patches, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 1 of 5] rank: naive rank property computation and retrieval
New version of this patch series resent through Phabricator: https://phab.mercurial-scm.org/D12139 ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
mercurial@48719: 38 new changesets
38 new changesets in mercurial: https://www.mercurial-scm.org/repo/hg/rev/cdb0d857afe2 changeset: 48682:cdb0d857afe2 user:Pierre-Yves David date:Mon Jan 31 08:23:54 2022 +0100 summary: dirstate: use a context manager when writing the dirstate https://www.mercurial-scm.org/repo/hg/rev/111f5a0cbcaa changeset: 48683:111f5a0cbcaa user:Pierre-Yves David date:Mon Jan 31 14:26:35 2022 +0100 summary: dirstate: rename the filegenerator used for writing https://www.mercurial-scm.org/repo/hg/rev/568f63b5a30f changeset: 48684:568f63b5a30f user:Pierre-Yves David date:Mon Jan 31 08:44:48 2022 +0100 summary: dirstate: introduce a "tracked-key" feature https://www.mercurial-scm.org/repo/hg/rev/21ac6aedd5e5 changeset: 48685:21ac6aedd5e5 user:Pierre-Yves David date:Mon Jan 31 18:38:15 2022 +0100 summary: transaction: do not rely on a global variable to post_finalize file https://www.mercurial-scm.org/repo/hg/rev/4507bc001365 changeset: 48686:4507bc001365 user:Anton Shestakov date:Fri Jan 28 19:07:52 2022 +0300 summary: obsolete: make sure windows tests pass when stat() is given a URL https://www.mercurial-scm.org/repo/hg/rev/f8f2ecdde4b5 changeset: 48687:f8f2ecdde4b5 user:Anton Shestakov date:Fri Jan 07 11:53:23 2022 +0300 summary: branchmap: skip obsolete revisions while computing heads https://www.mercurial-scm.org/repo/hg/rev/053a5bf508da changeset: 48688:053a5bf508da user:Anton Shestakov date:Tue Jan 04 23:38:39 2022 +0300 summary: discovery: port _postprocessobsolete() changes from evolve, add tests https://www.mercurial-scm.org/repo/hg/rev/fbf7e383e961 changeset: 48689:fbf7e383e961 user:Anton Shestakov date:Sat Jan 15 09:08:41 2022 +0300 summary: destutil: if wdp is obsolete, update to the closest non-obsolete ancestor https://www.mercurial-scm.org/repo/hg/rev/d55c4472bbb6 changeset: 48690:d55c4472bbb6 user:Pierre-Yves David date:Thu Jan 27 17:04:40 2022 +0100 summary: persistent-nodemap: properly delete all nodemap files on downgrade https://www.mercurial-scm.org/repo/hg/rev/b4bc9c4f925d changeset: 48691:b4bc9c4f925d user:Pierre-Yves David date:Thu Jan 27 15:22:04 2022 +0100 summary: debugbuilddag: add a flag to allow running it from a non-empty repository https://www.mercurial-scm.org/repo/hg/rev/4933086bebf5 changeset: 48692:4933086bebf5 user:Pierre-Yves David date:Thu Jan 27 15:22:09 2022 +0100 summary: stream-clone: add 5000 changesets to test-clone-stream-format https://www.mercurial-scm.org/repo/hg/rev/de3ac3d2c60b changeset: 48693:de3ac3d2c60b user:Pierre-Yves David date:Thu Jan 27 22:24:11 2022 +0100 summary: stream-clone: allow to change persistent-nodemap format during stream clone https://www.mercurial-scm.org/repo/hg/rev/5c940f9ba3e4 changeset: 48694:5c940f9ba3e4 user:Anton Shestakov date:Mon Jan 31 18:04:11 2022 +0300 summary: dagop: don't import nullrev from .node twice https://www.mercurial-scm.org/repo/hg/rev/48cb4109b6f6 changeset: 48695:48cb4109b6f6 user:Anton Shestakov date:Mon Jan 31 18:05:36 2022 +0300 summary: obsolete: don't import from .node twice https://www.mercurial-scm.org/repo/hg/rev/bf3da4e02087 changeset: 48696:bf3da4e02087 user:Anton Shestakov date:Thu Jan 27 20:04:56 2022 +0300 summary: interfaces: add missing caches kwarg of localrepo.updatecaches() https://www.mercurial-scm.org/repo/hg/rev/fba2d7fab11e changeset: 48697:fba2d7fab11e user:Pierre-Yves David date:Thu Feb 03 06:49:48 2022 +0100 summary: phabricator-refresh: add a magic value to skip it in the CI https://www.mercurial-scm.org/repo/hg/rev/937998e43e93 changeset: 48698:937998e43e93 user:Pierre-Yves David date:Fri Jan 28 14:23:37 2022 +0100 summary: merge: break up a not-so-one-liner for readability https://www.mercurial-scm.org/repo/hg/rev/10407e8e3807 changeset: 48699:10407e8e3807 user:Pierre-Yves David date:Fri Jan 28 14:23:49 2022 +0100 summary: merge: break up a not-so-one-liner for readability https://www.mercurial-scm.org/repo/hg/rev/d8577d00c023 changeset: 48700:d8577d00c023 user:Pierre-Yves David date:Fri Jan 28 14:23:56 2022 +0100 summary: merge: break up a not-so-one-liner for readability https://www.mercurial-scm.org/repo/hg/rev/85c69b0dfa8f changeset: 48701:85c69b0dfa8f user:Pierre-Yves David date:Fri Jan 28 14:24:30 2022 +0100 summary: merge: break up a not-so-one-liner for readability https://www.mercurial-scm.org/repo/hg/rev/ec23b0ba85c2 changeset: 48702:ec23b0ba85c2 user:Pierre-Yves David date:Fri Jan 28 14:24:41 2022 +0100 summary: merge: break up a not-so-one-liner for readability https://www.mercurial-scm.