Skip to content

Instantly share code, notes, and snippets.

@DarrenSem
Last active April 11, 2025 16:48
Show Gist options
  • Save DarrenSem/1f75353e375f930e4e8d55a3c9c7ed1a to your computer and use it in GitHub Desktop.
Save DarrenSem/1f75353e375f930e4e8d55a3c9c7ed1a to your computer and use it in GitHub Desktop.
SwapBranches(GitHub compare).js -- Bookmarklet for toggling/reversing order of [base: targetBranch] <-- [compare: sourceBranch]
// SwapBranches(GitHub compare).js -- Bookmarklet for toggling/reversing order of [base: targetBranch] <-- [compare: sourceBranch]
// 287 char: javascript:void function(){const a=a=>{const b=a?.href??a??"",c=/(\/compare\/)([^.\/]+)\.\.\.([^.\/]+)/;return c.test(b)?b.replace(c,(a,b,c,d)=>`${b}${d}...${c}`):b},b=(b=location)=>{const c=b?.href??b??"",d=a(c);return c!=d&&((b?.href?b:{}).href=d)};console.clear(),console.log(b())}();
const getSwappedGitHubBranches = (url) => {
const href = url?.href ?? url ?? "";
const pattern = /(\/compare\/)([^.\/]+)\.\.\.([^.\/]+)/;
const replacer = (_, prefix, branch1, branch2) => `${prefix}${branch2}...${branch1}`
if (!pattern.test(href)) {
return href;
} else {
return href.replace(pattern, replacer);
};
}
const reloadWithSwappedGitHubBranches = (loc = location) => {
const href = loc?.href ?? loc ?? "";
const swappedGitHubBranches = getSwappedGitHubBranches(href);
if (href != swappedGitHubBranches) {
return (loc?.href ? loc : {} ).href = swappedGitHubBranches;
} else {
return false;
};
};
const with_swap_tests = () => {
const swap1 = "https://github.com/MyOrg/MyRepo/compare/master...Name_Change";
const swap2 = "https://github.com/MyOrg/MyRepo/compare/Name_Change...master";
const swap3 = "https://github.com/MyOrg/MyRepo/main";
console.log( {
swap1: getSwappedGitHubBranches(swap1),
swap2: getSwappedGitHubBranches(swap2),
swap3: getSwappedGitHubBranches(swap3),
href: getSwappedGitHubBranches(location.href),
location: getSwappedGitHubBranches(location),
} );
console.log( {
didSwap_1_is_now_2: getSwappedGitHubBranches(swap1) == swap2, // true
didSwap_2_is_now_1: getSwappedGitHubBranches(swap2) == swap1, // true
didSwap_3_is_now_not_3: getSwappedGitHubBranches(swap3) != swap3, // false
reloadSwap1: reloadWithSwappedGitHubBranches(swap1), // https://github.com/MyOrg/MyRepo/compare/Name_Change...master (AKA swap2)
reloadSwap2: reloadWithSwappedGitHubBranches(swap2), // https://github.com/MyOrg/MyRepo/compare/master...Name_Change (AKA swap1)
reloadSwap3: reloadWithSwappedGitHubBranches(swap3), // false
} );
};
console.clear();
// with_swap_tests();
console.log(reloadWithSwappedGitHubBranches());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment