Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Use multibyte character path for bundle_probe - #44466

Merged
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt
Nov 19, 2020
Merged

Use multibyte character path for bundle_probe#44466
janvorli merged 1 commit into
dotnet:masterfrom
am11:feature/cleanups/purge-codecvt

Conversation

@am11

@am11am11 commented Nov 10, 2020

Copy link
Copy Markdown
Member

Fixes#44098.

@am11

am11 commented Nov 10, 2020

Copy link
Copy Markdown
MemberAuthor

cc @janvorli

Waiting on a clean CI run. Checkout leg is failing: #44472.

Comment threadsrc/coreclr/src/dlls/mscoree/unixinterface.cpp Outdated
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @vitek-karas, @agocke
See info in area-owners.md if you want to be subscribed.

Details


Issue meta data
Issue content:Fixes #44098.
Issue author:am11
Assignees:-
Milestone:-

@am11
am11 marked this pull request as ready for review November 11, 2020 06:24
@am11
am11 requested a review from janvorliNovember 11, 2020 06:24
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
@dotnetdotnet deleted a comment from janvorliNov 11, 2020
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated

@vitek-karasvitek-karas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - let's wait for @janvorli to take a second look

@am11

am11 commented Nov 11, 2020

Copy link
Copy Markdown
MemberAuthor

Internal to CoreCLR; SString has a concept of internal representation, so if the string was originally UTF8, it will be preserved and GetUTF8 will return it as is (without conversion). I was trying to keep the diff smaller, as it is a deep rabbit hole to update all instances; but there seems to be few places where we have both wide and narrow variants of the same string available at the call sites of bundle probes. If it deemed profitable, we can update those in a separate PR by using narrow variant when constructing SString for probe call.

Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp Outdated
Comment threadsrc/coreclr/src/vm/bundle.cpp

@janvorlijanvorli left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

Comment threadsrc/coreclr/src/vm/bundle.cpp
@janvorli

Copy link
Copy Markdown
Member

The win x86 leg was failing due to something that looks like a bug in xunit (xunit code modifying a collection while it was being iterated). I am re-running this leg.

@elinor-fungelinor-fung left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also make sure the single-file doc in dotnet/designs reflects this change.

Edit: Actually, apparently the design doc does have char, but the implementation didn't match.

@am11

am11 commented Nov 13, 2020

Copy link
Copy Markdown
MemberAuthor

When runtime repo itself is cloned in a path containing multibyte character, I found two issues.

Steps to repro (using three-bytes characters):

$ git clone https://github.com/dotnet/runtime runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ cd runtime-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ
$ ./build.sh -c Release
$ ./build.sh Host.Tests -c Release -test
  1. First the build errors, that were trivial to fix:
    --- a/src/coreclr/src/scripts/genDummyProvider.py+++ b/src/coreclr/src/scripts/genDummyProvider.py@@ -111,7 +111,7 @@ def generateDummyFiles(etwmanifest, out_dirname, extern, dryRun):
    providerName = trimProvName(providerNode.getAttribute('name'))
    providerName_File = escapeProvFilename(providerName)
    - dummyevntprov = os.path.join(out_dirname, dummyevntprovPre + providerName_File + ".cpp")+ dummyevntprov = os.path.join(out_dirname.decode('utf-8'), dummyevntprovPre + providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(dummyevntprov)
    diff --git a/src/coreclr/src/scripts/genEventPipe.py b/src/coreclr/src/scripts/genEventPipe.py
    index d8c6cdca24f..54aa704148d 100644
    --- a/src/coreclr/src/scripts/genEventPipe.py+++ b/src/coreclr/src/scripts/genEventPipe.py@@ -384,7 +384,7 @@ def generateEventPipeImplFiles(
    providerName_File = providerPrettyName.replace('-', '')
    providerName_File = providerName_File.lower()
    providerPrettyName = providerPrettyName.replace('-', '_')
    - eventpipefile = os.path.join(eventpipe_directory, providerName_File + ".cpp")+ eventpipefile = os.path.join(eventpipe_directory.decode('utf-8'), providerName_File + ".cpp").encode('utf-8')
    if dryRun:
    print(eventpipefile)
    else:
  2. ToLower() in C# is using ICU transofrmation, so HostFxrPath.ToLower() in this case becomes: /users/am11/projects/regular_text-ⓘⓡⓡⓔⓖⓤⓛⓐⓡ␣ⓣⓔⓧⓣ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib, while C++ transformation is ASCII only, so it becomes /users/am11/projects/regular_text-ⒾⓇⓇⒺⒼⓊⓁⒶⓇ␣ⓉⒺⓍⓉ/runtime_pr/artifacts/tests/release/ha/nativehosting/0/valid/dotnet/host/fxr/2.3.0/libhostfxr.dylib and fails the Assert.Contains instances in Nethost.cs. The fix for this was to match C++, ASCII only tolower transformation: http://sprunge.us/UPR16s.

With these two patches, full runtime repo build succeeded and all installer tests passed on macOS. It seems like there are other ToLower() cases in MSBuild scripts (which also uses .NET's ICU-backed transformation), but those are unrelated to PR changes and can be repro'd with the current master branch (and probably ToLower() transformation for hostfxr). Perhaps we should try to get rid of ToLower transformation entirely and rely on underlying filesystem's case-sensitivity choices; i.e. don't care about the casing explicitly in code like the other components of runtime repo.

@janvorli
janvorli merged commit 0897d4a into dotnet:masterNov 19, 2020
@am11
am11 deleted the feature/cleanups/purge-codecvt branch November 19, 2020 21:05
@vitek-karas

Copy link
Copy Markdown
Member

Thanks a lot @am11 !

ThadHouse pushed a commit to ThadHouse/runtime that referenced this pull request Nov 20, 2020
@ghostghost locked as resolved and limited conversation to collaborators Dec 28, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove use of codecvt in PAL

5 participants

@am11@janvorli@vitek-karas@elinor-fung@danmoseley