diff --git a/.hgsigs b/.hgsigs
index 167901946d21b4425a6c537b493eaafc4e0f5c08_Lmhnc2lncw==..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_Lmhnc2lncw== 100644
--- a/.hgsigs
+++ b/.hgsigs
@@ -201,3 +201,4 @@
 28163c5de797e5416f9b588940f4608269b4d50a 0 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
+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
diff --git a/.hgtags b/.hgtags
index 167901946d21b4425a6c537b493eaafc4e0f5c08_LmhndGFncw==..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_LmhndGFncw== 100644
--- a/.hgtags
+++ b/.hgtags
@@ -261,3 +261,4 @@
 28163c5de797e5416f9b588940f4608269b4d50a 5.5rc0
 7fc3c5fbc65f6fe85d70ea63923b8767dda4f2e0 5.5
 f62bb5d07848ca598aa860a517394130b61bf2ee 5.5.1
+07731064ac41dacdf0ec869ebd05c2e848c14fbf 5.5.2
diff --git a/contrib/genosxversion.py b/contrib/genosxversion.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_Y29udHJpYi9nZW5vc3h2ZXJzaW9uLnB5..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_Y29udHJpYi9nZW5vc3h2ZXJzaW9uLnB5 100755
--- a/contrib/genosxversion.py
+++ b/contrib/genosxversion.py
@@ -6,9 +6,14 @@
 import subprocess
 import sys
 
-# Always load hg libraries from the hg we can find on $PATH.
-hglib = subprocess.check_output(['hg', 'debuginstall', '-T', '{hgmodules}'])
-sys.path.insert(0, os.path.dirname(hglib))
+try:
+    # Always load hg libraries from the hg we can find on $PATH.
+    hglib = subprocess.check_output(['hg', 'debuginstall', '-T', '{hgmodules}'])
+    sys.path.insert(0, os.path.dirname(hglib))
+except subprocess.CalledProcessError:
+    # We're probably running with a PyOxidized Mercurial, so just
+    # proceed and hope it works out okay.
+    pass
 
 from mercurial import util
 
diff --git a/contrib/hgweb.fcgi b/contrib/hgweb.fcgi
index 167901946d21b4425a6c537b493eaafc4e0f5c08_Y29udHJpYi9oZ3dlYi5mY2dp..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_Y29udHJpYi9oZ3dlYi5mY2dp 100755
--- a/contrib/hgweb.fcgi
+++ b/contrib/hgweb.fcgi
@@ -3,7 +3,7 @@
 # An example FastCGI script for use with flup, edit as necessary
 
 # Path to repo or hgweb config to serve (see 'hg help hgweb')
-config = "/path/to/repo/or/config"
+config = b"/path/to/repo/or/config"
 
 # Uncomment and adjust if Mercurial is not installed system-wide
 # (consult "installed modules" path from 'hg debuginstall'):
diff --git a/contrib/hgweb.wsgi b/contrib/hgweb.wsgi
index 167901946d21b4425a6c537b493eaafc4e0f5c08_Y29udHJpYi9oZ3dlYi53c2dp..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_Y29udHJpYi9oZ3dlYi53c2dp 100644
--- a/contrib/hgweb.wsgi
+++ b/contrib/hgweb.wsgi
@@ -2,7 +2,7 @@
 # See https://mercurial-scm.org/wiki/modwsgi for more information
 
 # Path to repo or hgweb config to serve (see 'hg help hgweb')
-config = "/path/to/repo/or/config"
+config = b"/path/to/repo/or/config"
 
 # Uncomment and adjust if Mercurial is not installed system-wide
 # (consult "installed modules" path from 'hg debuginstall'):
diff --git a/hgdemandimport/__init__.py b/hgdemandimport/__init__.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_aGdkZW1hbmRpbXBvcnQvX19pbml0X18ucHk=..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_aGdkZW1hbmRpbXBvcnQvX19pbml0X18ucHk= 100644
--- a/hgdemandimport/__init__.py
+++ b/hgdemandimport/__init__.py
@@ -46,8 +46,9 @@
     # setuptools' pkg_resources.py expects "from __main__ import x" to
     # raise ImportError if x not defined
     '__main__',
+    '_ast',  # https://bugs.python.org/issue41631
     '_ssl',  # conditional imports in the stdlib, issue1964
     '_sre',  # issue4920
     'rfc822',
     'mimetools',
     'sqlalchemy.events',  # has import-time side effects (issue5085)
@@ -49,8 +50,9 @@
     '_ssl',  # conditional imports in the stdlib, issue1964
     '_sre',  # issue4920
     'rfc822',
     'mimetools',
     'sqlalchemy.events',  # has import-time side effects (issue5085)
+    'sqlalchemy.dialects',  # similar problems as above
     # setuptools 8 expects this module to explode early when not on windows
     'distutils.msvc9compiler',
     '__builtin__',
diff --git a/hgext/strip.py b/hgext/strip.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_aGdleHQvc3RyaXAucHk=..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_aGdleHQvc3RyaXAucHk= 100644
--- a/hgext/strip.py
+++ b/hgext/strip.py
@@ -254,7 +254,7 @@
 
             # only reset the dirstate for files that would actually change
             # between the working context and uctx
-            descendantrevs = repo.revs(b"%d::.", uctx.rev())
+            descendantrevs = repo.revs(b"only(., %d)", uctx.rev())
             changedfiles = []
             for rev in descendantrevs:
                 # blindly reset the files, regardless of what actually changed
diff --git a/hgweb.cgi b/hgweb.cgi
index 167901946d21b4425a6c537b493eaafc4e0f5c08_aGd3ZWIuY2dp..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_aGd3ZWIuY2dp 100755
--- a/hgweb.cgi
+++ b/hgweb.cgi
@@ -4,7 +4,7 @@
 # See also https://mercurial-scm.org/wiki/PublishingRepositories
 
 # Path to repo or hgweb config to serve (see 'hg help hgweb')
-config = "/path/to/repo/or/config"
+config = b"/path/to/repo/or/config"
 
 # Uncomment and adjust if Mercurial is not installed system-wide
 # (consult "installed modules" path from 'hg debuginstall'):
diff --git a/mercurial/dagop.py b/mercurial/dagop.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_bWVyY3VyaWFsL2RhZ29wLnB5..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_bWVyY3VyaWFsL2RhZ29wLnB5 100644
--- a/mercurial/dagop.py
+++ b/mercurial/dagop.py
@@ -17,6 +17,7 @@
     node,
     patch,
     pycompat,
+    scmutil,
     smartset,
 )
 
@@ -90,7 +91,7 @@
     visitheap = []
 
     def addvisit(fctx):
-        rev = fctx.rev()
+        rev = scmutil.intrev(fctx)
         if rev not in visit:
             visit[rev] = set()
             heapq.heappush(visitheap, -rev)  # max heap
diff --git a/mercurial/error.py b/mercurial/error.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_bWVyY3VyaWFsL2Vycm9yLnB5..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_bWVyY3VyaWFsL2Vycm9yLnB5 100644
--- a/mercurial/error.py
+++ b/mercurial/error.py
@@ -73,7 +73,10 @@
             from .node import short
 
             name = short(name)
-        RevlogError.__init__(self, b'%s@%s: %s' % (index, name, message))
+        # if name is a binary node, it can be None
+        RevlogError.__init__(
+            self, b'%s@%s: %s' % (index, pycompat.bytestr(name), message)
+        )
 
     def __bytes__(self):
         return RevlogError.__bytes__(self)
diff --git a/mercurial/logcmdutil.py b/mercurial/logcmdutil.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_bWVyY3VyaWFsL2xvZ2NtZHV0aWwucHk=..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_bWVyY3VyaWFsL2xvZ2NtZHV0aWwucHk= 100644
--- a/mercurial/logcmdutil.py
+++ b/mercurial/logcmdutil.py
@@ -753,7 +753,7 @@
     fcache = {}
 
     def filematcher(ctx):
-        return scmutil.matchfiles(repo, fcache.get(ctx.rev(), []))
+        return scmutil.matchfiles(repo, fcache.get(scmutil.intrev(ctx), []))
 
     def revgen():
         for rev, cs in dagop.filectxancestors(fctxs, followfirst=followfirst):
diff --git a/mercurial/repoview.py b/mercurial/repoview.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_bWVyY3VyaWFsL3JlcG92aWV3LnB5..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_bWVyY3VyaWFsL3JlcG92aWV3LnB5 100644
--- a/mercurial/repoview.py
+++ b/mercurial/repoview.py
@@ -62,6 +62,19 @@
         rev = cl.index.get_rev
         pinned.update(rev(t[0]) for t in tags.values())
         pinned.discard(None)
+
+    # Avoid cycle: mercurial.filemerge -> mercurial.templater ->
+    # mercurial.templatefuncs -> mercurial.revset -> mercurial.repoview ->
+    # mercurial.mergestate -> mercurial.filemerge
+    from . import mergestate
+
+    ms = mergestate.mergestate.read(repo)
+    if ms.active():
+        for node in (ms.local, ms.other):
+            rev = cl.index.get_rev(node)
+            if rev is not None:
+                pinned.add(rev)
+
     return pinned
 
 
diff --git a/tests/test-demandimport.py b/tests/test-demandimport.py
index 167901946d21b4425a6c537b493eaafc4e0f5c08_dGVzdHMvdGVzdC1kZW1hbmRpbXBvcnQucHk=..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_dGVzdHMvdGVzdC1kZW1hbmRpbXBvcnQucHk= 100644
--- a/tests/test-demandimport.py
+++ b/tests/test-demandimport.py
@@ -232,7 +232,7 @@
 # Unlike the import statement, __import__() function should not raise
 # ImportError even if fromlist has an unknown item
 # (see Python/import.c:import_module_level() and ensure_fromlist())
-assert 'zipfile' not in sys.modules
-zipfileimp = __import__('zipfile', globals(), locals(), ['unknownattr'])
-assert f(zipfileimp) == "<module 'zipfile' from '?'>", f(zipfileimp)
+assert 'ftplib' not in sys.modules
+zipfileimp = __import__('ftplib', globals(), locals(), ['unknownattr'])
+assert f(zipfileimp) == "<module 'ftplib' from '?'>", f(zipfileimp)
 assert not util.safehasattr(zipfileimp, 'unknownattr')
diff --git a/tests/test-log.t b/tests/test-log.t
index 167901946d21b4425a6c537b493eaafc4e0f5c08_dGVzdHMvdGVzdC1sb2cudA==..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_dGVzdHMvdGVzdC1sb2cudA== 100644
--- a/tests/test-log.t
+++ b/tests/test-log.t
@@ -2263,6 +2263,51 @@
    }
   ]
 
+follow files from wdir
+
+  $ hg cp d1/f1 f1-copy
+  $ hg stat --all
+  M d1/f1
+  A d1/f2
+  A f1-copy
+    d1/f1
+  R .d6/f1
+  C D2/f1
+  C D3.i/f1
+  C d4.hg/f1
+  C d5.d/f1
+
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d5.d/f1
+  == 2147483647 ==
+  
+  == 0 ==
+   d5.d/f1 |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f1
+  == 2147483647 ==
+   d1/f1 |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+  == 0 ==
+   d1/f1 |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+
+ BROKEN: added file should exist in wdir
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f2
+  abort: cannot follow nonexistent file: "d1/f2"
+  [255]
+
+ BROKEN: copied file should exist in wdir
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat f1-copy
+  abort: cannot follow nonexistent file: "f1-copy"
+  [255]
+
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat notfound
+  notfound: $ENOENT$
+
   $ hg revert -aqC
 
 Check that adding an arbitrary name shows up in log automatically
diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
index 167901946d21b4425a6c537b493eaafc4e0f5c08_dGVzdHMvdGVzdC1vYnNvbGV0ZS50..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_dGVzdHMvdGVzdC1vYnNvbGV0ZS50 100644
--- a/tests/test-obsolete.t
+++ b/tests/test-obsolete.t
@@ -1790,3 +1790,44 @@
   d1b09fe3ad2b2a03e23a72f0c582e29a49570145 1a1a11184d2588af24e767e5335d5d9d07e8c550 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'Testing::Obsstore', 'operation': 'amend', 'user': 'test'}
   1bfd8e3868f641e048b6667cd672c68932f26d00 79959ca316d5b27ac6be1dd0cfd0843a5b5412eb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'Testing::Obsstore2', 'operation': 'amend', 'user': 'test'}
   $ cd ..
+
+Test that pinning of revisions in broken mergestate doesn't cause crash
+
+  $ hg init pinning-broken-mergestate
+  $ cd pinning-broken-mergestate
+  $ echo a > file
+  $ hg ci -Aqm first
+Create a pruned commit so pinning comes into play
+  $ echo pruned > pruned
+  $ hg ci -Aqm pruned
+  $ hg co -q 0
+  $ hg debugobsolete $(getid pruned)
+  1 new obsolescence markers
+  obsoleted 1 changesets
+Back up changelog, so we can restore it later after causing merge conflicts
+with it, thus ending up with mergestate that points to a non-existent commit
+  $ cp .hg/store/00changelog.i .hg/store/00changelog.i.first
+  $ echo b > file
+  $ hg ci -qm second
+  $ echo c > file
+  $ hg co -m 0
+  merging file
+  warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges
+  [1]
+  $ mv -f .hg/store/00changelog.i.first .hg/store/00changelog.i
+The local node should now point to a non-existent commit
+  $ hg debugmergestate
+  local (working copy): b73b8c9a4ab4da89a5a35a6f10dfb13edc84ca37
+  other (destination): f53e9479dce52f79c923908241fa54f7da90a7ad
+  file: file (state "u")
+    local path: file (hash 971c419dd609331343dee105fffd0f4608dc0bf2, flags "")
+    ancestor path: file (node bc7ebe2d260cff30d2a39a130d84add36216f791)
+    other path: file (node b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3)
+    extra: ancestorlinknode = b73b8c9a4ab4da89a5a35a6f10dfb13edc84ca37
+We should be able to see the log (without the deleted commit, of course)
+  $ hg log -G
+  @  0:f53e9479dce5 (draft) [tip ] first
+  
+  $ cd ..
diff --git a/tests/test-rebase-check-restore.t b/tests/test-rebase-check-restore.t
index 167901946d21b4425a6c537b493eaafc4e0f5c08_dGVzdHMvdGVzdC1yZWJhc2UtY2hlY2stcmVzdG9yZS50..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_dGVzdHMvdGVzdC1yZWJhc2UtY2hlY2stcmVzdG9yZS50 100644
--- a/tests/test-rebase-check-restore.t
+++ b/tests/test-rebase-check-restore.t
@@ -153,5 +153,29 @@
   |/
   o  0:draft 'A'
   
+  $ cat >> .hg/hgrc << EOF
+  > [experimental]
+  > evolution.createmarkers=True
+  > EOF
+
+When updating away from a dirty, obsolete wdir, don't complain that the old p1
+is filtered and requires --hidden.
+
+  $ echo conflict > A
+  $ hg debugobsolete 071d07019675449d53b7e312c65bcf28adbbdb64 965c486023dbfdc9c32c52dc249a231882fd5c17
+  1 new obsolescence markers
+  obsoleted 1 changesets
+  $ hg update -r 2 --config ui.merge=internal:merge --merge
+  merging A
+  warning: conflicts while merging A! (edit, then use 'hg resolve --mark')
+  1 files updated, 0 files merged, 1 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges
+  [1]
+  $ hg resolve A
+  merging A
+  warning: conflicts while merging A! (edit, then use 'hg resolve --mark')
+  [1]
+
+  $ hg up -C -q .
 
   $ cd ..
diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
index 167901946d21b4425a6c537b493eaafc4e0f5c08_dGVzdHMvdGVzdC1yZWJhc2Utb2Jzb2xldGUudA==..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_dGVzdHMvdGVzdC1yZWJhc2Utb2Jzb2xldGUudA== 100644
--- a/tests/test-rebase-obsolete.t
+++ b/tests/test-rebase-obsolete.t
@@ -1795,6 +1795,8 @@
   $ hg log -G
   @  2:b18e25de2cf5 D
   |
+  | %  1:2ec65233581b B (pruned using prune)
+  |/
   o  0:426bada5c675 A
   
   $ hg summary
@@ -1802,8 +1804,8 @@
    D
   branch: default
   commit: 1 modified, 1 added, 1 unknown, 1 unresolved
-  update: (current)
-  phases: 2 draft
+  update: 1 new changesets, 2 branch heads (merge)
+  phases: 3 draft
   rebase: 0 rebased, 2 remaining (rebase --continue)
 
   $ hg rebase --abort
diff --git a/tests/test-strip.t b/tests/test-strip.t
index 167901946d21b4425a6c537b493eaafc4e0f5c08_dGVzdHMvdGVzdC1zdHJpcC50..8f54fee983a8f0f5aa42d3e760b1c4530b8b9fab_dGVzdHMvdGVzdC1zdHJpcC50 100644
--- a/tests/test-strip.t
+++ b/tests/test-strip.t
@@ -1177,6 +1177,14 @@
      summary:     commitA
   
 
+stripping a set containing a merge properly reset file content, including items on other branches
+
+The added file is moved to unknown, which is the behavior we have been seeing for other `hg strip --keep` call.
+
+stripping a set containing a merge properly reset file content, including items on other branches
+
+The added file is moved to unknown, which is the behavior we have been seeing for other `hg strip --keep` call.
+
   $ hg unbundle -u $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg
   adding changesets
   adding manifests
@@ -1185,6 +1193,50 @@
   new changesets 35358f982181:4cf5e92caec2 (2 drafts)
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
+  $ hg id
+  4cf5e92caec2 (new-branch) tip
+  $ hg status --rev "f62c6c09b707"
+  A bar.txt
+  $ hg diff --rev "f62c6c09b707"
+  diff -r f62c6c09b707 bar.txt
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/bar.txt	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,1 @@
+  +bar
+  $ hg log -G -v --rev 35358f982181:: --patch
+  @    changeset:   5:4cf5e92caec2
+  |\   branch:      new-branch
+  | ~  tag:         tip
+  |    parent:      3:f62c6c09b707
+  |    parent:      4:35358f982181
+  |    user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    description:
+  |    merge
+  |
+  |
+  |    diff -r f62c6c09b707 -r 4cf5e92caec2 bar.txt
+  |    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  |    +++ b/bar.txt	Thu Jan 01 00:00:00 1970 +0000
+  |    @@ -0,0 +1,1 @@
+  |    +bar
+  |
+  o  changeset:   4:35358f982181
+  |  parent:      1:eca11cf91c71
+  ~  user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     files:       bar.txt
+     description:
+     bar
+  
+  
+     diff -r eca11cf91c71 -r 35358f982181 bar.txt
+     --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+     +++ b/bar.txt	Thu Jan 01 00:00:00 1970 +0000
+     @@ -0,0 +1,1 @@
+     +bar
+  
+
   $ hg strip -k -r 35358f982181
   saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg
   $ hg log -G
@@ -1211,12 +1263,14 @@
      date:        Thu Jan 01 00:00:00 1970 +0000
      summary:     commitA
   
-  $ hg diff
-  diff -r f62c6c09b707 bar.txt
-  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-  +++ b/bar.txt	Thu Jan 01 00:00:00 1970 +0000
-  @@ -0,0 +1,1 @@
-  +bar
+
+  $ hg status -A
+  ? bar.txt
+  C a
+  C b
+  C foo.txt
+  $ cat bar.txt
+  bar
 
 Use delayedstrip to strip inside a transaction