Use gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst
, '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 gitoxide in get_commits_info and get_commit_info - #2643

Draft
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info
Draft

Use gitoxide in get_commits_info and get_commit_info#2643
cruessler wants to merge 2 commits into
masterfrom
use-gitoxide-in-get-commits-info

Conversation

@cruessler

Copy link
Copy Markdown
Collaborator
  • Implement From<gix::ObjectId> for CommitId
  • Use gitoxide in get_commits_info and get_commit_info

This PR changes get_commits_info and get_commit_info to use gitoxide under the hood. It does not explicitly change any behaviour, although there possibly are subtle differences that I’m not aware of.

This implementation doesn’t log an error when either author or committer cannot be resolved using mailmap as the underlying implementation returns Option<Signature> instead of Result<Signature>. If you want, I can change that, though.

I decided to duplicate the logic of get_message into gix_get_message, using a prefix for the time both implementations are required.

I did not attempt to re-organize any of the code. My plan is to convert more functions to gitoxide before making any changes in that direction.

I followed the checklist:

  • I ran make check without errors
  • I tested the overall application

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d852816 to d8eb1f3CompareMay 20, 2025 07:45
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler excited to see more gitoxide in the codebase. any chance to get the CI green?

I’m having a look!

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

So far, I have not been able to reproduce the test failures reliably on my machine. My current best guess is that they are somehow timing-related, but I don’t yet know why that might be the case as the code in questions seems to be sync. I think it is this call that triggers the error in rare circumstances, but that’s all I got:

let commit_infos = get_commits_info(repo_path,&commit_ids,0)?;

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

I’m currently working on adding rename tracking to gitoxide blame: GitoxideLabs/gitoxide#2022. Instead of trying to debug the CI failures we hit in this PR, another option would be to wait for the PR in gitoxide to land, then port gitui’s blame view to gitoxide and then retry porting get_commits_info to gitoxide.

@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler whatever works best for you

@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@extrawurst Since rename tracking for blame has landed in gitoxide a few days ago, I think I’m leaning towards making the switch for blame first.

@extrawurst

Copy link
Copy Markdown
Collaborator

Sounds good to me

@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from d8eb1f3 to b36cdf0CompareOctober 28, 2025 10:46
@cruessler
cruesslerforce-pushed the use-gitoxide-in-get-commits-info branch from b36cdf0 to 6a024b9CompareOctober 30, 2025 08:56
@extrawurst

Copy link
Copy Markdown
Collaborator

@cruessler should we mark this draft while we wait for blame to land?

@cruessler
cruessler marked this pull request as draft November 29, 2025 07:42
@cruessler

Copy link
Copy Markdown
CollaboratorAuthor

@cruessler should we mark this draft while we wait for blame to land?

Makes total sense, I’ve converted it to draft! (I hope I’m not spamming too much with all these experimental PRs that explore using gitoxide in various parts of gitui.)

@extrawurst

Copy link
Copy Markdown
Collaborator

waiting for #2591

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@cruessler@extrawurst