Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)
, '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

Commit 69d4d5f

Browse files
committed
Auto merge of #145809 - he32:installer-perf-fix-1, r=Mark-Simulacrum
rust-installer/install-template.sh: improve efficiency, step 1. This round replaces repetitive pattern matching in the inner loop of this script using grep (which causes a `fork()` for each test) with built-in pattern matching in the Bourne shell using the `case` / `esac` construct. This in reference to #80684 and is a separated-out request from rust-lang/rust-installer#111 which apparently never got any review. The forthcoming planned "step 2" change builds on top of this change, and replaces the inner-loops needless uses of `sed` (which again causes a `fork()` for each instance) with the suffix removal constructs from the Bourne shell. Since this change touches lots of the same lines this change does, that pull request cannot be submitted before this one is accepted. Hopefully this first step is less controversial than the latter change.
2 parents 518b428 + 9248435 commit 69d4d5f

1 file changed

Lines changed: 44 additions & 53 deletions

File tree

‎src/tools/rust-installer/install-template.sh‎

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -551,54 +551,47 @@ install_components() {
551551
# Decide the destination of the file
552552
local _file_install_path="$_dest_prefix/$_file"
553553

554-
ifecho"$_file"| grep "^etc/"> /dev/null
555-
then
556-
local _f="$(echo "$_file"| sed 's/^etc\///')"
557-
_file_install_path="$CFG_SYSCONFDIR/$_f"
558-
fi
559-
560-
ifecho"$_file"| grep "^bin/"> /dev/null
561-
then
562-
local _f="$(echo "$_file"| sed 's/^bin\///')"
563-
_file_install_path="$CFG_BINDIR/$_f"
564-
fi
565-
566-
ifecho"$_file"| grep "^lib/"> /dev/null
567-
then
568-
local _f="$(echo "$_file"| sed 's/^lib\///')"
569-
_file_install_path="$CFG_LIBDIR/$_f"
570-
fi
571-
572-
ifecho"$_file"| grep "^share"> /dev/null
573-
then
574-
local _f="$(echo "$_file"| sed 's/^share\///')"
575-
_file_install_path="$CFG_DATADIR/$_f"
576-
fi
577-
578-
ifecho"$_file"| grep "^share/man/"> /dev/null
579-
then
580-
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
581-
_file_install_path="$CFG_MANDIR/$_f"
582-
fi
583-
584-
# HACK: Try to support overriding --docdir. Paths with the form
585-
# "share/doc/$product/" can be redirected to a single --docdir
586-
# path. If the following detects that --docdir has been specified
587-
# then it will replace everything preceding the "$product" path
588-
# component. The problem here is that the combined rust installer
589-
# contains two "products": rust and cargo; so the contents of those
590-
# directories will both be dumped into the same directory; and the
591-
# contents of those directories are _not_ disjoint. Since this feature
592-
# is almost entirely to support 'make install' anyway I don't expect
593-
# this problem to be a big deal in practice.
594-
if [ "$CFG_DOCDIR"!="<default>" ]
595-
then
596-
ifecho"$_file"| grep "^share/doc/"> /dev/null
597-
then
598-
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
599-
_file_install_path="$CFG_DOCDIR/$_f"
600-
fi
601-
fi
554+
local _is_bin=false
555+
case"$_file"in
556+
etc/*)
557+
local _f="$(echo "$_file"| sed 's/^etc\///')"
558+
_file_install_path="$CFG_SYSCONFDIR/$_f"
559+
;;
560+
bin/*)
561+
local _f="$(echo "$_file"| sed 's/^bin\///')"
562+
_is_bin=true
563+
_file_install_path="$CFG_BINDIR/$_f"
564+
;;
565+
lib/*)
566+
local _f="$(echo "$_file"| sed 's/^lib\///')"
567+
_file_install_path="$CFG_LIBDIR/$_f"
568+
;;
569+
share/man/*)
570+
local _f="$(echo "$_file"| sed 's/^share\/man\///')"
571+
_file_install_path="$CFG_MANDIR/$_f"
572+
;;
573+
share/doc/*)
574+
# HACK: Try to support overriding --docdir. Paths with the form
575+
# "share/doc/$product/" can be redirected to a single --docdir
576+
# path. If the following detects that --docdir has been specified
577+
# then it will replace everything preceding the "$product" path
578+
# component. The problem here is that the combined rust installer
579+
# contains two "products": rust and cargo; so the contents of those
580+
# directories will both be dumped into the same directory; and the
581+
# contents of those directories are _not_ disjoint. Since this feature
582+
# is almost entirely to support 'make install' anyway I don't expect
583+
# this problem to be a big deal in practice.
584+
if [ "$CFG_DOCDIR"!="<default>" ]
585+
then
586+
local _f="$(echo "$_file"| sed 's/^share\/doc\/[^/]*\///')"
587+
_file_install_path="$CFG_DOCDIR/$_f"
588+
fi
589+
;;
590+
share/*)
591+
local _f="$(echo "$_file"| sed 's/^share\///')"
592+
_file_install_path="$CFG_DATADIR/$_f"
593+
;;
594+
esac
602595

603596
# Make sure there's a directory for it
604597
make_dir_recursive "$(dirname "$_file_install_path")"
@@ -617,13 +610,11 @@ install_components() {
617610

618611
maybe_backup_path "$_file_install_path"
619612

620-
ifecho"$_file"| grep "^bin/"> /dev/null ||test -x "$_src_dir/$_component/$_file"
621-
then
622613
run cp "$_src_dir/$_component/$_file""$_file_install_path"
623-
run chmod 755 "$_file_install_path"
614+
if$_is_bin||test -x "$_src_dir/$_component/$_file";then
615+
run chmod 755 "$_file_install_path"
624616
else
625-
run cp "$_src_dir/$_component/$_file""$_file_install_path"
626-
run chmod 644 "$_file_install_path"
617+
run chmod 644 "$_file_install_path"
627618
fi
628619
critical_need_ok "file creation failed"
629620

0 commit comments

Comments
 (0)