Skip to content

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
perf(runner): order test functions in pure bash, drop 5 forks per file by Chemaclass · Pull Request #809 · TypedDevs/bashunit · GitHub
Skip to content

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(runner): order test functions in pure bash, drop 5 forks per file by Chemaclass · Pull Request #809 · TypedDevs/bashunit · GitHub
Skip to content

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' perf(runner): order test functions in pure bash, drop 5 forks per file by Chemaclass · Pull Request #809 · TypedDevs/bashunit · GitHub
Skip to content

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(runner): order test functions in pure bash, drop 5 forks per file by Chemaclass · Pull Request #809 · TypedDevs/bashunit · GitHub
Skip to content

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); perf(runner): order test functions in pure bash, drop 5 forks per file by Chemaclass · Pull Request #809 · TypedDevs/bashunit · GitHub
Skip to content

perf(runner): order test functions in pure bash, drop 5 forks per file - #809

Merged
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash
Jul 16, 2026
Merged

perf(runner): order test functions in pure bash, drop 5 forks per file#809
Chemaclass merged 1 commit into
mainfrom
perf/functions-for-script-pure-bash

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Continuing the fork-reduction series (#801-#808). Ground-truth profiling with a PATH shim (bash -x trace counts overcount by re-echoed test output) showed 7 awk + 2 sort forks per test file, dominated by discovery: functions_for_script ran an awk | sort | awk pipeline twice per file, and the duplicate check piped awk through sort.

💡 Changes

  • functions_for_script: filter + insertion-sort the file's functions by definition line in pure bash (a file's function list is tens of names); extdebug now enabled only inside the capture subshell, leaving the caller's setting untouched.
  • check_duplicate_functions: sort the (usually empty) duplicate list inside the awk END block instead of piping through sort.
  • 9 → 5 forks per test file; shim-based regression test + unit tests for ordering, cross-file filtering, and extdebug preservation. No behaviour change.

Two per-file fork clusters in discovery became pure bash / awk-internal:
- functions_for_script piped 'declare -F' through awk | sort | awk (three
forks) and the pipeline ran twice per file. A file's function list is small
(tens of names), so filter + insertion-sort by definition line in bash — and
enable extdebug only inside the capture subshell so the caller's setting is
untouched.
- check_duplicate_functions piped its awk pass through 'sort' just to keep the
(usually empty) duplicate list deterministic; the awk END block sorts it now.
9 -> 5 forks per test file (awk 7 -> 5, sort 2 -> 0), on every file of every
run including the acceptance suite's ~258 nested ones. Measured with a PATH
shim: bash -x trace counts also pick up re-echoed test output and overcount.
No behaviour change.
@ChemaclassChemaclass added the enhancement New feature or request label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit 0ee8c62 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the perf/functions-for-script-pure-bash branch July 16, 2026 02:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass