--- a/mercurial/bundle2.py Thu Mar 24 21:26:45 2022 -0500
+++ b/mercurial/bundle2.py Tue Mar 29 14:27:45 2022 +0200
@@ -2527,7 +2527,8 @@
@parthandler(b'stream2', (b'requirements', b'filecount', b'bytecount'))
def handlestreamv2bundle(op, part):
- requirements = urlreq.unquote(part.params[b'requirements']).split(b',')
+ requirements = urlreq.unquote(part.params[b'requirements'])
+ requirements = requirements.split(b',') if requirements else []
filecount = int(part.params[b'filecount'])
bytecount = int(part.params[b'bytecount'])
--- a/mercurial/cext/parsers.c Thu Mar 24 21:26:45 2022 -0500
+++ b/mercurial/cext/parsers.c Tue Mar 29 14:27:45 2022 +0200
@@ -501,6 +501,8 @@
static PyObject *dirstate_item_set_untracked(dirstateItemObject *self)
{
self->flags &= ~dirstate_flag_wc_tracked;
+ self->flags &= ~dirstate_flag_has_meaningful_data;
+ self->flags &= ~dirstate_flag_has_mtime;
self->mode = 0;
self->size = 0;
self->mtime_s = 0;
--- a/mercurial/rewriteutil.py Thu Mar 24 21:26:45 2022 -0500
+++ b/mercurial/rewriteutil.py Tue Mar 29 14:27:45 2022 +0200
@@ -48,10 +48,13 @@
return summary
-def precheck(repo, revs, action=b'rewrite'):
+def precheck(repo, revs, action=b'rewrite', check_divergence=True):
"""check if revs can be rewritten
action is used to control the error message.
+ check_divergence allows skipping the divergence checks in cases like adding
+ a prune marker (A, ()) to obsstore (which can't be diverging).
+
Make sure this function is called after taking the lock.
"""
if nullrev in revs:
@@ -84,6 +87,9 @@
hint=hint,
)
+ if not check_divergence:
+ return
+
if not obsolete.isenabled(repo, obsolete.allowdivergenceopt):
new_divergence = _find_new_divergence(repo, revs)
if new_divergence:
--- a/mercurial/tags.py Thu Mar 24 21:26:45 2022 -0500
+++ b/mercurial/tags.py Tue Mar 29 14:27:45 2022 +0200
@@ -806,7 +806,7 @@
# There is some no-merge changeset where p1 is null and p2 is set
# Processing them as merge is just slower, but still gives a good
# result.
- p2node = cl.node(p1rev)
+ p2node = cl.node(p2rev)
p2fnode = self.getfnode(p2node, computemissing=False)
if p1fnode != p2fnode:
# we cannot rely on readfast because we don't know against what
--- a/tests/test-clone-stream.t Thu Mar 24 21:26:45 2022 -0500
+++ b/tests/test-clone-stream.t Tue Mar 29 14:27:45 2022 +0200
@@ -817,3 +817,9 @@
$ killdaemons.py
#endif
+
+Cloning a repo with no requirements doesn't give some obscure error
+
+ $ mkdir -p empty-repo/.hg
+ $ hg clone -q --stream ssh://user@dummy/empty-repo empty-repo2
+ $ hg --cwd empty-repo2 verify -q
--- a/tests/test-tags.t Thu Mar 24 21:26:45 2022 -0500
+++ b/tests/test-tags.t Tue Mar 29 14:27:45 2022 +0200
@@ -933,3 +933,58 @@
a8a82d372bb35b42ff736e74f07c23bcd99c371f a
a8a82d372bb35b42ff736e74f07c23bcd99c371f a
0000000000000000000000000000000000000000 a
+
+ $ cd ..
+
+.hgtags fnode should be properly resolved at merge revision (issue6673)
+
+ $ hg init issue6673
+ $ cd issue6673
+
+ $ touch a
+ $ hg ci -qAm a
+ $ hg branch -q stable
+ $ hg ci -m branch
+
+ $ hg up -q default
+ $ hg merge -q stable
+ $ hg ci -m merge
+
+ add tag to stable branch:
+
+ $ hg up -q stable
+ $ echo a >> a
+ $ hg ci -m a
+ $ hg tag whatever
+ $ hg log -GT'{rev} {tags}\n'
+ @ 4 tip
+ |
+ o 3 whatever
+ |
+ | o 2
+ |/|
+ o | 1
+ |/
+ o 0
+
+
+ merge tagged stable into default:
+
+ $ hg up -q default
+ $ hg merge -q stable
+ $ hg ci -m merge
+ $ hg log -GT'{rev} {tags}\n'
+ @ 5 tip
+ |\
+ | o 4
+ | |
+ | o 3 whatever
+ | |
+ o | 2
+ |\|
+ | o 1
+ |/
+ o 0
+
+
+ $ cd ..