Merge pull request #196 from ptsoccer/master

Improve show solution behavior that contain interactive rebase
This commit is contained in:
Peter Cottle 2014-08-13 19:06:22 -07:00
commit ffc974e03f
5 changed files with 73 additions and 9 deletions

View file

@ -569,6 +569,7 @@ var commandConfig = {
sc: /^gr($|\s)/,
options: [
'-i',
'--solution-ordering',
'--interactive-test',
'--aboveAll',
'-p',
@ -595,6 +596,7 @@ var commandConfig = {
args[0],
args[1], {
aboveAll: !!commandOptions['--aboveAll'],
initialCommitOrdering: commandOptions['--solution-ordering']
}
);
}

View file

@ -2179,11 +2179,42 @@ GitEngine.prototype.rebaseInteractive = function(targetSource, currentLocation,
}, this))
.done();
// If we have a solution provided, set up the GUI to display it by default
var initialCommitOrdering;
if (options.initialCommitOrdering && options.initialCommitOrdering.length > 0) {
var rebaseMap = {};
_.each(toRebase, function(commit) {
var id = commit.get('id');
rebaseMap[id] = commit;
});
// Verify each chosen commit exists in the list of commits given to the user
var extraCommits = [];
initialCommitOrdering = [];
_.each(options.initialCommitOrdering[0].split(','), function(id) {
if (id in rebaseMap) {
initialCommitOrdering.push(rebaseMap[id]);
} else {
extraCommits.push(id);
}
});
if (extraCommits.length > 0) {
throw new GitError({
msg: intl.todo('Hey those commits dont exist in the set!')
});
}
}
// The rebase view expects the commits reversed, so do that here
toRebase.reverse();
var InteractiveRebaseView = require('../views/rebaseView').InteractiveRebaseView;
// interactive rebase view will reject or resolve our promise
new InteractiveRebaseView({
deferred: deferred,
toRebase: toRebase,
initialCommitOrdering: initialCommitOrdering,
aboveAll: options.aboveAll
});
};

View file

@ -13,25 +13,55 @@ var InteractiveRebaseView = ContainedBase.extend({
tagName: 'div',
template: _.template($('#interactive-rebase-template').html()),
initialize: function(options) {
this.deferred = options.deferred;
createRebaseEntries: function() {
this.rebaseMap = {};
this.entryObjMap = {};
this.options = options;
this.rebaseEntries = new RebaseEntryCollection();
options.toRebase.reverse();
_.each(options.toRebase, function(commit) {
// If we are displaying a solution, we potentially only want to pick certain commits, and reorder
// the ones that are picked. The commits we want to pick and the order are contained in the options.initialCommitOrdering,
// the list of all the commits that are part of the rebase are in options.toRebase
var commitsToUse = this.options.initialCommitOrdering === undefined ? this.options.toRebase
: this.options.initialCommitOrdering;
_.each(commitsToUse, function(commit) {
var id = commit.get('id');
this.rebaseMap[id] = commit;
// make basic models for each commit
this.entryObjMap[id] = new RebaseEntry({
id: id
id: id,
pick: true
});
this.rebaseEntries.add(this.entryObjMap[id]);
}, this);
// If we are using the initialCommitOrdering, we might not have picked all of the commits,
// but we would still want to see the other unpicked ones. Just show them as unpicked by default
if (this.options.initialCommitOrdering !== undefined) {
_.each(this.options.toRebase, function(commit) {
var id = commit.get('id');
if (!(id in this.rebaseMap)) {
this.rebaseMap[id] = commit;
// make basic models for each commit
this.entryObjMap[id] = new RebaseEntry({
id: id,
pick: false
});
}
this.rebaseEntries.add(this.entryObjMap[id]);
}, this);
}
},
initialize: function(options) {
this.deferred = options.deferred;
this.options = options;
this.createRebaseEntries();
this.container = new ModalTerminal({
title: 'Interactive Rebase'
});
@ -170,6 +200,7 @@ var RebaseEntryView = Backbone.View.extend({
// hacky :( who would have known jquery barfs on ids with %'s and quotes
this.listEntry = this.$el.children(':last');
this.listEntry.toggleClass('notPicked', !this.model.get('pick'));
this.listEntry.delegate('#toggleButton', 'click', _.bind(function() {
this.toggle();

View file

@ -15,7 +15,7 @@ exports.level = {
]
},
"goalTreeString": "%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C3%27%27%22%2C%22id%22%3A%22master%22%7D%2C%22newImage%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22newImage%22%7D%2C%22caption%22%3A%7B%22target%22%3A%22C3%27%27%22%2C%22id%22%3A%22caption%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C2%27%22%7D%2C%22C2%27%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C2%27%27%22%7D%2C%22C2%27%27%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%27%27%27%22%7D%2C%22C3%27%27%22%3A%7B%22parents%22%3A%5B%22C2%27%27%27%22%5D%2C%22id%22%3A%22C3%27%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D",
"solutionCommand": "git rebase -i HEAD~2;git commit --amend;git rebase -i HEAD~2;git rebase caption master",
"solutionCommand": "git rebase -i HEAD~2 --solution-ordering C3,C2;git commit --amend;git rebase -i HEAD~2 --solution-ordering C2'',C3';git rebase caption master",
"startTree": "{\"branches\":{\"master\":{\"target\":\"C1\",\"id\":\"master\"},\"newImage\":{\"target\":\"C2\",\"id\":\"newImage\"},\"caption\":{\"target\":\"C3\",\"id\":\"caption\"}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C2\":{\"parents\":[\"C1\"],\"id\":\"C2\"},\"C3\":{\"parents\":[\"C2\"],\"id\":\"C3\"}},\"HEAD\":{\"target\":\"caption\",\"id\":\"HEAD\"}}",
"name": {
"ko": "커밋들 갖고 놀기",

View file

@ -1,6 +1,6 @@
exports.level = {
"goalTreeString": "%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C4%27%22%2C%22id%22%3A%22master%22%7D%2C%22overHere%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22overHere%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C5%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C5%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C5%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D",
"solutionCommand": "git rebase -i overHere",
"solutionCommand": "git rebase -i overHere --solution-ordering C3,C5,C4",
"compareOnlyMasterHashAgnostic": true,
"disabledMap": {
"git cherry-pick": true