Patchwork D11281: templater: swap `\` with `/` to allow the resource logic to kicks in

login
register
mail settings
Submitter phabricator
Date Aug. 17, 2021, 7 p.m.
Message ID <differential-rev-PHID-DREV-7fhg2xta5goupcr4tk7j-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49595/
State Superseded
Headers show

Comments

phabricator - Aug. 17, 2021, 7 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  Without this change our wrapper to the resource logic will fails to details the
  nesting and try to pass `directory/file` entry to the resource module, leading
  to a crash.
  
  Ideally, we should track down all caller passing `\` instead of `/`, but that
  is far more intrusive and we would like to have a working pyoxidized version
  working for 5.9 It will be easy to add a warning to the above code to track
  down "bad" caller during the 6.0 cycle.
  
  This reduce the number of failing test with pyoxidizer from 52 to 23

REPOSITORY
  rHG Mercurial

BRANCH
  stable

REVISION DETAIL
  https://phab.mercurial-scm.org/D11281

AFFECTED FILES
  mercurial/templater.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -1117,6 +1117,13 @@ 
         return f, open(f, mode='rb')
 
     # Otherwise try to read it using the resources API
+    if pycompat.iswindows:
+        # quick hack to make sure we can process '/' in the code dealing with
+        # ressource. Ideally we would make sure we use `/` instead of `ossep`
+        # in the templater code, but that seems a bigger and less certain
+        # change that we better left for the default branch.
+        name_paths = name.split(pycompat.ossep)
+        name = b'/'.join(name_paths)
     name_parts = name.split(b'/')
     package_name = b'.'.join([b'mercurial', b'templates'] + name_parts[:-1])
     return (