Skip to content

Instantly share code, notes, and snippets.

@philwebb
Created October 11, 2012 00:40
Show Gist options
  • Save philwebb/3869440 to your computer and use it in GitHub Desktop.
Save philwebb/3869440 to your computer and use it in GitHub Desktop.
Manual GitHub Merge
// ==UserScript==
// @name github-manual-merge
// @namespace http://springsource.org
// @description Adds manual merge commands to pull requests
// @include https://github.com/SpringSource/spring-framework/pull/*
// @version 1
// @grant none
// ==/UserScript==
function selectText(e) {
if (document.selection) {
var range = document.body.createTextRange();
range.moveToElementText(this);
range.select();
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(this);
window.getSelection().addRange(range);
}
}
var pullHeaderElement = document.getElementById("pull-head")
var metas = document.getElementsByTagName('meta');
var repository
for (i=0; i<metas.length; i++) {
if (metas[i].getAttribute("property") == "og:title") {
repository = metas[i].getAttribute("content");
}
}
var username = document.evaluate("div/p/span[2]/span/span",
pullHeaderElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
.singleNodeValue.textContent.trim();
var branch = document.evaluate("div/p/span[2]/span[2]",
pullHeaderElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
.singleNodeValue.textContent.trim();
var requestnumber= document.evaluate("div/div/span[2]",
pullHeaderElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)
.singleNodeValue.textContent.trim().substring(1);
var mergeDiv = document.createElement('div');
var mergeInfo1 = document.createElement('pre');
var mergeInfo2 = document.createElement('pre');
var mergeInfo3 = document.createElement('pre');
mergeDiv.appendChild(mergeInfo1);
mergeDiv.appendChild(mergeInfo2);
mergeDiv.appendChild(mergeInfo3);
mergeInfo1.setAttribute("style", "margin-bottom: 12px;");
mergeInfo1.innerHTML =
'git remote add ' + username + ' https://github.com/' + username + '/' + repository + '.git\n' +
'git fetch ' + username + '\n'+
'git checkout --track ' + username + '/' + branch + ' -b ' + branch + '\n';
mergeInfo1.addEventListener("click", selectText, false);
mergeInfo2.setAttribute("style", "margin-bottom: 12px;");
mergeInfo2.innerHTML =
'git rebase master';
mergeInfo2.addEventListener("click", selectText, false);
mergeInfo3.innerHTML =
'git checkout master\n'+
'git merge --no-ff --log -m "Merge pull request #' + requestnumber + ' from ' + username + '/' + branch + '" ' + branch;
mergeInfo3.addEventListener("click", selectText, false);
mergeDiv.setAttribute("class", "pull-head");
mergeDiv.setAttribute("style", "padding: 10px;");
pullHeaderElement.parentNode.insertBefore(mergeDiv, pullHeaderElement.nextSibling);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment