GitHubでコミット同士の比較ページに飛ぶブックマークレット
GitHubの比較ビューにすぐ飛べるブックマークレットを作った https://gyazo.com/c8ea0b68badd98c8a031f4eced6e7455
経緯
Compare Viewは任意のコミット・ブランチ・タグ間のdiffが見えて便利
ただし、所望の比較にたどり着くためにはコミットハッシュを調べたりURLを書き換えたりと手間がかかる
先行事例
master以外と比較したいこともたまにはあると思うのでもう少し高機能にする kn1cht.icon
方針
1. 正規表現で今いるページのコミットハッシュを取り出す
2. プロンプトで古い方(デフォルトは今いるページ)・新しい方(デフォルトはmaster)のコミットなどを指定させる
3. URLを作成してページ移動
ついでにコミットハッシュを検出したら7文字に切るようにした
URLが短くできて共有に便利
blameページやfindページを見ている時も使用可能
既にcompareページにいる場合は、面倒なので使用不可にした
変更履歴
2021/01/01 GitHubのデフォルトブランチ名がmainになったので、注意喚起を表示するようにしました(masterも残っているためデフォルト値の変更まではしていません)
コード
code:.js
javascript:(function(){var b=(location.href+"/").match(/^(https:\/\/github.com\/.*?\/)(?:blame|blob|commit(?:s?)|find|tree)\/(.*?)#\/.*$/);if(b){var a=function(c){return c.match(/^a-f0-9{40}$/)?c.slice(0,7):c},d=window.prompt("\u53e4\u3044\u65b9\u306e\u30b3\u30df\u30c3\u30c8\uff08or\u30d6\u30e9\u30f3\u30c1\u3001\u30bf\u30b0\uff09\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044",a(b2)),e=window.prompt("\u65b0\u3057\u3044\u65b9\u306e\u30b3\u30df\u30c3\u30c8\uff08or\u30d6\u30e9\u30f3\u30c1\u3001\u30bf\u30b0\uff09\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\n\uff08\u65b0\u3057\u3044\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u30d6\u30e9\u30f3\u30c1\u304cmain\u306e\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\uff01\uff09", "master");d&&e&&(a=encodeURIComponent(""+a(d)+"..."+a(e)),location.href=b1+"compare/"+a)}})(); 書いたコード
code:.js
javascript:(
function(){
var gitHubRegex = /^(https:\/\/github.com\/.*?\/)(?:blame|blob|commit(?:s?)|find|tree)\/(.*?)#\/.*$/; var match = (location.href + '/').match(gitHubRegex);
if (!match) return;
var shortenHash = function(h) {
return h.match(/^a-f0-9{40}$/) ? h.slice(0, 7) : h; };
var oldHash = window.prompt('古い方のコミット(orブランチ、タグ)を指定してください', shortenHash(match2)); var newHash = window.prompt('新しい方のコミット(orブランチ、タグ)を指定してください\n(新しいリポジトリの場合、デフォルトブランチがmainの場合があります。ご注意ください!)', 'master');
if (!oldHash || !newHash) return;
var hashes = encodeURIComponent('' + shortenHash(oldHash) + '...' + shortenHash(newHash));
location.href = match1 + 'compare/' + hashes; }
)();